2015-11-09 42 views
4

我试图启用Laravel所需的一些php扩展。 php.ini文件(https://cloud.google.com/appengine/docs/php/config/php_ini)的文档说要在应用程序的根目录中放置一个php.ini文件。无法在App Engine上为Laravel启用PHP扩展

这是我php.ini是什么样子:

extension=openssl.so 
extension=pdo.so 
extension=tokenizer.so 
extension=mbstring.so 
google_app_engine.enable_functions = "php_sapi_name, php_uname" 

当我部署它,我的日志说:

PHP Warning: PHP Startup: Unable to load dynamic library '/base/php_runtime/modules/openssl.so' - /base/php_runtime/modules/openssl.so: cannot open shared object file: No such file or directory in Unknown on line 0 
PHP Warning: PHP Startup: Unable to load dynamic library '/base/php_runtime/modules/pdo.so' - /base/php_runtime/modules/pdo.so: cannot open shared object file: No such file or directory in Unknown on line 0 
PHP Warning: PHP Startup: Unable to load dynamic library '/base/php_runtime/modules/tokenizer.so' - /base/php_runtime/modules/tokenizer.so: cannot open shared object file: No such file or directory in Unknown on line 0 
PHP Warning: PHP Startup: Unable to load dynamic library '/base/php_runtime/modules/mbstring.so' - /base/php_runtime/modules/mbstring.so: cannot open shared object file: No such file or directory in Unknown on line 0 

我试图改变我在php.ini格式的扩展方式:

extension="openssl.so" 
extension="openssl.dll" 
extension="php_openssl.so" 
extension="php_openssl.dll" 

我试过用引号括起来,没有它们。在它们之间有空格,没有它们。我不知道还有什么可以尝试的。

+0

是那些库可用? https://cloud.google.com/appengine/docs/php/#dynamically_loadable_extensions看起来他们不是(我不知道为什么)。 – Halcyon

+1

我已经想出了这个问题。 该文档说明这些模块已经加载。只有'imagick','curl','mongo'和'intl'需要明确地添加到'php.ini'中。 – Lou

+1

删除'extension = *'行固定它。 – Lou

回答

1

我想通了这个问题。

当您在本地提供应用程序并部署时,App Engine在您的应用程序的根目录中使用php.ini文件。

问题是,当我在本地运行它时,我需要在php.ini中有extension=*行来加载必要的扩展。当我在php.ini中用这些行部署它时,出现了我在我的问题中报告的错误。

我的解决方案是有两个不同版本的php.iniphp.ini.localphp.ini.dev

php.ini.local

extension=mbstring.so 
extension=pdo.so 
extension=openssl.so 
extension=tokenizer.so 
google_app_engine.enable_functions = "php_sapi_name, php_uname" 

php.ini.dev

google_app_engine.enable_functions = "php_sapi_name, php_uname" 

,并使用Makefile中使用取决于我需要或者开发人员版或本地版本替换php.ini中。

Makefile

deploy: 
    cp php.ini.dev php.ini 
    # Code used to deploy 
serve: 
    cp php.ini.local php.ini 
    # Code used to serve locally