1. ホーム
  2. php

[解決済み】Apache + PHPで「ヘッダの前にスクリプトの出力が終了する」件

2022-02-08 10:27:08

質問

UPDATE この問題は、スクリプトが完了する前にサーバーの要求がタイムアウトしたために発生しました。 *

私はレガシーコードを共有LAMPホスト(almostfreespeech.net)で実行していますが、最近新しいスクリプトを追加したところ、本番で動作しなくなりました。

apacheのエラーログには、次のようなメッセージが表示されます。 End of script output before headers: switch.php ウェブクライアントでスクリプトを起動しようとすると、500 ステータスが表示されます。

他のStackOverflowの投稿によると、このエラーメッセージは、通常、ファイルのパーミッションのエラーによるものです。しかし、新しいスクリプトのファイルパーミッションは、他のすべてのスクリプトと同じです。

以下は、該当するファイルのパーミッションです。

-rw-rw-r--   1 235430  235430  1655 Jul  6 18:05 switch.php

drwxrwxr-x   2 235430  235430    18 Jul  1 21:05 auth/
-rw-rw-r--  1 235430  235430     13 Aug 24  2015 auth/.htaccess
-rw-rw-r--  1 235430  235430    280 Jul  1 21:05 auth/cloudsaves.2.php
-rw-rw-r--  1 235430  235430    880 Aug 28  2015 auth/cloudsaves.php
-rw-r--r--  1 235430  web     15580 Jul  1 21:05 auth/rumpus_migration.php

これらを使って include() のヒエラルキーがあります。

  • switch.php -> auth/cloudsaves.php (作品)
  • switch.php -> auth/cloudsaves.2.php <- auth/rumpus_migration.php (動作しません)

すべてのリクエストは switch.php のいずれかを引き起こすパラメータ値を含み、かつ auth/cloudsaves.php または auth/cloudsaves.2.php を含めることができます。

私のローカルのテスト環境では、すべてがうまく動作しています。本番環境では、このパラメータを使用すると switch.php を含めることができます。 cloudsaves.2.php スクリプトを実行すると、エラーが発生します。

のグループとパーミッションを変更してみました。 rumpus_migration.phpcloudsaves.2.php が適切にインクルードしている他のファイルと正確に一致するように、 親の switch.php スクリプトは、常に同じ結果をもたらします。この新しいスクリプト ( cloudsaves.2.php ) が含む唯一のスクリプトです。 switch.php それ自体 includes 別のスクリプトです。

私はApacheやPHPに詳しくなく、本番コードは共有ホスト上にあり、私の管理者アクセスは極めて限定的です。コードがローカルでは動作するが本番では動作しないという事実から、パーミッションの問題が犯人である可能性が高いと思われますが、どの作業パーミッションのオプションも修正できないようなので、どのように進めればよいのかわかりません。

解決方法は?

問題は、長時間実行されるデータベースクエリのために、スクリプトが完了する前にリクエストがタイムアウトすることでした。

そのため、その汎用的な End of script output before headers のエラーは、サーバーのタイムアウトやファイルのパーミッションの問題によって引き起こされる可能性があります。