Назад | Перейти на главную страницу

PHP.ini не загружается

Хорошо, вероятно, я просто недостаточно знаю о php, но вот оно.

Я использую Ubuntu Hardy. У меня есть скомпилированная версия PHP, которую я скомпилировал с этими параметрами.

./configure
--enable-soap
--with-zlib
--with-mysql
--with-apxs2=[correct path]
--with-config-file-path=[correct path]
--with-mysqli
--with-curlwrappers
--with-curl
--with-mcrypt

Я использовал команду pecl install pecl_http для установки расширения http.so. Он находится в правильном каталоге модуля для моего php.ini. Мой php.ini загружается, и я могу изменить его в ini и воздействовать на php. Я включил extension=http.so строка в моем php.ini.

Это сработало. Пока я не добавил эти параметры компиляции, чтобы добавить imap

--with-openssl
--with-kerberos
--with-imap
--with-imap-ssl

Что не удалось, потому что мне нужна была библиотека c-client, которую я исправил с помощью apt-get install libc-client-dev После этого php компилируется нормально, и у меня работает поддержка imap, ууу.

ОДНАКО теперь все мои вызовы HttpRequest, который является частью расширения pecl_http в http.so, приводят к Fatal error: Class 'HttpRequest' not found ошибки. Я полагаю, что модуль http.so больше не загружается по той или иной причине, но я не могу найти никаких ошибок, показывающих причину.

Вы можете спросить: «Вы пробовали отменить новую настройку imap?» На что я отвечу. Да. Я напрямую отменил все свои изменения конфигурации и удалил библиотеку c-client, но все еще не могу заставить ее работать. Я подумал, что это странно ... Я не внес никаких изменений, которые привели бы к этой проблеме. Посмотрев на это, я также обнаружил, что не только расширение http больше не загружается, но и все мои расширения, загруженные через php.ini, больше не загружаются.

Может кто-нибудь по крайней мере дать мне дальнейшие шаги по отладке? До сих пор я пытался включить все ошибки, включая ошибки запуска, в моем php.ini, который работает для других ошибок, но я не вижу никаких ошибок запуска ни в командной строке, ни через apache. И снова кажется, что php.ini анализируется, учитывая, что если я запускаю php_info (), я получаю настройки, которые находятся в php.ini.

редактировать похоже, что прослушиваются только некоторые настройки php.ini. Есть ли способ проверить мой php.ini?

Править Править Похоже, я снова ошибаюсь, и php.ini больше не загружается. Однако, если я запустил php_info (), я понял, что он ищет мой php.ini в правильном месте.

Править Править Править Моя конфигурация находится в расположении пути к файлу конфигурации ниже, но в нем говорится, что файл конфигурации не загружен. Проблема с разрешением WTF? Сейчас его 644, так что каждый должен иметь возможность читать, если не писать. Я попытался сделать его 777, но это не сработало.

Configuration File (php.ini) Path   /etc/php.ini
Loaded Configuration File   (none)

Править Править Править Править Загрузив ini в командную строку с помощью команды -c, я могу запускать свои файлы, а использование -m показывает, что мои модули загружаются. Так что с php.ini все в порядке.

Править Править Править Править Править Мне указали, что моя конфигурация каталога ini должна быть путем для поиска файла php.ini, а не самого файла. С этой целью я попробовал настройки / etc, / etc / и позволил php установить каталог по умолчанию, а затем переместил мой ini-файл в этот каталог. Все терпят неудачу :(

Править Править Править Править Править Править Дополнительная информация, запуск командной строки php --ini и ls каталога, на который он указывает в настройках php. Также запускайте с параметром -c в командной строке, если запуск выполняется успешно, а не когда я не включаю -c

j@j:/usr/local/lib$ php -ini | grep Configuration
Configuration File (php.ini) Path => /usr/local/lib
Loaded Configuration File => (none)
Configuration
j@j:/usr/local/lib$ ls /usr/local/lib
php  php.ini  python2.5  site_ruby
j@j:/usr/local/lib$ php -c /usr/local/lib/php.ini /var/www/toolbelt/test.php
j@j:/usr/local/lib$ php /var/www/toolbelt/test.php

Fatal error: Class 'HttpRequest' not found in /var/www/toolbelt/test.php on line 7
jonathan@jonathan:/usr/local/lib$

Править Править Править Править Править Править Править Дополнительная информация. Используя метод strace, показанный ниже, я проверил, были ли попытки открыть файл ini, сделанные при загрузке php. Там не было

j@j:/usr/local/lib$ sudo strace  -e trace=open php -ini 2>&1 |grep  php.ini
Configuration File (php.ini) Path => /usr/local/lib
j@j:/usr/local/lib$ sudo strace  -e trace=open php -ini 2>&1 |grep  /usr/local/lib
Configuration File (php.ini) Path => /usr/local/lib
extension_dir => /usr/local/lib/php/extensions/no-debug-non-zts-20060613 => /usr/local/lib/php/extensions/no-debug-non-zts-20060613
include_path => .:/usr/local/lib/php => .:/usr/local/lib/php

Хорошо, надеюсь, это не позволит кому-нибудь еще часами биться головой о стену.

Я нашел свое собственное решение в чистом создании моего php. Оказывается, можно изменить with-config-file-path вариант и изменить путь, который отображается в выводе phpinfo () и php -ini. ОДНАКО, если вы не очистите свою сборку, место, где фактически используется параметр, не будет восстановлено и приведет к увеличению вашей сборки.

Примечание для себя: всегда очищайте свою сборку. Я знал это раньше, но меня сбил с толку тот факт, что перестройка действительно меняет то, что php сообщает мне о каталоге.

Проверьте значение параметра "--with-config-file-path =". Это должен быть / etc, а не /etc/php.ini. Кажется, что Apache пытается загрузить /etc/php.ini/php.ini и поэтому не находит файл.

Если это не сработает, вы можете проверить, какие файлы открываются php:

strace -f -e trace=open php --ini

Ответ поможет вам узнать, где php ищет файлы php.ini. Это результат одного из моих серверов:

10833 open("/usr/bin/php-cli.ini", O_RDONLY) = -1 ENOENT (No such file or directory)
10833 open("/etc/php-cli.ini", O_RDONLY) = -1 ENOENT (No such file or directory)
10833 open("/usr/bin/php.ini", O_RDONLY) = -1 ENOENT (No such file or directory)
10833 open("/etc/php.ini", O_RDONLY)    = 3