【问题标题】:PHP move_uploaded_file() FAILS and i don't know whyPHP move_uploaded_file() 失败,我不知道为什么
【发布时间】:2011-12-10 15:43:49
【问题描述】:

这是我的代码:

$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 只返回真或假,没有错误代码。

帮忙??

【问题讨论】:

  • 安装了 Avast 的可以查看这个答案:stackoverflow.com/a/59223789/10539212>

标签: php file-upload


【解决方案1】:

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

您可以通过

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

【讨论】:

  • 你是对的,我已经解决了,嗯...不是真的我,我打电话给托管服务器技术。并告诉他们我的问题,显然,他们没有授予 PHP(www-data)或其他任何权限......在他们更改之后,一切都很好!
【解决方案2】:

不知道为什么

但你必须这样做。

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

在代码顶部添加这一行

error_reporting(E_ALL);

还有这个,如果它是您的本地(非实时)服务器

ini_set('display_errors',1);

这样您就可以在屏幕上看到错误

对于文件上传,您必须先检查$_FILES['file']['error'])。不是0,具体信息请参考手册页。

【讨论】:

  • 这是我得到的:$_FILES['file']['error'] = 0 警告:move_uploaded_file(/temp/754327953-129265952-content):无法打开流:没有这样的文件或第 16 行 C:\inetpub\wwwroot\LocalUser\notebook\server\UploadFile.php 中的目录警告:move_uploaded_file():无法将 'C:\Windows\Temp\phpCC2E.tmp' 移动到 '/temp/bla. txt' 在 C:\inetpub\wwwroot\LocalUser\notebook\server\UploadFile.php 第 16 行
  • 看!它让一切都清楚了! :) 感受错误信息的威力!文件目的地似乎有问题。它试图打开一些奇怪的文件/temp/754327953-129265952-content。尝试使用另一个目标目录?
  • hmm...我想是的,因为我没听懂...我将警告文件名中的一小部分从 754327953-129265952-content 编辑为 bla.txt,但我没有t 获取失败打开流的部分:没有这样的文件或目录。我应该怎么做!?
  • 您的磁盘上是否有 C:\temp\ 目录?
  • 问题是这是一个远程服务器(在我的大学里),所以我不知道该目录是否存在或者它是否有问题。我唯一能做的就是使用 ftp 客户端上传一个 php 文件,然后使用它...
【解决方案3】:

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

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

【讨论】:

    【解决方案4】:

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

    【讨论】:

      【解决方案5】:

      这也引起了我的注意。请注意:

      move_uploaded_file() 是安全模式和 open_basedir 感知的。但是,限制仅放置在目标路径上,以允许移动文件名可能与此类限制冲突的上传文件。 move_uploaded_file() 仅允许移动通过 PHP 上传的文件,从而确保此操作的安全性。

      例如,如果您尝试将文件移到网站基本目录之外,这些设置可能会导致上传失败。

      【讨论】:

        【解决方案6】:

        除了权限之外,请务必检查您的服务器上是否有可用的磁盘空间。如果没有,move_uploaded_file() 将失败并返回错误 0。

        【讨论】:

          【解决方案7】:

          您是否尝试激活 error_reporting?

          如果允许文件上传,你应该检查你的 php-config。

          【讨论】:

          • 感谢您的快速评论。这是我在 phpinfo 中看到的:file_uploads=On,max_file_uploads=20,upload_max_filesize=2M,upload_tmp_dir=C:\Windows\Temp。关于error_reporting,我刚刚通过您的帖子了解了它,所以我正在处理它...顺便说一句-我上传的文件很小(最大10kb)
          • 因为我在我大学的远程服务器上工作,所以我没有访问 c:\Windows\Temp 的权限,这是 PHP INI 文件中的值,我要求他们将其更改为我有权访问的路径并且它有效...谢谢您的时间!你和@Col。弹片
          猜你喜欢
          • 2014-04-08
          • 1970-01-01
          • 2017-04-24
          • 2020-01-04
          • 2014-05-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多