gpt4 book ai didi

PHP 尝试自动加载随机类名

转载 作者:可可西里 更新时间:2023-11-01 13:30:49 24 4
gpt4 key购买 nike

我的一位客户报告说他们的 Magento 系统中的某些代码存在奇怪问题(Magento 是一个用 PHP 编写的电子商务平台)。我没有直接访问系统的权限来四处查看和调试,所以我想如果您曾经见过这样的事情,我会问问 Stack Overflow。

他们偶尔看到的错误是

Warning: include(O1ucm02owqn3iwwcx5osz2m2.php): failed to open stream: 

调用堆栈包括

#0 /Users/theirusername/Sites/project/lib/Varien/Autoload.php(93): mageCoreErrorHandler(2, 'include(O1ucm02...', '/Users/theiruse...', 93, Array)
#1 /Users/theirusername/Sites/project/lib/Varien/Autoload.php(93): Varien_Autoload::autoload()
#2 [internal function]: Varien_Autoload->autoload('o1ucm02owqn3iww...')
#3 [internal function]: spl_autoload_call('o1ucm02owqn3iww...')
#4 /Users/theirusername/Sites/project/app/code/local/Theirname/Commercebug/Model/Observer.php(191): defined('Mage_Core_Block...')

由此,我可以推断出 PHP 认为它需要实例化一个名为 O1ucm02owqn3iwwcx5osz2m2 的类。但是,我无法弄清楚 为什么 PHP 可能会这样做。触发错误的行(调用堆栈中的#4,Observer.php 中的第 191 行左右)应该是

if(defined("Mage_Core_Block_Template::XML_PATH_DEBUG_TEMPLATE_HINTS"))
{
$path = Mage_Core_Block_Template::XML_PATH_DEBUG_TEMPLATE_HINTS;
}

这些行似乎没有提到任何名为 O1ucm02owqn3iwwcx5osz2m2 的 PHP 类(我说“应该”是因为客户自己部署了代码,我正在与他们合作以获取副本以查看潜在问题)。

有人知道会发生什么吗?这是某个版本的已知 PHP 错误/问题和/或是否有人在 PHP 自动加载器/定义的/类常量中看到过这样的问题?

(我正在与我的客户一起确定他们正在运行的 PHP 版本,并获取他们已部署的文件的副本以确保它们与我假设的相匹配。)

最佳答案

defined() 函数是对命名常量的 define() 函数的补充。也就是说,用define声明的常量可以用 defined 很好地检查.

但是,该代码正在检查 class constant ,虽然可能,但不太典型。我怀疑检查正在触发自动加载( just as the use of class_exists can trigger autoloading 。)但是,通过使用 defined 传递给自动加载器的值被破坏了(可能传递了 hash of the z-val for the string 。)

我想知道以下更改是否能让事情正常进行:

// force PHP to load the class first, then let defined() check for the constant
if(class_exists("Mage_Core_Block_Template") && defined("Mage_Core_Block_Template::XML_PATH_DEBUG_TEMPLATE_HINTS"))
{
$path = Mage_Core_Block_Template::XML_PATH_DEBUG_TEMPLATE_HINTS;
}

正如 Alan 在他的评论中指出的那样,Zend Guard 也可能导致问题。

关于PHP 尝试自动加载随机类名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13402541/

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