2015-11-09 76 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