我有一个非常费力的PHP脚本,该脚本对其他服务器进行了几次api调用。我需要运行此脚本以将服务器上的某些数据与远程服务器上的数据保持同步。
我希望每次特定类型的用户访问特定页面时都启动此脚本。
但是,我的问题是,如果有资格的用户访问此页面,则页面加载时间是可喜的,即使脚本处理的数据也不会以任何方式影响页面本身。
因此,我想知道的是,如何在相同条件下运行此脚本,但只能在服务器上运行它?
换句话说,如何运行此脚本并停止浏览器等待其输出?
编辑:有用的信息:使用XAMPP for Windows,PHP 5.5,Apache 2.4。
编辑2:使用curl似乎是最好的选择,但它并不想实际运行我的脚本。
这是电话:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://localhost/tool/follow/PriceTableUpdate.php');
curl_setopt($ch, CURLOPT_FRESH_CONNECT, true);
curl_setopt($ch, CURLOPT_TIMEOUT_MS, 1);
curl_exec($ch);
这是实际的PriceTableUpdate.php:
<?php
ini_set('max_execution_time', 3600);
$marketData=simplexml_load_file("http://www.eve-markets.net/api/xml?listid=20158key=JKgLjgYvlY6nP");
foreach ($marketData->marketList->type as $type) {
$ItemID = (int)$type['id'];
$ItemBuy = $type->buy->price;
$ItemSell = $type->sell->price;
$ItemMedian = $type->median->price;
mysqli_query($con,"UPDATE piprices SET `ItemBuyPrice` = $ItemBuy, `ItemSellPrice` = $ItemSell, `ItemMedianPrice` =$ItemMedian WHERE `piprices`.`ItemID` = $ItemID");
}
?>
编辑3:使用上述DOES可以工作,以防万一有人想再次问这个问题。但是,您必须记住,由于使用的是curl,因此php文件不再使用之前设置的变量,因此您将需要在php文件中再次定义数据库连接。
您可能会通过该onLoad
事件单独调用php脚本-也就是说,您等到页面加载完毕,然后“在后台”调用该其他脚本。后者可以通过以下几行代码来完成(我通过以下链接找到了这一点:http://www.paul-norman.co.uk/2009/06/asynchronous-curl-requests/由@Gavriel在评论中发布其他答案之一):
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://www.yoursite.com/background-script.php');
curl_setopt($ch, CURLOPT_FRESH_CONNECT, true);
curl_setopt($ch, CURLOPT_TIMEOUT_MS, 1);
curl_exec($ch);
curl_close($ch);
?>
在页面中的任何位置添加此代码将使脚本在执行时不会延迟页面加载-onLoad
在这种情况下,您甚至不需要使用事件。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句