我使用Wampserver在Windows上运行PHP站点。整个网站都有一个硬编码的行,如:
$settings = parse_ini_file("/usr/local/apache2/myconfigs/settings.ini", true);
我知道这是不好的做法,但它不受我的控制。
当网站运行时,有任何可能的方法,只要代码在parse_ini_file函数中查找C:\wamp64\bin\apache\apache2.4.27\myconfigs\settings.ini
,我就可以欺骗网站指向/usr/local/apache2/myconfigs/settings.ini
吗?
答案 0 :(得分:3)
$settings = parse_ini_file(APACHE_INI_PATH, true);
// $settings = parse_ini_file("/usr/local/apache2/myconfigs/settings.ini", true);
答案 1 :(得分:1)
这有点像hackish,但我认为这是你正在寻找的,所以这里的诀窍是重新定义parse_ini_file
函数并使其忽略无效的传递路径("/usr/local/apache2/myconfigs/settings.ini"
)并使用你的改为正确的文件。
这看起来很简单,但有点棘手,因为你的新功能也应该以某种方式调用原始的parse_ini_file
函数,这就是为什么你需要先重命名然后覆盖它
您需要为此启用 PHP runkit扩展,请查看runkit_function_redefine和runkit_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);
});
确保上面的代码在应用程序脚本的开头执行,并且任何parse_ini_file
调用都应该使用您的文件而不是硬编码的文件。
如果您的应用程序没有单一的入口点,您可以将上面的代码放在上面,您可以将它放在一个单独的脚本中,并在通过{{1}中的auto_prepend_file
设置运行任何脚本之前加载PHP } {},同时确保settings.ini
设置为runkit.internal_override
,因为On
不是用户定义的函数。
答案 2 :(得分:1)
你好请检查一下
runkit_function_rename('parse_ini_file','o_parse_ini_file');
runkit_function_redefine('parse_ini_file', function($p1,$p2) use($someCondition) {
if($someCondition)
o_parse_ini_file("C:\wamp64\bin\apache\apache2.4.27\myconfigs\settings.ini", true);
else
o_parse_ini_file($p1,$p2);
});
它可以返回
调用未定义的函数runkit_function_rename()
修复此错误please read here
答案 3 :(得分:0)
如果您不想按照@cddoma的建议进行查找和替换,我建议您在Windows机器中创建目录/ usr / local / apache2 / myconfigs /,并复制文件设置。 ini从C:\ wamp64 \ bin \ apache \ apache2.4.27 \ myconfigs \ settings.ini到该目录。
打开Windows命令行并输入以下内容
mkdir C:\usr\local\apache2\myconfigs\
copy C:\wamp64\bin\apache\apache2.4.27\myconfigs\settings.ini C:\usr\local\apache2\myconfigs\
答案 4 :(得分:0)