サポート » 使い方全般 » 画像ファイルを入れ替えたら、表示されなくなった・・・・

  • 解決済 pyonko

    (@pyonko)


    よろしくお願いします。
    「ヘッダーの背景画像をランダムに変更する」ということをやっています。方法は、http://www.alistapart.com/articles/randomizer/
    により、img要素のsrc属性で、テーマディレクトリーのimages/random/においたrotate.phpを設定しています。、で、今まで動いていたのに、画像を一式編集して入れ替えた途端、表示されなくなりました。

    当方、本番サイトの他にテストサイトを別のレンサバで持っていますが、テストサイトは2つともOKなのに、最後に実施した本番サイトで不具合が起きてしまいました。とりあえず、固定の画像だけでしのいでいますが、どうしても納得がいきません。

    ソースは、本番もテストサイトも同じで、
    src=”テーマdir/images/random/rotate.php”となっています。(いま思うとrotate.phpが生で出ているのはセキュリティ面で心配?)

    dirのパーミッションや、phpのパーミッションも変化させてみましたが、一向に復旧しません。

    現象としては、画像を編集し、同じファイル名のまま置き換えただけで、表示されなくなったということです。しかも、テストサーバではOKだったということです。

    想定される原因、またはトラブルシューティング方法など、アドバイス頂ければ誠に有難いです。

    よろしくお願いいたします。

7件の返信を表示中 - 16 - 22件目 (全22件中)
  • トピック投稿者 pyonko

    (@pyonko)

    ありがとうございます。
    当方の本番サイトはこれまでimages, random の各ディレクトリ …… 0755
    ですが、公式ドキュメントに合わせ(テストサイトも705)、またファイルそのものも705
    として試しましたが変化はありません。が、opendir関数が機能するためにはディレクトリ、ファイルのパーミッションをどのように設定したらよいか、本番サイトの業者に確認したうえで、また確かめてみたいと思います。

    ちなみに、前々回にご指摘いただいたように、rotate.php?img=test.jpgで表示されたのは、rotate.phpを強制的に動作させた、ということになるのでしょうか?phpファイルは、直接urlをたたく際はパーミッションには依存なく動作するものなのでしょうか?

    トピック投稿者 pyonko

    (@pyonko)

    レンタルサーバ側に問い合わせたところ、
    ・パーミッションをフルアクセス「777」にして試しても変化がなければパーミッションの問題ではない可能性があるとの話でした。実際に777に変更しても状況に変化はありませんでした。
    ・また、opendir関数が機能しているかどうか下記のスクリプトを示してもらったのでこれを置いてアクセスしてみたところ、randomディレクトリ内の全てのファイル名(画像及びrotate.php)が列挙されたので、opendir()自体は機能するような感じです。

    <?php
    $dir = "/home/sites/サイト・ドメイン/web/wordpress/wp-content/themes/my_theme/images/random/";
    if (is_dir($dir)) {
         if ($dh = opendir($dir)) {
             while (($file = readdir($dh)) !== false) {
                 echo "filename: $file : filetype: " . filetype($dir . $file) . "<br />\n";
             }
             closedir($dh);
         }
    }
    ?>

    やはり何らかの原因でheader.phpから呼び出すとrotate.phpが動作しない何か、があるのでしょうか?

    トピック投稿者 pyonko

    (@pyonko)

    レンタルサーバ屋さんから意味ある情報がもたらされました。
    エラーログ上では、以下のような警告が発生しておりました。

    PHP Notice: Undefined index: extension in /home/sites/サイト・ドメイン/web/wordpress/wp-content/themes/my_theme/images/random/rotate.php on line 175,

    コメント行などがあり、正確にはどの位置か不確かですが、

    if (isset($_GET['img'])) {
    	$imageInfo = pathinfo($_GET['img']);
    	if (
    	    isset( $extList[ strtolower( $imageInfo['extension'] ) ] ) &&
            file_exists( $folder.$imageInfo['basename'] )
        ) {
    		$img = $folder.$imageInfo['basename'];
    	}
    } else {
    	$fileList = array();
    	$handle = opendir($folder);
    	while ( false !== ( $file = readdir($handle) ) ) {
    		$file_info = pathinfo($file);
    		if (
    		    isset( $extList[ strtolower( $file_info['extension'] ) ] )
    		) {
    			$fileList[] = $file;
    		}
    	}
    	closedir($handle);
    
    	if (count($fileList) > 0) {
    		$imageNumber = time() % count($fileList);
    		$img = $folder.$fileList[$imageNumber];
    	}
    }

    の中で、

    isset( $extList[ strtolower( $file_info['extension'] ) ] )

    を指しているようです。ここから何か分かりそうなことはないでしょうか?画像ファイルの「拡張子」は、画像を変更する前も後も「.jpg」です。(画像ファイル名すら変えていないので。)

    エラーログから推測するに、173行目の

    $file_info = pathinfo($file);

    でファイル情報を読み取り、175行目の

    isset( $extList[ strtolower( $file_info['extension'] ) ] )

    にてファイルの拡張子を判定する流れがうまくいってないようですね。配列 $file_info に拡張子の値が格納されてないので Undefined index: extension のエラーを出しているようです。

    エラーを回避するため、試しに

    isset( $extList[ strtolower( $file_info['extension'] ) ] )

    をコメントアウトして1行上に

    preg_match( "/jpg$/", $file )

    と挿入するとどのような挙動になるでしょうか?

    トピック投稿者 pyonko

    (@pyonko)

    ありがとうございます。
    お蔭様で正常に動作するようになりました。原因解明と原状復旧へのご尽力ありがとうございました!

    今後、ipg以外のファイルが混在するようになった場合にも対応していけるように、
    preg_match( “/jpg$/”, $file )
    の正規表現部分にgif,png,等を追加していけばよさそうな感じですが、
    isset( $extList[ strtolower( $file_info[‘extension’] ) ] )
    と等価的な記述方法にしておくことは可能でしょうか?

    一例ですが

    preg_match( "/jpg$/", $file )

    の代わりに

    eregi( '(' . implode( '|', array_keys( $extList ) ) . ')$', $file )

    という記述はどうでしょう?(当方の環境で検証しました) 143~147行で定義される配列のキーを流用しているので正規表現を追記しなくてもよいかと思います。

    トピック投稿者 pyonko

    (@pyonko)

    ありがとうございました。
    お蔭様で、今後も心配なく運用できる見通しが立ちました。
    また、いろいろ勉強になりました。
    この度は、誠にありがとうございました。

7件の返信を表示中 - 16 - 22件目 (全22件中)
  • トピック「画像ファイルを入れ替えたら、表示されなくなった・・・・」には新たに返信することはできません。