サポート » マルチサイト » マルチサイトで構築 一部画像が表示されません

  • いつもお世話になります。
    いろいろと解決策を探しているのですが、自己解決できるずにいるので、投稿させていただきます。

    現在、WP3.1でマルチサイト(サブディレクトリ)にて、サイトを構築しているのですが、投稿画面からアップされている画像が全て表示される場合と一部表示されない場合がある状況です。
    建築系のサイトになるのですが、建物の写真を一覧表示した際に、先ほどの現象が特に発生しております。
    Chromeのコンソールでエラーをチェックすると、表示されない画像には、
    Failed to load resource: the server responded with a status of 500 (Internal Server Error)
    と出ています。

    先日調べていたところ、以下URLの記事(お名前.comのレンタルサーバーでInternal Server Error)に書かれていた事が気になりました。
    ちなみに、現在使用中のサーバーはお名前.comのサーバーです。
    http://cochma.sakura.ne.jp/wordpress/?p=551
    上記URLの記事と現在発生しているエラーは、何か関係があるのでしょうか?
    また、マルチサイトを使用していると「ms-files.php」を経由して画像が表示されるみたいなのですが、「ms-files.php」を経由しないで直接画像のURLにアクセスできる様になれば、解決するのかもと思いました。

    そこで、以下URLの記事(WordPress マルチサイト版の高速化アイデア / WordPressのマルチサイトで画像が表示されない)
    http://dogmap.jp/2011/05/06/wordpress-%E3%83%9E%E3%83%AB%E3%83%81%E3%82%B5%E3%82%A4%E3%83%88%E7%89%88%E3%81%AE%E9%AB%98%E9%80%9F%E5%8C%96%E3%82%A2%E3%82%A4%E3%83%87%E3%82%A2/
    http://d.hatena.ne.jp/hateka/20120202/1328194769
    を読ませていただき、試してみたのですが(htaccessやPHPの記述に疎く、実際にどの様に記述して良いかもわからないまま試しています…)、投稿画面からアップされた画像が全て表示されなくなってしまいました。

    現在上記の様な状況なのですが、直接画像のURLにアクセスさせるhtaccessの記述方法を教えていただけますでしょうか?
    また、直接画像のURLにアクセスできれば、この問題が解決すると思っているのですが、他の原因が考えられる場合があれば、教えてください。

    現在、サーバーやWPの状況は以下となります。
    【サーバー】
    お名前.com(共有サーバーSD)

    【PHP】
    5.2.12

    【MySQL】
    5.0.51

    【WPバージョン】
    WP3.1

    【マルチサイトの構成】
    http://www.example.com(ID:1)
    http://www.example.com/news(ID:2)
    http://www.example.com/works(ID:3)
    http://www.example.com/team(ID:4)
    ※URL:exampleはダミーのURLです。

    現在のhtaccessの記述です。

    RewriteEngine On
    RewriteBase /
    RewriteRule ^index\.php$ - [L]
    
    # uploaded files
    RewriteRule ^([_0-9a-zA-Z-]+/)?files/(.+) wp-includes/ms-files.php?file=$2 [L]
    
    # add a trailing slash to /wp-admin
    RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]
    
    RewriteCond %{REQUEST_FILENAME} -f [OR]
    RewriteCond %{REQUEST_FILENAME} -d
    RewriteRule ^ - [L]
    RewriteRule  ^[_0-9a-zA-Z-]+/(wp-(content|admin|includes).*) $1 [L]
    RewriteRule  ^[_0-9a-zA-Z-]+/(.*\.php)$ $1 [L]
    RewriteRule . index.php [L]

    RewriteRule ^([_0-9a-zA-Z-]+/)?files/(.+) wp-includes/ms-files.php?file=$2 [L]
    htaccessに関しては、上記部分が画像についての記述だなというのが、なんとなくわかる程度のスキルです。

    以上、長くなりましたが、解決にご協力いただけると助かります。
    よろしくお願い致します。

