簡體   English   中英

將“php”作為 shell 腳本執行時的自定義 php.ini 文件

[英]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

它是由 thomas-peter 提到的

它顯示'=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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM