让PHP的App Engine加载BCMath或php.ini文件

3

我正在使用来自Arch Linux存储库的最新php-cgi。我在php.ini中启用了BCMath模块,当我运行php、php-cgi和Apache中的php时它可以工作。然而,当dev_appserver.py运行php时,它会不知何故丢失我在php.ini中设置的配置。这导致BCMath、soap和我的本地设置都无法加载,从而引发以下问题:

dev_appserver.py --php_executable_path /usr/bin/php-cgi appengine-try-php
PHPEnvironmentError: The PHP runtime requires the "bccomp" function, which is not defined.

php-cgi -i | grep -i bcmath 返回 BCMATH 已启用。

php -i | grep -i bcmath 返回 BCMATH 已启用。

php -r "echo bccomp('1.0001', '1', 5);" 返回 1。

有没有办法让 dev_appserver.py 加载模块或 php.ini 文件?

2个回答

1
这是失败的代码 - 我们检查函数是否存在。
if (!function_exists('bccomp')) {
  echo "The PHP runtime requires the \"bccomp\" function, which is not ";
  echo "defined.\n";
  echo "If you built PHP using \"configure\" then please rebuild with:\n";
  echo ' ./configure  --enable-bcmath';
  exit(1);
}

我不知道您为什么启用了扩展程序,但函数不存在。可能尝试列出可用的函数来确认它是否存在。
 php -r 'print_r(get_defined_functions());' | grep -i bccomp

似乎devappserver.py脚本完全忽略php.ini文件。我在那里声明了我的时区设置和指定的bcmath模块。这导致devappserver加载一个没有正确设置的php。从命令行运行php和php-cgi会加载php.ini文件。但是,当我尝试修改check_environment.php并注入phpinfo()时,它提供的php完全不知道php.ini,包括没有设置时区。 - Ray Foss
我已经更新了问题...就好像dev_appserver.py使用-n运行php-cgi一样,“将不使用php.ini文件”。是的,当我运行php -r 'print_r(get_defined_functions());' | grep -i bccomp时,bccomp是函数938。 - Ray Foss
原来 dev_appserver.py 加载了它自己的 php.ini,在 runtime.py 的第 145 行。我正在研究这个问题。 - Ray Foss
原来,您可以在项目目录中放置一个php.ini文件并读取它。不幸的是,现在我遇到了一个关于“未指定输入文件”的奇怪错误。 - Ray Foss

0

google-cloud-sdk/platform/google_appengine/google/appengine/tools/devappserver2/php/runtime.py

支持从项目目录加载php.ini文件,因此您只需将php.ini文件放入项目目录中即可。与php的所有其他实例不同,默认情况下它会忽略/etc/php/php.ini中的php.ini文件。这是我正在使用的php.ini脚本。与生产应用程序引擎相比,它可能具有额外的模块和缺失的模块。

date.timezone = America/New_York
extension=bcmath.so
extension=bz2.so
extension=curl.so
extension=gd.so
extension=gettext.so
extension=mcrypt.so
extension=mysqli.so
extension=mysql.so
extension=openssl.so
extension=pdo_mysql.so
extension=soap.so
extension=zip.so

祝您编程愉快。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接