欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

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

程序员文章站 2022-03-22 20:42:40
...
我自己用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 即可

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