1

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

casperjs hello.js

但不是当你使用php's exec()

exec('casperjs hello.js');

jQuery 似乎没有被注入。

是否有可能putenv()需要定义更多内容?

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

4

1 回答 1

3

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

您必须从您正在使用的任何程序及其文档中自己弄清楚它需要哪些环境变量才能正常运行。恐怕我不熟悉您使用的内容或其要求。PHP 也无法控制外部程序运行所依赖的环境变量。但是您可以通过在命令行中键入来从 shell 中查看用户的环境,env并获得所有现有的 ENVIRONMENT 变量及其值。

于 2013-01-03T02:00:50.477 回答