2

我们最近将服务器从 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

4 回答 4

5

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

opcache.enable_cli=1
于 2013-07-30T17:49:12.430 回答
5

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

这就是我为解决此问题所做的:

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
于 2018-06-07T17:00:58.327 回答
0

如果你在 Ubuntu 上,你的 /tmp 权限是关闭的。

在尝试运行php artisan servelaravel 时,运行它为我修复了它。

跑:

chmod 1777 /tmp

您可能需要使用sudo.

请参阅此处的原始帖子:

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

于 2021-05-26T20:26:01.863 回答
0

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

当我试图从命令行运行作曲家时,它无法初始化,并给出了错误 -

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

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

于 2021-07-29T02:17:56.867 回答