Мне нужна помощь с ошибкой, с которой я раньше не сталкивался и нигде не могу найти.
В рамках PHP mvc (только из учебника) у меня есть следующее:
// Initiate the class
$className = 'Controller_' . ucfirst($controller);
if (class_exists($className)) {
$controller = new $className($this->registry);
}
$ className показывает правильное имя класса (регистр также правильный). Но когда я запускаю его, я получаю это в журнале ошибок apache (без ошибки php)
[Wed Mar 31 10:34:12 2010] [notice] child pid 987 exit signal Segmentation fault (11)
Идентификатор процесса отличается при каждом вызове. Я использую PHP 5.3.0 на os x 10.6. Этот сайт работает с 5.2.11 на другом Mac. Не совсем уверен, куда идти дальше, чтобы отладить его. Я предполагаю, что это может быть настройка apache, а также ошибка php или проблема с кодом ... какие-либо предложения о том, где искать дальше?
Ошибка не появляется при комментировании этого кода. У меня также есть около 15 других php-сайтов, работающих без проблем. Включение других, использующих ту же базовую структуру mvc
Я помню, что у меня была такая же проблема. Если я правильно помню, проблема заключалась в рекурсивном создании экземпляра, то есть PHP исчерпал память, что вызвало ошибку сегментации. Убедитесь, что создание экземпляра $ className не происходит по кругу.
Я думаю, у вас проблема с вашим собственным Mac. Если вы пытались открыть веб-сайт с другого компьютера и не получили сообщение об ошибке, это означает, что вам необходимо переустановить пакет php. Что-то пошло не так со встроенным php (возможно, обновление или ссылка уничтожена из-за новой установки ...)
Надеюсь, что это поможет вам.
Попробуй это:
// Initiate the class
$className = 'Controller_' . ucfirst($controller);
if (class_exists($className)) {
// construct the code string and evaluate it.
$code='$controller = new ' . $className . '($this->registry);';
eval($code);
}
Попробуйте использовать фигурные скобки вокруг переменной имени вашего класса. См. Ниже в строке назначения $ controller.
$className = 'Controller_' . ucfirst($controller);
if (class_exists($className)) {
$controller = new ${$className}($this->registry);
}