0

気が狂う!私は今2時間SO'ingとグーグルをしています。

要するに、物事はうまく機能していて、それから私はいくつかのクラスの再構築をしました、そして今私はこれを手に入れています:

    Warning: require_once(Zend/Mail/Transport/Sendmail.php) [function.require-once]: failed to open stream: No such file or directory in /nfs/c09/h02/mnt/136160/domains/xyz.com/html/sandbox/Zend/Mail.php on line 1175

    Fatal error: require_once() [function.require]: Failed opening required 'Zend/Mail/Transport/Sendmail.php' (include_path='.:/usr/local/php-5.3.13/share/pear') in /nfs/c09/h02/mnt/136160/domains/xyz.com/html/sandbox/Zend/Mail.php on line 1175

ファイルがどのように編成されているかについては触れませんでした。

    sandbox/index.php
    sandbox/settings.php
    sandbox/lib/class1.php
    sandbox/lib/class2.php
    sandbox/lib/class3.php
    sandbox/Zend/...

一部のクラス名とその階層のみを変更しました。

index.php

<?php
    require_once 'lib/class1.php';
    $application = new class1();
    $application->run();
?>

class1.php

<?php

    require_once 'Zend/Loader.php';
    Zend_Loader::loadClass('Zend_Log');
    Zend_Loader::loadClass('Zend_Log_Formatter_Simple');
    Zend_Loader::loadClass('Zend_Log_Writer_Mail');
    Zend_Loader::loadClass('Zend_Log_Writer_Stream');
    Zend_Loader::loadClass('Zend_Mail');

    // class definition ...
?>

クラスの再構築中にこれらrequireのいずれにも触れる必要はありませんでした。特定の問題(より一般的な問題があると確信していますが)は、ZendのMail.phpで発生します。

/**
 * Sends this email using the given transport or a previously
 * set DefaultTransport or the internal mail function if no
 * default transport had been set.
 *
 * @param  Zend_Mail_Transport_Abstract $transport
 * @return Zend_Mail                    Provides fluent interface
 */
public function send($transport = null)
{
    if ($transport === null) {
        if (! self::$_defaultTransport instanceof Zend_Mail_Transport_Abstract) {
            require_once 'Zend/Mail/Transport/Sendmail.php';
            $transport = new Zend_Mail_Transport_Sendmail();
        } else {
            $transport = self::$_defaultTransport;
        }
    }

    ...
}

require(電子メールを送信する最初の試みでのみが呼び出されることに注意してください。)

  1. 新しい「フロー」またはインクルードの順序がこの問題を引き起こす可能性がありますか?(パスは問題ないように見えるので、パスが問題ない場合は、Loader.phpで停止しますね?)

  2. より「致命的な」問題を引き起こす前に、ある種の循環依存がこの問題を引き起こす可能性はありますか?

  3. クラス名が既存のものと競合する可能性はありますか?以前は、MalaFwk_Application_Receiverのようなかなり難解なクラス名を持っていました。現在、名前はより一般的です。たとえば、CApplication、CComponent、CDatabase、CLoggerなどです。

私は他のSOスレッドで提案されたさまざまなことを無駄に試しましたが、誰かが提案したことは何でも試してみます。これが特に建設的な質問ではない場合は、事前にお詫び申し上げますが、私はアイデアがなく、変更が多すぎて(些細なことですが広範囲に渡って)変更を元に戻して再適用することはできません。どんな助けでも大歓迎です。(私は東部標準時8:45aに戻ってきます。)

アップデート:

次の行をindex.phpに追加すると、つまり、他の何かが発生する前に「手動で」ファイルが必要になると、問題は再び機能します。

    require_once 'Zend/Mail/Transport/Sendmail.php';

したがって、何らかの理由で、コードがに到達するまでsend()に、ライブラリを見つけることができないようです。何が原因でしょうか?

4

1 に答える 1

3

これをインデックスに追加してください:

set_include_path(implode(PATH_SEPARATOR, array(          
    realpath('../library'), // Make sure this is the correct path to your library folder
    get_include_path(),
)));
于 2012-06-25T12:11:08.800 に答える