Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将php作为shell脚本执行时,在中自定义php.ini_Php - Fatal编程技术网

将php作为shell脚本执行时,在中自定义php.ini

将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二进制文件放在同一文件夹中。它似乎是先看那里的 我之所以知道这一点,是因为我使用了

我正在以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二进制文件放在同一文件夹中。它似乎是先看那里的

我之所以知道这一点,是因为我使用了一个非常强大和有用的命令行程序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()
完成了这项任务。谢谢!