从shell与PHP的exec()启动时程序的行为不同

时间:2013-01-03 01:40:16

标签: php

我在shell中输入命令时似乎有一个程序[casperjs] [1]正常运行,

casperjs hello.js

但不是在使用php's exec()时:

exec('casperjs hello.js');

jQuery似乎没有被注入。

是否可能需要定义更多putenv()

尝试:我以nginx用户su www-data身份登录并再次从shell运行命令,它运行正常。

1 个答案:

答案 0 :(得分:3)

您必须考虑从shell运行此程序时,PHP可能不一定会导入与配置文件中相同的环境变量。 PHP仅导入由运行解释器的shell或CGI程序继承的环境变量。因此,当您从PHP运行exec函数时,通常在该系统上配置默认shell。一旦shell启动,它通常会导入用户.profile在其主目录中定义的任何内容。对于PHP,这包括运行解释器的任何内容(例如,在Apache中,您可以使用 .htaccess 中的SetEnv VAR VALUE httpd.conf 来设置这些环境变量为PHP)。在命令行中,您必须使用putenv导出所需的变量,并且可以在$_ENV超全局中查看它们。

您必须从您正在使用的任何程序及其文档中找出正确运行所需的环境变量。我担心我不熟悉你正在使用的东西或它的要求。 PHP也无法控制外部程序所依赖的环境变量。但是您可以通过从命令行键入env来从shell中查看用户的环境,并获得所有现有的环境变量及其值。