hi i'm still learning some basics of php, and now i'm trying to modify codes.. and follow tutorials
after following a tutorial i made this multi-uploader which uploads images and thumbnails
but there's a little thing with it, it changes the image name to random name, and i want it to keep the original file name..

i did tried (alot actually) and i found the function that creates the random name, but it has a variables within in it, and i did tried to change these variables, but it seems to be out of my limits for now.. because they are linked with other more complicated lines ..

so i wish if you could help me and comment what did you do so that i learn..

Ali//

<?php
    function create_thumbnail ($source, $destination, $thumb_width) {
    $size = getimagesize($source);
    $width = $size[0];
    $height = $size[1];
    $x = 0;
    $y = 0;
    if ($width > $height ) {
    $x = ceil (($width - $height) / 2);
    $width = $height;}
    elseif ($height> $width) {
    $y = ceil (($height - $width) / 2);
    $height = $width; }
    $new_image = imagecreatetruecolor($thumb_width,$thumb_width)
    or die ('Cannot intialize new image stream, make sure to read the instructions');
    $extension = get_image_extension($source);
    if($extension=='jpg' || $extension=='jpeg')
    $image = imagecreatefromjpeg($source);
    if($extension=='gif') // for gif
    $image = imagecreatefromgif($source);
    if($extension == 'png') // for png
    $image = imagecreatefrompng($source);
    //now in relative to the upper lines the next few lines....
    imagecopyresampled($new_image,$image,0,0, $x,$y,$thumb_width,$thumb_width,$width,$height);
    if($extension=='jpg' || $extension=='jpeg')
    imagejpeg($new_image,$destination);
    if ($extension == 'gif')
    imagegif($new_image, $destination);
    if($extension=='png')
    imagepng($new_image,$destination);
    }
    function get_image_extension($name) { // gets the image extension
    $name = strtolower($name); // converts the name to lowercase
    $i = strrpos($name, ".");
    if (!$i) {return ""; }
    $l = strlen($name) - $i;
    $extension = substr($name,$i+1,strlen($name));
    return $extension;
    }
    function random_name($length) {
    $characters = "ABCDEFGHIJKLMNOPQRSUVWXYZ0123456789";
    $name = "";
    for ($i=0; $i < $length; $i++) {
    $name .= $characters [mt_rand(0, strlen($characters) - 1)]; }
    return "image-".$name;
    }
    $images_location = "images/featured/"; // images directory
    $thumbs_location = "images/tn/"; // thumnails directory
    $thumbs_width = 100; // width in pixels
    $maximum_size = 99999999999999; // maximum size in kb (i know, but 99999999999999 looks pretty )
    $result ="click browse to locate the image you want to upload"; // just a message bro.
    if (isset($_POST['submit'])){
    if($_FILES['image']['name'][0] == "") { // checks
    $result = "please choose an image !!";} // message
    else{
    for($i=0;$i<count($_FILES['image']['name']);$i++){
    $size=filesize($_FILES['image']['tmp_name'][$i]);
    $filename = stripslashes($_FILES['image']['name'][$i]);
    $extension = get_image_extension($filename);
    if ($size > $maximum_size) {
    $result = "image is too large, please choose a smaller one.";}
    else // now checks the extension..
    if (($extension != "jpg") && // not a jpg
    ($extension != "jpeg") && // not a jpeg
    ($extension != "png") && // not a png
    ($extension != "gif")) { // not a gif !! WTF is it ???
    $result = "it's not an image file, please choose an image with proper extension";}
    else
    $image_random_name= random_name(15).".".$extension ;
    $copy = @move_uploaded_file($_FILES['image']['tmp_name'][$i], $images_location.$image_random_name);
    if (!$copy) { $result = "we're sorry, there's a technical error, please try again, please"; }
    else // you finally reached this (else) and the image will be uploaded Hallelujah
    { create_thumbnail ($images_location.$image_random_name,$thumbs_location.$image_random_name, $thumbs_width) ;
    $result = "image has been uploaded"; // it actually refers to me
    }
    }
    }
    }
    echo "$result";
    ?>
    <html>
    <head>
    <title>Multi_uploader with thumbnails</title>
    </head>
    <body>
    <form id="frm1" action="multi_uploader_with_thumbnails.php" method="post" enctype="multipart/form-data" autocomplete="on">
    <input type="hidden" name="MAX_FILE_SIZE" value="99999999999999"> <!-- this is kb but 99999999999999 looks cool -->
    <input type="file" name="image[]" multiple />
    <input name="submit" id="submit" type="submit" value="Upload them">
    </form>
    </body>
    </html>

Dani AI

Generated

Short version: the filename was being replaced by the uploader's random-name helper. correctly pointed out that using the original uploaded name fixes the immediate problem and confirmed it. Before committing to that approach, sanitize and validate the original name and handle collisions so you do not open yourself to accidental overwrites, path traversal, or unsafe characters.

A compact sanitizer to apply to any uploaded name (run before you save) should: strip path parts, normalize case, replace spaces/special characters, collapse repeated separators, and truncate to a safe length. Example:

function sanitize_filename($name) {
    $name = basename($name);
    $name = strtolower($name);
    $name = preg_replace('/[^a-z0-9._-]+/', '-', $name);
    $name = preg_replace('/-+/', '-', $name);
    return substr($name, 0, 200);
}

Avoid overwriting existing files by making the sanitized name unique when necessary. One simple pattern is to check for existence and append a numeric suffix until a free name is found:

function make_unique($dir, $name) {
    $base = pathinfo($name, PATHINFO_FILENAME);
    $ext  = pathinfo($name, PATHINFO_EXTENSION);
    $candidate = $name;
    $i = 1;
    while (file_exists($dir . DIRECTORY_SEPARATOR . $candidate)) {
        $candidate = $base . '-' . $i . '.' . $ext;
        $i++;
    }
    return $candidate;
}

Extra checks and tips: verify uploads with $_FILES[...]['error'] and an actual image test (finfo or getimagesize/exif_imagetype), do not trust the extension alone, store uploaded files outside the web root or block execution in the upload folder, set restrictive file permissions, and save the original filename as metadata if you need to display it later (but always output-escape it). Pass the sanitized/unique stored name to your thumbnail routine so both files stay in sync. These steps let you keep readable original names while avoiding the common pitfalls that can cause bugs or security issues.

Recommended Answers

All 2 Replies

Line 69:

 $image_random_name= random_name(15).".".$extension ;

try this:

 $image_random_name = $_FILES['image']['name'][$i];

or you can use $filename which is declared in line 58 and change line 70 to:

$copy = @move_uploaded_file($_FILES['image']['tmp_name'][$i], $images_location.$filename);

Bye!

thanks man, it really worked like charm..

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.