2011-01-02 2 views
3

Я запускаю php как скрипт оболочки.Пользовательский php.ini во время выполнения php как сценарий оболочки

(Не уверен, что если «сценарий оболочки» правильно. Файл начинается с #!/usr/bin/php)

Это прекрасно работает. Но класс MongoDB не загружается, поскольку правильный php.ini (с extension=mongo.so) не используется.

Как это использовать , что php.ini?

Уже попробовал #!/usr/bin/php -c /usr/local/lib/php.ini

Но я все еще получаю ту же ошибку - Fatal error: Class 'Mongo' not found

Что можно сделать?

+0

Пожалуйста, сформулируйте Ваши серверную ОС. (и если ubuntu, проверьте, существует ли /etc/php5/cli/php.ini - это тот, который нужно редактировать) – Teson

+1

Вывод 'php -i' в командной строке (в основном, вызов phpinfo()) будет точно указывать какие расширения загружаются, где PHP ищет их и т. д. –

ответ

3

В этой конкретной ситуации. Я бы

  • Проверьте, загружен ли модуль Монго (с помощью extension_loaded() или class_exists())
  • Если не загружается, попробуйте загрузить модуль Монго с помощью dl()
  • Если загрузка не удалась, отображается сообщение об ошибке, так администратор может заботиться о нем (STDERR или trigger_error()

Большинство дистрибутивов уже гружу различные версии php.ini для веб-серверов и CLI. существуют и другие причины, чтобы добавить еще один php.ini конфигурация для скрипта XYZ (в дополнение к обычной конфигурации)?

+0

Использование 'extension_loaded()', а затем 'dl()' сделал трюк. Благодаря! – kapeels

3

Попробуйте поместить php.ini в ту же папку, что и двоичный файл php. Кажется, он выглядит там первым.

Я знаю это, потому что я очень мощной и полезной командной строки программа под названием Трассирование, чтобы показать мне, что на самом деле происходит за моей спиной

$ strace -o strace.log php --version 
$ grep php.ini strace.log 

Strace выкапывает из ядра (системы) вызовов, что ваш программа создает и выгружает вывод в файл, указанный после -o

Это легко использовать grep для поиска вхождений php.ini в этом журнале. Это довольно очевидно, глядя на следующий типичный ответ, чтобы увидеть, что происходит.

open("/usr/bin/php.ini", O_RDONLY)  = -1 ENOENT (No such file or directory) 
open("/etc/php.ini", O_RDONLY)   = 3 
lstat("/etc/php.ini", {st_mode=S_IFREG|0644, st_size=69105, ...}) = 0 
1

Другой вариант - использовать небольшую оболочку sh, что-то вроде этого ниже в myapp.ш, не забывайте CHMOD + х на сценарий, чтобы запустить его

#!/usr/bin/env sh

SOMEVAR='Yea Baby!'

export SOMEVAR

php -c /path/to/my/custom/php.ini /path/to/my/old_script.php

с дополнительным бонусом быть в состоянии установить или overide окр vars pre-run

2

Пошел через это, потому что у меня был sa я проблема. Проблема в том, что используется более одного файла php.ini.
Один используемый Apache расположен в

/etc/php5/apache2/php.ini 

Это тот, который модифицирован, чтобы запустить MongoDB с расширением = mongo.so

Однако при выполнении задания: или с терминала, он загружает другой файл ini. Вы можете найти это с помощью линии

grep php.ini strace.log 

Упоминается выше, @tomwrong

путь, где он показывает «= 3» является файл php.ini загружается при запуске двигателя из терминала, это INI файлу потребуется «extension = mongo.so», размещенное в нем.

2

Редактировать .bashrc находится в вашем домашнем каталоге и добавьте следующую строку:

alias php='php -c /path-to-custom/php.ini' 
Смежные вопросы