Ravi
Ravi

Reputation: 31417

move_uploaded_file(): Unable to move

$targetFolder = '/LP/media/image'; // Relative to the root

if (!empty($_FILES)) {
    $tmpName = $_FILES['Filedata']['tmp_name'];
    $targetPath = $_SERVER['DOCUMENT_ROOT'] . $targetFolder;
    //$ext = end(explode('.', $_FILES['Filedata']['name']));
    $targetFile = rtrim($targetPath, '/') . '/' . $_FILES['Filedata']['name'];

    // Validate the file type
    echo $targetFile;
    $fileParts = pathinfo($_FILES['Filedata']['name']);
    $fileTypes = array('jpg', 'jpeg', 'png','JPG','JPEG','PNG'); // File extensions
    if (in_array($fileParts['extension'], $fileTypes)) {
        move_uploaded_file($tmpName, $targetFile);
        //echo '1'.$fileParts['filename'];
        // echo $fileParts['filename'];

        $aimage = file_get_contents($tmpName);

       // echo '<img src="data:image/jpeg;base64,' . base64_encode($aimage) . '" width=\'100\' height=\'100\' />';
    } else {
        echo 'Invalid file type.';
    }
}
?>

Same code is working on my local machine, but deployed on remote server. Then getting below error.

/home/username/public_html/LP/media/image/default_avatar.png
Warning: move_uploaded_file(/home/username/public_html/LP/media/image/default_avatar.png): failed to open stream: No such file or directory in /home/username/public_html/uploadify/gallery.php on line 28

Warning: move_uploaded_file(): Unable to move '/tmp/phpoe0fBd' to '/home/username/public_html/LP/media/image/default_avatar.png' in /home/username/public_html/uploadify/gallery.php on line 28

Upvotes: 0

Views: 6495

Answers (4)

Oussama
Oussama

Reputation: 1

whom still have this problem after tried all solutions suggested here.. they have to try this small thing is to respect the letter sensitive case of the name of folders.. folder "Upload" <> "upload".. thx

Upvotes: 0

vbarbarosh
vbarbarosh

Reputation: 3702

Try the following code. It should be easy to identify the error:

<?php

$upload_dir = $_SERVER['DOCUMENT_ROOT'] . '/LP/media/image';

if (isset($_FILES['Filedata'])) {

    $file = $_FILES['Filedata'];

    if ($file['error'] !== UPLOAD_ERR_OK) {
        echo 'error: ', $file['error'], PHP_EOL;
        exit;
    }

    $allowed = array('jpg', 'jpeg', 'png');
    $extension = strtolower(pathinfo($file['name'], PATHINFO_EXTENSION));
    if (!in_array($extension, $allowed)) {
        echo 'error: invalid file extension', PHP_EOL;
        exit;
    }

    $target = $upload_dir . '/' . basename($file['name']);
    if (!move_uploaded_file($file['tmp_name'], $target)) {
        echo 'error: move_uploaded_file failed', PHP_EOL;
        print_r(error_get_last());
        exit;
    }

    echo 'success', PHP_EOL;
    echo $target, PHP_EOL;
}

Upvotes: 0

DIEGO CARRASCAL
DIEGO CARRASCAL

Reputation: 2129

I have this little function (not the best) but it "works" in my case the uploaded files must be moved or they get deleted, so I move them to a folder next to my PHP file and echo a link to it (you can them move it any where else, rename it or whatever:

function save_file() {
    $gs_name = $_FILES['uploaded_files']['tmp_name'];
    if(is_readable($gs_name) && $_FILES['uploaded_files']['error'] == 0) { //Tells whether a file exists and is readable. no error during upload (0)
        move_uploaded_file($gs_name, 'upload/'.$_FILES['uploaded_files']['name']);

        echo "saved.<a href='upload/".$_FILES['uploaded_files']['name']."' target='_blank'/>".$_FILES['uploaded_files']['name']."</a><br/>";
        echo "<p><a href='upload/' target='_self'>Uploaded files.</a></p>";
        echo "<p><a href='upload_file.php' target='_self'>Continue...</a></p>";
    }
}

The important part about it is this if:

if(is_readable($gs_name) && $_FILES['uploaded_files']['error'] == 0)

it allow it to check if the file can be copied and if there were no errors that could leave the file damage... I point at this because the path seems to be ok, other already mention the file and folder permissions.

Upvotes: 0

Iuri Dias
Iuri Dias

Reputation: 97

The code you provide isn't very clear to tell the source of the problem, so I will provide you with a full snippet where you can take better conclusions.

In this case, I sent an array from JavaScript to my PHP file using a formdata under the name "documents". I also modify the name of the file so it becomes: "filename_optional_$i(int)".

for($i=0; $i<count($_FILES['documents']['name']); $i++){
    list($dump, $extention) = explode(".", (string)$_FILES['documents']['name'][$i]);
    $document_name = $file_name.'_optionnel'.$i;
    if(($_FILES['documents']['size'][$i] < 500000)){
        if ($_FILES['documents']["error"][$i] > 0){
            echo 'Erreur.';
        }else{
            if(file_exists( $directory_path . $document_name . "." . $extention)) {
                echo 'Le fichier existe déjà.';
            }else{
                $sourcePath = $_FILES['documents']['tmp_name'][$i];
                $targetPath = $directory_path . $file_name ."/". $document_name . "." . $extention;
                array_push($attachments, $targetPath);
                move_uploaded_file($sourcePath, $targetPath);
            }
        }
    }else{
        echo 'Le fichier est trop grand.';
    }
}

Make sure your path variables are pointing to the correct folder. Say, for instance, if you want your file to go to the foldier images, you have to do:

path_to_folder/images/ and not path_to_folder/images

EDIT:

Here's how your filename and directory path variables should look like:

/*$nom, $prenom and $user_id come from database values*/
$file_name = $nom."_".$prenom."_".$user_id;

$directory_path = dirname( __FILE__ ) . '/user_docs/';

/* Create mask */ 
$oldmask = umask(0);

/* Create the folder for user */
$directory = mkdir($directory_path.$file_name, 0777);

/* redo the mask */
umask($oldmask);

I'm quite new to this site, but the least I can do for you is offer you this code I've done to help you out. I've written some comments to guide you through.

Full code source for upload

Upvotes: 0

Related Questions