当我从我的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错误日志并发现没有其他错误,因为无论如何它们都被重定向到脚本的输出。我也试过谷歌搜索这个问题,但似乎只找到与优胜美地相关的结果,这些结果并没有真正帮助太多。我还应该尝试什么?
答案 0 :(得分:1)
找到我的问题的解决方案,但仍然不确定为什么会发生这种情况。我仍然觉得这是优胜美地的事情,但谁知道......
解决方案:
PHP_BINDIR
预定义常量返回PHP二进制文件的完整路径,因此请务必将其添加到exec字符串中,如下所示:
<?php
exec(PHP_BINDIR.'/php -v 2>&1', $output);
var_dump($output);
?>
现在应按预期调用您的脚本。
希望这有助于其他人。