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

alibaren 2015-07-26 03:33:25
我自己用C++写的一个PHP扩展,编译安装好之后,问题来了,请君听我慢慢道来。

1,为了测试,我写了个测试脚本ctp.php
<?php
echo "hello this is a test ctp extension!<br>";
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)

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

在下谢过!
...全文
363 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
夏之冰雪 2015-07-28
  • 打赏
  • 举报
回复
引用 6 楼 alibaren 的回复:
大家不要再猜测了,这个问题我请教一个国外的开发者解决了。 其实这个问题跟配置没有关系,我的配置是正确的,不然就不会在命令行跟浏览器端都显示我的函数已经存在。 问题的原因是:我自己写的PHP扩展库依赖的第三方库已经更行了,而我不知情,还是看得老版本的文档, 所以就出现浏览器不输出结果的问题。 我只需要把我的C++文件里面的std::cout 改成Php::out 即可 给大家看看我期待已久的结果图吧
赞,自己解决了。 学习了~
alibaren 2015-07-27
  • 打赏
  • 举报
回复
引用 4 楼 love01px 的回复:
楼主厉害啊 建议 写一个 <?php phpinfo(); ?> 分别在web和命令行下运行,看下有什么区别。 或者对比下两个php.ini文件 扩展应该是都加载了,浏览器端,有可能用户不同,权限不同。
跟权限无关
alibaren 2015-07-27
  • 打赏
  • 举报
回复
大家不要再猜测了,这个问题我请教一个国外的开发者解决了。
其实这个问题跟配置没有关系,我的配置是正确的,不然就不会在命令行跟浏览器端都显示我的函数已经存在。

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

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

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

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

alibaren 2015-07-27
  • 打赏
  • 举报
回复
引用 3 楼 hellodifa 的回复:
命令行是实时加载php的,而web不是,修改php配置如加扩展后,需要重启服务器才能生效。
谢谢你的提醒,我不会犯这么低级的错误
indexroot 2015-07-27
  • 打赏
  • 举报
回复
楼主厉害啊 建议 写一个 <?php phpinfo(); ?> 分别在web和命令行下运行,看下有什么区别。 或者对比下两个php.ini文件 扩展应该是都加载了,浏览器端,有可能用户不同,权限不同。
夏之冰雪 2015-07-27
  • 打赏
  • 举报
回复
命令行是实时加载php的,而web不是,修改php配置如加扩展后,需要重启服务器才能生效。
alibaren 2015-07-27
  • 打赏
  • 举报
回复
感谢你的回答,不过你的回答是错的。 你的错误如下: 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
果酱很好吃 2015-07-27
  • 打赏
  • 举报
回复
我只知道php运行cli模式下用的配置文件和执行web用的配置文件是不一样的,你应该将你的扩展也添加到运行web的那个配置文件里面 web用的是/usr/local/php/etc/php.ini这个配置文件 cli应该是这个/etc/php.ini

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