【发布时间】:2011-05-27 21:19:05
【问题描述】:
我有一个域可用性检查,它连接到一个 API 并从 $tmp 输出“可用:和不可用:”。下面的代码只会检查可用性一次。
我想多次检查域的可用性(可能在循环中?),不必每次都重新启动 cURL 连接(因为它浪费时间 - 每次查询需要 300 毫秒到 1 秒) 。
我只是不知道如何连接到 cURL 并运行循环(通过 API 进行检查)。非常感谢帮助调整代码!最大限度地减少输出“可用/不可用”和循环检查所需的时间是关键。
谢谢。
当前代码
<?php
function GetCurlPage ($pageSpec)
{
$ch = curl_init($pageSpec);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
$tmp = curl_exec ($ch);
curl_close ($ch);
$tmp = preg_replace('/(?s)<meta http-equiv="Expires"[^>]*>/i', '', $tmp);
$tmp = explode('<br>', $tmp);
echo $tmp[0];
echo "<br>";
echo $tmp[1];
echo "<br>";
return $tmp;
}
$returnUrl = "http://www.mysite.com.au/check.php";
$url = "https://www.apisite.com.au/availability/check.php?domain=testdomain&suffixes=.com.au";
$output = GetCurlPage("$url");
?>
@Marc B
function getCurlPage($pageSpec) {
if (is_null($ch)) {
$ch = curl_init($pageSpec);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
} else {
curl_setopt($ch, CURLOPT_URL, $pageSpec);
}
while ($i < 5) {
$tmp = curl_exec ($ch);
//curl_close ($ch);
$tmp = preg_replace('/(?s)<meta http-equiv="Expires"[^>]*>/i', '', $tmp);
$tmp = explode('<br>', $tmp);
echo $tmp[0];
echo "<br>";
echo $tmp[1];
echo "<br>";
echo udate('H:i:s:u');
echo "<br><br>";
$i++;
}
return $tmp;
}
【问题讨论】:
-
如果你暗示持久的 http 连接,你将不得不坚持你已经拥有的。
cURL不是为这种方式设计的。 -
@goreSplatter - 是否可以循环 $tmp = curl_exec ($ch);使 $tmp 成为一个数组,即: $tmp(i) 并在每个循环中增加 i ?在每个循环上,输出..这会执行可用性检查和输出,还是不可能跳过对每个可用性检查执行 curl?
-
有没有其他方法可以使用http-post来实现我想要的?
-
我认为可以将
GetCurlPage包装在一个循环中。我仍然看不出在循环中快速执行一个相同的 HTTP 请求有什么意义……
标签: php api curl performance