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函数中查找的时间?
这有点 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);
});
Run Code Online (Sandbox Code Playgroud)
确保上面的代码在应用程序脚本开始时执行,并且任何parse_ini_file调用都应使用您的文件而不是硬编码的文件。
如果您的应用程序没有单个入口点可以放置上面的代码,您可以将其放入单独的脚本中,并在通过文件auto_prepend_file中的设置运行任何脚本之前加载 PHP settings.ini,还要确保将其runkit.internal_override设置On为parse_ini_file不是用户定义的函数。
| 归档时间: |
|
| 查看次数: |
194 次 |
| 最近记录: |