こんにちは
お役に立つかどうか、自信がありませんが、
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
みたいにしてやってます。(最近の追記のところを見てください)
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();?>
また、直接は、関係ないですが、トップページのソースを開いて、ソースの先頭に空行があるかどうか教えてください。
早速ご返答いただき、ありがとうございます。
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ページに表示される画像数の変更、またはプログラムにおける同時プロセス数の変更などをご検討くださいましたら幸いでございます。
という回答をいただきました。
表示枚数を減らす事は既に行っていますが、状況に変化はございません…。
表示れていたエラーの記述ですが、少し抜けている部分がありました。
申し訳ございません。
以下がエラーの記述となります。
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();
こんにちは。
教えていただいた位置に「ob_end_clean()」を入れて試してみましたが、表示されたり、表示されなかったりという状況です…。
ms-files.phpがインクルードしているファイルも、一度調べてみようと思います。
また、ご報告させていただきます。
よろしくお願い致します。
こんにちは
ob_end_clean()は、バッファがない正常時に使うとエラーを出したと思いますので、ログを監視してくださいね。
こんにちは。
ご指摘ありがとうございます。
ログを監視してみます。
nobitaさん、ご連絡遅くなりました。
もしかしたら見落としがあるかもしれないですが、関連ファイルの方に怪しげな記述を発見する事ができませんでした。
また、他に原因がありそうか調べてみたのですが、状況は変わらずです…。
時間を費やしても解決できない状況と、お客様を待たせておりましたので、大技的な感じですが、サーバーを変更し、データを全て新サーバーに移行しました。
新サーバーの方では、現在不具合なく正常に動作している状況です。
しかしデバックモードでエラーを確認したところ、同じ様なエラーが出たので、根本的に解決はしていないかもしれません。
nobitaさんにはいろいろとアドバイスしていただき、大変助かりました。
サーバーを変更した事で状況が少し改善しましたので、時間のある際に地道にエラーの原因を探っていきたいと思います。
アドバイス、ありがとうございました!