I’m new to PHP and am trying to figure out how to make move_uploaded_file to work.
To test and learn PHP I use public_html folder in my home dir, that is: /home/wojtek/public_html. I access it like this: localhost/~wojtek/[…]
The server root is /srv/www/htdocs.
The problem is that an uploaded file doesn’t reach the temporary folder for uploaded files. I set it to ‘/srv/www/tmp’. Here is the output of ‘ls’ command:
drwxrwxrwx 2 root www 4096 Sep 26 17:33 tmp
I don’t even know where the temporary folder should go
Apache belongs to ‘www’ group so I added myself to that group too.
And here is another problem.* I don’t altogether know what path should I use – absolute or relative? I tried with:
• http://localhost/~wojtek/[…]
• /~wojtek/[…]
• images/ (the script is in guitarwars/)
and none worked.
The script works. I get no errors. And I even get the temporary name of an uploaded file.
I tried somehow make $_SERVER[‘DOCUMENT_ROOT’] to work – to get the root of public_html but I always get /srv/www/htdocs.
So I’m completely confused. I don’t know:
• where should temporary folder be created (in /srv/www/[…] or in public_html?)
• why is the temporary folder always empty (no files even when there is no error when file is uploaded)
• what destination path of move_uploaded_file should I*use (absolute, relative (relative to what?))
I hope this is not a tricky question and you guys can help me. Thanks in advance!
You are asking a lot of questions, so people are less likely to take the trouble to reply.
I think the crux of your problem is to do with locating [google]tmp directory for PHP[/google] (a google results page), although you may have compounded problems with permissions by the sound of it.
The other thing I always fully recommend, not matter how brilliant your book is, is to study fully the Handling File Uploads section of the online manual.
The trick is to identify, isolate and fix one challenge at a time.
Agreed, and check your phpinfo()! It will identify a lot of what you are asking, the tmp directory should be defined, the SERVER[‘DOCUMENT_ROOT’] is defined (hint: this is set in your Apache configuration).
Also verify the folder you want to move the file to is writeable or has proper permissions for your apache user (usually wwwdata) to access the folder.
Warning: move_uploaded_file(/home/wojtek/public_html/headfirst/ch05/guitarwars/images/001.jpg): failed to open stream: Permission denied in /home/wojtek/public_html/headfirst/ch05/guitarwars/addscore.php on line 38 Warning: move_uploaded_file(): Unable to move '/srv/www/tmp/phpCb8m0M' to '/home/wojtek/public_html/headfirst/ch05/guitarwars/images/001.jpg' in /home/wojtek/public_html/headfirst/ch05/guitarwars/addscore.php on line 38 upload failed
Which is much clear now. So the problem must be with the destination.
Following the advice on php.net, I*changed the user of images/ to ‘nobody’ and its rights to ’755’. But still with no success.
// edit
OK, I restored the ownership to my user (wojtek) and gave it 777 rights. Now it works!
The next issue that bothers me is how should Iset the destination? Is it OKto give the whole, absolute path like this one: