更新 1:
在发现问题在于插件加载的顺序后,我留下了一个问题,为什么插件加载顺序在 2 个开发服务器之间,甚至在本地开发环境和新的开发服务器之间发生了变化。
我的问题可能会解决,因为该插件不是正常使用,而是作为“必须使用的插件”,这确实让我想知道加载顺序是如何突然改变的。
如果您有这方面的任何信息,那将有很大帮助。
我仍然会搜索有关此问题的答案,并在获得更多信息时更新此页面。
原问题:
在过去的 3 天里,我的头越来越用力地撞墙。
我错过了一些东西,但我不知道是什么。
在我们继续之前需要知道的事情。
在我工作的公司,我们有几台用于实时网站的服务器和一台开发服务器。
由于此服务器设置不再适合我们并且是出于 panic 而诞生的,因此我们需要从头开始构建它。
我们就是这样做的,现在有 1 台开发机器和 2 台实时服务器。
所有服务器运行相同版本的软件。
我们使用 bitbucket 来存储我们的源代码,并使用 Jenkins 部署到开发和实时服务器。
我们在类中使用命名空间,而我不使用 Composer 。
在全面测试我们的网站 1 在部署到旧的开发服务器时是否可以继续工作后,我继续为新的开发服务器设置所有内容。
注意:旧的网络服务器使用 PHP 7.2 和 apache 2.4.35
将站点部署到新的开发服务器后,由于某种原因,我似乎总是收到此消息: fatal error :未捕获错误:
Class 'Utils\Notifications' not found in...
奇怪的是,即使它不能在服务器上工作,它在旧的开发服务器和本地开发机器上也能完美地工作。需要明确的是,本地开发机器使用相同版本的 apache 和 php 以及相同的模块和扩展。
该网站是一个 Wordpress 网站。
问题出在我创建的插件中,该插件会自动加载设置文件夹中的所有类。
我尝试在本地调试代码,即使它在那里工作,也找不到任何奇怪的东西。一切正常,没有问题。
我唯一觉得奇怪的是在放置了
die();
之后命令在插件的开始自动加载它不会死的类。它仍然因相同的错误而崩溃。
我知道这表明代码以错误的顺序运行。
奇怪的是,它仍然可以在本地以及当前的实时网站和开发服务器上运行。
我的问题可能是这样的。
我已经尝试过的事情
add_action('plugins_loaded', [function name], 10)
更改 wordpress 插件的加载顺序(以及不断崩溃的插件上的 11)代码
下面是我使用的自动加载功能。
spl_autoload_register(function($className) {
$className = str_replace("\\", DIRECTORY_SEPARATOR, $className);
if(file_exists(plugin_dir_path( __FILE__ ) . '/classes/' . $className . '.php')){
include_once plugin_dir_path( __FILE__ ) . '/classes/' . $className . '.php';
}
});
这是应该自动加载的类namespace Utils;
...
...
class NotificationCore {
...
...
class Notifications extends NotificationCore {
..
这是给出错误的代码:<?php
use Utils\Notifications;
...
...
...
if (Notifications::isThereOutage()) {
notificationScript();
}
我试过不使用 use
部分,只需使用 Utils\Notifications
但没有任何运气。还尝试使用前反斜杠
\Utils\Notifications
但这根本没有改变。我在这里完全不知所措。
最佳答案
好吧,在绝望地尝试让事情再次工作之后。
或者至少要找出是服务器还是 Wordpress,我将自动加载的插件放入 mu-plugin 目录中。
尽管这从来不是我们想要使用的方式,但经过一些重新考虑后,我和一位同事一致认为这甚至可能是更好的选择。
未找到的插件对网站非常重要,因为如果插件不活动,它会中断。所以我们决定将它用作 mu-plugin。
但这并不能解决问题。
出于某种原因,插件加载的顺序在服务器之间完全不同。
这需要更多的研究。
我不打算将这个问题标记为问题的答案。
相反,我将编辑问题,也许人们可以回答 Wordpress 如何决定加载哪些插件以及何时加载。
关于php - 在生产中获取 "Class not found in"但不在本地或开发服务器上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65021493/