gpt4 book ai didi

php - "require_once(): Failed opening required"但文件存在并且可读

转载 作者:行者123 更新时间:2023-12-02 00:25:09 26 4
gpt4 key购买 nike

几天以来,我的一个 Cronjobs 遇到了严重的问题。有时我会收到以下错误(每小时一次或两次):

PHP Fatal error: require_once(): Failed opening required 'MailError.php' (include_path='.:/usr/www/users/web1/master/sys/classes:..') in [...]

PHP打不开的文件每次都会发生变化。此外,所需的文件肯定存在并且可读。我试图通过 lsof | grep .php 查找任何锁定的文件虽然 Cronjob 处于事件状态,但没有锁定的 *.php 文件。

require_once在我的spl_autoload_register中被称为方法:

spl_autoload_register(function($className){
$filePath = str_replace('_', DIRECTORY_SEPARATOR, $className) . '.php';

$includePaths = explode(PATH_SEPARATOR, get_include_path());
foreach($includePaths as $includePath){
if(file_exists($includePath . DIRECTORY_SEPARATOR . $filePath)){
require_once $filePath;
return;
}
}
});

在第一次遇到问题之前,我在服务器上安装了一些新软件。 Node.js、用于进程监控的 PM2、监听 UDP 套接字的 Node.js 脚本和作为搜索结果缓存的 Redis。我关闭了所有这些组件,现在看起来 Cronjob 再次运行,没有任何错误。后来我一个接一个地打开组件来检查是哪个组件导致了错误,但看起来只有当每个组件都打开时才会发生。

我不知道这个问题的核心是什么,所以我希望我能找到有相同或类似问题的人。

有关我的系统的一些有用信息:

  • 安装了 Debian 9 的托管服务器
  • 随 Linuxbrew 安装 Node.js 和 Redis
  • PHP 7.3.11-cli
  • 未使用防病毒软件

最佳答案

正如我在这个帖子中发现的那样 Select() + UDP resulting in too many open files此错误是由于超出打开文件限制而导致的。

在我的例子中,PHP 脚本使用带有 socket_create()socken_sendto() 的 UDP 套接字,并使用 socket_close() 关闭它。关闭可能会失败并且套接字保持打开状态。在某些时候,打开文件限制会被超出,PHP 无法包含任何其他文件。

关于php - "require_once(): Failed opening required"但文件存在并且可读,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58989325/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com