カテゴリー
SugiBlog ホームページ制作・システム開発|大阪

外部サーバーのファイル有無を調べる

PHPにはファイルの有無を調べるfile_existsという便利な関数がありますが、
外部サーバーのファイルを確認することはできません。

そこで、HTTPヘッダーを取得し、ステータスコードからファイルの有無を確認してみましょう。

まずはHTTPヘッダーを取得。

$response = get_headers([任意のURL]);

取得したヘッダーからステータスコードを抜き出す。
ステータスコードは配列で返ってきたヘッダーの先頭にあるので、$response[0]の中から数字3桁をpreg_matchを使って抜き出します。

preg_match("/.*(\d{3}).*/", $response[0], $matches);

HTTPステータスコードを数値に変換。

$response_code = intval($matches[1]);

ステータスコードが200であればファイルが存在する、ということになります。


関数を作ると次のような感じになります。

function myFileExists($str_path)
{
    // HTTPヘッダーを取得
    $response = get_headers($str_path);

    // HTTPステータスコードを抜き出す
    if(preg_match("/.*(\d{3}).*/", $response[0], $matches)) {

        // HTTPステータスコードを取得
        $response_code = intval($matches[1]);

        if($response_code == 200) {

            return true;

        } else {

            return false;

        }

    } else {

        return false;

    }
}

この記事がお役に立ちましたらシェアお願いします

33 views

正規表現の注意点

キャラクタークラス([])を使用する場合、[]内ではエスケープが無効化されます。
※言語の種類等によってエスケープが有効なものもあるようです。
その中で特殊な意味を持つ記号を通常のキャラクターとしてクラスに含めたいときは
記述する位置に注意する必要があります。
例えば「]」、「^」、「-」等です。

^ [の直後以外
] [の直後
リストの最後

参考URL: http://www.kt.rim.or.jp/~kbk/regex/regex.html

この記事がお役に立ちましたらシェアお願いします

689 views

正規表現 特定の文字列を含まない文字の繰り返し

正規表現で、特定の文字を含まない文字列の検索と、
特定の文字列を含まない文字列の検索

テキスト例

「abc」
「bca」

特定の文字を含まない文字の繰り返し

「[^abc]*?」

この場合、「abc」も「bca」も検索にひっかかりません。

これは“a”と“b”と“c”が、それぞれ単独の文字として処理されるからです。
文字ではなく、文字列を指定して検索したい場合、以下のようにします。

特定の文字列を含まない文字の繰り返し
続きを読む…»

この記事がお役に立ちましたらシェアお願いします

2,257 views

正規表現の最短一致

正規表現の文字列検索にて、最短一致を検索します。
デフォルトは最長一致ですが、量指定子("*"、"+"、"{}"等)の後に"?"を付けることで最短一致に変更できます。

Visual Basic

Dim regEx As Object
Dim Matches As Variant

'正規表現オブジェクト
Set regEx = CreateObject("VBScript.RegExp")

続きを読む…»

この記事がお役に立ちましたらシェアお願いします

11,519 views

VBでの正規表現

VBで正規表現を使った文字列検索を実装します。

Dim regEx As Object
Dim Matches As Variant

'正規表現オブジェクト
Set regEx = CreateObject("VBScript.RegExp")
'検索文字列全体について検索する
'regEx.Global = True
'最初の一致を検索する(既定値)
'regEx.Global = False

'検索するときに大文字と小文字を区別しない
'regEx.IgnoreCase = True
'検索するときに大文字と小文字を区別する(既定値)
'regEx.IgnoreCase = False

'検索するパターン
regEx.Pattern = "検索パターン"

続きを読む…»

この記事がお役に立ちましたらシェアお願いします

3,521 views