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で質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) test([)コマンドによる条件判定 2 2022/08/10 12:28
- C言語・C++・C# Cのオブジェクトファイルの逆アセンブル 5 2023/05/13 01:51
- その他(プログラミング・Web制作) x86_32ビットアセンブラ 2 2023/06/28 17:50
- PHP PHPのエラーの解消法について教えて下さい。 1 2023/02/06 10:48
- その他(プログラミング・Web制作) x86_32のGASの擬似命令 3 2023/06/07 19:55
- C言語・C++・C# アセンブラ指令 3 2023/06/17 14:47
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- PHP PHP MySql ページング 2 2022/09/20 06:38
- HTML・CSS 下にスクロールしても、追従するボタンのコードを書いたのですが、ボタンの中の画像が半分しか表示されない 1 2022/04/16 21:31
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PHP フラグ
-
PHPでwait処理ってできます?
-
parse_ini_fileでダブルクォー...
-
「次の10件を表示する」のよ...
-
null代入とunset()の違いについて
-
ヒアドキュメントでstaticメン...
-
逆順表示したい?
-
Google chart API 、PHP、MySQL...
-
Dosブロンプトでtabを出力したい
-
switch()文で値の大小比較
-
wordの差し込み印刷で文字...
-
DTOとEntityの差は何ですか。
-
「取得先」という表現について
-
VBA コレクションに2次元配列...
-
syntax error, unexpected 'ech...
-
bashの関数の引数にスペースが...
-
【C#】DataGridViewの最大列数...
-
PHPのセッション有効期限について
-
shシェルスクリプト 空白行の...
-
Excel VBA:特定の文字列以降(...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
日付を基にした乱数生成
-
<A href ~で複数の値を渡したい
-
テーブルに送信ボタンをつける
-
「次の10件を表示する」のよ...
-
if文の複数条件。
-
POSTされたかどうか確かめる方...
-
whileループの中でフォーム入力...
-
PHPにて自動計算した値をデータ...
-
PHPでのNULLの正規表現
-
if (isset($_a)&&$_a)この意味は
-
なぜエラーが出るのか分からな...
-
PHPのif文「POSTしていな...
-
$_SERVER["QUERY_STRING"]の仕...
-
Google chart API 、PHP、MySQL...
-
ヒアドキュメントでstaticメン...
-
日付・時刻を比較する方法について
-
逆順表示したい?
-
CakePHP リッチテキストエディ...
-
continueやbreakの後の数字につ...
-
microtime関数は、結構イイカゲ...
おすすめ情報