2012-04-13 13 views
6

私は、他のスクリプトのセットを含む(または '必要とする')PHPスクリプトを持っています。これは、すべてのクラスをインポートするために効果的です。私が遭遇しているのはHTTP 500エラーです。私は、1つのファイルでrequire_onceが失敗していると判断するために、コードを少しずつ調べてコメントアウトしました。PHPが失敗する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); 
    } 
} 

?> 

このコードは、それが座っているように動作しますが、できるだけ早くします。ここ

はコードがあります要求のコメントを外しますが、失敗します。奇妙なことに私に打撃を与えるのは、このサーバー上にはほぼ同じように動作する他のサイトがたくさんあるということです。

私は何とか私のPHPエラー報告をオフにしているかのように感じます...私は元に戻す方法がわかりません。 PHP 5.3にアップグレードしたばかりです私は通常、PHPが失敗した場合、私のブラウザには「開けないファイル」やそのようなものがあると予想します。

誰かが、なぜこれがHTTP 500を蹴っているのか、あるいは単にエラー報告を再び有効にする方法を教えてくれるかもしれません。大いに感謝します。これはあまり意味がないようです。

+0

サーバーのログに問い合わせることはできますか? – miku

+1

あなたのクラスフォルダはルートディレクトリにありますか?クラスの前に "/"を追加してみてください。ちょうど推測。 –

+0

あなたのインクルードパスの問題かもしれません。http://www.php.net/manual/en/function.set-include-path.php –

答えて

11

に見ることをお勧めしたい:

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

うまくいけば動作するはずです。

編集:これがうまくいけば、ライブの公開環境に何かを置く前に、表示エラーをオフにすることを忘れないでください!永久にあなたにこれを変更するには、もちろん

error_reporting(E_ALL);

:あなたは一時的のerror_reporting()関数を使用してバックエラー報告を有効にすることができます

+0

ありがとうございます。これが私が望む答えです。 @Madbreaksの答えは「答え」でしたが、それは私が尋ねたものに対する答えではありませんでした。あなたのアドバイスMadbreaksを取り、AutoLoadを構築しますが、これはあなたのコードを書くべき方法です。実際の問題に答えることができますか? 「これは正当なPHPであることを知っています」というレスポンスとして「あなたのコードを書き直す」ことは非常に刺激的です。しかしどちらにしてもありがとう。 ジムDについては、これは私の実際のPHPエラーの上に戻って私を置くと私はカップル 'を修正することができます今ストリームのオープンに失敗しました。とても有難い。 – DigitalJedi805

+0

@ DigitalJedi805 - 私は助けてよかった! ini_set( 'display_errors')ビットは、私が一般的に生産/環境定数に基づいてトグルするものです。そうすれば、私は不器用になることはありませんし、誤ってそれをオフにすることを忘れてしまいます。 –

0

私はあなたがエラー報告を有効にするにAutoloading Classes

+0

Downvoter ...なぜ? – Madbreaks

+0

私はそれをやっていませんでしたが、これは私が尋ねた質問に対する答えではないし、ベストプラクティスに従っているかどうかに関わらず、既存のコードを修正する助けにもなりません。私はこのヒントを感謝し、すでに実装していますが、@ Jim Dの答えにコメントを読むことができます。私の答えは「自分の状況に役立つ」ということを詳しく説明しています。 – DigitalJedi805

2

、例えばすべてのエラーは、あなたのファイルに次のコードを入れて表示しますphp.iniファイルを編集し、error_reportingとdisplay_errorsが有効であることを確認してください(少なくともこれが本番環境でない場合は)。あなたも試すことができます。

ini_set('display_errors', 1);

ページ上の致命的なエラーを持っている場合、これは動作しないかもしれないが。繰り返しますが、これを永久に有効にするには、php.iniファイルを変更する必要があります。

display_errorsは、プロダクション以外のシステムでのみ有効にして、ユーザーがエラーメッセージによって潜在的に機密情報を取得しないようにすることが一般的に推奨されています。

どちらの場合も、あなたがApacheのエラーログにPHPのエラーを見つけることができるはずです、Ubuntuの上でこれは次の場所にあります。

/var/log/apache2/error.log

それはあなたの分布に基づいて異なる場合がありますが。

関連する問題