Jump to content
Sign in to follow this  
drisate

PHP Image upload ans resize

Recommended Posts

I need to upload 3 images and resize them as part of a forme but for some reason, the images does not end up in the server directory. What am i missing?

 

The fille array looks like this:

Array
(
    [file1] => Array
        (
            [name] => s_casafolio.png
            [type] => image/png
            [tmp_name] => /tmp/phpENy7j4
            [error] => 0
            [size] => 2047496
        )

    [file2] => Array
        (
            [name] => lawjournal.png
            [type] => image/png
            [tmp_name] => /tmp/phpT0fu1Y
            [error] => 0
            [size] => 1139448
        )

    [file3] => Array
        (
            [name] => s_mdj_2.png
            [type] => image/png
            [tmp_name] => /tmp/phpUsRk6W
            [error] => 0
            [size] => 792873
        )

)

And my processing looks like this:

<?php

$tmp = md5(md5(date("YmdHis")));
$img_quality = 70;
$maxDim = 700;
$dest_folder = "/home/user/public_html/userfiles/inscription_designer/";
$valid_mime_types_images = array(
    "image/gif",
    "image/png",
    "image/jpeg",
    "image/pjpeg",
);

if (in_array($_FILES["file1"]["type"], $valid_mime_types_images)) {
    
    $ext = pathinfo($_FILES['file1']['name'], PATHINFO_EXTENSION);
    $dest_file = $dest_folder.$tmp.'1.'.$ext;
    $fn = $_FILES['file1']['tmp_name'];
    $size = getimagesize($fn);
    $ratio = $size[0]/$size[1]; // width/height
    if( $ratio > 1) {
        $width = $maxDim;
        $height = $maxDim/$ratio;
    }
    else {
        $width = $maxDim*$ratio;
        $height = $maxDim;
    }
    $src = imagecreatefromstring(file_get_contents($fn));
    $dst = imagecreatetruecolor($width,$height);
    imagecopyresampled($dst,$src,0,0,0,0,$width,$height,$size[0],$size[1]);
    imagedestroy($src);
    imagepng($dst,$dest_file); // adjust format as needed
    imagedestroy($dst);
    
}else{
    $err .= "- Image 1 est invalide.<br />";
}

if (in_array($_FILES["file2"]["type"], $valid_mime_types_images)) {
    
    $ext = pathinfo($_FILES['file2']['name'], PATHINFO_EXTENSION);
    $dest_file = $dest_folder.$tmp.'2.'.$ext;
    $fn = $_FILES['file2']['tmp_name'];
    $size = getimagesize($fn);
    $ratio = $size[0]/$size[1]; // width/height
    if( $ratio > 1) {
        $width = $maxDim;
        $height = $maxDim/$ratio;
    }
    else {
        $width = $maxDim*$ratio;
        $height = $maxDim;
    }
    $src = imagecreatefromstring(file_get_contents($fn));
    $dst = imagecreatetruecolor($width,$height);
    imagecopyresampled($dst,$src,0,0,0,0,$width,$height,$size[0],$size[1]);
    imagedestroy($src);
    imagepng($dst,$dest_file); // adjust format as needed
    imagedestroy($dst);
    
}else{
    $err .= "- Image 2 est invalide.<br />";
}

if (in_array($_FILES["file3"]["type"], $valid_mime_types_images)) {
    $ext = pathinfo($_FILES['file3']['name'], PATHINFO_EXTENSION);
    $dest_file = $dest_folder.$tmp.'3.'.$ext;
    $fn = $_FILES['file3']['tmp_name'];
    $size = getimagesize($fn);
    $ratio = $size[0]/$size[1]; // width/height
    if( $ratio > 1) {
        $width = $maxDim;
        $height = $maxDim/$ratio;
    }
    else {
        $width = $maxDim*$ratio;
        $height = $maxDim;
    }
    $src = imagecreatefromstring(file_get_contents($fn));
    $dst = imagecreatetruecolor($width,$height);
    imagecopyresampled($dst,$src,0,0,0,0,$width,$height,$size[0],$size[1]);
    imagedestroy($src);
    imagepng($dst,$dest_file); // adjust format as needed
    imagedestroy($dst);
    
}else{
    $err .= "- Image 3 est invalide.<br />";
}
?>

Share this post


Link to post
Share on other sites

Normaly "imagepng($dst,$dest_file);" replaces that and avoids uploading user content to the server in case the file is infected

Share this post


Link to post
Share on other sites

Yes, but it is not working here, obviously. Either change the function, OR look in the PHP.ini whether you have file uploads allowed. Also check the $_POST vars max size in php.ini

 

Some hosts has those settings turned off by default.

Share this post


Link to post
Share on other sites

The problem could be pretty much anything, maybe an application bug, maybe an issue with the PHP settings, maybe incorrect permissions on the server.

 

So you'll have to narrow it down yourself. Check the error log (if it's disabled, turn it on now and try again). What do you see?

 

You also need to learn about using functions. Copy-pasting of large bocks of code is not how programming works and will make debugging much harder.

Edited by Jacques1

Share this post


Link to post
Share on other sites

The code is working fine on my machine, so this looks more like a permission/configuration issue.

Share this post


Link to post
Share on other sites

The problem could be pretty much anything, maybe an application bug, maybe an issue with the PHP settings, maybe incorrect permissions on the server.

 

So you'll have to narrow it down yourself. Check the error log (if it's disabled, turn it on now and try again). What do you see?

 

You also need to learn about using functions. Copy-pasting of large bocks of code is not how programming works and will make debugging much harder.

 

Yes, break down the various functions into modules, that makes life way easier.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.