forked from docker-library/php
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
14c53c1
commit dcbf6a4
Showing
61 changed files
with
4,222 additions
and
3 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,155 @@ | ||
# | ||
# NOTE: THIS DOCKERFILE IS GENERATED VIA "update.sh" | ||
# | ||
# PLEASE DO NOT EDIT IT DIRECTLY. | ||
# | ||
|
||
FROM ubuntu:bionic | ||
|
||
# persistent / runtime deps | ||
ENV PHPIZE_DEPS \ | ||
autoconf \ | ||
dpkg-dev \ | ||
file \ | ||
g++ \ | ||
gcc \ | ||
libc-dev \ | ||
make \ | ||
pkg-config \ | ||
re2c | ||
RUN apt-get update && apt-get install -y \ | ||
$PHPIZE_DEPS \ | ||
ca-certificates \ | ||
curl \ | ||
libcurl4-openssl-dev \ | ||
libedit2 \ | ||
libsqlite3-0 \ | ||
libxml2 \ | ||
xz-utils \ | ||
--no-install-recommends && rm -r /var/lib/apt/lists/* | ||
|
||
ENV PHP_INI_DIR /usr/local/etc/php | ||
RUN mkdir -p $PHP_INI_DIR/conf.d | ||
|
||
##<autogenerated>## | ||
##</autogenerated>## | ||
|
||
# Apply stack smash protection to functions using local buffers and alloca() | ||
# Make PHP's main executable position-independent (improves ASLR security mechanism, and has no performance impact on x86_64) | ||
# Enable optimization (-O2) | ||
# Enable linker optimization (this sorts the hash buckets to improve cache locality, and is non-default) | ||
# Adds GNU HASH segments to generated executables (this is used if present, and is much faster than sysv hash; in this configuration, sysv hash is also generated) | ||
# https://github.com/docker-library/php/issues/272 | ||
ENV PHP_CFLAGS="-fstack-protector-strong -fpic -fpie -O2" | ||
ENV PHP_CPPFLAGS="$PHP_CFLAGS" | ||
ENV PHP_LDFLAGS="-Wl,-O1 -Wl,--hash-style=both -pie" | ||
|
||
ENV GPG_KEYS 0BD78B5F97500D450838F95DFE857D9A90D90EC1 6E4F6AB321FDC07F2C332E3AC2BF0BC433CFC8B3 | ||
|
||
ENV PHP_VERSION 5.6.36 | ||
ENV PHP_URL="https://secure.php.net/get/php-5.6.36.tar.xz/from/this/mirror" PHP_ASC_URL="https://secure.php.net/get/php-5.6.36.tar.xz.asc/from/this/mirror" | ||
ENV PHP_SHA256="18f536bf548e909b4e980379d0c4e56d024b2b1eb1c9768fd169360491f1d6dd" PHP_MD5="" | ||
|
||
RUN set -xe; \ | ||
\ | ||
fetchDeps=' \ | ||
wget \ | ||
'; \ | ||
if ! command -v gpg > /dev/null; then \ | ||
fetchDeps="$fetchDeps \ | ||
dirmngr \ | ||
gnupg \ | ||
"; \ | ||
fi; \ | ||
apt-get update; \ | ||
apt-get install -y --no-install-recommends $fetchDeps; \ | ||
rm -rf /var/lib/apt/lists/*; \ | ||
\ | ||
mkdir -p /usr/src; \ | ||
cd /usr/src; \ | ||
\ | ||
wget -O php.tar.xz "$PHP_URL"; \ | ||
\ | ||
if [ -n "$PHP_SHA256" ]; then \ | ||
echo "$PHP_SHA256 *php.tar.xz" | sha256sum -c -; \ | ||
fi; \ | ||
if [ -n "$PHP_MD5" ]; then \ | ||
echo "$PHP_MD5 *php.tar.xz" | md5sum -c -; \ | ||
fi; \ | ||
\ | ||
if [ -n "$PHP_ASC_URL" ]; then \ | ||
wget -O php.tar.xz.asc "$PHP_ASC_URL"; \ | ||
export GNUPGHOME="$(mktemp -d)"; \ | ||
for key in $GPG_KEYS; do \ | ||
gpg --keyserver ha.pool.sks-keyservers.net --recv-keys "$key"; \ | ||
done; \ | ||
gpg --batch --verify php.tar.xz.asc php.tar.xz; \ | ||
rm -rf "$GNUPGHOME"; \ | ||
fi; \ | ||
\ | ||
apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false $fetchDeps | ||
|
||
COPY docker-php-source /usr/local/bin/ | ||
|
||
RUN set -xe \ | ||
&& buildDeps=" \ | ||
$PHP_EXTRA_BUILD_DEPS \ | ||
libedit-dev \ | ||
libsqlite3-dev \ | ||
libssl-dev \ | ||
libxml2-dev \ | ||
zlib1g-dev \ | ||
" \ | ||
&& apt-get update && apt-get install -y $buildDeps --no-install-recommends && rm -rf /var/lib/apt/lists/* \ | ||
\ | ||
&& export CFLAGS="$PHP_CFLAGS" \ | ||
CPPFLAGS="$PHP_CPPFLAGS" \ | ||
LDFLAGS="$PHP_LDFLAGS" \ | ||
&& docker-php-source extract \ | ||
&& cd /usr/src/php \ | ||
&& gnuArch="$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)" \ | ||
&& debMultiarch="$(dpkg-architecture --query DEB_BUILD_MULTIARCH)" \ | ||
# https://bugs.php.net/bug.php?id=74125 | ||
&& if [ ! -d /usr/include/curl ]; then ln -sT "/usr/include/$debMultiarch/curl" /usr/local/include/curl; fi \ | ||
&& ./configure \ | ||
--build="$gnuArch" \ | ||
--with-config-file-path="$PHP_INI_DIR" \ | ||
--with-config-file-scan-dir="$PHP_INI_DIR/conf.d" \ | ||
\ | ||
--disable-cgi \ | ||
\ | ||
# --enable-ftp is included here because ftp_ssl_connect() needs ftp to be compiled statically (see https://github.com/docker-library/php/issues/236) | ||
--enable-ftp \ | ||
# --enable-mbstring is included here because otherwise there's no way to get pecl to use it properly (see https://github.com/docker-library/php/issues/195) | ||
--enable-mbstring \ | ||
# --enable-mysqlnd is included here because it's harder to compile after the fact than extensions are (since it's a plugin for several extensions, not an extension in itself) | ||
--enable-mysqlnd \ | ||
\ | ||
--with-curl \ | ||
--with-libedit \ | ||
--with-openssl \ | ||
--with-zlib \ | ||
\ | ||
# bundled pcre does not support JIT on s390x | ||
# https://manpages.debian.org/stretch/libpcre3-dev/pcrejit.3.en.html#AVAILABILITY_OF_JIT_SUPPORT | ||
$(test "$gnuArch" = 's390x-linux-gnu' && echo '--without-pcre-jit') \ | ||
--with-libdir="lib/$debMultiarch" \ | ||
\ | ||
$PHP_EXTRA_CONFIGURE_ARGS \ | ||
&& make -j "$(nproc)" \ | ||
&& make install \ | ||
&& { find /usr/local/bin /usr/local/sbin -type f -executable -exec strip --strip-all '{}' + || true; } \ | ||
&& make clean \ | ||
&& cd / \ | ||
&& docker-php-source delete \ | ||
# https://github.com/docker-library/php/issues/443 | ||
&& pecl update-channels \ | ||
&& rm -rf /tmp/pear ~/.pearrc \ | ||
&& apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false $buildDeps | ||
|
||
COPY docker-php-ext-* docker-php-entrypoint /usr/local/bin/ | ||
|
||
ENTRYPOINT ["docker-php-entrypoint"] | ||
##<autogenerated>## | ||
CMD ["php", "-a"] | ||
##</autogenerated>## |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
#!/bin/sh | ||
set -e | ||
|
||
# first arg is `-f` or `--some-option` | ||
if [ "${1#-}" != "$1" ]; then | ||
set -- php "$@" | ||
fi | ||
|
||
exec "$@" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,69 @@ | ||
#!/bin/sh | ||
set -e | ||
|
||
# prefer user supplied CFLAGS, but default to our PHP_CFLAGS | ||
: ${CFLAGS:=$PHP_CFLAGS} | ||
: ${CPPFLAGS:=$PHP_CPPFLAGS} | ||
: ${LDFLAGS:=$PHP_LDFLAGS} | ||
export CFLAGS CPPFLAGS LDFLAGS | ||
|
||
srcExists= | ||
if [ -d /usr/src/php ]; then | ||
srcExists=1 | ||
fi | ||
docker-php-source extract | ||
if [ -z "$srcExists" ]; then | ||
touch /usr/src/php/.docker-delete-me | ||
fi | ||
|
||
cd /usr/src/php/ext | ||
|
||
usage() { | ||
echo "usage: $0 ext-name [configure flags]" | ||
echo " ie: $0 gd --with-jpeg-dir=/usr/local/something" | ||
echo | ||
echo 'Possible values for ext-name:' | ||
find . \ | ||
-mindepth 2 \ | ||
-maxdepth 2 \ | ||
-type f \ | ||
-name 'config.m4' \ | ||
| xargs -n1 dirname \ | ||
| xargs -n1 basename \ | ||
| sort \ | ||
| xargs | ||
echo | ||
echo 'Some of the above modules are already compiled into PHP; please check' | ||
echo 'the output of "php -i" to see which modules are already loaded.' | ||
} | ||
|
||
ext="$1" | ||
if [ -z "$ext" ] || [ ! -d "$ext" ]; then | ||
usage >&2 | ||
exit 1 | ||
fi | ||
shift | ||
|
||
pm='unknown' | ||
if [ -e /lib/apk/db/installed ]; then | ||
pm='apk' | ||
fi | ||
|
||
if [ "$pm" = 'apk' ]; then | ||
if \ | ||
[ -n "$PHPIZE_DEPS" ] \ | ||
&& ! apk info --installed .phpize-deps > /dev/null \ | ||
&& ! apk info --installed .phpize-deps-configure > /dev/null \ | ||
; then | ||
apk add --no-cache --virtual .phpize-deps-configure $PHPIZE_DEPS | ||
fi | ||
fi | ||
|
||
if command -v dpkg-architecture > /dev/null; then | ||
gnuArch="$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)" | ||
set -- --build="$gnuArch" "$@" | ||
fi | ||
|
||
cd "$ext" | ||
phpize | ||
./configure "$@" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,114 @@ | ||
#!/bin/sh | ||
set -e | ||
|
||
extDir="$(php -r 'echo ini_get("extension_dir");')" | ||
cd "$extDir" | ||
|
||
usage() { | ||
echo "usage: $0 [options] module-name [module-name ...]" | ||
echo " ie: $0 gd mysqli" | ||
echo " $0 pdo pdo_mysql" | ||
echo " $0 --ini-name 0-apc.ini apcu apc" | ||
echo | ||
echo 'Possible values for module-name:' | ||
find -maxdepth 1 \ | ||
-type f \ | ||
-name '*.so' \ | ||
-exec basename '{}' ';' \ | ||
| sort \ | ||
| xargs | ||
echo | ||
echo 'Some of the above modules are already compiled into PHP; please check' | ||
echo 'the output of "php -i" to see which modules are already loaded.' | ||
} | ||
|
||
opts="$(getopt -o 'h?' --long 'help,ini-name:' -- "$@" || { usage >&2 && false; })" | ||
eval set -- "$opts" | ||
|
||
iniName= | ||
while true; do | ||
flag="$1" | ||
shift | ||
case "$flag" in | ||
--help|-h|'-?') usage && exit 0 ;; | ||
--ini-name) iniName="$1" && shift ;; | ||
--) break ;; | ||
*) | ||
{ | ||
echo "error: unknown flag: $flag" | ||
usage | ||
} >&2 | ||
exit 1 | ||
;; | ||
esac | ||
done | ||
|
||
modules= | ||
for module; do | ||
if [ -z "$module" ]; then | ||
continue | ||
fi | ||
if [ -f "$module.so" ] && ! [ -f "$module" ]; then | ||
# allow ".so" to be optional | ||
module="$module.so" | ||
fi | ||
if ! [ -f "$module" ]; then | ||
echo >&2 "error: '$module' does not exist" | ||
echo >&2 | ||
usage >&2 | ||
exit 1 | ||
fi | ||
modules="$modules $module" | ||
done | ||
|
||
if [ -z "$modules" ]; then | ||
usage >&2 | ||
exit 1 | ||
fi | ||
|
||
pm='unknown' | ||
if [ -e /lib/apk/db/installed ]; then | ||
pm='apk' | ||
fi | ||
|
||
apkDel= | ||
if [ "$pm" = 'apk' ]; then | ||
if \ | ||
[ -n "$PHPIZE_DEPS" ] \ | ||
&& ! apk info --installed .phpize-deps > /dev/null \ | ||
&& ! apk info --installed .phpize-deps-configure > /dev/null \ | ||
; then | ||
apk add --no-cache --virtual '.docker-php-ext-enable-deps' binutils | ||
apkDel='.docker-php-ext-enable-deps' | ||
fi | ||
fi | ||
|
||
for module in $modules; do | ||
if readelf --wide --syms "$module" | grep -q ' zend_extension_entry$'; then | ||
# https://wiki.php.net/internals/extensions#loading_zend_extensions | ||
absModule="$(readlink -f "$module")" | ||
line="zend_extension=$absModule" | ||
else | ||
line="extension=$module" | ||
fi | ||
|
||
ext="$(basename "$module")" | ||
ext="${ext%.*}" | ||
if php -r 'exit(extension_loaded("'"$ext"'") ? 0 : 1);'; then | ||
# this isn't perfect, but it's better than nothing | ||
# (for example, 'opcache.so' presents inside PHP as 'Zend OPcache', not 'opcache') | ||
echo >&2 | ||
echo >&2 "warning: $ext ($module) is already loaded!" | ||
echo >&2 | ||
continue | ||
fi | ||
|
||
ini="/usr/local/etc/php/conf.d/${iniName:-"docker-php-ext-$ext.ini"}" | ||
if ! grep -q "$line" "$ini" 2>/dev/null; then | ||
echo "$line" >> "$ini" | ||
fi | ||
done | ||
|
||
if [ "$pm" = 'apk' ] && [ -n "$apkDel" ]; then | ||
apk del $apkDel | ||
fi |
Oops, something went wrong.