为什么PHP';s旋度似乎为';超时';在某些URL上?

为什么PHP';s旋度似乎为';超时';在某些URL上?,php,curl,simpledom,Php,Curl,Simpledom,我使用PHP的cURL从各种URL获取一些标记信息。我的请求有时有效,但有时根本不起作用。我的代码不起作用有什么原因吗?(注意,我也在使用simple_html_dom): 对于我尝试的大约一半URL,描述和网页名称存储在我的数据库中,但对于另一半URL,它们没有存储,脚本只是暂停。也就是说,当用户向我的网站提交URL时,会在URL上载到我的网站时显示进度条。然后,进度条消失,URL显示在我的网页上,供用户在URL提交完成后查看。对于麻烦的URL,进度条会消失,但链接不会出现在页面上,并且我的数

我使用PHP的cURL从各种URL获取一些标记信息。我的请求有时有效,但有时根本不起作用。我的代码不起作用有什么原因吗?(注意,我也在使用simple_html_dom):


对于我尝试的大约一半URL,描述和网页名称存储在我的数据库中,但对于另一半URL,它们没有存储,脚本只是暂停。也就是说,当用户向我的网站提交URL时,会在URL上载到我的网站时显示进度条。然后,进度条消失,URL显示在我的网页上,供用户在URL提交完成后查看。对于麻烦的URL,进度条会消失,但链接不会出现在页面上,并且我的数据库中没有存储任何内容。我遗漏了什么?

在调用
curl\u close
之前,尝试使用
curl\u getinfo
。除了大量其他有用的信息外,它还将为您提供HTTP状态代码,让您知道您的请求发生了什么。这会给你你需要的答案。。。只需确保删除
CURLOPT\u FAILONERROR
设置(或将其设置为
false
)。

我的错误日志是“调用未定义的函数mb\u detect\u encoding()”。此函数要求启用mbstring扩展(simple_html_dom.php需要它)。MAMP在默认情况下确实安装了它,这就是为什么它可以在我的开发服务器上工作,但不能在我的生产服务器上工作。我已经请求在我的Linux生产服务器上启用mbstring,所以我会让每个人知道这是否是问题所在。我在网上看到过几篇帖子,都有人有同样的问题,所以我希望这能帮助很多人。

你的问题很久以前就提出了,但我的解决方案是这样的。 我也有同样的问题,curl在我的Windows机器上本地工作,而不是在Linux上。只是一些URL,不是全部。 我使用的CURLOPT_SSL_VERIFYPEER设置为false,然后我还添加了CURLOPT_SSL_VERIFYHOST。 至少在我的例子中,URL不工作是由于SSL证书没有为我试图访问的域定义好。
即使没有这个参数,我也不知道为什么它能在Windows上运行,但它对我起了作用。

你有权访问运行这个脚本的任何机器吗?尝试远程登录到这些“坏”URL端口80,看看是否也超时。如果是这样的话,那就不是卷曲——在某个地方有防火墙阻止了攻击。可能是服务器端或网络问题。有时互联网速度很慢……还有一点信息。有时,但并非总是,我可以在我的MAMP开发服务器上使用一些“坏URL”,但不能在我的Linux生产服务器上使用。所以,我不认为URL是问题所在。另外,延长curl的超时时间也没有任何效果。是否检查了curl返回的状态代码??使用
$info=curl\u getinfo($ch)
获取此信息,并将
$info
存储在某个日志文件中。让站点运行一段时间,然后检查日志文件以了解传输详细信息。这里有两件事:首先,您可以尝试删除超时或将其增加到更高的值。有时建立连接只需要时间。第二,你可以尝试使用
file\u get\u html($webpage)。是的,就是这样。我注意到很多人似乎也有同样的问题。这使我非常头痛。只需确保PHP上启用了
mbstring
扩展名。
$webpage = 'http://www.some_url.com';

$curl = curl_init(); 
curl_setopt($curl, CURLOPT_URL, $webpage);  
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);  
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($curl, CURLOPT_FAILONERROR, true);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curl, CURLOPT_AUTOREFERER, true);
curl_setopt($curl, CURLOPT_FRESH_CONNECT, true);

$str = curl_exec($curl);  
curl_close($curl);  

$html = '';

if( !empty($str) )
{
    require_once( 'simple_html_dom.php');

    $html= str_get_html($str);
    $element = $html->find('h1', 0);
    $webpage_name = strip_tags($element);

    $item = $html->find('meta[name=description]', 0);
    $description =  $item->content;
}

// save $description to database
// save $webpage_name to database