Когда я запускаю этот PHP-скрипт с локального сервера apache на моем macbook:
<?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 и не обнаружил никаких дополнительных ошибок, так как они все равно перенаправляются на вывод сценария. Я также попытался разобраться с этой проблемой, но, похоже, только нашел результаты, связанные с Yosemite, которые на самом деле не помогли. Что еще я должен попробовать?
Нашел решение моей проблемы, но все еще не знал, почему это происходит. У меня все еще есть чувство, что это вещь Йосемити, но кто знает...
Решение:
PHP_BINDIR
константа PHP_BINDIR
возвращает полный путь к PHP_BINDIR
PHP, поэтому просто добавьте их в строку exec так:
<?php
exec(PHP_BINDIR.'/php -v 2>&1', $output);
var_dump($output);
?>
Теперь ваш сценарий должен быть вызван как ожидалось.
Надеюсь, это помогает кому-то другому.