PHP move_uploaded_file()没有理由失败

时间:2016-04-05 13:46:09

标签: php linux file-upload file-permissions permission-denied

我不能让php上传工作。 PHP 5.4.45 Centos 6.7。 Apache 2.2.27。

我有一个HTML文件:

<form enctype="multipart/form-data" action="test2.php" method="POST">
Send this file: <input name="userfile" type="file" />
<input type="submit" value="Send File" name="submit"/>
</form>

我有PHP文件:

<?php
$uploaddir = '/home/michael/public_html/forum/files/';
$uploadfile = $uploaddir . basename($_FILES['userfile']['name']);
echo '<pre>';
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
echo "File is valid, and was successfully uploaded.\n";
} else {
echo "Error!\n";
}
echo 'Here is some more debugging info:';
print_r($_FILES);
print "</pre>";
?>

当我跑步时,我得到:

Error!
Here is some more debugging info:Array
(
[userfile] => Array
    (
        [name] => 184958.jpg
        [type] => image/jpeg
        [tmp_name] => /tmp/phpupab11
        [error] => 0
        [size] => 1473603
    )
)

文件未移至新位置。相反,我在新位置获得了一个同名的0大小的文件。

-rw-r--r-- 1 michael michael 0 Apr  5 16:33 184958.jpg

服务器日志记录错误:

[error] [client xx.xx.xx.xx] PHP Warning:  move_uploaded_file(): 
Unable to move '/tmp/phpupab11' to '/home/michael/public_html/forum/files/184958.jpg'
in /home/michael/public_html/forum/test2.php on line 9

似乎文件上传到/ tmp dir,但无法移动到其他位置。 尽管我读到它是一个许可问题。但文件夹“文件”的许可似乎很好 - 777(与所有者michael =用户名):

drwxrwxrwx  2 michael michael 1216512 Apr  5 13:16 files

PHP变量:

post_max_size   20M
upload_max_filesize   20M
upload_tmp_dir /tmp
file_uploads On
memory_limit 1024M

我很乐意得到一些帮助,或者至少有方向寻找解决问题的方法。 谢谢。

3 个答案:

答案 0 :(得分:0)

文件所有者必须是运行Web服务器的进程,可能是 apache 。将文件目录设置为具有写权限的apache。

答案 1 :(得分:0)

问题没有解决。 / home下没有文件夹能够接收上传的文件。权限/所有权更改都没有帮助。 无论如何,找到了解决方法。不理想而且不安全,但是在我找到造成这种奇怪行为的原因之前,这种做法已经足够好了。 我在root目录(/ files_of_forum)和权限(michael:michael 777)中创建了一个文件夹,并在论坛中更改了附件的目录(原始&#34;文件&#34;到&#34; ../。 ./../../files_of_forum"。将原始文件夹中的所有文件移动到新文件夹。 现在一切正常。 感谢所有试图提供帮助的人。

答案 2 :(得分:0)

对于那些因类似错误而来到这里的人,我找到了适合我自己特殊情况的解决方案,我分享了此解决方案,以防万一你们像我这样不幸(如果以下任何清单对您不利)请忽略此答案):

  1. 您正在当地发展
  2. 您已经安装了Avast
  3. 您的WAMP服务器运行正常,但是由php artisan serve(Laravel)启动的服务器由于某些原因出现了问题,您无法运行move_uploaded_file PHP方法

您的Avast正在阻止您的php.exe运行zzzzzzzzz ... 不是因为权限,目录是否存在,文件大小为php.ini,保存到公共或存储中,等等。 希望它对像我这样不幸的人有所帮助。