sitemap.xmlファイルからページURLのhttp応答コードを取得する必要があります。cronプロセスで応答コードを取得すると、403が返されます(アクセス禁止として知られています:ブラウザから渡されたURLにアクセスできますが)。
しかし、ローカルホストから同じコードを実行すると、正しいhttp応答コード(つまり200)が返されます。
ローカルホストとサーバーから異なるhttp応答コードを返すことの違いはなぜですか?問題を解決する方法は?
http応答コードを抽出するためのコードは以下のとおりです。
function check_response_code() {
$pageurl='http://www.certona.com/online-merchandising/';
$trimurl = '';
$start = '';
$end = '';
$total = '';
$start = microtime(true);
$response_code = '';
if (!stristr($pageurl, "http://"))
{
if (!stristr($pageurl, "https://"))
{
$trimurl = "http://" . $pageurl;
} else
{
$trimurl = $pageurl;
}
} else
{
$trimurl = $pageurl;
}
$curl = curl_init();
//don't fetch the actual page, you only want headers
curl_setopt($curl, CURLOPT_URL, $trimurl);
curl_setopt($curl, CURLOPT_NOBODY, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_FILETIME, true);
$result = curl_exec($curl);
$timestamp = curl_getinfo($curl, CURLINFO_FILETIME);
$response_code = curl_getinfo($curl, CURLINFO_HTTP_CODE);
$mime_type = curl_getinfo($curl, CURLINFO_CONTENT_TYPE);
$end = microtime(true);
$total = round($end - $start, 5);
if ($timestamp != -1)
{ //otherwise unknown
$arr=array(date("Y-m-d H:i:s", $timestamp), $response_code, $total, $mime_type); //etc
} else
{
$arr=array("", $response_code, $total, $mime_type);
}
echo "<pre>";
print_r($arr);
echo "</pre>";
}
ありがとうございました..