自己写的PHP扩展在命令行和浏览器运行的结果不一样?

原创
2016-06-23 13:29:55 983浏览

我自己用C++写的一个PHP扩展,编译安装好之后,问题来了,请君听我慢慢道来。

1,为了测试,我写了个测试脚本ctp.php

";if(function_exists("helloWorld")){echo "exist\n";}else{echo "none exist\n";}echo helloWorld('baren')


2,在浏览器和命令行上分别运行结果如下:


3,我的问题:
1)为什么在浏览器中不能打印出函数hellWorld()的值 ?
2)如何修正此错误,需要更改什么配置文件吗?
3)网上搜索过太多的解决方案,例如改权限,改环境变量,均不能解决。所以我最后的一个问题是,是不与开发环境有关?

4,我的开发环境:
os version :centos 7 x86_64
php version:5.4.43
webserver :Apache/2.4.16 (Unix)

请有过扩展编写部署经验的同行给予帮助?

在下谢过!


回复讨论(解决方案)

我只知道php运行cli模式下用的配置文件和执行web用的配置文件是不一样的,你应该将你的扩展也添加到运行web的那个配置文件里面
web用的是/usr/local/php/etc/php.ini这个配置文件
cli应该是这个/etc/php.ini

感谢你的回答,不过你的回答是错的。
你的错误如下:
1,CLI 和WEB的配置文件都是一样的。而且我在做部署时只是将我的扩展配置文件ctpextension.ini放在了Scan this dir for additional .ini files 默认的目录下面 :/usr/local/php/php.d 当PHP加载配置文件时会自动检查这个目录并把ctpextension.ini 文件里的内容追加到php,ini里面。

2,你说:“cli应该是这个/etc/php.ini” 我也发现我的系统里有这个文件目录,于是我把这个文件删除 ,然后在命令行运行脚本同样能够得到结果。证明你的说法有误。

关于 additional .ini files 你可以阅读这里: http://php.net/manual/zh/function.php-ini-scanned-files.php

命令行是实时加载php的,而web不是,修改php配置如加扩展后,需要重启服务器才能生效。

命令行是实时加载php的,而web不是,修改php配置如加扩展后,需要重启服务器才能生效。


谢谢你的提醒,我不会犯这么低级的错误

大家不要再猜测了,这个问题我请教一个国外的开发者解决了。
其实这个问题跟配置没有关系,我的配置是正确的,不然就不会在命令行跟浏览器端都显示我的函数已经存在。

问题的原因是:我自己写的PHP扩展库依赖的第三方库已经更行了,而我不知情,还是看得老版本的文档,

所以就出现浏览器不输出结果的问题。

我只需要把我的C++文件里面的std::cout 改成Php::out 即可

给大家看看我期待已久的结果图吧

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。