【问题标题】:UPLOAD_ERR_CANT_WRITE But other files are getting uploadedUPLOAD_ERR_CANT_WRITE 但其他文件正在上传
【发布时间】:2013-11-25 22:52:30
【问题描述】:

我在我的服务器中遇到了一个非常奇怪的行为。

我可以毫无问题地上传任何小于 1MB 的文件,但那些更大的文件会返回错误 UPLOAD_ERR_CANT_WRITE == 7。

tmp/ 文件夹有权限,因为我可以上传其他文件。

我的 PHP.INI 上的配置似乎很好,我之前确实使用 phpmyadmin 上传了大于 1MB 的文件并且它工作正常。

PHP.INI

  • file_uploads 开启
  • post_max_size 200M
  • max_execution_time 30
  • memory_limit 128M
  • max_file_uploads 20
  • upload_max_filesize 200M
  • upload_tmp_dir /tmp

我错过了什么?在我的本地机器上工作完全相同的配置:S

我使用 ubuntu 服务器 13.04 PHP 5.4.9 和 Apache 2.2.22

当然是有史以来最愚蠢的事情,我在这上面浪费了 2 个小时,我已经在 php.net 上检查了很多文档,但没有运气。任何帮助都非常受欢迎。

谢谢!!!

2014 年 10 月 1 日更新:仍然没有运气,我无法修复它。

【问题讨论】:

  • 目的地有可写权限?应该是 775。
  • 说我可以上传小于 1mb 的文件没问题 :S
  • 最近也遇到了同样的问题,非常少见但是拉头发的问题,谢谢添加

标签: php apache ubuntu


【解决方案1】:

感谢您的所有回答,我发现了错误。

服务器是 OVH 安装程序完成的 Ubuntu 安装。我不知道的是他们会以如此糟糕的方式创建分区:

  • 已使用的文件系统大小 Avail Use% Mounted on
  • 溢出 1.0M 136K 888K 14% /tmp
  • /dev/md2 1.8T 13G 1.7T 1% /home

所以我所做的是在 php.ini 中将upload_tmp_dir 修改为另一个有空间的文件夹...

太糟糕了,我浪费了这么多时间,我从没想过实际上是空间问题,因为在 HD 中我有 2TB!

再次感谢并希望这对其他人有用。

【讨论】:

  • 这也是我的解决方案。我的 AWS 微实例磁盘上的磁盘已满。我清除了一堆垃圾,但我仍然看到错误。我将upload_tmp_dir 设置为/usr/tmp,一切又开始工作了。我仍然不知道原来的 tmp 目录在哪里。
  • 我的,就像 chema 的一样,默认为 /tmp,在我的 AWS 实例上,它也被定义为一个 1M 的“溢出”分区(不管这意味着什么)。这似乎是将 PHP 的默认位置 upload_tmp_dir 与 AWS 奇怪的 /tmp 分区相结合的不幸结果。将 php.ini 更改为指向更大的驱动器就可以了。感谢您解决这个问题。
  • 其实根据this link,这个奇怪的 /tmp 分区是你的常规分区空间不足的结果,就像 hwrod 的回答一样,你所要做的就是再次卸载它。
  • 我花了 3 天时间,你的评论救了我。非常感谢!
【解决方案2】:

从 /tmp 删除或移动所有文件并卸载设备,以便它使用 /tmp 的正常分区。

 mkdir /usr/tmp
 mv /tmp/* /usr/tmp
 sudo umount -l /tmp
 mv /usr/tmp/* /tmp

【讨论】:

  • 这看起来是个不错的解决方案,但没有尝试。
【解决方案3】:

这可能是由于您的memory_limit 配置所致。尝试用256M替换。如果它有效,您应该检查您的代码以减少内存使用量。

如果是由于您的权限配置,您将看到:

ls -la /yourUploadDirectory

您应该会看到如下内容:

drwxr-xr-x 65 user group     4096 nov 13 09:47 .
drwxr-xr-x  3 user   group       4096 ago  7 18:09 ..

. 目录(第一行)的group 应为www-data。如果不这样做:

chown yourUser:www-data /yourUploadDirectory

drwxr-xr-x 也应该是 drwxrwxr-x。如果不这样做:

chmod 0775 /yourUploadDirectory

现在您已完成上传。

【讨论】:

  • 您好,感谢您的及时回复。在将 memory_limit 提高到 512MB 之前我还没有尝试过,但仍然没有运气。上传文件夹的权限很好。我可以上传其他较小的文件:很奇怪不是吗?
  • @chema,您的主机有文件大小限制吗?能不能用file_put_contents()写一个1MB的txt文件???
  • @AllenChak 我有一个专用服务器。 :S 我想我错过了一些愚蠢的东西。有趣的是,仅仅两周后,我就设法从 phpmyadmin 恢复了一个超过 10MB 的 mysql 数据库,并且成功了。另请注意,PHP 脚本正确完成但返回错误,显然他可以在这里写 :S 绝望。谢谢!
  • 同时检查您的open_basedir php.ini 选项。应该是注释,或者写Apache可以访问的目录。
  • 嗯...您确定硬盘中有足够的可用空间吗?试试df 命令。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-12
  • 2014-05-19
  • 2014-12-15
相关资源
最近更新 更多