Я запускаю 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
Что может быть сделано?
В этой конкретной ситуации. я бы
Большинство дистрибутивов уже отправляют разные версии php.ini для веб-серверов и CLI. Существуют ли другие причины для добавления другой конфигурации php.ini для скрипта XYZ (в дополнение к нормальной конфигурации)?
Попробуйте поместить php.ini в ту же папку, что и php-файл. Кажется, он выглядит там первым.
Я знаю это, потому что я использовал очень мощную и полезную программу командной строки, называемую strace, чтобы показать мне, что действительно происходит за моей спиной
$ 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
Это произошло из-за того, что у меня была такая же проблема. Проблема в том, что используется более одного файла php.ini.
Тот, который используется Apache, находится в
/etc/php5/apache2/php.ini
Это тот, который модифицирован для запуска MongoDB с расширением = mongo.so
Однако при запуске задания cron или из терминала он загружает другой файл ini. Вы можете найти это, используя строку
grep php.ini strace.log
Упомянутое выше @tomwrong
Путь, где он отображает «= 3», – это файл php.ini, загруженный при запуске движка с терминала, для этого ini-файла потребуется «extension = mongo.so».
Измените .bashrc, расположенный в вашем домашнем каталоге, и добавьте эту строку:
alias php='php -c /path-to-custom/php.ini'
другой вариант – использовать небольшую оболочку sh, что-то вроде этого ниже в myapp.sh, не забудьте chmod + x на скрипте, чтобы запустить его
#!/usr/bin/env sh
SOMEVAR='Yea Baby!'
export SOMEVAR
php -c /path/to/my/custom/php.ini /path/to/my/old_script.php
с добавленным бонусом к возможности установки или переопределения env vars перед запуском