来自exec()的奇怪输出

时间:2014-11-11 03:13:37

标签: php bash codeigniter exec

当我从我的macbook上的localhost apache服务器运行这个PHP脚本时:

<?php
    exec('php -v 2>&1', $output);
    var_dump($output);
?>

我看到以下输出:

array(4) { [0]=> string(46) "dyld: Symbol not found: _sqlite3_intarray_bind" [1]=> string(84) " Referenced from: /System/Library/Frameworks/CoreData.framework/Versions/A/CoreData" [2]=> string(66) " Expected in: /Applications/XAMPP/xamppfiles/lib/libsqlite3.dylib" [3]=> string(69) " in /System/Library/Frameworks/CoreData.framework/Versions/A/CoreData" }

但我应该看到以下输出:

PHP 5.5.14 (cli) (built: Sep  9 2014 19:09:25) 
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2014 Zend Technologies

为什么我没有得到我预期的输出?

我已经尝试查看apache错误日志并发现没有其他错误,因为无论如何它们都被重定向到脚本的输出。我也试过谷歌搜索这个问题,但似乎只找到与优胜美地相关的结果,这些结果并没有真正帮助太多。我还应该尝试什么?

1 个答案:

答案 0 :(得分:1)

找到我的问题的解决方案,但仍然不确定为什么会发生这种情况。我仍然觉得这是优胜美地的事情,但谁知道......

解决方案:

PHP_BINDIR预定义常量返回PHP二进制文件的完整路径,因此请务必将其添加到exec字符串中,如下所示:

<?php
    exec(PHP_BINDIR.'/php -v 2>&1', $output);
    var_dump($output);
?>

现在应按预期调用您的脚本。

希望这有助于其他人。