7

他のスクリプトのセットを含む(または「必要とする」)PHPスクリプトがあります。これは、私のすべてのクラスをインポートするために効果的です。私が遭遇しているのはHTTP500エラーです。コードを1つずつふるいにかけてコメントアウトし、ファイルの1つにあるrequire_onceで失敗していることを確認しました。

コードは次のとおりです。

index.php:

<?php
require_once("std/classes.php");
?>

そしてstd/classes.php:

<?php
RequireStandards();
RequireAddons();

function RequireStandards( )
{
    $ClassFiles = scandir("classes/standard");

    foreach( $ClassFiles as $ClassFile )
    {
        if( $ClassFile == "." || $ClassFile == ".." )
            continue;

        //require_once("classes/standard/" . $ClassFile );
    }
}

function RequireAddons()
{
    $ClassFiles = scandir("classes");

    foreach( $ClassFiles as $ClassFile )
    {
        if( $ClassFile == "." || $ClassFile == ".." || $ClassFile == "standard" )
            continue;

        //require_once("classes/" . $ClassFile );
    }
}

?>

このコードはそのままで機能しますが、requiresのコメントを外すとすぐに失敗します。奇妙なことに私を驚かせるのは、このサーバー上にほぼ同じように動作する他のサイトがたくさんあることです。

どういうわけかPHPエラーレポートがオフになっているように感じます...オンに戻す方法がわかりません。PHP5.3にアップグレードしたばかりです。PHPが失敗した場合、通常、ブラウザで「ファイルを開けませんでした」などと予想されます。

誰かが、なぜこれがHTTP 500をキックバックしているのか、あるいはエラー報告を再度有効にする方法を教えてくれるかもしれません。よろしくお願いします。これはあまり意味がないようです。

4

2 に答える 2

13

エラー報告を有効にするには:

<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
require_once("std/classes.php");
?>

うまくいけば、それはうまくいくはずです。

編集:これが機能する場合は、ライブの一般公開環境に何かを置く前に、表示エラーをオフにすることを忘れないでください!

于 2012-04-13T20:30:44.257 に答える
2

error_reporting()関数を使用して、一時的にエラーレポートをオンに戻すことができます。たとえば、すべてのエラーを表示するには、ファイルに次のコードを配置します。

error_reporting(E_ALL);

もちろん、これを永続的に変更するには、php.iniファイルを編集し、error_reportingとdisplay_errorsが有効になっていることを確認する必要があります(少なくともこれが実稼働環境でない場合)。次のことも試すことができます。

ini_set('display_errors', 1);

ただし、ページに致命的なエラーがある場合、これは機能しない可能性があります。繰り返しますが、これを永続的に有効にするには、php.iniファイルを変更する必要があります。

一般に、ユーザーがエラーメッセージを介して機密情報を取得しないように、非実稼働システムでのみdisplay_errorsを有効にすることをお勧めします。

どちらの場合でも、apacheエラーログでphpエラーを見つけることができるはずです。ubuntuではこれは次の場所にあります。

/var/log/apache2/error.log

ディストリビューションによって異なる場合がありますが。

于 2012-04-13T20:33:52.697 に答える