Drupal core 7.xに付属するRSSフィードで問題が突然発生しています。開始XMLタグの前に2つのスペースがあるため、無効になっています。次のエラーフィードバリデーターで取得するものです。
行1、列2:XML解析エラー:<不明>:1:2:XMLまたはテキスト宣言がエンティティの先頭にありません
だから私はStack Exchangeに関する他の関連する投稿を知っていて、以下に言及されていることを試しました:
これまでに行ったことは次のとおりです。
少し難しいのは、RSSフィードがいつ壊れたかわからないことです。それは1週間から数か月の間になる可能性があり、いくつかのcontribモジュールを更新したときに除外することが困難になります。
そのため、特にローカルセットアップでは問題が発生しないため、これを見つけるのは非常に必死です。私たちはニュースWebサイトを持っているので、RSSフィードが機能していることが非常に重要です。
私たちは何かを見落としているに違いありませんが、それが何であるかはわかりません。
さらにトラブルシューティングのアイデア:
スペースはRSSページだけに表示されますか、それとも他のページにも表示されますか?これにより、問題が中心的な場所にあるのか、RSSフィードに対してのみロードされるテンプレート/インクルードファイルにあるのかがわかります。
var_dump(get_included_files())
を使用して(理想的にはテンプレートで、XMLが生成される直前に)、これまでに含まれていたすべてのPHPファイル)のリストを表示できます。これにより、調査中-ファイルの最後にあるPHPタグの終了、印刷ステートメントなどを探します。
また、ダーティな回避策のアイデア(他の問題を引き起こす可能性がありますが、緊急の場合は試してみる価値があります):ob_start()
はすべての出力をバッファーに入れ、ob_end_clean()
はそれを削除します。したがって、index.phpの先頭にob_start()
を配置し、RSSテンプレートの先頭にob_end_clean()
を配置すると、このmightによって、スペース。 (スクリプトが終了したときにバッファがまだ開いている場合は、バッファが自動的にフラッシュされるため、他の影響はありません。)
ページ出力の空白をデバッグするには、 XDebug PHP extension を使用できます。XDebugPHPのiniファイルで推奨されるオプションは次のとおりです。
; Data
xdebug.default_enable = 1 ; bool: The stacktraces will be shown by default on an error event.
xdebug.collect_vars = 1 ; bool: Gather information about which variables are used in a certain scope.
xdebug.show_local_vars=1 ; int: Generate stack dumps in error situations.
xdebug.collect_assignments=1 ; bool: Controls whether Xdebug should add variable assignments to function traces.
xdebug.collect_params=4 ; int1-4: Collect the parameters passed to functions when a function call is recorded.
xdebug.collect_return=1 ; bool: Write the return value of function calls to the trace files.
xdebug.var_display_max_children=256 ; int: Amount of array children and object's properties are shown.
xdebug.var_display_max_data=1024 ; int: Max string length that is shown when variables are displayed.
xdebug.var_display_max_depth=5 ; int: How many nested levels of array/object elements are displayed.
xdebug.show_mem_delta=0 ; int: Show the difference in memory usage between function calls.
xdebug.show_exception_trace=0 ; bool: Show a stack trace whenever an exception is raised.
xdebug.max_nesting_level=256 ; int: Controls the protection mechanism for infinite recursion protection.
次に、段階的なデバッグモードを使用するか、一時的にアクティブ化 xdebug.auto_trace=1
して、リクエストごとにxdebug.trace_output_dir
内にトレースファイルを生成します。
次に、XMLファイルを要求し、トレースファイルを確認します。近端にある特定の関数の戻りをチェックしてそのソースを追跡するのにはしばらく時間がかかりますが、少なくともそれは可能です。
または、できるだけ多くのモジュールを無効にして、試行錯誤によって問題を見つけることができます。
.module
のファイルの1つに後続スペースが含まれていると思われる場合は、次のex
コマンド(Vimの一部)を使用すると、これらのファイルがすべて削除されます。
ex +'bufdo!%s/\s\+$//e' -scxa **/*.*
注:シェルが 新しいグロビングオプション をサポートしている場合、再帰的なスキャンには**
を使用します。有効化:shopt -s globstar
。
別の方法は、 Coder module を使用して、コーディング標準を通じてファイルを実行することです。インストール後、次のコマンドは、隠しトレーリングスペースに関連する問題を検出します。
phpcs --standard=Drupal some_folder/
問題をインプレースで修正するには、次の方法を試してください。
phpcbf --standard=Drupal some_folder/
注:上記のコマンドはすべてのファイルを再フォーマットするため、実行する前に、すべてがコミットまたはバックアップされていることを確認してください。