将php作为shell脚本执行时,在中自定义php.ini
我正在以shell脚本的形式运行php (不确定“shell脚本”是否正确。文件以将php作为shell脚本执行时,在中自定义php.ini,php,Php,我正在以shell脚本的形式运行php (不确定“shell脚本”是否正确。文件以#!/usr/bin/php开头) 这很有效。但是MongoDB类没有被加载为正确的php.ini(具有扩展名=mongo.so) 如何使用php.ini 已尝试#/usr/bin/php-c/usr/local/lib/php.ini 但我仍然得到相同的错误-致命错误:找不到类“Mongo” 可以做什么?尝试将php.ini与php二进制文件放在同一文件夹中。它似乎是先看那里的 我之所以知道这一点,是因为我使用了
#!/usr/bin/php
开头)
这很有效。但是MongoDB类没有被加载为正确的php.ini(具有扩展名=mongo.so
)
如何使用php.ini
已尝试#/usr/bin/php-c/usr/local/lib/php.ini
但我仍然得到相同的错误-致命错误:找不到类“Mongo”
可以做什么?尝试将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
在这种特殊情况下。我会的
- 检查Mongo模块是否已加载(使用或)
- 如果未加载,请尝试使用加载Mongo模块
- 如果加载失败,则显示一条错误消息,以便管理员能够处理它(或
大多数发行版已经为Web服务器和CLI提供了不同版本的php.ini。是否有其他原因为脚本XYZ添加另一个php.ini配置(除了正常配置之外)?另一个选项是使用一个小的sh包装器,类似下面在myapp.sh中的内容,不要忘记在脚本上使用chmod+x来运行它
#!/usr/bin/env sh
SOMEVAR='Yeahbaby!'
export SOMEVAR
php-c/path/to/my/custom/php.ini/path/to/my/old_script.php
由于能够设置或覆盖环境变量预运行,我遇到了这个问题,因为我遇到了相同的问题。问题是使用了多个php.ini文件。
Apache使用的一个位于
/etc/php5/apache2/php.ini
这是一个被修改为运行扩展名为mongo.so的MongoDB的文件
但是,当运行cron作业或从终端加载时,它会加载一个不同的ini文件
grep php.ini strace.log
上面提到的@tomerre
显示“=3”的路径是从终端运行引擎时加载的php.ini文件,该ini文件也需要放置“extension=mongo.so”。Edit.bashrc位于您的主目录中,并添加以下行:
alias php='php -c /path-to-custom/php.ini'
这对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
请指定您的服务器操作系统。(如果是ubuntu,请检查/etc/php5/cli/php.ini是否存在-这是要编辑的)php-i
在命令行上的输出(基本上是执行phpinfo()调用)将准确列出加载的扩展名、PHP查找它们的位置等。使用extension\u-loaded()
,然后dl()
完成了这项任务。谢谢!