[PHP]foreach()とis_array()はセットでやる

Read More

PHPです


■画像表示のプログラム
DBのカラムに画像データへのパスが格納してあるとする。
この画像を表示する時、
1.カラムにデータが無い場合
2.対象ファイルがフォルダに無い場合
の2点を考慮しプログラムを組む必要がある。


■画像表示のプログラム例
<?php
// IMG_DIR_PATHには内部的なフォルダパスの定数
// HTTP_IMG_URLは外部的なURIの定数
// my_h()はhtmlspecialchars()のエイリアスとして定義した関数

// ----------
// DBからデータを取得し$resRowsに格納する処理は省略。
// $resRows = array('file010'=>'hoge.jpg', 'file020'=>'hoge2.jpg', ...);
// ↑の様なデータが取得できるものとする
// ----------


// qここから実処理
if(is_array($resRows) {
  foreach($resRows as $val) {
    if($val and file_exists(IMG_DIR_PATH.'/'.$val)) {
?>
<div><img src="<?=HTTP_IMG_URL?>/<?=my_h($val)?>" /></div>
<?php
    }// end if
  }// end foreach
}// end if
// dここまで実処理
?>



ポイントは
foreach()を回す前にis_array()で、それが配列であることを確認している点。
if()でDBデータが空でないこととフォルダ上にそのファイルがあるかを確認している点。
これでfile010カラムの値が''(空文字)やnullでもヘーキ。
なおif()で確認する際はHTMLサニタイズはしない事


imgタグはdivタグで囲うことでブロック要素であることを明示する


--
ちなみにDBへバイナリデータを入れることはしない。
出す時にワンクッション入れなきゃならなくなるため

でも、実用を考えると少しだけそそられてるのも事実。
まあ機会があればってことでしばらくはいいや



次回はssl通信時の切替処理