php chmod() not changing permissions

Sebastjan picture Sebastjan · Mar 2, 2013 · Viewed 21k times · Source

I am having problems with a picture uploading script.

I know there are hundreds of the same questions, but I haven't found the one that would be work for me.

$upload_dir = "images/postcards/";
chmod($upload_dir, 777);
if (is_writable($upload_dir)) {
    echo 'The file is writable';
} else {
    echo 'The file is not writable';
}

This always returns that the file is "not writable"

I tried setting chmod to 0777 and -rwxrwxrwx. But result was always the same. Any Ideas?

Answer

jman picture jman · Mar 2, 2013

The directory must be owned by the user invoking the script (typically www-data, apache or httpd if you're running the script in a apache/*NIX setup). A user can't set 777 permissions on directories it doesn't own.

See the note on the chmod() manual:

The current user is the user under which PHP runs. It is probably not the same user you use for normal shell or FTP access. The mode can be changed only by user who owns the file on most systems.