php - 如何在 php:5.4-apache docker 中安装 zip 扩展
问题描述
问题
我想为 PHP 应用程序设置一个基于 docker 的开发环境。该环境应模拟生产服务器。
此应用程序想要导出一个 xlsx 文件并抛出Fatal error: Class 'ZipArchive' not found in /var/www/html/lib/xlsxwriter.class.php on line 95
任何在我的 docker 容器中安装 PHP zip 扩展的尝试都失败了
拳头尝试
#chose the php version here
FROM php:5.4-apache
RUN docker-php-ext-install pdo pdo_mysql mysqli mysql zip
# https://stackoverflow.com/questions/49907308/installing-xdebug-in-docker
# this is for php 7
#RUN yes | pecl install xdebug \
# && echo "zend_extension=$(find /usr/local/lib/php/extensions/ -name xdebug.so)" > /usr/local/etc/php/conf.d/xdebug.ini \
# && echo "xdebug.remote_enable=on" >> /usr/local/etc/php/conf.d/xdebug.ini \
# && echo "xdebug.remote_autostart=off" >> /usr/local/etc/php/conf.d/xdebug.ini
RUN yes | pecl install xdebug-2.4.1 \
&& echo "zend_extension=$(find /usr/local/lib/php/extensions/ -name xdebug.so)" > /usr/local/etc/php/conf.d/xdebug.ini \
&& echo "xdebug.remote_enable=on" >> /usr/local/etc/php/conf.d/xdebug.ini \
&& echo "xdebug.remote_autostart=off" >> /usr/local/etc/php/conf.d/xdebug.ini
RUN usermod -u 431 www-data
我明白了configure: error: zip support requires ZLIB. Use --with-zlib-dir=<DIR> to specify prefix where ZLIB include and library are located
第二次尝试
我已经添加了
RUN docker-php-ext-configure zip --with-zlib-dir=/usr/src/php/ext/zip/ \
&& docker-php-ext-install pdo pdo_mysql mysqli mysql zip
但得到了configure: error: Can not find zlib headers under "/usr/src/php/ext/zip/"
第三次尝试
RUN apt-get install libzip /
&& pecl channel-update pecl.php.net && pecl install zip
结束于
configure: error: Please reinstall the libzip distribution
ERROR: `/tmp/pear/temp/zip/configure' failed
其他尝试
RUN apt-get update && apt-get install -y zip libzip2 \
&& docker-php-ext-configure zip --with-libzip \
&& docker-php-ext-install zip
W: Failed to fetch http://httpredir.debian.org/debian/dists/jessie-updates/main/binary-amd64/Packages 404 Not Found [IP: 151.101.12.204 80]
解决方案
在@yosifkit 的帮助下,我找到了解决方案(https://github.com/docker-library/php/issues/748#issuecomment-480449743)
仅供参考:这是我的 dockerfiles。我确信它们可以优化,但它们适用于我的项目。
这是针对 php5.4 的:即使 php5.4 已经过时了,但我需要它进行维护,因此我想使用 docker 来获得运行环境。
FROM php:5.4-apache
RUN a2enmod rewrite
RUN sed -i '/jessie-updates/d' /etc/apt/sources.list # Now archived
RUN docker-php-ext-install pdo pdo_mysql mysqli mysql
RUN yes | pecl install xdebug-2.4.1 \
&& echo "zend_extension=$(find /usr/local/lib/php/extensions/ -name xdebug.so)" > /usr/local/etc/php/conf.d/xdebug.ini \
&& echo "xdebug.remote_enable=on" >> /usr/local/etc/php/conf.d/xdebug.ini \
&& echo "xdebug.remote_autostart=off" >> /usr/local/etc/php/conf.d/xdebug.ini
RUN usermod -u 431 www-data
RUN set -eux; apt-get update; apt-get install -y libzip-dev zlib1g-dev; docker-php-ext-install zip
对于 php7.3
#chose the php version here
# FROM php:7.0-apache
FROM php:7.3-apache-stretch
RUN a2enmod rewrite
RUN docker-php-ext-install pdo pdo_mysql mysqli
RUN yes | pecl install xdebug-2.7.0 \
&& echo "zend_extension=$(find /usr/local/lib/php/extensions/ -name xdebug.so)" > /usr/local/etc/php/conf.d/xdebug.ini \
&& echo "xdebug.remote_enable=on" >> /usr/local/etc/php/conf.d/xdebug.ini \
&& echo "xdebug.remote_autostart=off" >> /usr/local/etc/php/conf.d/xdebug.ini
RUN usermod -u 431 www-data
RUN set -eux; apt-get update; apt-get install -y libzip-dev zlib1g-dev; docker-php-ext-install zip
推荐阅读
- python - 如何用str限制打印函数的输出?
- java - Write 方法返回指定 int 数组中出现 n 次或多次的数字列表
- android - 没有为“QuerySnapshot”类型定义吸气剂“文档”
- svelte - 我在等待时做错了什么
- java - 为什么广播接收器在省电模式后不启动前台服务?
- java - 使用 ZAP 代理客户端扫描成功时不生成报告
- wordpress - Wordpress Woocommerce 添加到购物车行为
- flutter - 重复空检查的最佳实践
- node.js - Amazon DynamoDB 单表;在单个请求中获取帖子和用户信息
- unit-testing - Karma 单元测试:如何覆盖 removeUser() 订阅中的代码