additional_image.php解説
/includes/modules/additional_image.phpの動きの流れについて、忘れないうちにメモ
暫定的に、画像のアップロード先をimages/products/test.jpgとする。
if ($products_image != '') { // prepare image name $products_image_extension = substr($products_image, strrpos($products_image, '.')); $products_image_base = ereg_replace($products_image_extension, '', $products_image);
$products_imageに格納されている画像ファイル名の、最後に現れるピリオドから最後までを、$products_image_extensionに代入。
これで画像の拡張子を取得する。
次に、$products_imageから拡張子を除いた残り(images/products/test)を、$produts_image_baseに代入。
if (strrpos($products_image, '/')) { $products_image_match = substr($products_image, strrpos($products_image, '/')+1); //echo 'TEST 1: I match ' . $products_image_match . ' - ' . $file . ' - base ' . $products_image_base . '<br>'; $products_image_match = ereg_replace($products_image_extension, '', $products_image_match) . '_'; $products_image_base = $products_image_match; }
$products_imageにスラッシュが含まれている場合のみ実行。
$products_image_matchに$products_imageのうち、最後に現れるスラッシュ+1からの文字列(test.jpg)を代入。
さらにここから拡張子を取り除き、アンダーバーをつけたしたもの(test_)を$products_image_baseと$products_image_matchに代入する。
$products_image_directory = ereg_replace($products_image, '', substr($products_image, strrpos($products_image, '/'))); if ($products_image_directory != '') { $products_image_directory = DIR_WS_IMAGES . ereg_replace($products_image_directory, '', $products_image) . "/"; } else { $products_image_directory = DIR_WS_IMAGES; }
画像をいれているフォルダ名を取得する。
$produts_imageの中、最後に現れるスラッシュ以降の文字列から$products_imageを削除する
(この段階では、$products_image_directoryにはimages/productsが格納されている?)
文字列が空ではない
→画像アップ先を、イメージディレクトリ+残った文字列の中と判断($products_image_directoryにimages/products/が格納される)
文字列が空である
→画像アップ先を、イメージディレクトリ直下と判断
// Check for additional matching images $file_extension = $products_image_extension; $products_image_match_array = array(); if ($dir = @dir($products_image_directory)) { while ($file = $dir->read()) { if (!is_dir($products_image_directory . $file)) { if (substr($file, strrpos($file, '.')) == $file_extension) { if(preg_match("/" . $products_image_base . "/i", $file) == '1') { if ($file != $products_image) { // echo 'I AM A MATCH ' . $file . '<br>'; if ($products_image_base . ereg_replace($products_image_base, '', $file) == $file) { $images_array[] = $file; } else { // echo 'I AM NOT A MATCH ' . $file . '<br>'; } } } } } } //$images_arrayの値が真のとき、$images_arrayの中身をソートする if (sizeof($images_array)) { sort($images_array); } //ディレクトリを閉じる $dir->close(); } }
これで一塊。追加画像のチェックはここで行う。
まず、
$file_extension = $products_image_extension;
$file_extensionにメイン画像の拡張子を入れる。
この後、ディレクトリを開き、存在するファイルの数だけwhile関数でループする。
if (!is_dir($products_image_directory . $file
選んだファイルがディレクトリでない場合のみ、次へすすむ。
if (substr($file, strrpos($file, '.')) == $file_extension)
選んだファイルの拡張子がメイン画像の拡張子と同じときのみ進む。
ということは、メイン画像がJPG、追加画像がGIFだった場合は除外される?
if(preg_match("/" . $products_image_base . "/i", $file) == '1')
選んだファイル名から$products_image_base(test_)がマッチするかどうかチェックし、ヒットした場合次へ進む。
このとき大文字・小文字を区別しない。
if ($file != $products_image)
ヒットしたもののうち、選んだファイル名が$products_imageと同じでない場合のみ、追加画像と判断する。
(→同じだった場合は、メイン画像と判断し、追加画像には表示しない)
if ($products_image_base . ereg_replace($products_image_base, '', $file) == $file) { $images_array[] = $file; } else { }
さらに、ファイル名がメイン画像+aのパターンのみ配列に格納する。
このとき、aa_メイン画像.jpgなどのパターンは除外される。
すべてのファイルを走査した後、配列をソートし、ディレクトリを閉じる。
あとはなんとなくわかるので説明は省く。