[英]Custom php.ini file in when executing 'php' as a shell script
我正在將php
作為 shell 腳本運行。
(我不確定“shell 腳本”是否正確。文件以#!/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 與 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
編輯位於您的主目錄的 .bashrc 並添加以下行:
alias php='php -c /path-to-custom/php.ini'
在這種特殊情況下。 我會
大多數發行版已經為 Web 服務器和 CLI 提供了不同版本的 php.ini。 是否有其他原因為腳本 XYZ 添加另一個 php.ini 配置(除了正常配置)?
我遇到了這個,因為我遇到了同樣的問題。 問題是使用了多個php.ini文件。 Apache 使用的那個位於
/etc/php5/apache2/php.ini
這是修改為使用extension=mongo.so運行 MongoDB 的那個。
但是,當運行cron作業或從終端運行時,它會加載不同的 ini 文件。 您可以使用以下行找到它
grep php.ini strace.log
它顯示'=3'的路徑是從終端運行引擎時加載的php.ini文件,這個ini文件也需要放置“extension=mongo.so”。
另一種選擇是使用一個小的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
額外的好處是能夠設置或覆蓋預運行的環境變量。
這是 PHP 的一個小問題。
php -c /path/to/my/custom/php.ini
從命令行工作。
但是在這樣的腳本中嘗試#!/usr/local/bin/php -c /path/to/my/custom/php.ini
並且您的自定義 php 不會加載。
解決方案
去掉-c
和路徑之間的空格:
#!/usr/local/bin/php -c/path/to/my/custom/php.ini
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.