让PHP站点指向与代码中的路径不同的路径

Bla*_*ell 5 php linux xampp wamp wampserver

我在Windows上使用Wampserver运行PHP站点.整个站点都有一条硬编码线,例如:

$settings = parse_ini_file("/usr/local/apache2/myconfigs/settings.ini", true);
Run Code Online (Sandbox Code Playgroud)

我知道这是一个不好的做法,但它不受我的控制.

当网站运行时,有什么方法可以欺骗网站指向C:\wamp64\bin\apache\apache2.4.27\myconfigs\settings.ini代码/usr/local/apache2/myconfigs/settings.ini在parse_ini_file函数中查找的时间?

mrb*_*rbm 1

这有点 hackish,但我认为这就是您正在寻找的,因此这里的技巧是重新定义函数parse_ini_file并使其忽略无效的传递路径 ( "/usr/local/apache2/myconfigs/settings.ini") 并使用正确的文件。

这看起来很简单,但有点棘手,因为您的新函数还应该以parse_ini_file某种方式调用原始函数,这就是为什么您需要先重命名它然后覆盖

您需要为此启用PHP runkit 扩展,请查看runkit_function_redefinerunkit_function_rename以供参考。

未经测试但应该可以工作,代码应该围绕这些行:

runkit_function_rename('parse_ini_file','original_parse_ini_file');
runkit_function_redefine('parse_ini_file', function() {
    original_parse_ini_file("C:\wamp64\bin\apache\apache2.4.27\myconfigs\settings.ini", true);
});
Run Code Online (Sandbox Code Playgroud)

确保上面的代码在应用程序脚本开始时执行,并且任何parse_ini_file调用都应使用您的文件而不是硬编码的文件。

如果您的应用程序没有单个入口点可以放置上面的代码,您可以将其放入单独的脚本中,并在通过文件auto_prepend_file中的设置运行任何脚本之前加载 PHP settings.ini,还要确保将其runkit.internal_override设置Onparse_ini_file不是用户定义的函数。