“require_once():需要打开失败”,但是文件存在并且可读 - php

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

PHP致命错误:require_once():无法在[...]中打开所需的'MailError.php'(include_path ='。:: / usr / www / users / web1 / master / sys / classes:..')

PHP无法打开的文件每次都会更改。此外,所需文件肯定存在且可读。我尝试在Cronjob处于活动状态时使用lsof | grep .php查找任何锁定的文件,但是没有锁定的* .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无法再包含任何其他文件。

如何在Laravel中将include_once()与命名空间一起使用 - php

我是laravel的新手,正在导入一个现有的php网站。我创建了一个名为“ List”的控制器,然后需要创建一个类的对象,该对象编码在一个文件中,该文件已被include_once()包含在其中,如图所示,<?php namespace App\Http\Controllers; use App\Http\Controllers\Controller;…

您如何知道在PHP require_once()语句中使用的正确路径 - php

我想在几乎所有其他php文件中都包含一个Web应用程序的根目录中的config.php文件。因此,大多数人都这样写:require_once("config.php"); 有时require_once("../config.php"); 甚至require_once("../../config.php…

PHP-将日期插入日期时间字段 - php

我已在数据库中使用datetime字段存储日期,使用PHP将“今天的日期”插入该字段的正确方法是什么?干杯, 参考方案 我认为您可以使用php date()函数

PHP-如何获取类的成员函数列表? - php

如果我知道班级的名字。有没有办法知道类的成员函数列表? 参考方案 get_class_methods()是你的朋友

php ziparchive类源代码 - php

Improve this question 我如何获取ziparchive类本身的源代码。 参考方案 假设您在谈论PHP ZipArchive class:下载PHP source code并查找适当的文件。如果您希望源代码是PHP代码,您可能会感到失望,因为源代码是用C语言编写的。或者,也可以在PHP Github Development Reposito…