PHP Warning: move_uploaded_file() unable to move
Asked Answered
R

3

16

I've been slowly learning PHP and have found an array of information on the subject and solutions posted by other developers. I am attempting to have an android application upload a file to PHP server via HTTP post. However something is not working on my server side wile attempting to write to file in PHP.

Here is the PHP code:

// Where the file is going to be placed
$target_path = "/var/www/media2net/uploads/uploads";

/* Add the original filename to our target path.
Result is "uploads/filename.extension" */
$target_path = $target_path . basename($_FILES['uploadedfile']['name']);

if (move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)) {
    echo "The file ".  basename( $_FILES['uploadedfile']['name']) .
        " has been uploaded";
    chmod("uploads/" . basename($_FILES['uploadedfile']['name']), 755);
} else {
    echo "There was an error uploading the file, please try again!";
    echo "filename: " . basename( $_FILES['uploadedfile']['name']);
    echo " target_path: " .$target_path;
}

I already know from inspecting wire shark on client side that http post is sent out correctly, also I have ensured that the directory I'm writing the file to has the correct permissions, and php safe mode is set to off.

the output from apache2 error.log file reads

[Wed Dec 05 09:25:36 2012] [error] [client 74.14.162.250] PHP Warning:  
move_uploaded_file(): Unable to move '/tmp/phpVLOnn3' to  
'/var/www/media2net/uploads/downloaded_file.png' 
in /var/www/media2net/upload.php on line 9

Any help with this problem or further ways to trouble shoot this would be appreciated.

Roye answered 5/12, 2012 at 12:22 Comment(9)
is the upload folder writable?Clavier
Are you sure about the correct permisions? can you post the output of ls -l /var/www/media2net | grep uploads command?Alderete
First check $target_path variable it contain double upload and check var/www have write permission.I think it will help you.Crucifer
also if this makes a difference , this is an amazon ec2 instance running ubuntu server 12.04Roye
I appologize, it was definately the file permission (frustrating)Roye
I appologize, it was definately the file permission (frustrating) , chmod 777 -R uploads did the trick for future as i know that this is not best practice what permission should this folder have to function properly and more secure ( for upload and download) as i know this is not safest permissionsRoye
@brendanmorrison that is the worst solution. Instead of settling on chmod -R 777, what you should do is reexamine the situation and ask yourself: "Ok, now that I see that the PHP side of this works (that is, file uploading does work), so what is wrong with the permissions?"Badminton
-1 for chmodding to 777. That is not a solution, it's cheating.Badminton
Also check whether folder where you want to save file exists.Griseous
E
20

Change upload permissions for /var/www/media2net/uploads/ either by changing owner with "chown" or by "chmod"

Examples

$ sudo chown apache:apache /var/www/media2net/uploads/
$ sudo chmod 755 /var/www/media2net/uploads/

Also, if downloaded_file.png already exists in that directory and it's owned by another user, then you would need to change ownership on that file as well.

$ sudo chown apache:apache /var/www/media2net/uploads/downloaded_file.png

This way, it can be successfully overwritten by Apache.

Enneastyle answered 5/12, 2012 at 12:28 Comment(3)
Yeah, I know. It was just an example, changed it.Enneastyle
Switching ownership to apache:apache did not work for me. I made ownership the same as the owner of the originating php script. This also allowed me to use the more restrictive chmod 770.Adrial
must use the same user as the webserver (if you're using mod_php) or the same user as php-fpm if you're using that. Debian for instance, uses www-data for apache.Enneastyle
T
5

This solved the problem for me:

$ sudo chown -R www-data:www-data /var/www/html/
Tical answered 20/9, 2016 at 23:25 Comment(0)
O
0

This one worked well in Ubuntu Operating system. You only need to change the ownership

sudo chown -R www-data:www-data (path to the image folder)

Orlantha answered 19/8, 2019 at 12:50 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.