我现在已经挣扎了8个多小时,所以我希望有人可以帮助我。我想我已经完成了关于这个问题的所有帖子,但是找不到解决方案。
没有错误,/tmp
和/var/www/test
都归apache(www-data
)所有,并且设置了775个权限。
这是PHP代码:
$target_dir = $_SERVER["DOCUMENT_ROOT"] . "test/uploads/";
$target_file = $target_dir . basename($_FILES["pic"]["name"]);
$uploadOK = 1;
$image_file_type = pathinfo($target_file, PATHINFO_EXTENSION);
if(isset($_POST['submit'])) {
if($uploadOK === 0) {
echo "Upload failed!";
} else {
// This is where it stops...
// There is definitely something wrong with $target_file
if(move_uploaded_file($_FILES["pic"]["tmp_name"], $target_file)) {
echo "Success";
} else {
echo "Not uploaded...<br>";
echo move_uploaded_file($_FILES["pic"]["tmp_name"], $target_file) . "<br>";
echo $target_file . "<br>";
print_r($_FILES) . "<br>";
error_reporting(E_ALL);
}
}
这些是我得到的结果:
未上传...
/var/www/test/uploads/test.jpg
Array (
[pic] => Array (
[name] => test.jpg
[type] => image/jpeg
[tmp_name] => /tmp/phpKlzCxc
[error] => 0
[size] => 721090
)
)
那么,我做错了什么?
好的,这是更新:
error_reporting
(好的通话:)的位置后,终于得到了一大堆“Permission denied”警告,因为我怀疑是问题所在,这里是:警告: move_uploaded_file(/var/www/test/uploads/test.jpg):无法打开流:第47行/var/www/test/upload.php中的权限被拒绝< / p>
警告: move_uploaded_file():无法在/ var / www / test / upload中将'/ tmp / phpHzvhOA'移动到'/var/www/test/uploads/test.jpg'。第47行的PHP
第47行:
if(move_uploaded_file($_FILES["pic"]["tmp_name"], $target_file)) {
/var/www/test/upload.php的权限设置:
-rwxrwxr-x 1 www-data www-data 2174 Sep 9 00:07 /var/www/test/upload.php
答案 0 :(得分:0)
我首先会检查file_exists($_FILES["pic"]["tmp_name"])
。
然后检查路径$target_file
是否有效(只是print_r()并检查路径是否正确)。
确保您有权在$target_file
路径上书写。
答案 1 :(得分:0)
问题肯定是我们想到的权限。所以,我跑了
所有三个目录的 sudo chown -R www-data.www-data
和sudo chmod -R 775
,因为我之前已经做了20次。只是现在,由于某种原因它起作用。
我使用-R
方法,如果我理解正确的话,应该更改/var/www/test
目录中所有子文件夹和文件的权限,/uploads
文件夹也位于此目录中。
所以只是为了澄清,如果有人也有这个问题,为了给apache授予权限,这就是我做的:
sudo chown -R www-data.www-data /var/www/test
sudo chmod -R 775 /var/www/test
也为/tmp
和/var/www/test/uploads
目录执行此操作。