【发布时间】:2016-07-24 05:16:09
【问题描述】:
我正在开发一个小脚本,但我对使用几个 curl 和 while 循环有点搞砸了。
我想在某个 URL 向我提供信息时停止处理 curl。注意:我有多个 curl 请求。
所以我的概念是,
我有几个 URL,我必须处理并从中获取信息。如果在特定 URL 上找到信息,它将给我一个字符串。如果没有找到任何信息,它会给我任何价值。所以我大约有近 10 个 URL 需要处理。在所有情况下,任何一个 URL 都会给我信息,所以剩余的 url 将不会产生任何价值。由于处理了很多 URL,因此延迟是一个问题。所以假设在下面的示例代码中,如果 url 以 value2.php 结尾给我一个结果,那么我立即想停止处理其他 URL。因为我已经得到了结果,并且没有必要运行其他 curl。然后最后我必须打印结果。
另外,我有一个 URL 没有产生任何结果的情况,如果有人告诉我如何处理它,那就太好了。
我的示例代码。
<?php
///functions here
do {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,"example[dot]com/value1.php?process=$param");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$combined = curl_exec ($ch);
curl_close ($ch);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,"example[dot]com/value2.php?process=$param");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$combined = curl_exec ($ch);
curl_close ($ch);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,"example[dot]com/value3.php?process=$param");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$combined = curl_exec ($ch);
curl_close ($ch);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,"example[dot]com/value4.php?process=$param");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$combined = curl_exec ($ch);
curl_close ($ch);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,"example[dot]com/value5.php?process=$param");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$combined = curl_exec ($ch);
curl_close ($ch);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,"example[dot]com/value6.php?process=$param");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$combined = curl_exec ($ch);
curl_close ($ch);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,"example[dot]com/value7.php?process=$param");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$combined = curl_exec ($ch);
curl_close ($ch);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,"example[dot]com/value8.php?process=$param");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$combined = curl_exec ($ch);
curl_close ($ch);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,"example[dot]com/value9.php?process=$param");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$combined = curl_exec ($ch);
curl_close ($ch);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,"example[dot]com/value10.php?process=$param");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$combined = curl_exec ($ch);
curl_close ($ch);
} while (strlen($combined) != 0);
echo $combied;
///functions here
?>
【问题讨论】:
-
你的网址是常量吗?你为什么不只调用一个调用 curl 并使用一系列地址,直到你的结果对你来说足够?
-
是的,所有 URL 都是不变的,但每个 URL 都是不同的。如果第三个 url 给了我结果,我怎么能停止处理 curl 。我必须处理一个while循环并对此感到震惊。
-
找到结果后是否有必要停止?换句话说,它们是否必须以特定的顺序执行,而改变顺序会搞砸,还是没关系?
-
@Mike 是的,如果找到结果,则有必要停止该过程。因为一旦我得到结果,就没有必要处理剩余的 URL,因为所有剩余的 URL 都不会给我任何结果。不,不需要任何特定的处理顺序。更改顺序完全没问题。
-
好的,所以没有必要,只是首选。我会在几分钟后发布一个不同的答案。
标签: php url curl while-loop do-while