我用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"
)
)
)
)