PHP Ver5.6 指定のURLが存在するか否かを判別するために下記のコードを書きましたが
ページが存在しなくてもエラーページが表示されるために全て存在する判別になってしまいます。
下記2つのURLをページ有とページ無(画像がありませんの画像が表示される)に判別する方法は無いでしょうか。
判別したいページ
画像あり https://item-shopping.c.yimg.jp/i/l/partscojp_nh …
画像なし https://item-shopping.c.yimg.jp/i/l/partscojp_nh …
以下 PHPコード
<?php
/**
* URLのステータスを返す
*
* <code>
* $ret = getUrlStatus($url);
*
* $ret->url; // string URL<br>
* $ret->reachedUrl; // string 最後に到達したURL<br>
* $ret->isValid; // bool 有効なURLか<br>
* $ret->redirectedUrls; // array リダイレクトがあった際のURL<br>
* $ret->redirectedCode; // array リダイレクト時のHTTPステータスコード<br>
* $ret->code; // int 最終的なHTTPステータスコード<br>
* $ret->is200; // bool HTTPステータスコードが200かどうか<br>
* $ret->is403; // bool HTTPステータスコードが403かどうか<br>
* $ret->is404; // bool HTTPステータスコードが404かどうか<br>
* $ret->is500; // bool HTTPステータスコードが500かどうか<br>
* </code>
*
* @param string $url
* @param array $streamContextOptions stream_context_set_defaultを呼びます(GETリクエスト以外とか指定したい場合など)
* @return stdClass
* @see http://jp2.php.net/manual/ja/function.get-header …
*/
function getUrlStatus($url, array $streamContextOptions = null)
{
$ret = new stdClass();
$ret->url = $url;
$ret->reachedUrl = '';
$ret->isValid = false;
$ret->redirectedUrls = [];
$ret->redirectedCode = [];
$ret->code = 0;
$ret->is200 = false;
$ret->is403 = false;
$ret->is404 = false;
$ret->is500 = false;
if ($streamContextOptions !== null) {
stream_context_set_default($streamContextOptions);
}
$headers = @get_headers($url);
if ($headers === false) {
return $ret;
}
// redirectedCode と redirectedUrlsは対になるようにしたいので
// 一旦redirectedCodeを格納するものを用意する
$_redirectedCode = [];
foreach($headers as $header) {
// リダイレクトされたURL
if (preg_match('/\ALocation:\s(http.+)\z/', $header, $m)) {
$ret->redirectedUrls[] = $m[1];
continue;
}
// HTTPステータスコード
if (preg_match('/\AHTTP.+\s(\d\d\d)\s/', $header, $m)) {
$code = (int)$m[1];
$_redirectedCode[] = $code;
$ret->code = $code;
$ret->isValid = true;
}
}
$redirectedCnt = count($ret->redirectedUrls);
if ($redirectedCnt > 0) {
$ret->reachedUrl = $ret->redirectedUrls[$redirectedCnt - 1];
} else {
$ret->reachedUrl = $url;
}
// redirectedCodeとredirectedUrlsの共通項を取得(redirectedCodeとredirectedUrlsは対になるように)
$ret->redirectedCode = array_intersect_key($_redirectedCode, $ret->redirectedUrls);
$ret->is200 = $ret->code === 200;
$ret->is403 = $ret->code === 403;
$ret->is404 = $ret->code === 404;
$ret->is500 = $ret->code === 500;
return $ret;
}
$ret = getUrlStatus('https://item-shopping.c.yimg.jp/i/l/partscojp_nh …
var_dump($ret);
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
switch文で2つ以上の変数の値...
-
excel access連携 このテーブル...
-
ps3で久しぶりにCDの音楽情報取...
-
バッチファイルでpingの結果を...
-
積立投資してます。現在平均取...
-
findstrのerrorlevel
-
Google scholarがひらけなくな...
-
ミュージックのアートワークを...
-
(Win32)ファイルパスから物理ド...
-
開始と終了を指定して、その間...
-
syntax error, unexpected 'ech...
-
ループ forに関して for($i = ...
-
VBAでPDFファイルの文書のプロ...
-
アクセスの度にIPアドレスを変...
-
PHP の cURL で、htmlを画像へ...
-
vb作成したらでbeep音が鳴りま...
-
VBA内でのGetPixelを使用した時...
-
ThreadのHandleの取得方法を教...
-
APIから取得した情報の文字化け...
-
WordでExcelデータを差込...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
<A href ~で複数の値を渡したい
-
テーブルに送信ボタンをつける
-
if文の複数条件。
-
「次の10件を表示する」のよ...
-
microtime関数は、結構イイカゲ...
-
PHPでwait処理ってできます?
-
vbYesNoの使い方
-
逆順表示したい?
-
$_SERVER["QUERY_STRING"]の仕...
-
POSTされたかどうか確かめる方...
-
日付を基にした乱数生成
-
五十音表示したいのですが、SQL...
-
ヒアドキュメントでstaticメン...
-
Luaにて、and or の組み合わせ...
-
<python>戻り値
-
関数の実行ができません
-
PHPで変数についての質問です
-
PHP ハイパーリンク
-
重い処理の最中の経過を出力したい
-
foreachで無限ループ?
おすすめ情報