PHP错误文件描述符错误

时间:2013-07-29 20:47:03

标签: php apache

我们最近将服务器从PHP 5.4.15升级到5.5.1并开始在日志中收到此错误

  

致命错误无法创建锁定文件:错误的文件描述符

我已经跟踪了这个代码,打开了另一个小PHP脚本,该脚本在后台将文件上传到S3。

// Grab uploaded file and assign a working name
$fileTemp = $_FILES['file']['tmp_name'];
$pathToWorkingFile = tempnam($g_TmpDirectory, "TR-");

// Move the file to our working area        
if (move_uploaded_file($fileTemp, $pathToWorkingFile) === false)
    throw new Exception("Cannot move file to staging area.", 1011);

// Where the file will end up on S3
$s3Bucket = "test.bucket.com";
$uploadDest = "/uploads/image123.jpg";

// Create process to upload file in background
popen("/usr/local/bin/php /path/to/uploadScript.php $pathToWorkingFile $s3Bucket $uploadDest &", 'r');

4 个答案:

答案 0 :(得分:3)

事实证明,此错误是由我们在PHP升级过程中启用的OPcache配置引起的。通过从php.ini中删除此设置来禁用命令行操作时,一切正常。

opcache.enable_cli=1

答案 1 :(得分:2)

我能够使用opcache.enable_cli=1解决,但对我来说,根本问题是MacOS中/tmp目录的权限错误。

这就是我解决这个问题的方法: sudo rm -Rf /tmp sudo rm -Rf /private/tmp sudo mkdir private/tmp sudo chown root:wheel /private/tmp sudo chmod 1777 /private/tmp sudo ln -s /private/tmp /tmp

答案 2 :(得分:0)

如果您使用的是 Ubuntu,则您的 /tmp 权限已关闭。

当我尝试为 laravel 运行 php artisan serve 时,运行它修复了它。

运行:

chmod 1777 /tmp

您可能需要使用 sudo

在此处查看原始帖子:

https://unix.stackexchange.com/questions/71622/what-are-correct-permissions-for-tmp-i-unintentionally-set-it-all-public-recu

答案 3 :(得分:0)

我在 Windows 的 php-cli 中获得了 Bad file descriptor,因为我在 Windows 安全 → 病毒和威胁防护 → 中打开了 受控文件夹访问 设置勒索软件防护。

当我尝试从命令行运行 composer 时,它无法初始化,并给出了错误 -

[ErrorException]
  file_put_contents(): Write of 111 bytes failed with errno=9 Bad file descriptor

令人惊讶的是,Windows 安全中心的被阻止的应用程序通知根本没有出现。但是当我手动转到允许应用程序通过受控文件夹访问添加允许的应用程序并选择 php.exe 可执行文件时,composer 开始工作。