php 扩展可与 CLI 配合使用,可与 apache 配合使用分段错误
我使用 SWIG 构建了一个 PHP 扩展。这是一个共享库,我放置在我的 linux 机器上的 php 项目中。该项目位于目录 /var/www/my_web 中,扩展共享库位于 /var/www/my_web/resources/library/ 中。
在文件 /etc/php5/cli/php.ini 中,我添加了以下行:
extension=/var/www/my_web/resources/library/my_lib.so
在文件 /etc/php5/apache2/php.ini 中,我添加了line:
extension=/var/www/my_web/resources/library/my_lib.so
我有一个测试 php 页面,它执行以下操作...
print_r(get_loaded_extensions());
print_r(get_extension_funcs("my_lib"));
如果我通过 cli PHP 运行该测试页面,一切都很好。我得到了 html,甚至可以在浏览器中保存和打开。看起来不错。但是,如果我实际浏览到该页面,我会
[Fri Jan 07 11:37:18 2011] [notice] child pid 3918 exit signal Segmentation fault (11)
[Fri Jan 07 11:37:18 2011] [notice] child pid 3919 exit signal Segmentation fault (11)
在 apache 日志中
得到: my_web 的其他部分工作得很好,但这个测试页却不行。我注意到的另一件事是,如果我只执行 print_r(get_loaded_extensions()); 而没有另一行,它可以在 apache 中工作,并且我确实看到 my_lib 被列为加载的扩展。所以,似乎只有当我尝试访问 apache 中的 my_lib 时才会出现问题。
我正在使用 php 5.3.2、apache 2.2.14 和 swig 2.0.1。
如有任何建议或意见,我们将不胜感激。
谢谢。
I built a PHP extension using SWIG. It is a shared lib that I placed in my php project on my linux box. The project lives in the directory /var/www/my_web and the extension shared lib is placed in /var/www/my_web/resources/library/.
In the file /etc/php5/cli/php.ini, I added the line:
extension=/var/www/my_web/resources/library/my_lib.so
In the file /etc/php5/apache2/php.ini, I added the line:
extension=/var/www/my_web/resources/library/my_lib.so
I have a test php page that does the following...
print_r(get_loaded_extensions());
print_r(get_extension_funcs("my_lib"));
If I run that test page through the cli PHP, everything is fine. I get html that I could even save and open in a browser. Looks good. However, if I actually browse to the page, I get:
[Fri Jan 07 11:37:18 2011] [notice] child pid 3918 exit signal Segmentation fault (11)
[Fri Jan 07 11:37:18 2011] [notice] child pid 3919 exit signal Segmentation fault (11)
in the apache log.
Other parts of my_web work just fine, but this test page does not. The other thing I noticed is that if I only do print_r(get_loaded_extensions()); without the other line, it works in apache and I do see my_lib listed as a loaded extension. So, it seems only when I try to access my_lib in apache do problems occur.
I am using php 5.3.2, apache 2.2.14, and swig 2.0.1.
Please, any suggestions or comments are greatly appreciated.
Thanks.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您的扩展是否与也链接到 Apache 但版本/路径不同的库链接?尝试查看 apache 已加载的内容(例如 lsof 或 pmap),并与您的扩展的 ldd 进行比较。
Did you link your extension with libraries also linked to Apache, but different versions/paths? Try looking at what apache has loaded with e.g. lsof or pmap and compare to ldd of your extension.