Я схожу с ума! Я уже 2-х часов был SO'ing и Googling.
Короче говоря, все работает нормально, а затем я сделал некоторую реструктуризацию класса, и теперь я получаю это:
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's 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; } } ... }
(Обратите внимание, как запрос вызывается только при первой попытке отправить электронное письмо.)
Может ли возникнуть проблема с новым «потоком» или порядком включения? (Так как пути выглядят нормально. Если бы пути были не в порядке, он бы погиб на Loader.php, не так ли?)
Может ли какая-то круговая зависимость какой-то причины вызывать эту проблему, прежде чем она вызвала более «фатальную»?
Может ли имя класса конфликтует с тем, что уже существует? Раньше у меня были некоторые довольно загадочные имена классов, такие как MalaFwk_Application_Receiver. Теперь имена более общие, например CApplication, CComponent, CDatabase, CLogger и т. Д.
Я пробовал различные вещи, предлагаемые в других потоках SO, безрезультатно, но я готов попробовать все, что предлагает. Я извиняюсь заранее, если это не является особенно конструктивным вопросом, но у меня нет идей, и было слишком много (тривиальных, но широко распространенных) изменений, чтобы вернуть и повторно применить изменения в частях. Любая помощь будет принята с благодарностью. (Я вернусь в ~ 8: 45a EST.)
ОБНОВИТЬ:
Если я добавлю следующую строку в index.php , то есть «вручную» потребует файл, прежде чем что-либо еще произойдет, тогда все будет работать снова.
require_once 'Zend/Mail/Transport/Sendmail.php';
Похоже, что по какой-то причине, к моменту, когда код получает send()
, он не может найти библиотеку. Что может быть причиной этого?