close
在程式裡要產生出別的系統上的報表是否存在的清單,原本這樣寫:
<?php
$url = 'https://abc.com/test.htm';
$query = get_headers($url);
if (isset($query[0])) {
$status_code = $query[0];
// HTTP status code 200, 301, 302, 500 都算是檔案存在,只有 404 視為檔案不存在
if ($status_code != "HTTP/1.1 404 Not Found") {
echo "<a href='".$url."</a><br />";
}
?>
但是程式上線後不知道被什麼資安產品還是什麼神秘原因給擋了,會跑很久,直到出現 HTTP status code 504 (Gateway Timeout)。
同事建議我改成這樣:
<?php
$url = 'https://abc.com/test.htm';
$agent = "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)";
$curl = curl_init();
curl_setopt ($curl, CURLOPT_URL, $url);
curl_setopt ($curl, CURLOPT_USERAGENT, $agent);
curl_setopt ($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt ($curl, CURLOPT_FOLLOWLOCATION, true);
curl_setopt ($curl, CURLOPT_VERBOSE, false);
curl_setopt ($curl, CURLOPT_TIMEOUT, 2);
curl_setopt ($curl, CURLOPT_CONNECTTIMEOUT, 2);
curl_setopt ($curl, CURLOPT_HEADER, true);
curl_setopt ($curl, CURLOPT_NOBODY, true);
curl_setopt ($curl, CURLOPT_MAXREDIRS, 2); // 避免遞迴
curl_setopt ($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt ($curl, CURLOPT_SSLVERSION, 6); // 使用 TLS 1.2,代碼對照表可查 PHP 官網的 curl_setopt
curl_setopt ($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
$page = curl_exec($curl);
$httpcode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
curl_close($curl);
// HTTP status code 200, 301, 302, 500 都算是檔案存在,只有 404 視為檔案不存在
if ($httpcode != 404) {
echo "<a href='".$url."</a><br />";
}
?>
這樣改就沒事了耶!
文章標籤
全站熱搜
留言列表