10件の返信を表示中 - 1 - 10件目 (全10件中)
  • こんにちは

    お役に立つかどうか、自信がありませんが、

    RewriteRule ^([_0-9a-zA-Z-]+/)?files/(.+) wp-includes/ms-files.php?file=$2 [L]

    この部分がマルチサイト特有の.htaccessの設定で、画像ファイルへのリダイレクトの設定です。

    シングルでは、このようなことをしていませんので、理由があってやっている事かもしれません 

    ( 現在、私の使っているワードプレスだと、画像ファイルが、http://www.tenman.info/wp3/raindrops/files/bug-header-image.jpg みたいになっていますので、このURLをそれぞれのブログの画像ファイルに置き換えるのは、.htaccessだけでは困難で、phpファイルを経由しないと難しい感じはしますが、そのあたりは、ベテランの人の登場を祈ります )

    古い記憶では(WordPress MU時代)、サーバが強制的に広告を差し込むなどで、ヘッダーを付けて画像を送出する前に、拡張子がphpなので、無理やり広告を差し込まれて、画像が破損して表示できなかった事がありましたが、今回は、一部のファイルのみとの事ですので、あまりに画像が多すぎて、処理しきれないといった事もあるのかもしれないですね

    一覧時の、画像枚数や、画像サイズは、どの程度か気になります。

    キャッシュプラグインは、使っていますか?

    まずは、デバッグモードで、エラーを確認したほうがいいと思います。

    私のやり方は、
    http://d.hatena.ne.jp/tenman/20090701/p1
    みたいにしてやってます。(最近の追記のところを見てください)

    トピック投稿者 baritone

    (@baritone)

    nobitaさん、アドバイスいただき、ありがとうございます。
    確かに、htaccessの変更だけでは、画像のURLが変わらずで画像が表示されていない状態だったので、何か他にPHPも変更しないといけないかもしれませんね。

    教えていただいた「デバックモード」でエラーを確認してみました。
    そうしたところ、使用しているプラグインでエラーが出ていましたので、エラーの出ているプラグインを外して試してみましたが、状況は変わりませんでした。

    また、その他に以下の様なエラーが出ていました。一応ファイルを確認しましたが、何がわるくて何をしないといけないのか、良く分かりませんでした。
    今回の件に関して、何か関係ありますでしょうか?

    Notice: register_uninstall_hook was called incorrectly. Only a static class method or function can be used in an uninstall hook. (This message was added in version 3.1.) in /wp-includes/functions.php on line 3422
    Warning: Cannot modify header information - headers already sent by (output started at /wp-includes/pluggable.php on line 897

    また、キャッシュのプラグインも利用してみましたが、状況は変わりませんでした。
    現在一覧表示の際の画像枚数は、12枚で、1枚あたり20kb〜40kbくらいです。
    サーバー会社にも問い合わせてみましたが、サーバーには何の問題もないという回答をいただきました。

    当初アップした際には、この様な問題が起きておりませんでしたが、最近になって今回の件の事象が起きております(その間、ファイルなどは触っておりません)。
    運営している間にアップした画像の枚数が増えてきているのですが、アップした画像の枚数なども関係があったりするのでしょうか?

    こんにちは

    register_uninstall_hook was called incorrectly.

    このエラーは、プラグインなどが、アンインストールされる時に、プラグインが使っていたデータベースのフィールド等をきれいに掃除して、発つ鳥跡を濁さず的な処理をするときに使うもののようなので、プラグインを一つづつ消していくと、このエラーが消えるかもしれないので試してみてください。

    Warning: Cannot modify header information – headers already sent by (output started at /wp-includes/pluggable.php on line 897

    これが、今回の問題にかかわるエラーです。
    画像が表示できなくなるのは、この問題が絡んでいると思われます。

    このエラーが出るのは、本来htmlが出力される前に、何かが出力されている時に発生します。
    ms-files.phpは、該当するディレクトリから、画像ファイルを読み込み、画像に応じたmimetypeを付けたヘッダーを出力して、画像を出力します。
    このヘッダーを送り出す前に、何らかの出力があると、画像が壊れてしまうという事になります。
    (なぜ、それなら全部見れなくならないのか という点は、mimetypeに鈍感なIEや、それでも表示できるものは表示しようとするブラウザの挙動なども絡んでいる模様)

    以下のコードをテストしてみてください
    うまくいけば、バッファーをカットできます。(但し、恒久的対策ではありません)
    ms-files.phpの先頭に、

    <?php ob_end_clean();?>

    また、直接は、関係ないですが、トップページのソースを開いて、ソースの先頭に空行があるかどうか教えてください。

    トピック投稿者 baritone

    (@baritone)

    早速ご返答いただき、ありがとうございます。
    ms-files.phpに教えていただいた

    <?php ob_end_clean();?>

    を先頭に入れてみましたが、状況は変わりませんでした。

    ちなみに以下の様な入れ方で間違いないでしょうか?

    <?php ob_end_clean();?>
    <?php
    /**
     * Multisite upload handler.
     *
     * @since 3.0.0
     *
     * @package WordPress
     * @subpackage Multisite
     */
    
    define( 'SHORTINIT', true );
    require_once( dirname( dirname( __FILE__ ) ) . '/wp-load.php' );
    以下ソース続く
    

    <?php ob_end_clean();?>を入れた状態で、デバックモードでエラーの確認をしてみましたが、相変わらず以下のエラーが出ていました。

    Warning: Cannot modify header information - headers already sent by (output started at /wp-includes/pluggable.php on line 897

    また、エラーの出ていたプラグインを切った状態でも確認してみましたが、上記エラーが表示されてしまいます。

    ソースの先頭に空行があるかどうかですが、確認してみたところ先頭に空行は入っていませんでした。

    もう一度、サーバー会社に状況を説明し質問を投げたところ、回答がございましたので、一応お伝えさせていただきます。

    お問い合わせ内容につきまして、現在ご利用いただいております共用サーバーSDにおきましては、お客様方のコンテンツにおけるプロセスにより、サーバー負荷を伴いサービス不安定となる状況がございましたため、サービス安定稼動のためプロセス処理における最適化をさせていただいております。
    お問合せの状況は、上記の影響がある可能性がございます。

    お客様のコンテンツにおかれましては、プログラムにより画像を呼び出している状況かと存じます。

    お客様のサイト構築により明確なご提案は困難でございますが、1ページに表示される画像数の変更、またはプログラムにおける同時プロセス数の変更などをご検討くださいましたら幸いでございます。

    という回答をいただきました。

    表示枚数を減らす事は既に行っていますが、状況に変化はございません…。

    トピック投稿者 baritone

    (@baritone)

    表示れていたエラーの記述ですが、少し抜けている部分がありました。
    申し訳ございません。

    以下がエラーの記述となります。

    Warning: Cannot modify header information – headers already sent by (output started at /wp-content/plugins/custom-field-gui-utility-multisite/cfg-utility.php:109) in /wp-includes/pluggable.php on line 897

    プラグインですが、マルチサイトのworkでは「custom field gui utility」を、「team」では「custom field gui utility multisite」を利用していますが、その辺にも問題があるのでしょうか?

    こんにちは、

    一応 custom field gui utility multisite プラグインをはずしてみてください。

    ms-files.phpは、動作する上でたくさんのファイルをインクルードしています。

    これらのファイルが改行やスペースなどのゴミを出力していると、画像ファイルが壊れる原因になります。
    私の環境ですが、ms-files.phpがインクルードしているファイルのリストを書いておきます。

    array(24) {
      [0]=>
      string(57) "/wp/wp-includes/ms-files.php"
      [1]=>
      string(44) "/wp/wp-load.php"
      [2]=>
      string(46) "/wp/wp-config.php"
      [3]=>
      string(48) "/wp/wp-settings.php"
      [4]=>
      string(53) "/wp/wp-includes/load.php"
      [5]=>
      string(66) "/wp/wp-includes/default-constants.php"
      [6]=>
      string(56) "/wp/wp-includes/version.php"
      [7]=>
      string(55) "/wp/wp-includes/compat.php"
      [8]=>
      string(58) "/wp/wp-includes/functions.php"
      [9]=>
      string(55) "/wp/wp-includes/option.php"
      [10]=>
      string(57) "/wp/wp-includes/class-wp.php"
      [11]=>
      string(63) "/wp/wp-includes/class-wp-error.php"
      [12]=>
      string(55) "/wp/wp-includes/plugin.php"
      [13]=>
      string(56) "/wp/wp-includes/pomo/mo.php"
      [14]=>
      string(66) "/wp/wp-includes/pomo/translations.php"
      [15]=>
      string(59) "/wp/wp-includes/pomo/entry.php"
      [16]=>
      string(61) "/wp/wp-includes/pomo/streams.php"
      [17]=>
      string(54) "/wp/wp-includes/wp-db.php"
      [18]=>
      string(54) "/wp/wp-includes/cache.php"
      [19]=>
      string(64) "/wp/wp-includes/default-filters.php"
      [20]=>
      string(57) "/wp/wp-includes/ms-blogs.php"
      [21]=>
      string(60) "/wp/wp-includes/ms-settings.php"
      [22]=>
      string(56) "/wp/wp-includes/ms-load.php"
      [23]=>
      string(69) "/wp/wp-includes/ms-default-constants.php"
    }

    例えば、wp-config.phpを例に、なにが怪しいのか、どういう風なものが影響するのかを、書いておきます

    1.<?php が、二行目以降から始まっているとか、<の前にスペースがある
    2. ?> <?php スペースがある
    3. 最終行の?>の後ろに改行がある

    などです。

    ob_end_clean()の場所について、

    すみません、ええかげんなことを書いて、

    下のようにするといいと思います。

    <?php
    /**
     * Multisite upload handler.
     *
     * @since 3.0.0
     *
     * @package WordPress
     * @subpackage Multisite
     */
    
    define( 'SHORTINIT', true );
    require_once( dirname( dirname( __FILE__ ) ) . '/wp-load.php' );
    
    if( !is_multisite() )
    	die( 'Multisite support not enabled' );
    
    ms_file_constants();
    
    error_reporting( 0 );
    ob_end_clean();
    トピック投稿者 baritone

    (@baritone)

    こんにちは。
    教えていただいた位置に「ob_end_clean()」を入れて試してみましたが、表示されたり、表示されなかったりという状況です…。

    ms-files.phpがインクルードしているファイルも、一度調べてみようと思います。
    また、ご報告させていただきます。
    よろしくお願い致します。

    こんにちは

    ob_end_clean()は、バッファがない正常時に使うとエラーを出したと思いますので、ログを監視してくださいね。

    トピック投稿者 baritone

    (@baritone)

    こんにちは。
    ご指摘ありがとうございます。
    ログを監視してみます。

    トピック投稿者 baritone

    (@baritone)

    nobitaさん、ご連絡遅くなりました。
    もしかしたら見落としがあるかもしれないですが、関連ファイルの方に怪しげな記述を発見する事ができませんでした。
    また、他に原因がありそうか調べてみたのですが、状況は変わらずです…。

    時間を費やしても解決できない状況と、お客様を待たせておりましたので、大技的な感じですが、サーバーを変更し、データを全て新サーバーに移行しました。

    新サーバーの方では、現在不具合なく正常に動作している状況です。
    しかしデバックモードでエラーを確認したところ、同じ様なエラーが出たので、根本的に解決はしていないかもしれません。

    nobitaさんにはいろいろとアドバイスしていただき、大変助かりました。
    サーバーを変更した事で状況が少し改善しましたので、時間のある際に地道にエラーの原因を探っていきたいと思います。
    アドバイス、ありがとうございました!

10件の返信を表示中 - 1 - 10件目 (全10件中)
  • トピック「マルチサイトで構築 一部画像が表示されません」には新たに返信することはできません。