2

3 日または 4 日ごとにクラッシュするクライアント サイトを継承しました。私が知らない zend-framework を使用して構築されています。

次のコード:

<?php
    // Make sure classes are in the include path.
   ini_set('include_path', ini_get('include_path') . PATH_SEPARATOR . 'lib' . PATH_SEPARATOR . 'app' . DIRECTORY_SEPARATOR . 'classes');

    // Use autoload so include or require statements are not needed.
    require_once 'Zend/Loader.php';
    Zend_Loader::registerAutoload();

    // Run the application.
    App_Main::run('production');

次のエラーが発生しています:

[Tue Sep 02 12:58:45 2008] [error] [client 78.***.***.32] PHP 警告: require_once(Zend/Loader.php) [function.require-once]: 開けませんでしたストリーム: 6 行目の /srv/www/vhosts/example.co.uk/httpdocs/bootstrap.php にそのようなファイルまたはディレクトリはありません
[Tue Sep 02 12:58:45 2008] [error] [client 78.***.***.32] PHP 致命的なエラー: require_once() [function.require]: 必要な 'Zend/Loader.php を開けませんでした' (include_path='.:.:/usr/share/php5:/usr/share/php5/PEAR') /srv/www/vhosts/example.co.uk/httpdocs/bootstrap.php の 6 行目

これを修正するためにどこから始めればよいかさえわかりません。PHP に関する私の知識レベルは中級ですが、前述のとおり、Zend の経験はありません。また、元の開発者に連絡することはできません。

興味深いことに、コードはサイトのページにアクセスするたびに実行されますが、エラーはときどき発生するだけです。

include_path と関係があるに違いないと思いますが、よくわかりません。

4

6 に答える 6

3

まず、インクルードパスには末尾のスラッシュが必要だと思います。これが私の例です:

    set_include_path('../library/ZendFramework-1.5.2/library/:../application/classes/:../application/classes/excpetions/:../application/forms/'); 

ブートストラップ ファイルは、別のファイル (おそらく index.php ファイル) に含まれます。これは、インクルード パスが絶対パスではなく相対パス (私の場合) である場合、bootstrap.php を含むファイルが変更されると、Loader.php が検索されるパスが変更されることを意味します。

たとえば、私の Zend アプリには 2 つの index.php ファイルがあり、1 つはフロント エンド用、もう 1 つは管理領域用です。これらのインデックス ファイルは、異なるインデックス ファイルに含まれているため、異なる相対パスを持つ独自の bootstrap.php が必要です

これにより、問題が断続的に発生する理由が説明できます。たまにしか使用されないブートストラップを含む別のファイルが存在する可能性があります。「bootstrap.php」のすべてのサイトファイルを検索し、このファイルを含む/必要とするすべての場所を確認します。

于 2008-09-02T12:35:03.197 に答える
1

散発的にしか発生しないという事実は、これがプログラミングの問題ではなく、システム管理者の問題であると私に思わせます-実装の欠陥である場合、エラーが「そのようなファイルはありません」であることを考慮すると、一貫して失敗すると予想されますまたはディレクトリ」。2つの推測

  • 複数のフロントエンド Web サーバーがあり、そのうちの 1 つが正しく構成されていません (Zend Framework がありません)。

  • PEAR のインクルード ディレクトリはネットワークにマウントされており、短時間消えることがあります。

これは、より潜行性の高いファイル システムの問題である可能性がありますが、これは複数のファイルに影響を与えると考えられます。

于 2008-09-02T12:27:00.203 に答える
0

PHPUnit 3.5.5で作業しているときにも、このエラーが発生しました。私のメインアプリケーションスクリプトはzendフレームワークを正常にロードしましたが、テストクラスでエラーが発生しました。

私の解決策は、テストクラスに以下を追加することでした

   ini_set('include_path', ini_get('include_path') . PATH_SEPARATOR . 'lib' . PATH_SEPARATOR . 'app' . DIRECTORY_SEPARATOR . 'classes');

    require_once 'ThemeWidgets.php';
    require_once 'PHPUnit/Framework.php';

    require_once '../../library/Zend/Loader/AutoLoader.php';


    class ThemeWidgetsTest extends PHPUnit_Framework_TestCase
    {

        public function setUp() {
            Zend_Loader_Autoloader::getInstance();
        }
...
于 2010-12-09T17:35:34.417 に答える
0

私の場合、Zend/Loader.php は PEAR ディレクトリにありませんでした。そこにあるはずですが、私のWebサーバーは少し生でした。ただし、library/Zend ディレクトリに挿入することもできます。

しかし実際、これはあなたの問題が時々しか発生しない理由には答えません。

于 2010-05-14T10:13:32.110 に答える
0

時々動作するので、PHP 側で本質的に間違っていることはありません (パスが間違っていれば動作しませんが、動作しますか?)。では、Loader.php が定期的にアクセスできなくなる原因は何でしょうか? 権限の問題が疑われます。Loader.php またはそれにアクセスできないディレクトリを作成している何か。cron ジョブがパーミッションを設定/リセットしている可能性がありますか? 最初にそれを確認してください。機能している場合の権限と機能していない場合の権限を確認してください。

于 2009-01-31T21:03:43.197 に答える