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

  • 解決済 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だったということです。

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

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

15件の返信を表示中 - 1 - 15件目 (全22件中)
  • 本番サイトの他にテストサイトを別のレンサバで持っていますが、テストサイトは2つともOKなのに、最後に実施した本番サイトで不具合が起きてしまいました。

    テストサイトと本番サイトの環境に違いがあるからかもしれませんね。
    当該スクリプトを見たところGDライブラリを使っているようなので、本番サイト(のサーバ)でGDが有効になっているかphpinfoなどで調べてみてはいかがでしょうか。

    PHP: phpinfo – Manual

    トピック投稿者 pyonko

    (@pyonko)

    ありがとうございます。
    サーバ屋さんに早速問い合わせてみましたが、ONになっており、デフォルトで利用できますよ、ということでした。

    今回上記の「rotate.php」を初めて導入したのではなく、使っていた画像を編集し・入れ替えた直後から表示されなくなったのです。

    該当部分のソースも、正常なサーバから出力されるものと、不具合な方でまったく同様です。phpで処理されて表示されている画像ファイル名に代わっているのかと思いましたがそのまま「src=”テーマdir/images/random/rotate.php”」ですね…?

    原因を切り分けしていきましょう。

    1. テーマdir/images/random/random/ 内の既存画像をいったん削除して、違うファイル名の画像を数点アップすると、どのような動作になりますか?
    2. rotate.php 内の $folder = ‘.’; の行を ‘.’ ではなくサーバパス(通常 /home/USERNAME から始まる ramdom ディレクトリまでのパス)に書き換えるとどうなりますか?
    3. rotate.php は a. ランダムに画像を表示する(正常) b. 「IMAGE ERROR」と表示する(パス指定などの誤りで画像ファイルが読み込めない) c. 「Cannot initialize new GD image stream」と表示する(ライブラリが存在しないなど、GDの初期化ができない)の3とおりで処理を終えるようですが、a.~c.のどれになりますか?

    当該スクリプトを試す環境にないので想像の範囲での回答ですが、よろしければお聞かせください。

    トピック投稿者 pyonko

    (@pyonko)

    ご指導ありがとうございます。休みでちょっと返信遅れました。
    1項について
    別な名前の、別な画像を入れ替えましたが、状況に変化ありません
    2項について
    サーバー屋さんに確認のうえ、
    $folder = ‘/home/sites/www.example.co.jp/web/wordpress/wp-content/themes/child_of_21/images/random/’;
    に変更しましたが、変化ありません(3項エラーは表示されません。ヘッダー画像の位置にalt属性のテキストと、画像が存在しない場合にブラウザ側で表示する場像なしアイコンのようなものが表示されているだけです。)
    3項について
    phpのエラーが表示されません。通常はエラーが出ると何かメッセージが出るのですが。

    トピック投稿者 pyonko

    (@pyonko)

    rotate.phpを削除しても、状態は変化せず、エラーも表示されません。rotate.phpが動作していないようにも見えます。

    rotate.phpを削除しても、状態は変化せず、エラーも表示されません。rotate.phpが動作していないようにも見えます。

    ごくごくシンプルなPHPスクリプトを動かしてみても状況が変わらないようであれば、原因は別のところにありそうですね。たとえば

    <?php phpinfo(); ?>

    とだけ書いたファイルを info.php という名前で random ディレクトリに保存して http://www.example.com/path/to/random/info.php でアクセスしてみるとどうでしょう? 

    念のため確認ですが rotate.php はUTF-8Nで保存されていらっしゃいますか?(テスト環境ではOKとのことなので大丈夫かと思いますが)

    トピック投稿者 pyonko

    (@pyonko)

    ありがとうございます。
    まず、info.phpを作成しアアクセスした結果は、当方の場合、
    「PHPバージョン5.2.4」の内容を表示した表のページが表示されます。(ここは正常ですね?)

    次に、rotate.phpは、Shift-JISのCRLFでした。当方はterapdですが、これで
    ・UTF-8N CRLF挿入
    ・UTF-8N LF挿入

    の二通りに変えてアップロードしてみましたが、ともに変化はありません。
    (なお、テストサイトは、Shift-JISでも動作しています)

    当方でもGDライブラリがある環境で試してみました。動きました。

    改めてご質問を読み返してみたのですが

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

    と書かれている

    <img src="テーマdir/images/random/rotate.php">

    は、テーマディレクトリ名から始まるパスになっている、ということでしょうか。
    テンプレートファイルの方で当該箇所を次のように書き換えてみるとどうなるか、一度お試しいただけませんか?

    <img src="<?php echo get_stylesheet_directory_uri(); ?>/images/random/rotate.php">

    トピック投稿者 pyonko

    (@pyonko)

    ありがとうございます。
    ご指摘の方法に書き換えてみましたが、変化しませんでした。
    なお、元々は、
    src='<?php bloginfo('stylesheet_directory') ;?>/images/random/rotate.php'
    としていました。しかし今、これもよく見るとおかしいので、
    src="<?php bloginfo('stylesheet_directory') ;?>/images/random/rotate.php"
    としてもみましたが、同じく変化なしでした。
    teckingさんの環境では、ソースでrotate.phpは表示された画像ファイル名になりますか?

    画像を入れ替えて動作しなくなったので、また元の画像に戻した時も、動作の方は戻らなくなってしまった、ということもあります。弱ってしまいました。

    なかなか手強い相手ですね… 🙂

    私の場合、テンプレートファイルで

    <img src="<?php echo get_stylesheet_directory_uri(); ?>/images/random/rotate.php">

    と書いた箇所が

    <img src="http://www.example.com/wp-content/themes/theme_name/images/random/rotate.php">

    というようなかたちで出力されました。pyonkoさんの環境ではどうなりましたか?

    出力後の画像へのパスが .php で終わって不思議に思われるかもしれませんが、表示画像は rotate.php にて読み込み→出力されてるので実はこれでオッケイです。

    トピック投稿者 pyonko

    (@pyonko)

    おはようございます。
    当方も同様な形で、http~random/rotate.phpになります。今まで「rotate.php」は処理されて画像名に変わってるんだろうな、とずっと思っていまいた。これは正常なんですね。(画像を保存されたくない場合には便利な手法ですね!)
    で、firefoxのアドレスバーに
    http://www.example.com/wp-content/themes/theme_name/images/random/rotate.php
    といれると、テストサイト側は、黒っぽい背景色の上にその画像群がランダムに表示されますが、本番サイト側は、背景色だけで画像は表示されません。
    IE.9の場合は、背景は白で、本番サイトについては画像がない場合に表示される×印のアイコンが出ています。rotate.phpが動作していない、ということでしょうかね。

    当方では、この部分をtwentytenの子テーマのheader.phpの中に書き込んでいます。

    本番サイトについては画像がない場合に表示される×印のアイコンが出ています。rotate.phpが動作していない、ということでしょうかね。

    rotate.php の後に引数を与えるとどうなりますか?
    たとえば rotate.php と同じディレクトリに test.jpg があったとして rotate.php までのパスを rotate.php?img=test.jpg とすると強制的に test.jpg が表示されるはずなのですが。

    これでも画像が表示されないとなると rotate.php が動作してないということになりますね。
    rotate.php や画像ファイル、およびそれを包含するディレクトリ( images および random)のパーミッションを再確認する必要があるかもしれません。

    テスト環境と本番環境でPHPの動作モード(モジュールモード or CGIモード)に違いがないかもチェックのポイントかと思います。

    トピック投稿者 pyonko

    (@pyonko)

    ありがとうございます。またまた休みをとてしまいレスが遅れてしまいました。
    さて、ご指摘いただいたとおり、アヂレスバーで、
    http://www.example.com/wp-content/themes/theme_name/images/random/rotate.php?img=test1.jpg

    http://www.example.com/wp-content/themes/theme_name/images/random/rotate.php?img=?img=test2.jpg

    などと叩いたところ、当該画像が表示されました。また、header.php上で

    src="<?php bloginfo('stylesheet_directory') ;?>/images/random/rotate.php?img=test1.jpg"

    でも、test1.jpgが表示されました。(?以下を取ってしまうとまた表示されなくなります)

    となりますと、少し希望が見えているような気もしますが、考えられることはなんでしょうか?
    rotate.phpの存在するディレクトリや、rotate.php自身のパーミッションは当初の設定とおりです。(いろいろ動かしてみましたが変化なかったので元に戻しています)
    しかし、勘違いもあったかもしれませんので、パーミッションについて指南いただければ幸いです。現在、imagesフォルダ,randomフォルダ、ともにテーマのcssフォルダ,jsフォルダと同じ値です。また、rotate.phpや画像ファイルは、何も考えずにアップロードした時のままで「644」です。テーマファイル(header.php等)は、管理画面で編集更新保存ができるための設定として「666」をやっと探し当てたので、この設定にしています。rotate.phpのパーミッションで1桁目を「7」とかにするといいのでしょうか?

    トピック投稿者 pyonko

    (@pyonko)

    おはようございます。昨日のつづきですが、
    rotate.phpのパーミッションを変更(「その他」の「実行」権限を付け)てみましたが変化はなしです。

    一つ分かったことがあります。私の前々回の書き込みで、
    「firefoxのアドレスバーに
    http://www.example.com/wp-content/themes/theme_name/images/random/rotate.php
    といれると、テストサイト側は、黒っぽい背景色の上にその画像群がランダムに表示されますが、本番サイト側は、背景色だけで画像は表示されません。」
    としましたが、今日やってみると、
    「黒っぽい背景色は前回同様ですが、「画像ファイル”http://www.example.com/wp-content/themes/theme_name/images/random/rotate.php”は壊れているため、表示できませんでした。」
    と表示されました。
    しかし、http://www.example.com/wp-content/themes/theme_name/images/random/test1.jpgとすれば、これまでどおり、ちゃんと画像は表示されます。(壊れてはいません)

    パーミッションについて指南いただければ幸いです。

    この点については、レンサバによってとりきめが違うので業者さんにお尋ねになった方が確実ですね。ちなみに当方のテスト環境は、さくらのレンタルサーバ スタンダードプランで

    • images, random の各ディレクトリ …… 0705
    • ramdom 内の rotate.php および 画像ファイル …… 0705

    というパーミッションになっています(公式ドキュメントどおりの設定)。

    こちらで試してみた限りでは

    1. ディレクトリのパーミッションが適切でない
    2. 何らかの理由で rotate.php 内の opendir 関数が機能していない(たいていは1.と関連)

    ときに画像が表示されないようです。

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