PHP cURL HTTP代码返回0

我不明白当我echo $ httpCode我总是得到0,我期待404当我把$ html_brand变成一个破损的url。 有什么我想念或不知道的? 谢谢。

//check if url exist $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $html_brand); curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); $response = curl_exec($ch); $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); if ($httpCode == 404) { echo "The Web Page Cannot Be Found"; return; } curl_close($ch); 

如果你连接到服务器,那么你可以从它得到一个返回码,否则它会失败,你会得到一个0.所以,如果你尝试连接到“www.google.com/lksdfk”你会得到一个返回码400,如果你直接去google.com,你会得到302(如果你转到下一个页面,那么你会得到200 …呃,我这样做,因为它转发到google.com.br,所以你可能不会那么做),如果你去“googlecom”你会得到一个0(主机没有find),所以最后一个,没有人发回代码。

使用下面的代码进行testing。

 <?php $html_brand = "www.google.com"; $ch = curl_init(); $options = array( CURLOPT_URL => $html_brand, CURLOPT_RETURNTRANSFER => true, CURLOPT_HEADER => true, CURLOPT_FOLLOWLOCATION => true, CURLOPT_ENCODING => "", CURLOPT_AUTOREFERER => true, CURLOPT_CONNECTTIMEOUT => 120, CURLOPT_TIMEOUT => 120, CURLOPT_MAXREDIRS => 10, ); curl_setopt_array( $ch, $options ); $response = curl_exec($ch); $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); if ( $httpCode != 200 ){ echo "Return code is {$httpCode} \n" .curl_error($ch); } else { echo "<pre>".htmlspecialchars($response)."</pre>"; } curl_close($ch); 

在curl_exec后试试看看有什么问题:

 print curl_error($ch); 

如果打印的内容类似“格式不正确”,请检查您的url格式。

你传递给$ html_brand的确切内容是什么?

如果它有一个无效的URL语法,你很可能会得到HTTP代码0。

就像在这里和下面所说的,一个失败的请求( 即服务器没有find )返回false,没有HTTP状态码,因为从来没有收到回复。

调用curl_error()

检查curl_getinfo之后的curl_error以找出隐藏的错误。

 if(curl_errno($ch)){ echo 'Curl error: ' . curl_error($ch); } 

我有同样的问题,在我的情况下,这是因为在php.ini中禁用curl_exec函数。 检查日志:

 PHP Warning: curl_exec() has been disabled for security reasons in /var/www/***/html/test.php on line 18 

解决方法是从服务器configuration文件的php.ini中的禁用函数中删除curl_exec。