Docker PHP5.6调用未定义的函数bindtextdomain()

时间:2017-04-11 08:58:19

标签: php docker dockerfile php-gettext

问题:

我有一个使用nginx服务和PHP服务的Docker。 当我尝试打开我的开发项目的页面时,我遇到了这个错误:

  

致命错误:在第16行的/usr/share/nginx/html/some_project/some_path/Bootstrap.php中调用未定义的函数bindtextdomain()

我看到这是一个缺少依赖的问题:php-gettext

我的配置:

在我的Dockerfile中,我尝试安装它:

FROM php:5.6.30-fpm
MAINTAINER DarckCrystale "xxx@xxx.xx"

# Here I try to install the php-gettext extension
# but it does not work
RUN apt-get update && apt-get install -y php-gettext gettext

# Setup PHP configuration
ADD php.ini /usr/local/etc/php/conf.d/php.ini

在我的php.ini中,我加载它:

extension=gettext.so

其他信息:

当我在我的容器中运行时

php -i | grep extension_dir

我显示了此消息:

  

PHP警告:PHP启动:无法加载动态库' /usr/local/lib/php/extensions/no-debug-non-zts-20131226/gettext.so' - /usr/local/lib/php/extensions/no-debug-non-zts-20131226/gettext.so:无法打开共享对象文件:第0行的“未知”中没有此类文件或目录

对我来说似乎是什么:

我认为

RUN apt-get update && apt-get install -y php-gettext gettext

未安装php-gettext扩展程序。我不知道为什么。我认为这是一个PHP Dockerized特定问题。

1 个答案:

答案 0 :(得分:1)

所以,经过努力,我终于找到了如何在PHP容器中安装此扩展程序!

如何解决这个问题?

在Dockerfile中使用docker-php-ext-install代替apt-get install

FROM php:5.6.30-fpm
MAINTAINER DarckCrystale "xxx@xxx.xx"

# Here I install the php-gettext extension
# and it works! :D
RUN docker-php-ext-install gettext

# Setup PHP configuration
ADD php.ini /usr/local/etc/php/conf.d/php.ini

有什么问题?

PHP容器有一种特定的方式来安装PHP扩展:

  

如何安装更多PHP扩展程序

     

我们提供帮助脚本docker-php-ext-configuredocker-php-ext-installdocker-php-ext-enable,以便更轻松地安装PHP扩展。

所以php-gettext扩展安装似乎只能使用提供的脚本。