PHP move_uploaded_file()失败了,我不知道为什么


PHP move_uploaded_file() FAILS and i don't know why

这是我的代码:

$uploaddir = '/temp/';
$uploadfile = $uploaddir.basename($_FILES['file']['name']);
if (move_uploaded_file($_FILES['file']['tmp_name'], $uploadfile))
    send_OK();
else
    send_error("ERROR - uploading file");

我试过上传ftp_fput, ftp_put, move_uploaded_file,重命名,复制和任何我可以把我的手。

我无法理解是什么问题,因为move_uploaded_file只返回true或false,没有错误代码。

帮助吗? ?

您确定目标目录对world(权限表示中的第三个数字)具有写权限吗?php上传的文件属于www-data

组。

你可以通过

改变所有权
[sudo] chown -R www-data folder // change owner
[sudo] chown -R www-data:www-data folder // change group and owner

我不知道为什么

但是你必须这么做。

这就是错误消息的作用。
当出现问题时,您是否看到任何错误消息?如果没有,那么您必须检查错误日志。

将这行添加到代码的顶部

error_reporting(E_ALL);

和这个,如果它是您的本地(非活动)服务器

ini_set('display_errors',1);

这样你就能在屏幕上看到错误了

对于文件上传,您必须先检查$_FILES['file']['error'])。如果不是0,请参考手册页面获取实际消息。

我在使用move_uploaded_file时遇到了类似的问题,当$_FILES['filename']['error']代码为0时,将无法上传特定的文件。

结果是,文件的名称相对于目标目录需要是唯一的。move_uploaded_file不知道如何处理相同的文件名

是否检查了文件大小限制?崩溃的原因之一可能是您试图上传一个大于配置限制的文件。查看php.ini中的配置变量"upload_max_filesize",并检查文件的大小。

这也让我大吃一惊。注意:

move_uploaded_file()既支持安全模式,也支持open_basedir。但是,限制仅放在目标路径上,以便允许移动上传的文件,其中文件名可能与此类限制冲突。move_uploaded_file()通过只允许那些通过PHP上传的文件被移动来保证这个操作的安全性。

这些设置可能会导致上传失败,如果您试图将文件移出您的网站基本目录,例如

除了权限之外,一定要检查服务器上是否有可用的磁盘空间。如果没有,move_uploaded_file()将失败,错误为0。

您是否尝试激活error_reporting?

你应该检查你的php-config是否允许文件上传