PHPで外部サーバのファイルまたはディレクトリの存在有無をチェックする方法

DSC08896

2014年02月16日(日)

このTIpsも結構やくに立つと思うので覚えておこう。

画像ファイル等を参照させる場合にファイルの存在有無を確認して判断を分けたい場合は必ず使うことになるでしょう。だって対象の参照ファイルがない場合はエラーになってしまうからね。

 

さぁ、はじめよう。課外授業の時間だ。(仮面ティーチャー風)

 

外部サーバ(AWSのS3等)のファイル存在確認方法

通常ファイルまたはディレクトリの存在有無を確認する場合はfile_exists()関数を使用すると思いますが、外部サーバのファイルを確認する場合には少し苦労が必要なようです。

AWSのS3等を画像サーバにしている場合等はまさにこれに当てはまると思います。

方法は色々あったのですが、この方法がシンプルかなーと思います。

 

function file_check( $path ){
 $response = get_headers( $path );
 if( strpos( $response[0],'OK' ) ){
     return true;
 }else{
     return false;
 }
}

 

使い方は、

 

$path = '外部画像URL';
if ( $this->file_check( $path ) ) {
 // ファイルがある場合
}
else {
 // ファイルがない場合
}

 

これでチェックできます。
簡単にできるので用意しておいても良さそうです。

 

例外もある??

しかし、実はSSL対応のものに対しては例外もあるようです。(ちょっとこの辺はしらべてないですが・・)
僕の環境下ではFacebookの画像に対しては制御しきれませんでした。

そこでこの方法はどうでしょうか?例外が起きたときに試してみてください。

 

function file_check( $path ){
 $handle = fopen( $path, "r" );
 if ( $handle === false ) {
 return false;
 }
 else {
 return true;
 }
}

 

使い方は上記の使い方と一緒です。関数の内部のプログラムを入れ替えました。僕の環境ではこれで行けましたので最悪はこれを試してみるのもありかもです。

ただ、結構処理が重かったりするので時と場合によって使い分けていった方が良いと思います、僕的には処理が遅すぎるのでお勧めはしないです。逆になにか違う良い方法があればご教授頂きたいですね。

 

スポンサードリンク

運営サービスPR

スポンサードリンク

運営サービスPR