我有一个主要由Ajax驱动的站点,其内容通过向“操作员”PHP脚本发出请求来填充。
虽然这些请求通常来自Javascript,但有时候从另一个PHP脚本中查询我的运算符会很有用。
我一直使用的方法是通过file_get_contents()
传递带查询字符串的URL - 然后用json_decode()
解析返回的JSON。
出于多种原因,我想避免这种实现,但是......我在错误日志中看到,URL请求更容易因为任何原因而失败 - 而且我已经读过它不是很高效。
我首次尝试在输出缓冲区内query_operator($query_string)
- require()
创建通用operator.php
- 类型函数,使用ob_get_contents()
捕获。我还使用从$query_string
解析的参数临时重置$ _REQUEST数组。
这种方法有太多缺点 - 变量范围问题和MySQL连接,特别是。
我的第二次尝试涉及使用反引号运算符(相当于shell_exec()
),并将$argv
参数映射到$_REQUEST
数组。
这种方法实际上效果很好,但在我使用的主机上,PHP(cli)版本设置为4.4.8 - 我需要5.2.x.假设我无法切换(cli)版本,那么使用查询字符串将请求沙箱化到另一个PHP脚本的下一个最佳方法是什么?任何建议都非常感谢。
这是我的第二次尝试:
function query_operator($query) {
$query = '--'.str_ireplace('&', ' --', $query);
$contents = `php operator.php $query`;
if ($json = json_decode($contents, true)) {
return $json;
} else {
return $contents;
}
}
答案 0 :(得分:1)
从长远来看,最好的办法就是考虑你的代码。
无论运行operator.php的逻辑是什么,都应该存在于某个库中,然后可以由operator.php和任何其他需要它的脚本使用。
当你这样做时,你将避免额外PHP进程的所有开销,两个进程之间的通信,以及可能所有的json编码/解码。
如果因素分析现在需要做太多工作,那么您描述的任何一种策略都应该作为一种解决方案。可能值得研究为什么你的make-a-loopback-http-request方法(你描述的第一件事)导致了错误。它确实应该运作良好,即使它效率低下。