我有一个PHP网页,该网页对数据库进行多个查询并在图表上显示结果。
逻辑是存在index.php,可以在其中进行查询。提交数据后,将调用6个不同的PHP页面。 PHP页面记录查询,运行适当的Python脚本并使用Javascript制作图表。这6个PHP页面中的每一个都显示在 divs 中的index.php中。所有python脚本都具有相同的输入,并针对相同的数据库进行查询。差异来自从数据库中提取的数据,以及随后的用于制作图表的Javascript。
调用其中一个PHP页面的示例:
$("#chartFOO").load("http://example/test/get_foo.php? bar=".concat(bar)+"&start=".concat(start)+"&end=".concat(end), function(responseTxt, statusTxt, xhr){
if(statusTxt == "error")
alert("Error: " + xhr.status + ": " + xhr.statusText);
});
调用Python脚本的示例:
if ($msisdn) {
$command = escapeshellcmd("/home/example/scripts/graph_foo.py $bar $start $end");
$output = shell_exec($command);
}
然后将输出用于PHP文件中以制作图表。所有的PHP文件都以 divs 的形式显示在index.php上。
问题是,它不会在多个线程上运行它们并锁定了系统,这使查询的响应时间很慢。是这样,一次只能运行一个shell命令吗?!
我尝试将所有Python脚本作为函数,将6个PHP文件作为字符串放在一个文件中。试图用一个命令调用所有命令,但是到目前为止,我在格式化PHP文件时遇到问题,我无法使用'{}'进行格式化,因为PHP文件已经包含了这些文件。有想法使用线程模块,运行功能。并使用一个连接到数据库,以节省6次连接的时间,因为每次都需要花费时间。
是否有合理的解决方案来使脚本运行线程化,而不必重新整理整个网页?如何将PHP,Javascript和Python混合使用?
要阅读的东西很多,要问的很多,但是感谢您的宝贵时间。
编辑:
我创建了一个新文件,其中基本上包含所有6个文件。但是现在调用Python脚本有些不同。从index.php仅现在调用此一个文件,就像我之前对6个文件所做的那样。
新方法示例:
$part->handles = [
popen("/home/example/scripts/graph_foo.py {$bar} {$start} {$end}", 'r'),
popen("/home/example/scripts/graph_foo2.py {$bar} {$start} {$end}", 'r')
];
解决内存问题的方法:
$output0 = '';
while (!feof($part->handles[0])) {
$output0 .= fread($part->handles[0], 32768);
}
$output1 = '';
while (!feof($part->handles[1])) {
$output1 .= fread($part->handles[1], 32768);
}
不知道最好的方法,但是可以。不太了解PHP。但这确实使请求时间减少了0.5分钟,这很有帮助。