php自定义C++模块通过命令行工作,而不是在Web服务器上

php custom C++ module works from command line, not on webserver

本文关键字:Web 服务器 工作 C++ 自定义 模块 命令行 php      更新时间:2023-10-16

我用C++和Swig制作了一个自定义的PHP模块。它可以从命令行工作,但不适用于我的Web服务器:

php index.php
php-cgi index.php

这两个都很好。

我使用的是lighttpd和php。我没有以任何特殊的方式配置这些。我刚刚用sudo apt-get安装了它们。

不幸的是,如果我制作一个网页,我会得到这个:

Fatal error: Call to undefined function minikey_to_wif() in /var/www/index.php on line 6 

调用function_exists("minikey_to_if")也返回False。

phpinfo()不显示我的模块minikey,而是显示与我编辑的文件(/etc/php5/cgi/php.ini)相同的配置路径:

extension=/path/to/php-ext/minikey/minikey.so

我还尝试将它复制到其他PHP扩展的安装位置(/usr/lib/php5/20090626+lfs/),但也不起作用。

我已经无数次停下来,又无数次启动lighttpd。每次,当我运行ps aux|grep-php时,都没有结果。我也重新启动过几次,但都没有效果。我不知道发生了什么事。

OK找到了答案。

扩展依赖于安装在非标准位置的库。通常我在~/.bashrc中设置LD_LIBRARY_PATH。但当web服务器运行扩展时,它没有那个环境变量。

修复方法是使用/home/genjix/usr/lib在/etc/ld.so.conf.d/genjix.conf中创建一个文件,并以root身份运行ldconfig。

尝试使用lighty运行phpinfo()。确保它指向正确的php.ini。

如果您认为这就是问题所在,您可以使用"bin-path" => "/path/to/php-cgi -c /path/to/php.ini":从lighttpd.conf内部使用-c开关启动php

例如

fastcgi.server = (
    ".php" => (
            (
                    "bin-path" => "/path/to/php-cgi -c /path/to/php.ini",
                    "socket" => "/tmp/php.socket",
                    "max-procs" => 4,
                    "idle-timeout" => 30,
                    "bin-environment" => (
                            "PHP_FCGI_CHILDREN" => "4",
                            "PHP_FCGI_MAX_REQUESTS" => "1000"
                    )
            )
    )
)