在做一项目需要在CLI模式下执行YAF框架,结果各种悲剧发生了.
拷贝一份phpi.ini提CLI使用, cp php.ini cli_php.ini (extension_dir 路径在 cat /usr/local/php5/bin/php-config 中查找)
cli_php.ini
extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/"
extension = "json.so"
extension = "memcache.so"
extension = "imagick.so"
extension = "yaf.so"
extension = "yar.so"
extension = "mongo.so"
extension = "httpsqs.so"
extension = "redis.so"
使用-c指定php.ini路径
php -c /usr/local/php/etc/cli_php.ini clisapi.php
报错
[root@api dev1]# php -c /usr/local/php/etc/cli_php.ini clisapi.php request_uir="/Index/Cli/demo2"
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/yar.so' - /usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/yar.so: undefined symbol: php_json_encode in Unknown on line
解决方法:
yar.so 加载之前必须加载 json.so ,而json.so是在/etc/php.d/json.ini中加载,这样会导致json.so在memcached.so之后加载;可以删除/etc /php.d/json.ini文件,而在php.ini中直接添加extensino=json.so来解决