【发布时间】:2015-06-19 01:07:57
【问题描述】:
我想管理对一个 API 的多次调用。我有一个数据数组,并且在调用 API 时使用数组的每个元素并回显响应。该架构遵循以下方式:
<?php
ini_set('max_execution_time', 300);//Did as loop takes >30s
require_once 'other/VirusTotalApiV2.php';
$obj= new VirusTotalAPIV2("abc");//Forming object of API
$handle=fopen("foo.txt","r"); // Obtaining the elements
while($read=fgets($handle))//Each line stores an element
{
$counter=0;
$report=$obj->getFileReport($read);//Calling API function
//var_dump($report);
echo "<table>
<tr>
<td>Antivirus</td>
<td>Result</td>
<td>Update</td>
</tr>";
foreach($report->scans as $key=>$value){
echo "<tr>";
echo "<td>".$key."</td>";
echo "<td>".result($value->result)."</td>";
echo "<td>".$value->update."</td>";
echo "</tr>";
$counter++;
}
}
echo $counter;
fclose($handle);
function result($input){
if($input==null)
{
return "No Issue";
}
}
我能否像目前一样提高此调用的效率,最终输出在 10 秒到 15 秒后(立即)收到,直到那个时间页面继续加载。 请提出一些更好的出路。
【问题讨论】:
-
到底是什么问题?这怎么不像预期的那样工作?从代码的外观来看,它似乎并没有特别低效。
-
@David 我已经粘贴了原始代码。当我执行此代码时,它会在 10 多秒内返回结果。直到那个时候,页面一直在加载。我想摆脱这个,因为我想在超过 100 个元素时大规模地这样做。
-
这听起来像是应该在后台进程中发生的事情,而不是在加载页面时。长时间运行的进程不应阻塞 UI。
-
@David 即使我使用 ajax 调用,它也会在后台发生,但仍然需要 10-15 秒才能返回数据。我关心的是提高调用 API 的效率以获得更快的结果。
-
如果下面的
curl_multi建议不起作用,您可能需要使用线程:php.net/manual/en/intro.pthreads.php
标签: php