├── 8 ├── .dockerignore ├── Dockerfile ├── Makefile ├── bin │ ├── actions.mk │ ├── files_chmod │ ├── files_chown │ ├── files_import │ ├── files_link │ ├── files_sync │ ├── git_checkout │ ├── git_clone │ ├── init_container │ └── migrate ├── check-configs.sh ├── docker-entrypoint.sh ├── orig │ ├── php-8.1.ini-development │ ├── php-8.1.ini-production │ ├── php-8.2.ini-development │ └── php-8.2.ini-production ├── templates │ ├── authorized_keys.tmpl │ ├── crontab.tmpl │ ├── docker-php-8.1.ini.tmpl │ ├── docker-php-8.2.ini.tmpl │ ├── docker-php-8.3.ini.tmpl │ ├── docker-php-8.4.ini.tmpl │ ├── docker-php-ext-apcu.ini.tmpl │ ├── docker-php-ext-brotli.ini.tmpl │ ├── docker-php-ext-grpc.ini.tmpl │ ├── docker-php-ext-igbinary.ini.tmpl │ ├── docker-php-ext-newrelic.ini.tmpl │ ├── docker-php-ext-opcache.ini.tmpl │ ├── docker-php-ext-pcov.ini.tmpl │ ├── docker-php-ext-spx.ini.tmpl │ ├── docker-php-ext-sqlsrv.ini.tmpl │ ├── docker-php-ext-xdebug.ini.tmpl │ ├── docker-php-ext-xhprof.ini.tmpl │ ├── gitconfig.tmpl │ ├── id_rsa.tmpl │ ├── mariadb-client.cnf.tmpl │ ├── msmtprc.tmpl │ ├── ssh_config.tmpl │ ├── sshd_config.tmpl │ ├── wodby.settings.php.tmpl │ └── zz-www.conf.tmpl └── tests │ ├── authorized_keys │ ├── compose.yml │ ├── crontab │ ├── id_rsa │ ├── php_modules │ ├── 8.1 │ ├── 8.2 │ ├── 8.3 │ └── 8.4 │ ├── run.sh │ └── tests.sh ├── .github ├── actions │ ├── action.yml │ └── release.sh └── workflows │ └── workflow.yml ├── .gitignore ├── .php ├── LICENSE.md ├── README.md ├── index.php ├── release.sh ├── script.sh └── wodby.yml /.github/actions/action.yml: -------------------------------------------------------------------------------- 1 | name: push 2 | description: combine multi-arch image and push 3 | inputs: 4 | version: 5 | description: version 6 | required: true 7 | latest: 8 | description: if tag latest 9 | required: false 10 | latest_major: 11 | description: if tag latest major version 12 | required: false 13 | workdir: 14 | description: workdir 15 | required: true 16 | dev: 17 | description: if set then it's a dev version 18 | user_id: 19 | description: user id 20 | required: true 21 | runs: 22 | using: "composite" 23 | steps: 24 | - name: Build image 25 | env: 26 | PHP_VER: ${{ inputs.version }} 27 | PHP_DEV: ${{ inputs.dev }} 28 | WODBY_USER_ID: ${{ inputs.user_id }} 29 | LATEST: ${{ inputs.latest }} 30 | LATEST_MAJOR: ${{ inputs.latest_major }} 31 | run: | 32 | . $GITHUB_ACTION_PATH/release.sh 33 | shell: bash 34 | working-directory: ${{ inputs.workdir }} 35 | -------------------------------------------------------------------------------- /.github/actions/release.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -ex 4 | 5 | if [[ "${GITHUB_REF}" == refs/heads/master || "${GITHUB_REF}" == refs/tags/* ]]; then 6 | minor_ver="${PHP_VER%.*}" 7 | minor_tag="${minor_ver}" 8 | major_tag="${minor_ver%.*}" 9 | 10 | if [[ -n "${PHP_DEV}" ]]; then 11 | if [[ "${WODBY_USER_ID}" == "501" ]]; then 12 | minor_tag="${minor_tag}-dev-macos" 13 | if [[ -n "${LATEST_MAJOR}" ]]; then 14 | major_tag="${major_tag}-dev-macos" 15 | fi 16 | else 17 | minor_tag="${minor_tag}-dev" 18 | if [[ -n "${LATEST_MAJOR}" ]]; then 19 | major_tag="${major_tag}-dev" 20 | fi 21 | fi 22 | fi 23 | 24 | tags=("${minor_tag}") 25 | if [[ -n "${LATEST_MAJOR}" ]]; then 26 | tags+=("${major_tag}") 27 | fi 28 | 29 | if [[ "${GITHUB_REF}" == refs/tags/* ]]; then 30 | stability_tag=("${GITHUB_REF##*/}") 31 | tags=("${minor_tag}-${stability_tag}") 32 | if [[ -n "${LATEST_MAJOR}" ]]; then 33 | tags+=("${major_tag}-${stability_tag}") 34 | fi 35 | else 36 | if [[ -n "${LATEST}" ]]; then 37 | if [[ -z "${PHP_DEV}" ]]; then 38 | tags+=("latest") 39 | else 40 | if [[ "${WODBY_USER_ID}" == "501" ]]; then 41 | tags+=("dev-macos") 42 | else 43 | tags+=("dev") 44 | fi 45 | fi 46 | fi 47 | fi 48 | 49 | for tag in "${tags[@]}"; do 50 | make buildx-imagetools-create IMAGETOOLS_TAG=${tag} 51 | done 52 | fi -------------------------------------------------------------------------------- /.github/workflows/workflow.yml: -------------------------------------------------------------------------------- 1 | name: Build docker image 2 | 3 | on: 4 | push: 5 | branches: 6 | - master 7 | 8 | tags: 9 | - '*' 10 | 11 | pull_request: 12 | 13 | env: 14 | PHP84: '8.4.7' 15 | PHP83: '8.3.21' 16 | PHP82: '8.2.28' 17 | PHP81: '8.1.32' 18 | DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} 19 | DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} 20 | 21 | jobs: 22 | php84-build: 23 | strategy: 24 | matrix: 25 | arch: 26 | - amd64 27 | - arm64 28 | dev: 29 | - '' 30 | - '1' 31 | user_id: 32 | - 1000 33 | - 501 34 | include: 35 | - arch: amd64 36 | runner: ubuntu-24.04 37 | - arch: arm64 38 | runner: ubuntu-24.04-arm 39 | - user_id: 501 40 | group_id: 20 41 | dev: 1 42 | exclude: 43 | - dev: '' 44 | user_id: 501 45 | runs-on: ${{ matrix.runner }} 46 | steps: 47 | - uses: actions/checkout@v4 48 | - uses: docker/login-action@v3 49 | with: 50 | username: ${{ secrets.DOCKER_USERNAME }} 51 | password: ${{ secrets.DOCKER_PASSWORD }} 52 | - name: build and push 53 | env: 54 | PHP_VER: ${{ env.PHP84 }} 55 | ARCH: ${{ matrix.arch }} 56 | PHP_DEV: ${{ matrix.dev }} 57 | WODBY_USER_ID: ${{ matrix.user_id }} 58 | WODBY_GROUP_ID: ${{ matrix.group_id }} 59 | working-directory: 8 60 | run: | 61 | make 62 | make test 63 | make push 64 | php84-push: 65 | runs-on: ubuntu-latest 66 | strategy: 67 | matrix: 68 | dev: 69 | - '' 70 | - '1' 71 | user_id: 72 | - 1000 73 | - 501 74 | exclude: 75 | - dev: '' 76 | user_id: 501 77 | needs: 78 | - php84-build 79 | steps: 80 | - uses: actions/checkout@v4 81 | - uses: docker/login-action@v3 82 | with: 83 | username: ${{ secrets.DOCKER_USERNAME }} 84 | password: ${{ secrets.DOCKER_PASSWORD }} 85 | - uses: ./.github/actions 86 | with: 87 | version: ${{ env.PHP84 }} 88 | workdir: 8 89 | dev: ${{ matrix.dev }} 90 | user_id: ${{ matrix.user_id }} 91 | latest: true 92 | latest_major: true 93 | 94 | php83-build: 95 | strategy: 96 | matrix: 97 | arch: 98 | - amd64 99 | - arm64 100 | dev: 101 | - '' 102 | - '1' 103 | user_id: 104 | - 1000 105 | - 501 106 | include: 107 | - arch: amd64 108 | runner: ubuntu-24.04 109 | - arch: arm64 110 | runner: ubuntu-24.04-arm 111 | - user_id: 501 112 | group_id: 20 113 | dev: 1 114 | exclude: 115 | - dev: '' 116 | user_id: 501 117 | runs-on: ${{ matrix.runner }} 118 | steps: 119 | - uses: actions/checkout@v4 120 | - uses: docker/login-action@v3 121 | with: 122 | username: ${{ secrets.DOCKER_USERNAME }} 123 | password: ${{ secrets.DOCKER_PASSWORD }} 124 | - name: build and push 125 | env: 126 | PHP_VER: ${{ env.PHP83 }} 127 | ARCH: ${{ matrix.arch }} 128 | PHP_DEV: ${{ matrix.dev }} 129 | WODBY_USER_ID: ${{ matrix.user_id }} 130 | WODBY_GROUP_ID: ${{ matrix.group_id }} 131 | working-directory: 8 132 | run: | 133 | make 134 | make test 135 | make push 136 | php83-push: 137 | runs-on: ubuntu-latest 138 | strategy: 139 | matrix: 140 | dev: 141 | - '' 142 | - '1' 143 | user_id: 144 | - 1000 145 | - 501 146 | exclude: 147 | - dev: '' 148 | user_id: 501 149 | needs: 150 | - php83-build 151 | steps: 152 | - uses: actions/checkout@v4 153 | - uses: docker/login-action@v3 154 | with: 155 | username: ${{ secrets.DOCKER_USERNAME }} 156 | password: ${{ secrets.DOCKER_PASSWORD }} 157 | - uses: ./.github/actions 158 | with: 159 | version: ${{ env.PHP83 }} 160 | workdir: 8 161 | dev: ${{ matrix.dev }} 162 | user_id: ${{ matrix.user_id }} 163 | 164 | php82-build: 165 | strategy: 166 | matrix: 167 | arch: 168 | - amd64 169 | - arm64 170 | dev: 171 | - '' 172 | - '1' 173 | user_id: 174 | - 1000 175 | - 501 176 | include: 177 | - arch: amd64 178 | runner: ubuntu-24.04 179 | - arch: arm64 180 | runner: ubuntu-24.04-arm 181 | - user_id: 501 182 | group_id: 20 183 | dev: 1 184 | exclude: 185 | - dev: '' 186 | user_id: 501 187 | runs-on: ${{ matrix.runner }} 188 | steps: 189 | - uses: actions/checkout@v4 190 | - uses: docker/login-action@v3 191 | with: 192 | username: ${{ secrets.DOCKER_USERNAME }} 193 | password: ${{ secrets.DOCKER_PASSWORD }} 194 | - name: build and push 195 | env: 196 | PHP_VER: ${{ env.PHP82 }} 197 | ARCH: ${{ matrix.arch }} 198 | PHP_DEV: ${{ matrix.dev }} 199 | WODBY_USER_ID: ${{ matrix.user_id }} 200 | WODBY_GROUP_ID: ${{ matrix.group_id }} 201 | working-directory: 8 202 | run: | 203 | make 204 | make test 205 | make push 206 | php82-push: 207 | runs-on: ubuntu-latest 208 | strategy: 209 | matrix: 210 | dev: 211 | - '' 212 | - '1' 213 | user_id: 214 | - 1000 215 | - 501 216 | exclude: 217 | - dev: '' 218 | user_id: 501 219 | needs: 220 | - php82-build 221 | steps: 222 | - uses: actions/checkout@v4 223 | - uses: docker/login-action@v3 224 | with: 225 | username: ${{ secrets.DOCKER_USERNAME }} 226 | password: ${{ secrets.DOCKER_PASSWORD }} 227 | - uses: ./.github/actions 228 | with: 229 | version: ${{ env.PHP82 }} 230 | workdir: 8 231 | dev: ${{ matrix.dev }} 232 | user_id: ${{ matrix.user_id }} 233 | 234 | php81-build: 235 | strategy: 236 | matrix: 237 | arch: 238 | - amd64 239 | - arm64 240 | dev: 241 | - '' 242 | - '1' 243 | user_id: 244 | - 1000 245 | - 501 246 | include: 247 | - arch: amd64 248 | runner: ubuntu-24.04 249 | - arch: arm64 250 | runner: ubuntu-24.04-arm 251 | - user_id: 501 252 | group_id: 20 253 | dev: 1 254 | exclude: 255 | - dev: '' 256 | user_id: 501 257 | runs-on: ${{ matrix.runner }} 258 | steps: 259 | - uses: actions/checkout@v4 260 | - uses: docker/login-action@v3 261 | with: 262 | username: ${{ secrets.DOCKER_USERNAME }} 263 | password: ${{ secrets.DOCKER_PASSWORD }} 264 | - name: build and push 265 | env: 266 | PHP_VER: ${{ env.PHP81 }} 267 | ARCH: ${{ matrix.arch }} 268 | PHP_DEV: ${{ matrix.dev }} 269 | WODBY_USER_ID: ${{ matrix.user_id }} 270 | WODBY_GROUP_ID: ${{ matrix.group_id }} 271 | working-directory: 8 272 | run: | 273 | make 274 | make test 275 | make push 276 | php81-push: 277 | runs-on: ubuntu-latest 278 | strategy: 279 | matrix: 280 | dev: 281 | - '' 282 | - '1' 283 | user_id: 284 | - 1000 285 | - 501 286 | exclude: 287 | - dev: '' 288 | user_id: 501 289 | needs: 290 | - php81-build 291 | steps: 292 | - uses: actions/checkout@v4 293 | - uses: docker/login-action@v3 294 | with: 295 | username: ${{ secrets.DOCKER_USERNAME }} 296 | password: ${{ secrets.DOCKER_PASSWORD }} 297 | - uses: ./.github/actions 298 | with: 299 | version: ${{ env.PHP81 }} 300 | workdir: 8 301 | dev: ${{ matrix.dev }} 302 | user_id: ${{ matrix.user_id }} 303 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .idea/ 2 | *.tmp 3 | .vscode -------------------------------------------------------------------------------- /.php: -------------------------------------------------------------------------------- 1 | 8.4.7#2025-05-22T05:02:10.734834Z 2 | 8.3.21#2025-05-22T05:00:21.108285Z 3 | 8.2.28#2025-05-22T04:57:41.645236Z 4 | 8.1.32#2025-05-22T07:54:47.107142Z -------------------------------------------------------------------------------- /8/.dockerignore: -------------------------------------------------------------------------------- 1 | tests 2 | Makefile 3 | check-configs.sh 4 | orig -------------------------------------------------------------------------------- /8/Dockerfile: -------------------------------------------------------------------------------- 1 | ARG PHP_VER 2 | 3 | FROM php:${PHP_VER:-8.4}-fpm-alpine 4 | 5 | ARG PHP_DEV 6 | 7 | ARG PECL_HTTP_PROXY 8 | 9 | ARG WODBY_USER_ID=1000 10 | ARG WODBY_GROUP_ID=1000 11 | 12 | ENV PHP_DEV="${PHP_DEV}" 13 | 14 | ENV APP_ROOT="/var/www/html" \ 15 | CONF_DIR="/var/www/conf" \ 16 | FILES_DIR="/mnt/files" 17 | 18 | ENV PATH="${PATH}:/home/wodby/.composer/vendor/bin:${APP_ROOT}/vendor/bin:${APP_ROOT}/bin" \ 19 | SSHD_HOST_KEYS_DIR="/etc/ssh" \ 20 | ENV="/home/wodby/.shrc" \ 21 | \ 22 | GIT_USER_EMAIL="wodby@example.com" \ 23 | GIT_USER_NAME="wodby" \ 24 | \ 25 | PHP_EXTENSIONS_DISABLE='xdebug,xhprof,spx' 26 | 27 | ARG TARGETPLATFORM 28 | ARG TARGETARCH 29 | 30 | RUN set -xe; \ 31 | \ 32 | # Delete existing user/group if uid/gid occupied. 33 | existing_group=$(getent group "${WODBY_GROUP_ID}" | cut -d: -f1); \ 34 | if [[ -n "${existing_group}" ]]; then delgroup "${existing_group}"; fi; \ 35 | existing_user=$(getent passwd "${WODBY_USER_ID}" | cut -d: -f1); \ 36 | if [[ -n "${existing_user}" ]]; then deluser "${existing_user}"; fi; \ 37 | \ 38 | apk add --update --no-cache shadow; \ 39 | groupadd -g "${WODBY_GROUP_ID}" wodby; \ 40 | useradd -u "${WODBY_USER_ID}" -m -s /bin/bash -g wodby wodby; \ 41 | adduser wodby www-data; \ 42 | sed -i '/^wodby/s/!/*/' /etc/shadow; \ 43 | \ 44 | apk add --update --no-cache -t .wodby-php-run-deps \ 45 | p7zip \ 46 | bash \ 47 | brotli-libs \ 48 | c-client \ 49 | curl \ 50 | fcgi \ 51 | findutils \ 52 | freetype \ 53 | git \ 54 | gmp \ 55 | gzip \ 56 | icu-libs \ 57 | icu-data-full \ 58 | imagemagick \ 59 | imagemagick-heic \ 60 | imagemagick-jpeg \ 61 | imagemagick-pdf \ 62 | imagemagick-svg \ 63 | imagemagick-tiff \ 64 | imagemagick-webp \ 65 | jpegoptim \ 66 | less \ 67 | libavif \ 68 | libbz2 \ 69 | libevent \ 70 | libgd \ 71 | libgomp \ 72 | libjpeg-turbo \ 73 | libjpeg-turbo-utils \ 74 | libldap \ 75 | libltdl \ 76 | libmemcached-libs \ 77 | libmcrypt \ 78 | libpng \ 79 | librdkafka \ 80 | libsmbclient \ 81 | libuuid \ 82 | libwebp \ 83 | libxml2 \ 84 | libxslt \ 85 | libzip \ 86 | make \ 87 | mariadb-client \ 88 | mariadb-connector-c \ 89 | msmtp \ 90 | nano \ 91 | openssh \ 92 | openssh-client \ 93 | patch \ 94 | pngquant \ 95 | postgresql-client \ 96 | rabbitmq-c \ 97 | rsync \ 98 | sqlite \ 99 | su-exec \ 100 | sudo \ 101 | tar \ 102 | tidyhtml-libs \ 103 | # todo: move out tig and tmux to -dev version. 104 | tig \ 105 | tmux \ 106 | unzip \ 107 | wget \ 108 | yaml; \ 109 | \ 110 | if [[ -n "${PHP_DEV}" ]]; then \ 111 | apk add --update --no-cache -t .wodby-php-dev-run-deps yarn; \ 112 | fi; \ 113 | \ 114 | apk add --update --no-cache -t .wodby-php-build-deps \ 115 | autoconf \ 116 | automake \ 117 | binutils \ 118 | cmake \ 119 | brotli-dev \ 120 | build-base \ 121 | bzip2-dev \ 122 | freetype-dev \ 123 | gd-dev \ 124 | gmp-dev \ 125 | icu-dev \ 126 | imap-dev \ 127 | imagemagick-dev \ 128 | jpeg-dev \ 129 | krb5-dev \ 130 | libavif-dev \ 131 | libevent-dev \ 132 | libgcrypt-dev \ 133 | libjpeg-turbo-dev \ 134 | libmemcached-dev \ 135 | libmcrypt-dev \ 136 | libpng-dev \ 137 | librdkafka-dev \ 138 | libtool \ 139 | libwebp-dev \ 140 | libxslt-dev \ 141 | libzip-dev \ 142 | linux-headers \ 143 | openldap-dev \ 144 | openssl-dev \ 145 | pcre-dev \ 146 | postgresql-dev \ 147 | rabbitmq-c-dev \ 148 | samba-dev \ 149 | sqlite-dev \ 150 | tidyhtml-dev \ 151 | unixodbc-dev \ 152 | yaml-dev \ 153 | zlib-dev; \ 154 | \ 155 | # Install redis-cli. 156 | apk add --update --no-cache redis; \ 157 | mv /usr/bin/redis-cli /tmp/; \ 158 | apk del --purge redis; \ 159 | deluser redis; \ 160 | mv /tmp/redis-cli /usr/bin; \ 161 | \ 162 | # Download helper scripts. 163 | dockerplatform=${TARGETPLATFORM:-linux/amd64};\ 164 | gotpl_url="https://github.com/wodby/gotpl/releases/latest/download/gotpl-${dockerplatform/\//-}.tar.gz"; \ 165 | wget -qO- "${gotpl_url}" | tar xz --no-same-owner -C /usr/local/bin; \ 166 | git clone https://github.com/wodby/alpine /tmp/alpine; \ 167 | cd /tmp/alpine; \ 168 | latest=$(git describe --abbrev=0 --tags); \ 169 | git checkout "${latest}"; \ 170 | mv /tmp/alpine/bin/* /usr/local/bin; \ 171 | \ 172 | docker-php-source extract; \ 173 | cp /usr/src/php/php.ini-production "${PHP_INI_DIR}/php.ini"; \ 174 | \ 175 | NPROC=$(getconf _NPROCESSORS_ONLN); \ 176 | if [[ "${PHP_VERSION:0:3}" == "8.2" || "${PHP_VERSION:0:3}" == "8.3" ]]; then \ 177 | docker-php-ext-configure ftp --with-openssl-dir=/usr; \ 178 | else \ 179 | if [[ "${PHP_VERSION:0:3}" != "8.1" ]]; then \ 180 | docker-php-ext-configure ftp --with-ftp-ssl=/usr; \ 181 | fi; \ 182 | fi; \ 183 | docker-php-ext-install "-j${NPROC}" \ 184 | bcmath \ 185 | bz2 \ 186 | calendar \ 187 | exif \ 188 | $(test "${PHP_VERSION:0:3}" != "8.1" && echo 'ftp') \ 189 | gmp \ 190 | intl \ 191 | ldap \ 192 | mysqli \ 193 | opcache \ 194 | pcntl \ 195 | pdo_mysql \ 196 | pdo_pgsql \ 197 | pgsql \ 198 | soap \ 199 | sockets \ 200 | tidy \ 201 | xsl \ 202 | zip; \ 203 | \ 204 | # GD 205 | docker-php-ext-configure gd \ 206 | --with-external-gd \ 207 | --with-webp \ 208 | --with-freetype \ 209 | --with-avif \ 210 | --with-jpeg; \ 211 | docker-php-ext-install "-j${NPROC}" gd; \ 212 | \ 213 | pecl config-set php_ini "${PHP_INI_DIR}/php.ini"; \ 214 | if [[ -n "${PECL_HTTP_PROXY}" ]]; then \ 215 | # Using pear as pecl throw errors: https://blog.flowl.info/2015/peclpear-behind-proxy-how-to/ 216 | pear config-set http_proxy "${PECL_HTTP_PROXY}"; \ 217 | fi; \ 218 | \ 219 | # Microsoft ODBC driver for SQL Server \ 220 | arch=${TARGETARCH:-amd64};\ 221 | baseurl="https://download.microsoft.com/download/3/5/5/355d7943-a338-41a7-858d-53b259ea33f5"; \ 222 | curl -O "${baseurl}/msodbcsql18_18.3.1.1-1_${arch}.apk" && \ 223 | apk add --allow-untrusted "msodbcsql18_18.3.1.1-1_${arch}.apk"; \ 224 | curl -O "${baseurl}/mssql-tools18_18.3.1.1-1_${arch}.apk" && \ 225 | apk add --allow-untrusted "mssql-tools18_18.3.1.1-1_${arch}.apk"; \ 226 | ln -sfnv /opt/mssql-tools*/bin/* /usr/bin; \ 227 | rm ./*.apk; \ 228 | \ 229 | if [[ "${PHP_VERSION:0:3}" == "8.1" || "${PHP_VERSION:0:3}" == "8.2" || "${PHP_VERSION:0:3}" == "8.3" ]]; then \ 230 | PHP_OPENSSL=yes docker-php-ext-configure imap \ 231 | --with-kerberos \ 232 | --with-imap-ssl; \ 233 | docker-php-ext-install "-j${NPROC}" imap; \ 234 | fi; \ 235 | MAKEFLAGS="-j ${NPROC}" pecl install \ 236 | apcu-5.1.24 \ 237 | amqp-2.1.2 \ 238 | ast-1.1.2 \ 239 | ds-1.5.0 \ 240 | event-3.1.4 \ 241 | grpc-1.68.0 \ 242 | igbinary-3.2.16 \ 243 | imagick-3.8.0 \ 244 | $(test "${PHP_VERSION:0:3}" == "8.4" && echo 'imap-1.0.3') \ 245 | memcached-3.3.0 \ 246 | mongodb-2.0.0 \ 247 | oauth-2.0.9 \ 248 | opentelemetry-1.1.3 \ 249 | pdo_sqlsrv-5.12.0 \ 250 | pcov-1.0.12 \ 251 | protobuf-4.30.2 \ 252 | rdkafka-6.0.5 \ 253 | redis-6.2.0 \ 254 | sqlsrv-5.12.0 \ 255 | smbclient-1.1.1 \ 256 | uploadprogress-2.0.2 \ 257 | uuid-1.2.1 \ 258 | xdebug-3.4.3 \ 259 | xhprof-2.3.10 \ 260 | yaml-2.2.4; \ 261 | \ 262 | docker-php-ext-enable \ 263 | apcu \ 264 | amqp \ 265 | ast \ 266 | ds \ 267 | event \ 268 | igbinary \ 269 | imagick \ 270 | imap \ 271 | grpc \ 272 | memcached \ 273 | mongodb \ 274 | oauth \ 275 | opentelemetry \ 276 | pdo_sqlsrv \ 277 | pcov \ 278 | protobuf \ 279 | rdkafka \ 280 | redis \ 281 | smbclient \ 282 | sqlsrv \ 283 | uploadprogress \ 284 | uuid \ 285 | xdebug \ 286 | xhprof \ 287 | yaml; \ 288 | \ 289 | # Event extension should be loaded after sockets. 290 | # http://osmanov-dev-notes.blogspot.com/2013/07/fixing-php-start-up-error-unable-to.html 291 | mv /usr/local/etc/php/conf.d/docker-php-ext-event.ini /usr/local/etc/php/conf.d/z-docker-php-ext-event.ini; \ 292 | \ 293 | # NewRelic extension and agent. \ 294 | newrelic_url="http://download.newrelic.com/php_agent/release/"; \ 295 | wget -r -nd --no-parent -P /tmp/newrelic -Alinux-musl.tar.gz "${newrelic_url}" >/dev/null 2>&1; \ 296 | tar -xzf /tmp/newrelic/newrelic-php*.tar.gz --strip=1 -C /tmp/newrelic; \ 297 | export NR_INSTALL_SILENT=true; \ 298 | export NR_INSTALL_USE_CP_NOT_LN=true; \ 299 | bash /tmp/newrelic/newrelic-install install; \ 300 | rm -f /usr/local/etc/php/conf.d/newrelic.ini; \ 301 | mkdir -p /var/log/newrelic/; \ 302 | chown -R www-data:www-data /var/log/newrelic/; \ 303 | chmod -R 775 /var/log/newrelic/; \ 304 | \ 305 | # Brotli extension. 306 | brotli_ext_ver="0.15.2"; \ 307 | mkdir -p /usr/src/php/ext/brotli; \ 308 | brotli_url="https://github.com/kjdev/php-ext-brotli/archive/refs/tags/${brotli_ext_ver}.tar.gz"; \ 309 | wget -qO- "${brotli_url}" | tar xz --strip-components=1 -C /usr/src/php/ext/brotli; \ 310 | docker-php-ext-configure brotli --with-libbrotli; \ 311 | docker-php-ext-install "-j${NPROC}" brotli; \ 312 | \ 313 | # SPX extension. 314 | spx_ext_ver="0.4.17"; \ 315 | mkdir -p /usr/src/php/ext/spx; \ 316 | spx_url="https://github.com/NoiseByNorthwest/php-spx/archive/refs/tags/v${spx_ext_ver}.tar.gz"; \ 317 | wget -qO- "${spx_url}" | tar xz --strip-components=1 -C /usr/src/php/ext/spx; \ 318 | docker-php-ext-configure spx; \ 319 | docker-php-ext-install "-j${NPROC}" spx; \ 320 | \ 321 | wget -qO- https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer; \ 322 | \ 323 | # Install Walter (deprecated). 324 | walter_ver="1.4.0"; \ 325 | walter_url="https://github.com/walter-cd/walter/releases/download/v${walter_ver}/walter_${walter_ver}_linux_amd64.tar.gz"; \ 326 | wget -qO- "${walter_url}" | tar xz -C /tmp/; \ 327 | mv /tmp/walter_linux_amd64/walter /usr/local/bin; \ 328 | \ 329 | { \ 330 | echo 'export PS1="\u@${WODBY_APP_NAME:-php}.${WODBY_ENVIRONMENT_NAME:-container}:\w $ "'; \ 331 | # Make sure PATH is the same for ssh sessions. 332 | echo "export PATH=${PATH}"; \ 333 | } | tee /home/wodby/.shrc; \ 334 | \ 335 | cp /home/wodby/.shrc /home/wodby/.bashrc; \ 336 | cp /home/wodby/.shrc /home/wodby/.bash_profile; \ 337 | \ 338 | { \ 339 | echo "Defaults secure_path=\"$PATH\""; \ 340 | echo 'Defaults env_keep += "APP_ROOT FILES_DIR"' ; \ 341 | \ 342 | if [[ -n "${PHP_DEV}" ]]; then \ 343 | echo 'wodby ALL=(root) NOPASSWD:SETENV:ALL'; \ 344 | else \ 345 | echo -n 'wodby ALL=(root) NOPASSWD:SETENV: ' ; \ 346 | echo -n '/usr/local/bin/files_chmod, ' ; \ 347 | echo -n '/usr/local/bin/files_chown, ' ; \ 348 | echo -n '/usr/local/bin/files_sync, ' ; \ 349 | echo -n '/usr/local/bin/gen_ssh_keys, ' ; \ 350 | echo -n '/usr/local/bin/init_container, ' ; \ 351 | echo -n '/usr/local/bin/migrate, ' ; \ 352 | echo -n '/usr/local/sbin/php-fpm, ' ; \ 353 | echo -n '/usr/sbin/sshd, ' ; \ 354 | echo '/usr/sbin/crond' ; \ 355 | fi; \ 356 | } | tee /etc/sudoers.d/wodby; \ 357 | \ 358 | echo "TLS_CACERTDIR /etc/ssl/certs/" >> /etc/openldap/ldap.conf; \ 359 | \ 360 | install -o wodby -g wodby -d \ 361 | "${APP_ROOT}" \ 362 | "${CONF_DIR}" \ 363 | /home/wodby/.ssh; \ 364 | \ 365 | install -o www-data -g www-data -d \ 366 | "${FILES_DIR}/public" \ 367 | "${FILES_DIR}/private" \ 368 | "${FILES_DIR}/sessions" \ 369 | "${FILES_DIR}/xhprof" \ 370 | "${FILES_DIR}/xdebug" \ 371 | "${FILES_DIR}/spx" \ 372 | /home/www-data/.ssh; \ 373 | \ 374 | touch /etc/msmtprc; \ 375 | chmod -R 775 "${FILES_DIR}"; \ 376 | chown -R wodby:wodby \ 377 | "${PHP_INI_DIR}/conf.d" \ 378 | /usr/local/etc/php-fpm.d \ 379 | /etc/msmtprc \ 380 | /etc/my.cnf.d \ 381 | /home/wodby/.[^.]*; \ 382 | \ 383 | touch /etc/ssh/sshd_config /etc/gitconfig; \ 384 | chown wodby: /etc/ssh/sshd_config /etc/gitconfig; \ 385 | chown wodby:wodby /usr/local/bin/ /usr/local/bin/composer; \ 386 | \ 387 | rm /etc/crontabs/root; \ 388 | # deprecated: remove in favor of bind mounts. 389 | touch /etc/crontabs/www-data; \ 390 | chown root:www-data /etc/crontabs/www-data; \ 391 | chmod 660 /etc/crontabs/www-data; \ 392 | \ 393 | if [[ -z "${PHP_DEV}" ]]; then \ 394 | strip --strip-debug /usr/local/lib/php/extensions/no-debug-non-zts-*/*.so; \ 395 | docker-php-source delete; \ 396 | rm -rf /usr/src/; \ 397 | fi; \ 398 | \ 399 | su-exec wodby composer clear-cache; \ 400 | apk del --purge .wodby-php-build-deps; \ 401 | pecl clear-cache; \ 402 | \ 403 | rm -rf \ 404 | /usr/include/php \ 405 | /usr/lib/php/build \ 406 | /tmp/* \ 407 | /root/.composer \ 408 | /var/cache/apk/* 409 | 410 | 411 | USER wodby 412 | 413 | WORKDIR ${APP_ROOT} 414 | EXPOSE 9000 415 | 416 | COPY templates /etc/gotpl/ 417 | COPY docker-entrypoint.sh / 418 | COPY bin /usr/local/bin/ 419 | 420 | ENTRYPOINT ["/docker-entrypoint.sh"] 421 | CMD ["sudo", "-E", "php-fpm"] 422 | -------------------------------------------------------------------------------- /8/Makefile: -------------------------------------------------------------------------------- 1 | -include env_make 2 | 3 | PHP_VER ?= 8.4.7 4 | PHP_VER_MINOR ?= $(shell echo "${PHP_VER}" | grep -oE '^[0-9]+\.[0-9]+') 5 | 6 | REPO = wodby/php 7 | NAME = php-$(PHP_VER_MINOR) 8 | 9 | PECL_HTTP_PROXY ?= "" 10 | 11 | PLATFORM ?= linux/arm64 12 | 13 | ifeq ($(WODBY_USER_ID),) 14 | WODBY_USER_ID := 1000 15 | endif 16 | 17 | ifeq ($(WODBY_GROUP_ID),) 18 | WODBY_GROUP_ID := 1000 19 | endif 20 | 21 | ifeq ($(TAG),) 22 | ifneq ($(PHP_DEV),) 23 | ifeq ($(WODBY_USER_ID),501) 24 | TAG := $(PHP_VER_MINOR)-dev-macos 25 | NAME := $(NAME)-dev-macos 26 | else 27 | TAG := $(PHP_VER_MINOR)-dev 28 | NAME := $(NAME)-dev 29 | endif 30 | else 31 | TAG := $(PHP_VER_MINOR) 32 | endif 33 | endif 34 | 35 | IMAGETOOLS_TAG ?= $(TAG) 36 | 37 | ifneq ($(ARCH),) 38 | override TAG := $(TAG)-$(ARCH) 39 | endif 40 | 41 | .PHONY: build build-debug buildx-build buildx-push test push shell run start stop logs clean release 42 | 43 | default: build 44 | 45 | build: 46 | docker build -t $(REPO):$(TAG) --progress=plain \ 47 | --build-arg PHP_VER=$(PHP_VER) \ 48 | --build-arg PHP_DEV=$(PHP_DEV) \ 49 | --build-arg WODBY_USER_ID=$(WODBY_USER_ID) \ 50 | --build-arg WODBY_GROUP_ID=$(WODBY_GROUP_ID) \ 51 | --build-arg PECL_HTTP_PROXY=$(PECL_HTTP_PROXY) \ 52 | ./ 53 | 54 | build-debug: 55 | docker build -t $(REPO):$(TAG) \ 56 | --build-arg PHP_VER=$(PHP_VER) \ 57 | --build-arg PHP_DEV=$(PHP_DEV) \ 58 | --build-arg WODBY_USER_ID=$(WODBY_USER_ID) \ 59 | --build-arg WODBY_GROUP_ID=$(WODBY_GROUP_ID) \ 60 | --build-arg PECL_HTTP_PROXY=$(PECL_HTTP_PROXY) \ 61 | --no-cache --progress=plain ./ 2>&1 | tee build.log 62 | 63 | buildx-build: 64 | docker buildx build --platform $(PLATFORM) -t $(REPO):$(TAG) \ 65 | --build-arg PHP_VER=$(PHP_VER) \ 66 | --build-arg PHP_DEV=$(PHP_DEV) \ 67 | --build-arg WODBY_USER_ID=$(WODBY_USER_ID) \ 68 | --build-arg WODBY_GROUP_ID=$(WODBY_GROUP_ID) \ 69 | --build-arg PECL_HTTP_PROXY=$(PECL_HTTP_PROXY) \ 70 | --load \ 71 | ./ 72 | 73 | buildx-push: 74 | docker buildx build --platform $(PLATFORM) --push -t $(REPO):$(TAG) \ 75 | --build-arg PHP_VER=$(PHP_VER) \ 76 | --build-arg PHP_DEV=$(PHP_DEV) \ 77 | --build-arg WODBY_USER_ID=$(WODBY_USER_ID) \ 78 | --build-arg WODBY_GROUP_ID=$(WODBY_GROUP_ID) \ 79 | --build-arg PECL_HTTP_PROXY=$(PECL_HTTP_PROXY) \ 80 | ./ 81 | 82 | buildx-imagetools-create: 83 | docker buildx imagetools create -t $(REPO):$(IMAGETOOLS_TAG) \ 84 | $(REPO):$(TAG)-amd64 \ 85 | $(REPO):$(TAG)-arm64 86 | .PHONY: buildx-imagetools-create 87 | 88 | test: 89 | cd ./tests && IMAGE=$(REPO):$(TAG) ./run.sh 90 | 91 | push: 92 | docker push $(REPO):$(TAG) 93 | 94 | shell: 95 | docker run --rm --name $(NAME) -i -t $(PORTS) $(VOLUMES) $(ENV) $(REPO):$(TAG) /bin/bash 96 | 97 | run: 98 | docker run --rm --name $(NAME) $(PORTS) $(VOLUMES) $(ENV) $(REPO):$(TAG) $(CMD) 99 | 100 | start: 101 | docker run -d --name $(NAME) $(PORTS) $(VOLUMES) $(ENV) $(REPO):$(TAG) 102 | 103 | stop: 104 | docker stop $(NAME) 105 | 106 | logs: 107 | docker logs $(NAME) 108 | 109 | clean: 110 | -docker rm -f $(NAME) 111 | -IMAGE=$(REPO):$(TAG) docker compose -f tests/compose.yml down 112 | 113 | check-configs: 114 | ./check-configs.sh $(PHP_VER) $(PHP_VER_MINOR) 115 | 116 | release: build push 117 | -------------------------------------------------------------------------------- /8/bin/actions.mk: -------------------------------------------------------------------------------- 1 | .PHONY: migrate git-clone git-checkout files-import files-link walter check-ready check-live 2 | 3 | check_defined = \ 4 | $(strip $(foreach 1,$1, \ 5 | $(call __check_defined,$1,$(strip $(value 2))))) 6 | __check_defined = \ 7 | $(if $(value $1),, \ 8 | $(error Required parameter is missing: $1$(if $2, ($2)))) 9 | 10 | host ?= localhost 11 | max_try ?= 1 12 | wait_seconds ?= 1 13 | delay_seconds ?= 0 14 | is_hash ?= 0 15 | branch = "" 16 | # Some symbols in env vars break cgi-fcgi 17 | command ?= env -i SCRIPT_NAME="/ping" SCRIPT_FILENAME="/ping" REQUEST_METHOD=GET cgi-fcgi -bind -connect "${host}":9001 | grep -q "pong" 18 | service = PHP-FPM 19 | 20 | default: check-ready 21 | 22 | migrate: 23 | sudo migrate $(from) $(to) 24 | 25 | git-clone: 26 | $(call check_defined, url) 27 | git_clone $(url) $(branch) 28 | 29 | git-checkout: 30 | $(call check_defined, target) 31 | git_checkout $(target) $(is_hash) 32 | 33 | files-import: 34 | $(call check_defined, source) 35 | files_import $(source) 36 | 37 | files-link: 38 | $(call check_defined, public_dir) 39 | files_link $(public_dir) 40 | 41 | walter: 42 | test ! -f "$(APP_ROOT)/wodby.yml" || walter -c "$(APP_ROOT)/wodby.yml" 43 | 44 | check-ready: 45 | wait_for "$(command)" $(service) $(host) $(max_try) $(wait_seconds) $(delay_seconds) 46 | 47 | check-live: 48 | @echo "OK" 49 | -------------------------------------------------------------------------------- /8/bin/files_chmod: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -eo pipefail 4 | 5 | if [[ -n "${DEBUG}" ]]; then 6 | set -x 7 | fi 8 | 9 | dir=$1 10 | 11 | if [[ "${dir}" =~ ^"${FILES_DIR}/" ]]; then 12 | chmod -R ug=rwX,o=rX "${dir}" 13 | else 14 | echo "Only dir/files under ${FILES_DIR} allowed" 15 | exit 1 16 | fi 17 | -------------------------------------------------------------------------------- /8/bin/files_chown: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -eo pipefail 4 | 5 | if [[ -n "${DEBUG}" ]]; then 6 | set -x 7 | fi 8 | 9 | dir=$1 10 | 11 | if [[ "${dir}" =~ ^"${FILES_DIR}/" ]]; then 12 | chown -R www-data:www-data "${dir}" 13 | else 14 | echo "Only dir/files under ${FILES_DIR} allowed" 15 | exit 1 16 | fi 17 | -------------------------------------------------------------------------------- /8/bin/files_import: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -eo pipefail 4 | 5 | if [[ -n "${DEBUG}" ]]; then 6 | set -x 7 | fi 8 | 9 | source=$1 10 | tmp_dir="/tmp/source" 11 | 12 | get_archive "${source}" "${tmp_dir}" "zip tgz tar.gz tar" 13 | 14 | # TODO: allow top level dir import only for wodby archives. 15 | if [[ -f "${tmp_dir}/.wodby" || (-d "${tmp_dir}/private" && -d "${tmp_dir}/public") ]]; then 16 | echo "Wodby backup archive detected. Importing to top directory" 17 | sudo files_sync "${tmp_dir}/" "${FILES_DIR}" 18 | else 19 | echo "Importing files to public directory" 20 | sudo files_sync "${tmp_dir}/" "${FILES_DIR}/public/" 21 | fi 22 | 23 | rm -rf "${tmp_dir}" -------------------------------------------------------------------------------- /8/bin/files_link: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -eo pipefail 4 | 5 | if [[ -n "${DEBUG}" ]]; then 6 | set -x 7 | fi 8 | 9 | app_public_dir=$1 10 | 11 | # Add symlink from persistent files volume to application's storage public dir. 12 | if [[ -n "${app_public_dir}" ]]; then 13 | echo "Application's public storage dir specified, trying to symlink from files persistent volume" 14 | 15 | if [[ -d "${app_public_dir}" ]]; then 16 | if [[ ! -L "${app_public_dir}" ]]; then 17 | if [[ "$(ls -A "${app_public_dir}" | grep -v '.gitignore')" ]]; then 18 | echo "Error: failed to symlink public storage directory to a persistent volume" 19 | echo "Directory ${app_public_dir} either must be empty or cannot exist" 20 | echo "(use files import to migrate existing public files)" 21 | exit 1 22 | # If dir is not symlink and empty, remove it and link. 23 | else 24 | echo "Empty public storage dir detected: removing and symlinking" 25 | rm -rf "${app_public_dir}" 26 | ln -sf "${FILES_DIR}/public" "${app_public_dir}" 27 | fi 28 | else 29 | echo "Symlink already in place" 30 | fi 31 | else 32 | echo "No public storage dir detected: just symlinking" 33 | ln -sf "${FILES_DIR}/public" "${app_public_dir}" 34 | fi 35 | fi 36 | -------------------------------------------------------------------------------- /8/bin/files_sync: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -eo pipefail 4 | 5 | if [[ -n "${DEBUG}" ]]; then 6 | set -x 7 | fi 8 | 9 | from=$1 10 | to=$2 11 | 12 | if [[ "${to}" == "${FILES_DIR}" || "${to}" =~ ^"${FILES_DIR}/" ]]; then 13 | rsync -rltpog --chown=www-data:www-data "${from}" "${to}" 14 | # Ensure files volume permissions are still correct. 15 | init_container 16 | else 17 | echo "Invalid destination. Must be under ${FILES_DIR}" 18 | exit 1 19 | fi 20 | -------------------------------------------------------------------------------- /8/bin/git_checkout: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -eo pipefail 4 | 5 | if [[ -n "${DEBUG}" ]]; then 6 | set -x 7 | fi 8 | 9 | target=$1 10 | is_hash=$2 11 | 12 | cd "${APP_ROOT}" 13 | git stash 14 | git fetch --all 15 | git checkout "${target}" 16 | 17 | if [[ "${is_hash}" -eq '0' ]]; then 18 | git pull origin "${target}" 19 | fi 20 | -------------------------------------------------------------------------------- /8/bin/git_clone: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -eo pipefail 4 | 5 | if [[ -n "${DEBUG}" ]]; then 6 | set -x 7 | fi 8 | 9 | url=$1 10 | branch=$2 11 | 12 | if [[ -n "${branch}" ]]; then 13 | git clone -b "${branch}" "${url}" "${APP_ROOT}" 14 | else 15 | git clone "${url}" "${APP_ROOT}" 16 | fi 17 | -------------------------------------------------------------------------------- /8/bin/init_container: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -eo pipefail 4 | 5 | if [[ -n "${DEBUG}" ]]; then 6 | set -x 7 | fi 8 | 9 | chown wodby:wodby "${APP_ROOT}" 10 | 11 | declare -a dirs=( 12 | "${FILES_DIR}" 13 | "${FILES_DIR}/public" 14 | "${FILES_DIR}/private" 15 | "${FILES_DIR}/sessions" 16 | "${FILES_DIR}/xdebug" 17 | ) 18 | 19 | if [[ -n $1 && $1 =~ ^"${FILES_DIR}/" ]]; then 20 | dirs+=($1) 21 | fi 22 | 23 | for dir in "${dirs[@]}"; do 24 | mkdir -p "${dir}" 25 | chown www-data:www-data "${dir}" 26 | chmod 775 "${dir}" 27 | done 28 | 29 | if [[ -f /etc/crontabs/www-data && -z "${CRONTAB}" ]]; then 30 | chown root:www-data /etc/crontabs/www-data 31 | chmod 660 /etc/crontabs/www-data 32 | fi 33 | 34 | if [[ -f /home/wodby/.ssh/id_rsa ]]; then 35 | chown wodby:wodby /home/wodby/.ssh/id_rsa 36 | chmod 600 /home/wodby/.ssh/id_rsa 37 | fi 38 | 39 | if [[ -f /home/wodby/.ssh/authorized_keys ]]; then 40 | chown wodby:wodby /home/wodby/.ssh/authorized_keys 41 | chmod 600 /home/wodby/.ssh/authorized_keys 42 | fi 43 | -------------------------------------------------------------------------------- /8/bin/migrate: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -eo pipefail 4 | 5 | if [[ -n "${DEBUG}" ]]; then 6 | set -x 7 | fi 8 | 9 | from="${1:-}" 10 | to="${2:-}" 11 | 12 | # Default user changed from www-data (82) to wodby (1000), change recursively codebase permissions on volume. 13 | if [[ "${to:0:1}" == 5 && "${from:0:1}" < 5 ]]; then 14 | echo "Migrating to a new major 5.x version." 15 | echo "Fixing permissions for codebase volume except symlinks (public files dir)" 16 | find "${APP_ROOT}" -uid 82 ! -type l -exec chown wodby:wodby {} + 17 | fi 18 | -------------------------------------------------------------------------------- /8/check-configs.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -eo pipefail 4 | 5 | if [[ -n "${DEBUG}" ]]; then 6 | set -x 7 | fi 8 | 9 | php_ver=$1 10 | php_ver_minor=$2 11 | 12 | url="https://raw.githubusercontent.com/php/php-src/php-${php_ver}" 13 | 14 | array=( 15 | "./orig/php-${php_ver_minor}.ini-development::${url}/php.ini-development" 16 | "./orig/php-${php_ver_minor}.ini-production::${url}/php.ini-production" 17 | ) 18 | 19 | outdated=0 20 | 21 | for index in "${array[@]}" ; do 22 | local="${index%%::*}" 23 | url="${index##*::}" 24 | 25 | orig="/tmp/${RANDOM}" 26 | wget -qO "${orig}" "${url}" 27 | 28 | echo "Checking ${local}" 29 | 30 | if diff --strip-trailing-cr "${local}" "${orig}"; then 31 | echo "OK" 32 | else 33 | echo "!!! OUTDATED" 34 | echo "${url}" 35 | outdated=1 36 | fi 37 | 38 | rm -f "${orig}" 39 | done 40 | 41 | # we don't want travis builds to fail. 42 | #[[ "${outdated}" == 0 ]] || exit 1 -------------------------------------------------------------------------------- /8/docker-entrypoint.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -eo pipefail 4 | 5 | if [[ -n "${DEBUG}" ]]; then 6 | set -x 7 | fi 8 | 9 | ssh_dir=/home/wodby/.ssh 10 | 11 | _gotpl() { 12 | if [[ -f "/etc/gotpl/$1" ]]; then 13 | gotpl "/etc/gotpl/$1" > "$2" 14 | fi 15 | } 16 | 17 | # @deprecated will be removed in favor of bind mounts (config maps). 18 | init_ssh_client() { 19 | if [[ -n "${SSH_PRIVATE_KEY}" ]]; then 20 | _gotpl "id_rsa.tmpl" "${ssh_dir}/id_rsa" 21 | chmod -f 600 "${ssh_dir}/id_rsa" 22 | unset SSH_PRIVATE_KEY 23 | fi 24 | } 25 | 26 | init_sshd() { 27 | _gotpl "sshd_config.tmpl" "/etc/ssh/sshd_config" 28 | 29 | # @deprecated will be removed in favor of bind mounts (config maps). 30 | if [[ -n "${SSH_PUBLIC_KEYS}" ]]; then 31 | _gotpl "authorized_keys.tmpl" "${ssh_dir}/authorized_keys" 32 | unset SSH_PUBLIC_KEYS 33 | fi 34 | 35 | printenv | xargs -I{} echo {} | awk ' \ 36 | BEGIN { FS = "=" }; { \ 37 | if ($1 != "HOME" \ 38 | && $1 != "PWD" \ 39 | && $1 != "SHLVL") { \ 40 | \ 41 | for (i = 3; i <= NF; i++) { \ 42 | $2 = ""$2"="$i"" \ 43 | } \ 44 | print ""$1"="$2"" \ 45 | } \ 46 | }' > "${ssh_dir}/environment" 47 | 48 | sudo gen_ssh_keys "rsa" "${SSHD_HOST_KEYS_DIR}" 49 | } 50 | 51 | # @deprecated will be removed in favor of bind mounts (config maps). 52 | init_crond() { 53 | if [[ -n "${CRONTAB}" ]]; then 54 | _gotpl "crontab.tmpl" "/etc/crontabs/www-data" 55 | fi 56 | } 57 | 58 | process_templates() { 59 | local php_ver_minor="${PHP_VERSION:0:3}" 60 | export PHP_VER_MINOR="${php_ver_minor}" 61 | 62 | if [[ -n "${PHP_DEV}" ]]; then 63 | export PHP_FPM_CLEAR_ENV="${PHP_FPM_CLEAR_ENV:-no}" 64 | fi 65 | 66 | # Extensions that don't work with --enabled-debug 67 | _gotpl "docker-php-ext-newrelic.ini.tmpl" "${PHP_INI_DIR}/conf.d/docker-php-ext-newrelic.ini" 68 | 69 | _gotpl "docker-php-ext-pcov.ini.tmpl" "${PHP_INI_DIR}/conf.d/docker-php-ext-pcov.ini" 70 | _gotpl "docker-php-${php_ver_minor}.ini.tmpl" "${PHP_INI_DIR}/conf.d/docker-php.ini" 71 | _gotpl "docker-php-ext-apcu.ini.tmpl" "${PHP_INI_DIR}/conf.d/docker-php-ext-apcu.ini" 72 | _gotpl "docker-php-ext-brotli.ini.tmpl" "${PHP_INI_DIR}/conf.d/docker-php-ext-brotli.ini" 73 | _gotpl "docker-php-ext-grpc.ini.tmpl" "${PHP_INI_DIR}/conf.d/docker-php-ext-grpc.ini" 74 | _gotpl "docker-php-ext-igbinary.ini.tmpl" "${PHP_INI_DIR}/conf.d/docker-php-ext-igbinary.ini" 75 | _gotpl "docker-php-ext-xhprof.ini.tmpl" "${PHP_INI_DIR}/conf.d/docker-php-ext-xhprof.ini" 76 | _gotpl "docker-php-ext-xdebug.ini.tmpl" "${PHP_INI_DIR}/conf.d/docker-php-ext-xdebug.ini" 77 | _gotpl "docker-php-ext-spx.ini.tmpl" "${PHP_INI_DIR}/conf.d/docker-php-ext-spx.ini" 78 | _gotpl "docker-php-ext-opcache.ini.tmpl" "${PHP_INI_DIR}/conf.d/docker-php-ext-opcache.ini" 79 | _gotpl "docker-php-ext-sqlsrv.ini.tmpl" "${PHP_INI_DIR}/conf.d/docker-php-ext-sqlsrv.ini" 80 | 81 | _gotpl "zz-www.conf.tmpl" "/usr/local/etc/php-fpm.d/zz-www.conf" 82 | _gotpl "wodby.settings.php.tmpl" "${CONF_DIR}/wodby.settings.php" 83 | _gotpl "ssh_config.tmpl" "${ssh_dir}/config" 84 | _gotpl "gitconfig.tmpl" "/etc/gitconfig" 85 | _gotpl "msmtprc.tmpl" "/etc/msmtprc" 86 | 87 | _gotpl "mariadb-client.cnf.tmpl" "/etc/my.cnf.d/mariadb-client.cnf" 88 | } 89 | 90 | disable_modules() { 91 | local dir="${PHP_INI_DIR}/conf.d" 92 | 93 | if [[ -n "${PHP_EXTENSIONS_DISABLE}" ]]; then 94 | IFS=',' read -r -a modules <<< "${PHP_EXTENSIONS_DISABLE}" 95 | 96 | for module in "${modules[@]}"; do 97 | if [[ -f "${dir}/z-docker-php-ext-${module}.ini" ]]; then 98 | rm "${dir}/z-docker-php-ext-${module}.ini"; 99 | elif [[ -f "${dir}/docker-php-ext-${module}.ini" ]]; then 100 | rm "${dir}/docker-php-ext-${module}.ini"; 101 | else 102 | echo "WARNING: instructed to disable module ${module} but it was not found" 103 | fi 104 | done 105 | fi 106 | } 107 | 108 | sudo init_container 109 | 110 | init_ssh_client 111 | process_templates 112 | disable_modules 113 | 114 | if [[ "${@:1:2}" == "sudo /usr/sbin/sshd" ]]; then 115 | init_sshd 116 | elif [[ "${@:1:3}" == "sudo -E crond" ]]; then 117 | init_crond 118 | fi 119 | 120 | exec_init_scripts 121 | 122 | if [[ "${1}" == "make" ]]; then 123 | exec "${@}" -f /usr/local/bin/actions.mk 124 | else 125 | exec /usr/local/bin/docker-php-entrypoint "${@}" 126 | fi 127 | -------------------------------------------------------------------------------- /8/orig/php-8.1.ini-development: -------------------------------------------------------------------------------- 1 | [PHP] 2 | 3 | ;;;;;;;;;;;;;;;;;;; 4 | ; About php.ini ; 5 | ;;;;;;;;;;;;;;;;;;; 6 | ; PHP's initialization file, generally called php.ini, is responsible for 7 | ; configuring many of the aspects of PHP's behavior. 8 | 9 | ; PHP attempts to find and load this configuration from a number of locations. 10 | ; The following is a summary of its search order: 11 | ; 1. SAPI module specific location. 12 | ; 2. The PHPRC environment variable. (As of PHP 5.2.0) 13 | ; 3. A number of predefined registry keys on Windows (As of PHP 5.2.0) 14 | ; 4. Current working directory (except CLI) 15 | ; 5. The web server's directory (for SAPI modules), or directory of PHP 16 | ; (otherwise in Windows) 17 | ; 6. The directory from the --with-config-file-path compile time option, or the 18 | ; Windows directory (usually C:\windows) 19 | ; See the PHP docs for more specific information. 20 | ; https://php.net/configuration.file 21 | 22 | ; The syntax of the file is extremely simple. Whitespace and lines 23 | ; beginning with a semicolon are silently ignored (as you probably guessed). 24 | ; Section headers (e.g. [Foo]) are also silently ignored, even though 25 | ; they might mean something in the future. 26 | 27 | ; Directives following the section heading [PATH=/www/mysite] only 28 | ; apply to PHP files in the /www/mysite directory. Directives 29 | ; following the section heading [HOST=www.example.com] only apply to 30 | ; PHP files served from www.example.com. Directives set in these 31 | ; special sections cannot be overridden by user-defined INI files or 32 | ; at runtime. Currently, [PATH=] and [HOST=] sections only work under 33 | ; CGI/FastCGI. 34 | ; https://php.net/ini.sections 35 | 36 | ; Directives are specified using the following syntax: 37 | ; directive = value 38 | ; Directive names are *case sensitive* - foo=bar is different from FOO=bar. 39 | ; Directives are variables used to configure PHP or PHP extensions. 40 | ; There is no name validation. If PHP can't find an expected 41 | ; directive because it is not set or is mistyped, a default value will be used. 42 | 43 | ; The value can be a string, a number, a PHP constant (e.g. E_ALL or M_PI), one 44 | ; of the INI constants (On, Off, True, False, Yes, No and None) or an expression 45 | ; (e.g. E_ALL & ~E_NOTICE), a quoted string ("bar"), or a reference to a 46 | ; previously set variable or directive (e.g. ${foo}) 47 | 48 | ; Expressions in the INI file are limited to bitwise operators and parentheses: 49 | ; | bitwise OR 50 | ; ^ bitwise XOR 51 | ; & bitwise AND 52 | ; ~ bitwise NOT 53 | ; ! boolean NOT 54 | 55 | ; Boolean flags can be turned on using the values 1, On, True or Yes. 56 | ; They can be turned off using the values 0, Off, False or No. 57 | 58 | ; An empty string can be denoted by simply not writing anything after the equal 59 | ; sign, or by using the None keyword: 60 | 61 | ; foo = ; sets foo to an empty string 62 | ; foo = None ; sets foo to an empty string 63 | ; foo = "None" ; sets foo to the string 'None' 64 | 65 | ; If you use constants in your value, and these constants belong to a 66 | ; dynamically loaded extension (either a PHP extension or a Zend extension), 67 | ; you may only use these constants *after* the line that loads the extension. 68 | 69 | ;;;;;;;;;;;;;;;;;;; 70 | ; About this file ; 71 | ;;;;;;;;;;;;;;;;;;; 72 | ; PHP comes packaged with two INI files. One that is recommended to be used 73 | ; in production environments and one that is recommended to be used in 74 | ; development environments. 75 | 76 | ; php.ini-production contains settings which hold security, performance and 77 | ; best practices at its core. But please be aware, these settings may break 78 | ; compatibility with older or less security conscience applications. We 79 | ; recommending using the production ini in production and testing environments. 80 | 81 | ; php.ini-development is very similar to its production variant, except it is 82 | ; much more verbose when it comes to errors. We recommend using the 83 | ; development version only in development environments, as errors shown to 84 | ; application users can inadvertently leak otherwise secure information. 85 | 86 | ; This is the php.ini-development INI file. 87 | 88 | ;;;;;;;;;;;;;;;;;;; 89 | ; Quick Reference ; 90 | ;;;;;;;;;;;;;;;;;;; 91 | 92 | ; The following are all the settings which are different in either the production 93 | ; or development versions of the INIs with respect to PHP's default behavior. 94 | ; Please see the actual settings later in the document for more details as to why 95 | ; we recommend these changes in PHP's behavior. 96 | 97 | ; display_errors 98 | ; Default Value: On 99 | ; Development Value: On 100 | ; Production Value: Off 101 | 102 | ; display_startup_errors 103 | ; Default Value: On 104 | ; Development Value: On 105 | ; Production Value: Off 106 | 107 | ; error_reporting 108 | ; Default Value: E_ALL 109 | ; Development Value: E_ALL 110 | ; Production Value: E_ALL & ~E_DEPRECATED & ~E_STRICT 111 | 112 | ; log_errors 113 | ; Default Value: Off 114 | ; Development Value: On 115 | ; Production Value: On 116 | 117 | ; max_input_time 118 | ; Default Value: -1 (Unlimited) 119 | ; Development Value: 60 (60 seconds) 120 | ; Production Value: 60 (60 seconds) 121 | 122 | ; output_buffering 123 | ; Default Value: Off 124 | ; Development Value: 4096 125 | ; Production Value: 4096 126 | 127 | ; register_argc_argv 128 | ; Default Value: On 129 | ; Development Value: Off 130 | ; Production Value: Off 131 | 132 | ; request_order 133 | ; Default Value: None 134 | ; Development Value: "GP" 135 | ; Production Value: "GP" 136 | 137 | ; session.gc_divisor 138 | ; Default Value: 100 139 | ; Development Value: 1000 140 | ; Production Value: 1000 141 | 142 | ; session.sid_bits_per_character 143 | ; Default Value: 4 144 | ; Development Value: 5 145 | ; Production Value: 5 146 | 147 | ; short_open_tag 148 | ; Default Value: On 149 | ; Development Value: Off 150 | ; Production Value: Off 151 | 152 | ; variables_order 153 | ; Default Value: "EGPCS" 154 | ; Development Value: "GPCS" 155 | ; Production Value: "GPCS" 156 | 157 | ; zend.exception_ignore_args 158 | ; Default Value: Off 159 | ; Development Value: Off 160 | ; Production Value: On 161 | 162 | ; zend.exception_string_param_max_len 163 | ; Default Value: 15 164 | ; Development Value: 15 165 | ; Production Value: 0 166 | 167 | ;;;;;;;;;;;;;;;;;;;; 168 | ; php.ini Options ; 169 | ;;;;;;;;;;;;;;;;;;;; 170 | ; Name for user-defined php.ini (.htaccess) files. Default is ".user.ini" 171 | ;user_ini.filename = ".user.ini" 172 | 173 | ; To disable this feature set this option to an empty value 174 | ;user_ini.filename = 175 | 176 | ; TTL for user-defined php.ini files (time-to-live) in seconds. Default is 300 seconds (5 minutes) 177 | ;user_ini.cache_ttl = 300 178 | 179 | ;;;;;;;;;;;;;;;;;;;; 180 | ; Language Options ; 181 | ;;;;;;;;;;;;;;;;;;;; 182 | 183 | ; Enable the PHP scripting language engine under Apache. 184 | ; https://php.net/engine 185 | engine = On 186 | 187 | ; This directive determines whether or not PHP will recognize code between 188 | ; tags as PHP source which should be processed as such. It is 189 | ; generally recommended that should be used and that this feature 190 | ; should be disabled, as enabling it may result in issues when generating XML 191 | ; documents, however this remains supported for backward compatibility reasons. 192 | ; Note that this directive does not control the would work. 332 | ; https://php.net/syntax-highlighting 333 | ;highlight.string = #DD0000 334 | ;highlight.comment = #FF9900 335 | ;highlight.keyword = #007700 336 | ;highlight.default = #0000BB 337 | ;highlight.html = #000000 338 | 339 | ; If enabled, the request will be allowed to complete even if the user aborts 340 | ; the request. Consider enabling it if executing long requests, which may end up 341 | ; being interrupted by the user or a browser timing out. PHP's default behavior 342 | ; is to disable this feature. 343 | ; https://php.net/ignore-user-abort 344 | ;ignore_user_abort = On 345 | 346 | ; Determines the size of the realpath cache to be used by PHP. This value should 347 | ; be increased on systems where PHP opens many files to reflect the quantity of 348 | ; the file operations performed. 349 | ; Note: if open_basedir is set, the cache is disabled 350 | ; https://php.net/realpath-cache-size 351 | ;realpath_cache_size = 4096k 352 | 353 | ; Duration of time, in seconds for which to cache realpath information for a given 354 | ; file or directory. For systems with rarely changing files, consider increasing this 355 | ; value. 356 | ; https://php.net/realpath-cache-ttl 357 | ;realpath_cache_ttl = 120 358 | 359 | ; Enables or disables the circular reference collector. 360 | ; https://php.net/zend.enable-gc 361 | zend.enable_gc = On 362 | 363 | ; If enabled, scripts may be written in encodings that are incompatible with 364 | ; the scanner. CP936, Big5, CP949 and Shift_JIS are the examples of such 365 | ; encodings. To use this feature, mbstring extension must be enabled. 366 | ;zend.multibyte = Off 367 | 368 | ; Allows to set the default encoding for the scripts. This value will be used 369 | ; unless "declare(encoding=...)" directive appears at the top of the script. 370 | ; Only affects if zend.multibyte is set. 371 | ;zend.script_encoding = 372 | 373 | ; Allows to include or exclude arguments from stack traces generated for exceptions. 374 | ; In production, it is recommended to turn this setting on to prohibit the output 375 | ; of sensitive information in stack traces 376 | ; Default Value: Off 377 | ; Development Value: Off 378 | ; Production Value: On 379 | zend.exception_ignore_args = Off 380 | 381 | ; Allows setting the maximum string length in an argument of a stringified stack trace 382 | ; to a value between 0 and 1000000. 383 | ; This has no effect when zend.exception_ignore_args is enabled. 384 | ; Default Value: 15 385 | ; Development Value: 15 386 | ; Production Value: 0 387 | zend.exception_string_param_max_len = 15 388 | 389 | ;;;;;;;;;;;;;;;;; 390 | ; Miscellaneous ; 391 | ;;;;;;;;;;;;;;;;; 392 | 393 | ; Decides whether PHP may expose the fact that it is installed on the server 394 | ; (e.g. by adding its signature to the Web server header). It is no security 395 | ; threat in any way, but it makes it possible to determine whether you use PHP 396 | ; on your server or not. 397 | ; https://php.net/expose-php 398 | expose_php = On 399 | 400 | ;;;;;;;;;;;;;;;;;;; 401 | ; Resource Limits ; 402 | ;;;;;;;;;;;;;;;;;;; 403 | 404 | ; Maximum execution time of each script, in seconds 405 | ; https://php.net/max-execution-time 406 | ; Note: This directive is hardcoded to 0 for the CLI SAPI 407 | max_execution_time = 30 408 | 409 | ; Maximum amount of time each script may spend parsing request data. It's a good 410 | ; idea to limit this time on productions servers in order to eliminate unexpectedly 411 | ; long running scripts. 412 | ; Note: This directive is hardcoded to -1 for the CLI SAPI 413 | ; Default Value: -1 (Unlimited) 414 | ; Development Value: 60 (60 seconds) 415 | ; Production Value: 60 (60 seconds) 416 | ; https://php.net/max-input-time 417 | max_input_time = 60 418 | 419 | ; Maximum input variable nesting level 420 | ; https://php.net/max-input-nesting-level 421 | ;max_input_nesting_level = 64 422 | 423 | ; How many GET/POST/COOKIE input variables may be accepted 424 | ;max_input_vars = 1000 425 | 426 | ; Maximum amount of memory a script may consume 427 | ; https://php.net/memory-limit 428 | memory_limit = 128M 429 | 430 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 431 | ; Error handling and logging ; 432 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 433 | 434 | ; This directive informs PHP of which errors, warnings and notices you would like 435 | ; it to take action for. The recommended way of setting values for this 436 | ; directive is through the use of the error level constants and bitwise 437 | ; operators. The error level constants are below here for convenience as well as 438 | ; some common settings and their meanings. 439 | ; By default, PHP is set to take action on all errors, notices and warnings EXCEPT 440 | ; those related to E_NOTICE and E_STRICT, which together cover best practices and 441 | ; recommended coding standards in PHP. For performance reasons, this is the 442 | ; recommend error reporting setting. Your production server shouldn't be wasting 443 | ; resources complaining about best practices and coding standards. That's what 444 | ; development servers and development settings are for. 445 | ; Note: The php.ini-development file has this setting as E_ALL. This 446 | ; means it pretty much reports everything which is exactly what you want during 447 | ; development and early testing. 448 | ; 449 | ; Error Level Constants: 450 | ; E_ALL - All errors and warnings (includes E_STRICT as of PHP 5.4.0) 451 | ; E_ERROR - fatal run-time errors 452 | ; E_RECOVERABLE_ERROR - almost fatal run-time errors 453 | ; E_WARNING - run-time warnings (non-fatal errors) 454 | ; E_PARSE - compile-time parse errors 455 | ; E_NOTICE - run-time notices (these are warnings which often result 456 | ; from a bug in your code, but it's possible that it was 457 | ; intentional (e.g., using an uninitialized variable and 458 | ; relying on the fact it is automatically initialized to an 459 | ; empty string) 460 | ; E_STRICT - run-time notices, enable to have PHP suggest changes 461 | ; to your code which will ensure the best interoperability 462 | ; and forward compatibility of your code 463 | ; E_CORE_ERROR - fatal errors that occur during PHP's initial startup 464 | ; E_CORE_WARNING - warnings (non-fatal errors) that occur during PHP's 465 | ; initial startup 466 | ; E_COMPILE_ERROR - fatal compile-time errors 467 | ; E_COMPILE_WARNING - compile-time warnings (non-fatal errors) 468 | ; E_USER_ERROR - user-generated error message 469 | ; E_USER_WARNING - user-generated warning message 470 | ; E_USER_NOTICE - user-generated notice message 471 | ; E_DEPRECATED - warn about code that will not work in future versions 472 | ; of PHP 473 | ; E_USER_DEPRECATED - user-generated deprecation warnings 474 | ; 475 | ; Common Values: 476 | ; E_ALL (Show all errors, warnings and notices including coding standards.) 477 | ; E_ALL & ~E_NOTICE (Show all errors, except for notices) 478 | ; E_ALL & ~E_NOTICE & ~E_STRICT (Show all errors, except for notices and coding standards warnings.) 479 | ; E_COMPILE_ERROR|E_RECOVERABLE_ERROR|E_ERROR|E_CORE_ERROR (Show only errors) 480 | ; Default Value: E_ALL 481 | ; Development Value: E_ALL 482 | ; Production Value: E_ALL & ~E_DEPRECATED & ~E_STRICT 483 | ; https://php.net/error-reporting 484 | error_reporting = E_ALL 485 | 486 | ; This directive controls whether or not and where PHP will output errors, 487 | ; notices and warnings too. Error output is very useful during development, but 488 | ; it could be very dangerous in production environments. Depending on the code 489 | ; which is triggering the error, sensitive information could potentially leak 490 | ; out of your application such as database usernames and passwords or worse. 491 | ; For production environments, we recommend logging errors rather than 492 | ; sending them to STDOUT. 493 | ; Possible Values: 494 | ; Off = Do not display any errors 495 | ; stderr = Display errors to STDERR (affects only CGI/CLI binaries!) 496 | ; On or stdout = Display errors to STDOUT 497 | ; Default Value: On 498 | ; Development Value: On 499 | ; Production Value: Off 500 | ; https://php.net/display-errors 501 | display_errors = On 502 | 503 | ; The display of errors which occur during PHP's startup sequence are handled 504 | ; separately from display_errors. We strongly recommend you set this to 'off' 505 | ; for production servers to avoid leaking configuration details. 506 | ; Default Value: On 507 | ; Development Value: On 508 | ; Production Value: Off 509 | ; https://php.net/display-startup-errors 510 | display_startup_errors = On 511 | 512 | ; Besides displaying errors, PHP can also log errors to locations such as a 513 | ; server-specific log, STDERR, or a location specified by the error_log 514 | ; directive found below. While errors should not be displayed on productions 515 | ; servers they should still be monitored and logging is a great way to do that. 516 | ; Default Value: Off 517 | ; Development Value: On 518 | ; Production Value: On 519 | ; https://php.net/log-errors 520 | log_errors = On 521 | 522 | ; Do not log repeated messages. Repeated errors must occur in same file on same 523 | ; line unless ignore_repeated_source is set true. 524 | ; https://php.net/ignore-repeated-errors 525 | ignore_repeated_errors = Off 526 | 527 | ; Ignore source of message when ignoring repeated messages. When this setting 528 | ; is On you will not log errors with repeated messages from different files or 529 | ; source lines. 530 | ; https://php.net/ignore-repeated-source 531 | ignore_repeated_source = Off 532 | 533 | ; If this parameter is set to Off, then memory leaks will not be shown (on 534 | ; stdout or in the log). This is only effective in a debug compile, and if 535 | ; error reporting includes E_WARNING in the allowed list 536 | ; https://php.net/report-memleaks 537 | report_memleaks = On 538 | 539 | ; This setting is off by default. 540 | ;report_zend_debug = 0 541 | 542 | ; Turn off normal error reporting and emit XML-RPC error XML 543 | ; https://php.net/xmlrpc-errors 544 | ;xmlrpc_errors = 0 545 | 546 | ; An XML-RPC faultCode 547 | ;xmlrpc_error_number = 0 548 | 549 | ; When PHP displays or logs an error, it has the capability of formatting the 550 | ; error message as HTML for easier reading. This directive controls whether 551 | ; the error message is formatted as HTML or not. 552 | ; Note: This directive is hardcoded to Off for the CLI SAPI 553 | ; https://php.net/html-errors 554 | ;html_errors = On 555 | 556 | ; If html_errors is set to On *and* docref_root is not empty, then PHP 557 | ; produces clickable error messages that direct to a page describing the error 558 | ; or function causing the error in detail. 559 | ; You can download a copy of the PHP manual from https://php.net/docs 560 | ; and change docref_root to the base URL of your local copy including the 561 | ; leading '/'. You must also specify the file extension being used including 562 | ; the dot. PHP's default behavior is to leave these settings empty, in which 563 | ; case no links to documentation are generated. 564 | ; Note: Never use this feature for production boxes. 565 | ; https://php.net/docref-root 566 | ; Examples 567 | ;docref_root = "/phpmanual/" 568 | 569 | ; https://php.net/docref-ext 570 | ;docref_ext = .html 571 | 572 | ; String to output before an error message. PHP's default behavior is to leave 573 | ; this setting blank. 574 | ; https://php.net/error-prepend-string 575 | ; Example: 576 | ;error_prepend_string = "" 577 | 578 | ; String to output after an error message. PHP's default behavior is to leave 579 | ; this setting blank. 580 | ; https://php.net/error-append-string 581 | ; Example: 582 | ;error_append_string = "" 583 | 584 | ; Log errors to specified file. PHP's default behavior is to leave this value 585 | ; empty. 586 | ; https://php.net/error-log 587 | ; Example: 588 | ;error_log = php_errors.log 589 | ; Log errors to syslog (Event Log on Windows). 590 | ;error_log = syslog 591 | 592 | ; The syslog ident is a string which is prepended to every message logged 593 | ; to syslog. Only used when error_log is set to syslog. 594 | ;syslog.ident = php 595 | 596 | ; The syslog facility is used to specify what type of program is logging 597 | ; the message. Only used when error_log is set to syslog. 598 | ;syslog.facility = user 599 | 600 | ; Set this to disable filtering control characters (the default). 601 | ; Some loggers only accept NVT-ASCII, others accept anything that's not 602 | ; control characters. If your logger accepts everything, then no filtering 603 | ; is needed at all. 604 | ; Allowed values are: 605 | ; ascii (all printable ASCII characters and NL) 606 | ; no-ctrl (all characters except control characters) 607 | ; all (all characters) 608 | ; raw (like "all", but messages are not split at newlines) 609 | ; https://php.net/syslog.filter 610 | ;syslog.filter = ascii 611 | 612 | ;windows.show_crt_warning 613 | ; Default value: 0 614 | ; Development value: 0 615 | ; Production value: 0 616 | 617 | ;;;;;;;;;;;;;;;;; 618 | ; Data Handling ; 619 | ;;;;;;;;;;;;;;;;; 620 | 621 | ; The separator used in PHP generated URLs to separate arguments. 622 | ; PHP's default setting is "&". 623 | ; https://php.net/arg-separator.output 624 | ; Example: 625 | ;arg_separator.output = "&" 626 | 627 | ; List of separator(s) used by PHP to parse input URLs into variables. 628 | ; PHP's default setting is "&". 629 | ; NOTE: Every character in this directive is considered as separator! 630 | ; https://php.net/arg-separator.input 631 | ; Example: 632 | ;arg_separator.input = ";&" 633 | 634 | ; This directive determines which super global arrays are registered when PHP 635 | ; starts up. G,P,C,E & S are abbreviations for the following respective super 636 | ; globals: GET, POST, COOKIE, ENV and SERVER. There is a performance penalty 637 | ; paid for the registration of these arrays and because ENV is not as commonly 638 | ; used as the others, ENV is not recommended on productions servers. You 639 | ; can still get access to the environment variables through getenv() should you 640 | ; need to. 641 | ; Default Value: "EGPCS" 642 | ; Development Value: "GPCS" 643 | ; Production Value: "GPCS"; 644 | ; https://php.net/variables-order 645 | variables_order = "GPCS" 646 | 647 | ; This directive determines which super global data (G,P & C) should be 648 | ; registered into the super global array REQUEST. If so, it also determines 649 | ; the order in which that data is registered. The values for this directive 650 | ; are specified in the same manner as the variables_order directive, 651 | ; EXCEPT one. Leaving this value empty will cause PHP to use the value set 652 | ; in the variables_order directive. It does not mean it will leave the super 653 | ; globals array REQUEST empty. 654 | ; Default Value: None 655 | ; Development Value: "GP" 656 | ; Production Value: "GP" 657 | ; https://php.net/request-order 658 | request_order = "GP" 659 | 660 | ; This directive determines whether PHP registers $argv & $argc each time it 661 | ; runs. $argv contains an array of all the arguments passed to PHP when a script 662 | ; is invoked. $argc contains an integer representing the number of arguments 663 | ; that were passed when the script was invoked. These arrays are extremely 664 | ; useful when running scripts from the command line. When this directive is 665 | ; enabled, registering these variables consumes CPU cycles and memory each time 666 | ; a script is executed. For performance reasons, this feature should be disabled 667 | ; on production servers. 668 | ; Note: This directive is hardcoded to On for the CLI SAPI 669 | ; Default Value: On 670 | ; Development Value: Off 671 | ; Production Value: Off 672 | ; https://php.net/register-argc-argv 673 | register_argc_argv = Off 674 | 675 | ; When enabled, the ENV, REQUEST and SERVER variables are created when they're 676 | ; first used (Just In Time) instead of when the script starts. If these 677 | ; variables are not used within a script, having this directive on will result 678 | ; in a performance gain. The PHP directive register_argc_argv must be disabled 679 | ; for this directive to have any effect. 680 | ; https://php.net/auto-globals-jit 681 | auto_globals_jit = On 682 | 683 | ; Whether PHP will read the POST data. 684 | ; This option is enabled by default. 685 | ; Most likely, you won't want to disable this option globally. It causes $_POST 686 | ; and $_FILES to always be empty; the only way you will be able to read the 687 | ; POST data will be through the php://input stream wrapper. This can be useful 688 | ; to proxy requests or to process the POST data in a memory efficient fashion. 689 | ; https://php.net/enable-post-data-reading 690 | ;enable_post_data_reading = Off 691 | 692 | ; Maximum size of POST data that PHP will accept. 693 | ; Its value may be 0 to disable the limit. It is ignored if POST data reading 694 | ; is disabled through enable_post_data_reading. 695 | ; https://php.net/post-max-size 696 | post_max_size = 8M 697 | 698 | ; Automatically add files before PHP document. 699 | ; https://php.net/auto-prepend-file 700 | auto_prepend_file = 701 | 702 | ; Automatically add files after PHP document. 703 | ; https://php.net/auto-append-file 704 | auto_append_file = 705 | 706 | ; By default, PHP will output a media type using the Content-Type header. To 707 | ; disable this, simply set it to be empty. 708 | ; 709 | ; PHP's built-in default media type is set to text/html. 710 | ; https://php.net/default-mimetype 711 | default_mimetype = "text/html" 712 | 713 | ; PHP's default character set is set to UTF-8. 714 | ; https://php.net/default-charset 715 | default_charset = "UTF-8" 716 | 717 | ; PHP internal character encoding is set to empty. 718 | ; If empty, default_charset is used. 719 | ; https://php.net/internal-encoding 720 | ;internal_encoding = 721 | 722 | ; PHP input character encoding is set to empty. 723 | ; If empty, default_charset is used. 724 | ; https://php.net/input-encoding 725 | ;input_encoding = 726 | 727 | ; PHP output character encoding is set to empty. 728 | ; If empty, default_charset is used. 729 | ; See also output_buffer. 730 | ; https://php.net/output-encoding 731 | ;output_encoding = 732 | 733 | ;;;;;;;;;;;;;;;;;;;;;;;;; 734 | ; Paths and Directories ; 735 | ;;;;;;;;;;;;;;;;;;;;;;;;; 736 | 737 | ; UNIX: "/path1:/path2" 738 | ;include_path = ".:/php/includes" 739 | ; 740 | ; Windows: "\path1;\path2" 741 | ;include_path = ".;c:\php\includes" 742 | ; 743 | ; PHP's default setting for include_path is ".;/path/to/php/pear" 744 | ; https://php.net/include-path 745 | 746 | ; The root of the PHP pages, used only if nonempty. 747 | ; if PHP was not compiled with FORCE_REDIRECT, you SHOULD set doc_root 748 | ; if you are running php as a CGI under any web server (other than IIS) 749 | ; see documentation for security issues. The alternate is to use the 750 | ; cgi.force_redirect configuration below 751 | ; https://php.net/doc-root 752 | doc_root = 753 | 754 | ; The directory under which PHP opens the script using /~username used only 755 | ; if nonempty. 756 | ; https://php.net/user-dir 757 | user_dir = 758 | 759 | ; Directory in which the loadable extensions (modules) reside. 760 | ; https://php.net/extension-dir 761 | ;extension_dir = "./" 762 | ; On windows: 763 | ;extension_dir = "ext" 764 | 765 | ; Directory where the temporary files should be placed. 766 | ; Defaults to the system default (see sys_get_temp_dir) 767 | ;sys_temp_dir = "/tmp" 768 | 769 | ; Whether or not to enable the dl() function. The dl() function does NOT work 770 | ; properly in multithreaded servers, such as IIS or Zeus, and is automatically 771 | ; disabled on them. 772 | ; https://php.net/enable-dl 773 | enable_dl = Off 774 | 775 | ; cgi.force_redirect is necessary to provide security running PHP as a CGI under 776 | ; most web servers. Left undefined, PHP turns this on by default. You can 777 | ; turn it off here AT YOUR OWN RISK 778 | ; **You CAN safely turn this off for IIS, in fact, you MUST.** 779 | ; https://php.net/cgi.force-redirect 780 | ;cgi.force_redirect = 1 781 | 782 | ; if cgi.nph is enabled it will force cgi to always sent Status: 200 with 783 | ; every request. PHP's default behavior is to disable this feature. 784 | ;cgi.nph = 1 785 | 786 | ; if cgi.force_redirect is turned on, and you are not running under Apache or Netscape 787 | ; (iPlanet) web servers, you MAY need to set an environment variable name that PHP 788 | ; will look for to know it is OK to continue execution. Setting this variable MAY 789 | ; cause security issues, KNOW WHAT YOU ARE DOING FIRST. 790 | ; https://php.net/cgi.redirect-status-env 791 | ;cgi.redirect_status_env = 792 | 793 | ; cgi.fix_pathinfo provides *real* PATH_INFO/PATH_TRANSLATED support for CGI. PHP's 794 | ; previous behaviour was to set PATH_TRANSLATED to SCRIPT_FILENAME, and to not grok 795 | ; what PATH_INFO is. For more information on PATH_INFO, see the cgi specs. Setting 796 | ; this to 1 will cause PHP CGI to fix its paths to conform to the spec. A setting 797 | ; of zero causes PHP to behave as before. Default is 1. You should fix your scripts 798 | ; to use SCRIPT_FILENAME rather than PATH_TRANSLATED. 799 | ; https://php.net/cgi.fix-pathinfo 800 | ;cgi.fix_pathinfo=1 801 | 802 | ; if cgi.discard_path is enabled, the PHP CGI binary can safely be placed outside 803 | ; of the web tree and people will not be able to circumvent .htaccess security. 804 | ;cgi.discard_path=1 805 | 806 | ; FastCGI under IIS supports the ability to impersonate 807 | ; security tokens of the calling client. This allows IIS to define the 808 | ; security context that the request runs under. mod_fastcgi under Apache 809 | ; does not currently support this feature (03/17/2002) 810 | ; Set to 1 if running under IIS. Default is zero. 811 | ; https://php.net/fastcgi.impersonate 812 | ;fastcgi.impersonate = 1 813 | 814 | ; Disable logging through FastCGI connection. PHP's default behavior is to enable 815 | ; this feature. 816 | ;fastcgi.logging = 0 817 | 818 | ; cgi.rfc2616_headers configuration option tells PHP what type of headers to 819 | ; use when sending HTTP response code. If set to 0, PHP sends Status: header that 820 | ; is supported by Apache. When this option is set to 1, PHP will send 821 | ; RFC2616 compliant header. 822 | ; Default is zero. 823 | ; https://php.net/cgi.rfc2616-headers 824 | ;cgi.rfc2616_headers = 0 825 | 826 | ; cgi.check_shebang_line controls whether CGI PHP checks for line starting with #! 827 | ; (shebang) at the top of the running script. This line might be needed if the 828 | ; script support running both as stand-alone script and via PHP CGI<. PHP in CGI 829 | ; mode skips this line and ignores its content if this directive is turned on. 830 | ; https://php.net/cgi.check-shebang-line 831 | ;cgi.check_shebang_line=1 832 | 833 | ;;;;;;;;;;;;;;;; 834 | ; File Uploads ; 835 | ;;;;;;;;;;;;;;;; 836 | 837 | ; Whether to allow HTTP file uploads. 838 | ; https://php.net/file-uploads 839 | file_uploads = On 840 | 841 | ; Temporary directory for HTTP uploaded files (will use system default if not 842 | ; specified). 843 | ; https://php.net/upload-tmp-dir 844 | ;upload_tmp_dir = 845 | 846 | ; Maximum allowed size for uploaded files. 847 | ; https://php.net/upload-max-filesize 848 | upload_max_filesize = 2M 849 | 850 | ; Maximum number of files that can be uploaded via a single request 851 | max_file_uploads = 20 852 | 853 | ;;;;;;;;;;;;;;;;;; 854 | ; Fopen wrappers ; 855 | ;;;;;;;;;;;;;;;;;; 856 | 857 | ; Whether to allow the treatment of URLs (like http:// or ftp://) as files. 858 | ; https://php.net/allow-url-fopen 859 | allow_url_fopen = On 860 | 861 | ; Whether to allow include/require to open URLs (like https:// or ftp://) as files. 862 | ; https://php.net/allow-url-include 863 | allow_url_include = Off 864 | 865 | ; Define the anonymous ftp password (your email address). PHP's default setting 866 | ; for this is empty. 867 | ; https://php.net/from 868 | ;from="john@doe.com" 869 | 870 | ; Define the User-Agent string. PHP's default setting for this is empty. 871 | ; https://php.net/user-agent 872 | ;user_agent="PHP" 873 | 874 | ; Default timeout for socket based streams (seconds) 875 | ; https://php.net/default-socket-timeout 876 | default_socket_timeout = 60 877 | 878 | ; If your scripts have to deal with files from Macintosh systems, 879 | ; or you are running on a Mac and need to deal with files from 880 | ; unix or win32 systems, setting this flag will cause PHP to 881 | ; automatically detect the EOL character in those files so that 882 | ; fgets() and file() will work regardless of the source of the file. 883 | ; https://php.net/auto-detect-line-endings 884 | ;auto_detect_line_endings = Off 885 | 886 | ;;;;;;;;;;;;;;;;;;;;;; 887 | ; Dynamic Extensions ; 888 | ;;;;;;;;;;;;;;;;;;;;;; 889 | 890 | ; If you wish to have an extension loaded automatically, use the following 891 | ; syntax: 892 | ; 893 | ; extension=modulename 894 | ; 895 | ; For example: 896 | ; 897 | ; extension=mysqli 898 | ; 899 | ; When the extension library to load is not located in the default extension 900 | ; directory, You may specify an absolute path to the library file: 901 | ; 902 | ; extension=/path/to/extension/mysqli.so 903 | ; 904 | ; Note : The syntax used in previous PHP versions ('extension=.so' and 905 | ; 'extension='php_.dll') is supported for legacy reasons and may be 906 | ; deprecated in a future PHP major version. So, when it is possible, please 907 | ; move to the new ('extension=) syntax. 908 | ; 909 | ; Notes for Windows environments : 910 | ; 911 | ; - Many DLL files are located in the extensions/ (PHP 4) or ext/ (PHP 5+) 912 | ; extension folders as well as the separate PECL DLL download (PHP 5+). 913 | ; Be sure to appropriately set the extension_dir directive. 914 | ; 915 | ;extension=bz2 916 | ;extension=curl 917 | ;extension=ffi 918 | ;extension=ftp 919 | ;extension=fileinfo 920 | ;extension=gd 921 | ;extension=gettext 922 | ;extension=gmp 923 | ;extension=intl 924 | ;extension=imap 925 | ;extension=ldap 926 | ;extension=mbstring 927 | ;extension=exif ; Must be after mbstring as it depends on it 928 | ;extension=mysqli 929 | ;extension=oci8_12c ; Use with Oracle Database 12c Instant Client 930 | ;extension=oci8_19 ; Use with Oracle Database 19 Instant Client 931 | ;extension=odbc 932 | ;extension=openssl 933 | ;extension=pdo_firebird 934 | ;extension=pdo_mysql 935 | ;extension=pdo_oci 936 | ;extension=pdo_odbc 937 | ;extension=pdo_pgsql 938 | ;extension=pdo_sqlite 939 | ;extension=pgsql 940 | ;extension=shmop 941 | 942 | ; The MIBS data available in the PHP distribution must be installed. 943 | ; See https://www.php.net/manual/en/snmp.installation.php 944 | ;extension=snmp 945 | 946 | ;extension=soap 947 | ;extension=sockets 948 | ;extension=sodium 949 | ;extension=sqlite3 950 | ;extension=tidy 951 | ;extension=xsl 952 | 953 | ;zend_extension=opcache 954 | 955 | ;;;;;;;;;;;;;;;;;;; 956 | ; Module Settings ; 957 | ;;;;;;;;;;;;;;;;;;; 958 | 959 | [CLI Server] 960 | ; Whether the CLI web server uses ANSI color coding in its terminal output. 961 | cli_server.color = On 962 | 963 | [Date] 964 | ; Defines the default timezone used by the date functions 965 | ; https://php.net/date.timezone 966 | ;date.timezone = 967 | 968 | ; https://php.net/date.default-latitude 969 | ;date.default_latitude = 31.7667 970 | 971 | ; https://php.net/date.default-longitude 972 | ;date.default_longitude = 35.2333 973 | 974 | ; https://php.net/date.sunrise-zenith 975 | ;date.sunrise_zenith = 90.833333 976 | 977 | ; https://php.net/date.sunset-zenith 978 | ;date.sunset_zenith = 90.833333 979 | 980 | [filter] 981 | ; https://php.net/filter.default 982 | ;filter.default = unsafe_raw 983 | 984 | ; https://php.net/filter.default-flags 985 | ;filter.default_flags = 986 | 987 | [iconv] 988 | ; Use of this INI entry is deprecated, use global input_encoding instead. 989 | ; If empty, default_charset or input_encoding or iconv.input_encoding is used. 990 | ; The precedence is: default_charset < input_encoding < iconv.input_encoding 991 | ;iconv.input_encoding = 992 | 993 | ; Use of this INI entry is deprecated, use global internal_encoding instead. 994 | ; If empty, default_charset or internal_encoding or iconv.internal_encoding is used. 995 | ; The precedence is: default_charset < internal_encoding < iconv.internal_encoding 996 | ;iconv.internal_encoding = 997 | 998 | ; Use of this INI entry is deprecated, use global output_encoding instead. 999 | ; If empty, default_charset or output_encoding or iconv.output_encoding is used. 1000 | ; The precedence is: default_charset < output_encoding < iconv.output_encoding 1001 | ; To use an output encoding conversion, iconv's output handler must be set 1002 | ; otherwise output encoding conversion cannot be performed. 1003 | ;iconv.output_encoding = 1004 | 1005 | [imap] 1006 | ; rsh/ssh logins are disabled by default. Use this INI entry if you want to 1007 | ; enable them. Note that the IMAP library does not filter mailbox names before 1008 | ; passing them to rsh/ssh command, thus passing untrusted data to this function 1009 | ; with rsh/ssh enabled is insecure. 1010 | ;imap.enable_insecure_rsh=0 1011 | 1012 | [intl] 1013 | ;intl.default_locale = 1014 | ; This directive allows you to produce PHP errors when some error 1015 | ; happens within intl functions. The value is the level of the error produced. 1016 | ; Default is 0, which does not produce any errors. 1017 | ;intl.error_level = E_WARNING 1018 | ;intl.use_exceptions = 0 1019 | 1020 | [sqlite3] 1021 | ; Directory pointing to SQLite3 extensions 1022 | ; https://php.net/sqlite3.extension-dir 1023 | ;sqlite3.extension_dir = 1024 | 1025 | ; SQLite defensive mode flag (only available from SQLite 3.26+) 1026 | ; When the defensive flag is enabled, language features that allow ordinary 1027 | ; SQL to deliberately corrupt the database file are disabled. This forbids 1028 | ; writing directly to the schema, shadow tables (eg. FTS data tables), or 1029 | ; the sqlite_dbpage virtual table. 1030 | ; https://www.sqlite.org/c3ref/c_dbconfig_defensive.html 1031 | ; (for older SQLite versions, this flag has no use) 1032 | ;sqlite3.defensive = 1 1033 | 1034 | [Pcre] 1035 | ; PCRE library backtracking limit. 1036 | ; https://php.net/pcre.backtrack-limit 1037 | ;pcre.backtrack_limit=100000 1038 | 1039 | ; PCRE library recursion limit. 1040 | ; Please note that if you set this value to a high number you may consume all 1041 | ; the available process stack and eventually crash PHP (due to reaching the 1042 | ; stack size limit imposed by the Operating System). 1043 | ; https://php.net/pcre.recursion-limit 1044 | ;pcre.recursion_limit=100000 1045 | 1046 | ; Enables or disables JIT compilation of patterns. This requires the PCRE 1047 | ; library to be compiled with JIT support. 1048 | ;pcre.jit=1 1049 | 1050 | [Pdo] 1051 | ; Whether to pool ODBC connections. Can be one of "strict", "relaxed" or "off" 1052 | ; https://php.net/pdo-odbc.connection-pooling 1053 | ;pdo_odbc.connection_pooling=strict 1054 | 1055 | [Pdo_mysql] 1056 | ; Default socket name for local MySQL connects. If empty, uses the built-in 1057 | ; MySQL defaults. 1058 | pdo_mysql.default_socket= 1059 | 1060 | [Phar] 1061 | ; https://php.net/phar.readonly 1062 | ;phar.readonly = On 1063 | 1064 | ; https://php.net/phar.require-hash 1065 | ;phar.require_hash = On 1066 | 1067 | ;phar.cache_list = 1068 | 1069 | [mail function] 1070 | ; For Win32 only. 1071 | ; https://php.net/smtp 1072 | SMTP = localhost 1073 | ; https://php.net/smtp-port 1074 | smtp_port = 25 1075 | 1076 | ; For Win32 only. 1077 | ; https://php.net/sendmail-from 1078 | ;sendmail_from = me@example.com 1079 | 1080 | ; For Unix only. You may supply arguments as well (default: "sendmail -t -i"). 1081 | ; https://php.net/sendmail-path 1082 | ;sendmail_path = 1083 | 1084 | ; Force the addition of the specified parameters to be passed as extra parameters 1085 | ; to the sendmail binary. These parameters will always replace the value of 1086 | ; the 5th parameter to mail(). 1087 | ;mail.force_extra_parameters = 1088 | 1089 | ; Add X-PHP-Originating-Script: that will include uid of the script followed by the filename 1090 | mail.add_x_header = Off 1091 | 1092 | ; The path to a log file that will log all mail() calls. Log entries include 1093 | ; the full path of the script, line number, To address and headers. 1094 | ;mail.log = 1095 | ; Log mail to syslog (Event Log on Windows). 1096 | ;mail.log = syslog 1097 | 1098 | [ODBC] 1099 | ; https://php.net/odbc.default-db 1100 | ;odbc.default_db = Not yet implemented 1101 | 1102 | ; https://php.net/odbc.default-user 1103 | ;odbc.default_user = Not yet implemented 1104 | 1105 | ; https://php.net/odbc.default-pw 1106 | ;odbc.default_pw = Not yet implemented 1107 | 1108 | ; Controls the ODBC cursor model. 1109 | ; Default: SQL_CURSOR_STATIC (default). 1110 | ;odbc.default_cursortype 1111 | 1112 | ; Allow or prevent persistent links. 1113 | ; https://php.net/odbc.allow-persistent 1114 | odbc.allow_persistent = On 1115 | 1116 | ; Check that a connection is still valid before reuse. 1117 | ; https://php.net/odbc.check-persistent 1118 | odbc.check_persistent = On 1119 | 1120 | ; Maximum number of persistent links. -1 means no limit. 1121 | ; https://php.net/odbc.max-persistent 1122 | odbc.max_persistent = -1 1123 | 1124 | ; Maximum number of links (persistent + non-persistent). -1 means no limit. 1125 | ; https://php.net/odbc.max-links 1126 | odbc.max_links = -1 1127 | 1128 | ; Handling of LONG fields. Returns number of bytes to variables. 0 means 1129 | ; passthru. 1130 | ; https://php.net/odbc.defaultlrl 1131 | odbc.defaultlrl = 4096 1132 | 1133 | ; Handling of binary data. 0 means passthru, 1 return as is, 2 convert to char. 1134 | ; See the documentation on odbc_binmode and odbc_longreadlen for an explanation 1135 | ; of odbc.defaultlrl and odbc.defaultbinmode 1136 | ; https://php.net/odbc.defaultbinmode 1137 | odbc.defaultbinmode = 1 1138 | 1139 | [MySQLi] 1140 | 1141 | ; Maximum number of persistent links. -1 means no limit. 1142 | ; https://php.net/mysqli.max-persistent 1143 | mysqli.max_persistent = -1 1144 | 1145 | ; Allow accessing, from PHP's perspective, local files with LOAD DATA statements 1146 | ; https://php.net/mysqli.allow_local_infile 1147 | ;mysqli.allow_local_infile = On 1148 | 1149 | ; It allows the user to specify a folder where files that can be sent via LOAD DATA 1150 | ; LOCAL can exist. It is ignored if mysqli.allow_local_infile is enabled. 1151 | ;mysqli.local_infile_directory = 1152 | 1153 | ; Allow or prevent persistent links. 1154 | ; https://php.net/mysqli.allow-persistent 1155 | mysqli.allow_persistent = On 1156 | 1157 | ; Maximum number of links. -1 means no limit. 1158 | ; https://php.net/mysqli.max-links 1159 | mysqli.max_links = -1 1160 | 1161 | ; Default port number for mysqli_connect(). If unset, mysqli_connect() will use 1162 | ; the $MYSQL_TCP_PORT or the mysql-tcp entry in /etc/services or the 1163 | ; compile-time value defined MYSQL_PORT (in that order). Win32 will only look 1164 | ; at MYSQL_PORT. 1165 | ; https://php.net/mysqli.default-port 1166 | mysqli.default_port = 3306 1167 | 1168 | ; Default socket name for local MySQL connects. If empty, uses the built-in 1169 | ; MySQL defaults. 1170 | ; https://php.net/mysqli.default-socket 1171 | mysqli.default_socket = 1172 | 1173 | ; Default host for mysqli_connect() (doesn't apply in safe mode). 1174 | ; https://php.net/mysqli.default-host 1175 | mysqli.default_host = 1176 | 1177 | ; Default user for mysqli_connect() (doesn't apply in safe mode). 1178 | ; https://php.net/mysqli.default-user 1179 | mysqli.default_user = 1180 | 1181 | ; Default password for mysqli_connect() (doesn't apply in safe mode). 1182 | ; Note that this is generally a *bad* idea to store passwords in this file. 1183 | ; *Any* user with PHP access can run 'echo get_cfg_var("mysqli.default_pw") 1184 | ; and reveal this password! And of course, any users with read access to this 1185 | ; file will be able to reveal the password as well. 1186 | ; https://php.net/mysqli.default-pw 1187 | mysqli.default_pw = 1188 | 1189 | ; Allow or prevent reconnect 1190 | mysqli.reconnect = Off 1191 | 1192 | ; If this option is enabled, closing a persistent connection will rollback 1193 | ; any pending transactions of this connection, before it is put back 1194 | ; into the persistent connection pool. 1195 | ;mysqli.rollback_on_cached_plink = Off 1196 | 1197 | [mysqlnd] 1198 | ; Enable / Disable collection of general statistics by mysqlnd which can be 1199 | ; used to tune and monitor MySQL operations. 1200 | mysqlnd.collect_statistics = On 1201 | 1202 | ; Enable / Disable collection of memory usage statistics by mysqlnd which can be 1203 | ; used to tune and monitor MySQL operations. 1204 | mysqlnd.collect_memory_statistics = On 1205 | 1206 | ; Records communication from all extensions using mysqlnd to the specified log 1207 | ; file. 1208 | ; https://php.net/mysqlnd.debug 1209 | ;mysqlnd.debug = 1210 | 1211 | ; Defines which queries will be logged. 1212 | ;mysqlnd.log_mask = 0 1213 | 1214 | ; Default size of the mysqlnd memory pool, which is used by result sets. 1215 | ;mysqlnd.mempool_default_size = 16000 1216 | 1217 | ; Size of a pre-allocated buffer used when sending commands to MySQL in bytes. 1218 | ;mysqlnd.net_cmd_buffer_size = 2048 1219 | 1220 | ; Size of a pre-allocated buffer used for reading data sent by the server in 1221 | ; bytes. 1222 | ;mysqlnd.net_read_buffer_size = 32768 1223 | 1224 | ; Timeout for network requests in seconds. 1225 | ;mysqlnd.net_read_timeout = 31536000 1226 | 1227 | ; SHA-256 Authentication Plugin related. File with the MySQL server public RSA 1228 | ; key. 1229 | ;mysqlnd.sha256_server_public_key = 1230 | 1231 | [OCI8] 1232 | 1233 | ; Connection: Enables privileged connections using external 1234 | ; credentials (OCI_SYSOPER, OCI_SYSDBA) 1235 | ; https://php.net/oci8.privileged-connect 1236 | ;oci8.privileged_connect = Off 1237 | 1238 | ; Connection: The maximum number of persistent OCI8 connections per 1239 | ; process. Using -1 means no limit. 1240 | ; https://php.net/oci8.max-persistent 1241 | ;oci8.max_persistent = -1 1242 | 1243 | ; Connection: The maximum number of seconds a process is allowed to 1244 | ; maintain an idle persistent connection. Using -1 means idle 1245 | ; persistent connections will be maintained forever. 1246 | ; https://php.net/oci8.persistent-timeout 1247 | ;oci8.persistent_timeout = -1 1248 | 1249 | ; Connection: The number of seconds that must pass before issuing a 1250 | ; ping during oci_pconnect() to check the connection validity. When 1251 | ; set to 0, each oci_pconnect() will cause a ping. Using -1 disables 1252 | ; pings completely. 1253 | ; https://php.net/oci8.ping-interval 1254 | ;oci8.ping_interval = 60 1255 | 1256 | ; Connection: Set this to a user chosen connection class to be used 1257 | ; for all pooled server requests with Oracle 11g Database Resident 1258 | ; Connection Pooling (DRCP). To use DRCP, this value should be set to 1259 | ; the same string for all web servers running the same application, 1260 | ; the database pool must be configured, and the connection string must 1261 | ; specify to use a pooled server. 1262 | ;oci8.connection_class = 1263 | 1264 | ; High Availability: Using On lets PHP receive Fast Application 1265 | ; Notification (FAN) events generated when a database node fails. The 1266 | ; database must also be configured to post FAN events. 1267 | ;oci8.events = Off 1268 | 1269 | ; Tuning: This option enables statement caching, and specifies how 1270 | ; many statements to cache. Using 0 disables statement caching. 1271 | ; https://php.net/oci8.statement-cache-size 1272 | ;oci8.statement_cache_size = 20 1273 | 1274 | ; Tuning: Enables statement prefetching and sets the default number of 1275 | ; rows that will be fetched automatically after statement execution. 1276 | ; https://php.net/oci8.default-prefetch 1277 | ;oci8.default_prefetch = 100 1278 | 1279 | ; Compatibility. Using On means oci_close() will not close 1280 | ; oci_connect() and oci_new_connect() connections. 1281 | ; https://php.net/oci8.old-oci-close-semantics 1282 | ;oci8.old_oci_close_semantics = Off 1283 | 1284 | [PostgreSQL] 1285 | ; Allow or prevent persistent links. 1286 | ; https://php.net/pgsql.allow-persistent 1287 | pgsql.allow_persistent = On 1288 | 1289 | ; Detect broken persistent links always with pg_pconnect(). 1290 | ; Auto reset feature requires a little overheads. 1291 | ; https://php.net/pgsql.auto-reset-persistent 1292 | pgsql.auto_reset_persistent = Off 1293 | 1294 | ; Maximum number of persistent links. -1 means no limit. 1295 | ; https://php.net/pgsql.max-persistent 1296 | pgsql.max_persistent = -1 1297 | 1298 | ; Maximum number of links (persistent+non persistent). -1 means no limit. 1299 | ; https://php.net/pgsql.max-links 1300 | pgsql.max_links = -1 1301 | 1302 | ; Ignore PostgreSQL backends Notice message or not. 1303 | ; Notice message logging require a little overheads. 1304 | ; https://php.net/pgsql.ignore-notice 1305 | pgsql.ignore_notice = 0 1306 | 1307 | ; Log PostgreSQL backends Notice message or not. 1308 | ; Unless pgsql.ignore_notice=0, module cannot log notice message. 1309 | ; https://php.net/pgsql.log-notice 1310 | pgsql.log_notice = 0 1311 | 1312 | [bcmath] 1313 | ; Number of decimal digits for all bcmath functions. 1314 | ; https://php.net/bcmath.scale 1315 | bcmath.scale = 0 1316 | 1317 | [browscap] 1318 | ; https://php.net/browscap 1319 | ;browscap = extra/browscap.ini 1320 | 1321 | [Session] 1322 | ; Handler used to store/retrieve data. 1323 | ; https://php.net/session.save-handler 1324 | session.save_handler = files 1325 | 1326 | ; Argument passed to save_handler. In the case of files, this is the path 1327 | ; where data files are stored. Note: Windows users have to change this 1328 | ; variable in order to use PHP's session functions. 1329 | ; 1330 | ; The path can be defined as: 1331 | ; 1332 | ; session.save_path = "N;/path" 1333 | ; 1334 | ; where N is an integer. Instead of storing all the session files in 1335 | ; /path, what this will do is use subdirectories N-levels deep, and 1336 | ; store the session data in those directories. This is useful if 1337 | ; your OS has problems with many files in one directory, and is 1338 | ; a more efficient layout for servers that handle many sessions. 1339 | ; 1340 | ; NOTE 1: PHP will not create this directory structure automatically. 1341 | ; You can use the script in the ext/session dir for that purpose. 1342 | ; NOTE 2: See the section on garbage collection below if you choose to 1343 | ; use subdirectories for session storage 1344 | ; 1345 | ; The file storage module creates files using mode 600 by default. 1346 | ; You can change that by using 1347 | ; 1348 | ; session.save_path = "N;MODE;/path" 1349 | ; 1350 | ; where MODE is the octal representation of the mode. Note that this 1351 | ; does not overwrite the process's umask. 1352 | ; https://php.net/session.save-path 1353 | ;session.save_path = "/tmp" 1354 | 1355 | ; Whether to use strict session mode. 1356 | ; Strict session mode does not accept an uninitialized session ID, and 1357 | ; regenerates the session ID if the browser sends an uninitialized session ID. 1358 | ; Strict mode protects applications from session fixation via a session adoption 1359 | ; vulnerability. It is disabled by default for maximum compatibility, but 1360 | ; enabling it is encouraged. 1361 | ; https://wiki.php.net/rfc/strict_sessions 1362 | session.use_strict_mode = 0 1363 | 1364 | ; Whether to use cookies. 1365 | ; https://php.net/session.use-cookies 1366 | session.use_cookies = 1 1367 | 1368 | ; https://php.net/session.cookie-secure 1369 | ;session.cookie_secure = 1370 | 1371 | ; This option forces PHP to fetch and use a cookie for storing and maintaining 1372 | ; the session id. We encourage this operation as it's very helpful in combating 1373 | ; session hijacking when not specifying and managing your own session id. It is 1374 | ; not the be-all and end-all of session hijacking defense, but it's a good start. 1375 | ; https://php.net/session.use-only-cookies 1376 | session.use_only_cookies = 1 1377 | 1378 | ; Name of the session (used as cookie name). 1379 | ; https://php.net/session.name 1380 | session.name = PHPSESSID 1381 | 1382 | ; Initialize session on request startup. 1383 | ; https://php.net/session.auto-start 1384 | session.auto_start = 0 1385 | 1386 | ; Lifetime in seconds of cookie or, if 0, until browser is restarted. 1387 | ; https://php.net/session.cookie-lifetime 1388 | session.cookie_lifetime = 0 1389 | 1390 | ; The path for which the cookie is valid. 1391 | ; https://php.net/session.cookie-path 1392 | session.cookie_path = / 1393 | 1394 | ; The domain for which the cookie is valid. 1395 | ; https://php.net/session.cookie-domain 1396 | session.cookie_domain = 1397 | 1398 | ; Whether or not to add the httpOnly flag to the cookie, which makes it 1399 | ; inaccessible to browser scripting languages such as JavaScript. 1400 | ; https://php.net/session.cookie-httponly 1401 | session.cookie_httponly = 1402 | 1403 | ; Add SameSite attribute to cookie to help mitigate Cross-Site Request Forgery (CSRF/XSRF) 1404 | ; Current valid values are "Strict", "Lax" or "None". When using "None", 1405 | ; make sure to include the quotes, as `none` is interpreted like `false` in ini files. 1406 | ; https://tools.ietf.org/html/draft-west-first-party-cookies-07 1407 | session.cookie_samesite = 1408 | 1409 | ; Handler used to serialize data. php is the standard serializer of PHP. 1410 | ; https://php.net/session.serialize-handler 1411 | session.serialize_handler = php 1412 | 1413 | ; Defines the probability that the 'garbage collection' process is started on every 1414 | ; session initialization. The probability is calculated by using gc_probability/gc_divisor, 1415 | ; e.g. 1/100 means there is a 1% chance that the GC process starts on each request. 1416 | ; Default Value: 1 1417 | ; Development Value: 1 1418 | ; Production Value: 1 1419 | ; https://php.net/session.gc-probability 1420 | session.gc_probability = 1 1421 | 1422 | ; Defines the probability that the 'garbage collection' process is started on every 1423 | ; session initialization. The probability is calculated by using gc_probability/gc_divisor, 1424 | ; e.g. 1/100 means there is a 1% chance that the GC process starts on each request. 1425 | ; For high volume production servers, using a value of 1000 is a more efficient approach. 1426 | ; Default Value: 100 1427 | ; Development Value: 1000 1428 | ; Production Value: 1000 1429 | ; https://php.net/session.gc-divisor 1430 | session.gc_divisor = 1000 1431 | 1432 | ; After this number of seconds, stored data will be seen as 'garbage' and 1433 | ; cleaned up by the garbage collection process. 1434 | ; https://php.net/session.gc-maxlifetime 1435 | session.gc_maxlifetime = 1440 1436 | 1437 | ; NOTE: If you are using the subdirectory option for storing session files 1438 | ; (see session.save_path above), then garbage collection does *not* 1439 | ; happen automatically. You will need to do your own garbage 1440 | ; collection through a shell script, cron entry, or some other method. 1441 | ; For example, the following script is the equivalent of setting 1442 | ; session.gc_maxlifetime to 1440 (1440 seconds = 24 minutes): 1443 | ; find /path/to/sessions -cmin +24 -type f | xargs rm 1444 | 1445 | ; Check HTTP Referer to invalidate externally stored URLs containing ids. 1446 | ; HTTP_REFERER has to contain this substring for the session to be 1447 | ; considered as valid. 1448 | ; https://php.net/session.referer-check 1449 | session.referer_check = 1450 | 1451 | ; Set to {nocache,private,public,} to determine HTTP caching aspects 1452 | ; or leave this empty to avoid sending anti-caching headers. 1453 | ; https://php.net/session.cache-limiter 1454 | session.cache_limiter = nocache 1455 | 1456 | ; Document expires after n minutes. 1457 | ; https://php.net/session.cache-expire 1458 | session.cache_expire = 180 1459 | 1460 | ; trans sid support is disabled by default. 1461 | ; Use of trans sid may risk your users' security. 1462 | ; Use this option with caution. 1463 | ; - User may send URL contains active session ID 1464 | ; to other person via. email/irc/etc. 1465 | ; - URL that contains active session ID may be stored 1466 | ; in publicly accessible computer. 1467 | ; - User may access your site with the same session ID 1468 | ; always using URL stored in browser's history or bookmarks. 1469 | ; https://php.net/session.use-trans-sid 1470 | session.use_trans_sid = 0 1471 | 1472 | ; Set session ID character length. This value could be between 22 to 256. 1473 | ; Shorter length than default is supported only for compatibility reason. 1474 | ; Users should use 32 or more chars. 1475 | ; https://php.net/session.sid-length 1476 | ; Default Value: 32 1477 | ; Development Value: 26 1478 | ; Production Value: 26 1479 | session.sid_length = 26 1480 | 1481 | ; The URL rewriter will look for URLs in a defined set of HTML tags. 1482 | ;
is special; if you include them here, the rewriter will 1483 | ; add a hidden field with the info which is otherwise appended 1484 | ; to URLs. tag's action attribute URL will not be modified 1485 | ; unless it is specified. 1486 | ; Note that all valid entries require a "=", even if no value follows. 1487 | ; Default Value: "a=href,area=href,frame=src,form=" 1488 | ; Development Value: "a=href,area=href,frame=src,form=" 1489 | ; Production Value: "a=href,area=href,frame=src,form=" 1490 | ; https://php.net/url-rewriter.tags 1491 | session.trans_sid_tags = "a=href,area=href,frame=src,form=" 1492 | 1493 | ; URL rewriter does not rewrite absolute URLs by default. 1494 | ; To enable rewrites for absolute paths, target hosts must be specified 1495 | ; at RUNTIME. i.e. use ini_set() 1496 | ; tags is special. PHP will check action attribute's URL regardless 1497 | ; of session.trans_sid_tags setting. 1498 | ; If no host is defined, HTTP_HOST will be used for allowed host. 1499 | ; Example value: php.net,www.php.net,wiki.php.net 1500 | ; Use "," for multiple hosts. No spaces are allowed. 1501 | ; Default Value: "" 1502 | ; Development Value: "" 1503 | ; Production Value: "" 1504 | ;session.trans_sid_hosts="" 1505 | 1506 | ; Define how many bits are stored in each character when converting 1507 | ; the binary hash data to something readable. 1508 | ; Possible values: 1509 | ; 4 (4 bits: 0-9, a-f) 1510 | ; 5 (5 bits: 0-9, a-v) 1511 | ; 6 (6 bits: 0-9, a-z, A-Z, "-", ",") 1512 | ; Default Value: 4 1513 | ; Development Value: 5 1514 | ; Production Value: 5 1515 | ; https://php.net/session.hash-bits-per-character 1516 | session.sid_bits_per_character = 5 1517 | 1518 | ; Enable upload progress tracking in $_SESSION 1519 | ; Default Value: On 1520 | ; Development Value: On 1521 | ; Production Value: On 1522 | ; https://php.net/session.upload-progress.enabled 1523 | ;session.upload_progress.enabled = On 1524 | 1525 | ; Cleanup the progress information as soon as all POST data has been read 1526 | ; (i.e. upload completed). 1527 | ; Default Value: On 1528 | ; Development Value: On 1529 | ; Production Value: On 1530 | ; https://php.net/session.upload-progress.cleanup 1531 | ;session.upload_progress.cleanup = On 1532 | 1533 | ; A prefix used for the upload progress key in $_SESSION 1534 | ; Default Value: "upload_progress_" 1535 | ; Development Value: "upload_progress_" 1536 | ; Production Value: "upload_progress_" 1537 | ; https://php.net/session.upload-progress.prefix 1538 | ;session.upload_progress.prefix = "upload_progress_" 1539 | 1540 | ; The index name (concatenated with the prefix) in $_SESSION 1541 | ; containing the upload progress information 1542 | ; Default Value: "PHP_SESSION_UPLOAD_PROGRESS" 1543 | ; Development Value: "PHP_SESSION_UPLOAD_PROGRESS" 1544 | ; Production Value: "PHP_SESSION_UPLOAD_PROGRESS" 1545 | ; https://php.net/session.upload-progress.name 1546 | ;session.upload_progress.name = "PHP_SESSION_UPLOAD_PROGRESS" 1547 | 1548 | ; How frequently the upload progress should be updated. 1549 | ; Given either in percentages (per-file), or in bytes 1550 | ; Default Value: "1%" 1551 | ; Development Value: "1%" 1552 | ; Production Value: "1%" 1553 | ; https://php.net/session.upload-progress.freq 1554 | ;session.upload_progress.freq = "1%" 1555 | 1556 | ; The minimum delay between updates, in seconds 1557 | ; Default Value: 1 1558 | ; Development Value: 1 1559 | ; Production Value: 1 1560 | ; https://php.net/session.upload-progress.min-freq 1561 | ;session.upload_progress.min_freq = "1" 1562 | 1563 | ; Only write session data when session data is changed. Enabled by default. 1564 | ; https://php.net/session.lazy-write 1565 | ;session.lazy_write = On 1566 | 1567 | [Assertion] 1568 | ; Switch whether to compile assertions at all (to have no overhead at run-time) 1569 | ; -1: Do not compile at all 1570 | ; 0: Jump over assertion at run-time 1571 | ; 1: Execute assertions 1572 | ; Changing from or to a negative value is only possible in php.ini! (For turning assertions on and off at run-time, see assert.active, when zend.assertions = 1) 1573 | ; Default Value: 1 1574 | ; Development Value: 1 1575 | ; Production Value: -1 1576 | ; https://php.net/zend.assertions 1577 | zend.assertions = 1 1578 | 1579 | ; Assert(expr); active by default. 1580 | ; https://php.net/assert.active 1581 | ;assert.active = On 1582 | 1583 | ; Throw an AssertionError on failed assertions 1584 | ; https://php.net/assert.exception 1585 | ;assert.exception = On 1586 | 1587 | ; Issue a PHP warning for each failed assertion. (Overridden by assert.exception if active) 1588 | ; https://php.net/assert.warning 1589 | ;assert.warning = On 1590 | 1591 | ; Don't bail out by default. 1592 | ; https://php.net/assert.bail 1593 | ;assert.bail = Off 1594 | 1595 | ; User-function to be called if an assertion fails. 1596 | ; https://php.net/assert.callback 1597 | ;assert.callback = 0 1598 | 1599 | [COM] 1600 | ; path to a file containing GUIDs, IIDs or filenames of files with TypeLibs 1601 | ; https://php.net/com.typelib-file 1602 | ;com.typelib_file = 1603 | 1604 | ; allow Distributed-COM calls 1605 | ; https://php.net/com.allow-dcom 1606 | ;com.allow_dcom = true 1607 | 1608 | ; autoregister constants of a component's typelib on com_load() 1609 | ; https://php.net/com.autoregister-typelib 1610 | ;com.autoregister_typelib = true 1611 | 1612 | ; register constants casesensitive 1613 | ; https://php.net/com.autoregister-casesensitive 1614 | ;com.autoregister_casesensitive = false 1615 | 1616 | ; show warnings on duplicate constant registrations 1617 | ; https://php.net/com.autoregister-verbose 1618 | ;com.autoregister_verbose = true 1619 | 1620 | ; The default character set code-page to use when passing strings to and from COM objects. 1621 | ; Default: system ANSI code page 1622 | ;com.code_page= 1623 | 1624 | ; The version of the .NET framework to use. The value of the setting are the first three parts 1625 | ; of the framework's version number, separated by dots, and prefixed with "v", e.g. "v4.0.30319". 1626 | ;com.dotnet_version= 1627 | 1628 | [mbstring] 1629 | ; language for internal character representation. 1630 | ; This affects mb_send_mail() and mbstring.detect_order. 1631 | ; https://php.net/mbstring.language 1632 | ;mbstring.language = Japanese 1633 | 1634 | ; Use of this INI entry is deprecated, use global internal_encoding instead. 1635 | ; internal/script encoding. 1636 | ; Some encoding cannot work as internal encoding. (e.g. SJIS, BIG5, ISO-2022-*) 1637 | ; If empty, default_charset or internal_encoding or iconv.internal_encoding is used. 1638 | ; The precedence is: default_charset < internal_encoding < iconv.internal_encoding 1639 | ;mbstring.internal_encoding = 1640 | 1641 | ; Use of this INI entry is deprecated, use global input_encoding instead. 1642 | ; http input encoding. 1643 | ; mbstring.encoding_translation = On is needed to use this setting. 1644 | ; If empty, default_charset or input_encoding or mbstring.input is used. 1645 | ; The precedence is: default_charset < input_encoding < mbstring.http_input 1646 | ; https://php.net/mbstring.http-input 1647 | ;mbstring.http_input = 1648 | 1649 | ; Use of this INI entry is deprecated, use global output_encoding instead. 1650 | ; http output encoding. 1651 | ; mb_output_handler must be registered as output buffer to function. 1652 | ; If empty, default_charset or output_encoding or mbstring.http_output is used. 1653 | ; The precedence is: default_charset < output_encoding < mbstring.http_output 1654 | ; To use an output encoding conversion, mbstring's output handler must be set 1655 | ; otherwise output encoding conversion cannot be performed. 1656 | ; https://php.net/mbstring.http-output 1657 | ;mbstring.http_output = 1658 | 1659 | ; enable automatic encoding translation according to 1660 | ; mbstring.internal_encoding setting. Input chars are 1661 | ; converted to internal encoding by setting this to On. 1662 | ; Note: Do _not_ use automatic encoding translation for 1663 | ; portable libs/applications. 1664 | ; https://php.net/mbstring.encoding-translation 1665 | ;mbstring.encoding_translation = Off 1666 | 1667 | ; automatic encoding detection order. 1668 | ; "auto" detect order is changed according to mbstring.language 1669 | ; https://php.net/mbstring.detect-order 1670 | ;mbstring.detect_order = auto 1671 | 1672 | ; substitute_character used when character cannot be converted 1673 | ; one from another 1674 | ; https://php.net/mbstring.substitute-character 1675 | ;mbstring.substitute_character = none 1676 | 1677 | ; Enable strict encoding detection. 1678 | ;mbstring.strict_detection = Off 1679 | 1680 | ; This directive specifies the regex pattern of content types for which mb_output_handler() 1681 | ; is activated. 1682 | ; Default: mbstring.http_output_conv_mimetype=^(text/|application/xhtml\+xml) 1683 | ;mbstring.http_output_conv_mimetype= 1684 | 1685 | ; This directive specifies maximum stack depth for mbstring regular expressions. It is similar 1686 | ; to the pcre.recursion_limit for PCRE. 1687 | ;mbstring.regex_stack_limit=100000 1688 | 1689 | ; This directive specifies maximum retry count for mbstring regular expressions. It is similar 1690 | ; to the pcre.backtrack_limit for PCRE. 1691 | ;mbstring.regex_retry_limit=1000000 1692 | 1693 | [gd] 1694 | ; Tell the jpeg decode to ignore warnings and try to create 1695 | ; a gd image. The warning will then be displayed as notices 1696 | ; disabled by default 1697 | ; https://php.net/gd.jpeg-ignore-warning 1698 | ;gd.jpeg_ignore_warning = 1 1699 | 1700 | [exif] 1701 | ; Exif UNICODE user comments are handled as UCS-2BE/UCS-2LE and JIS as JIS. 1702 | ; With mbstring support this will automatically be converted into the encoding 1703 | ; given by corresponding encode setting. When empty mbstring.internal_encoding 1704 | ; is used. For the decode settings you can distinguish between motorola and 1705 | ; intel byte order. A decode setting cannot be empty. 1706 | ; https://php.net/exif.encode-unicode 1707 | ;exif.encode_unicode = ISO-8859-15 1708 | 1709 | ; https://php.net/exif.decode-unicode-motorola 1710 | ;exif.decode_unicode_motorola = UCS-2BE 1711 | 1712 | ; https://php.net/exif.decode-unicode-intel 1713 | ;exif.decode_unicode_intel = UCS-2LE 1714 | 1715 | ; https://php.net/exif.encode-jis 1716 | ;exif.encode_jis = 1717 | 1718 | ; https://php.net/exif.decode-jis-motorola 1719 | ;exif.decode_jis_motorola = JIS 1720 | 1721 | ; https://php.net/exif.decode-jis-intel 1722 | ;exif.decode_jis_intel = JIS 1723 | 1724 | [Tidy] 1725 | ; The path to a default tidy configuration file to use when using tidy 1726 | ; https://php.net/tidy.default-config 1727 | ;tidy.default_config = /usr/local/lib/php/default.tcfg 1728 | 1729 | ; Should tidy clean and repair output automatically? 1730 | ; WARNING: Do not use this option if you are generating non-html content 1731 | ; such as dynamic images 1732 | ; https://php.net/tidy.clean-output 1733 | tidy.clean_output = Off 1734 | 1735 | [soap] 1736 | ; Enables or disables WSDL caching feature. 1737 | ; https://php.net/soap.wsdl-cache-enabled 1738 | soap.wsdl_cache_enabled=1 1739 | 1740 | ; Sets the directory name where SOAP extension will put cache files. 1741 | ; https://php.net/soap.wsdl-cache-dir 1742 | soap.wsdl_cache_dir="/tmp" 1743 | 1744 | ; (time to live) Sets the number of second while cached file will be used 1745 | ; instead of original one. 1746 | ; https://php.net/soap.wsdl-cache-ttl 1747 | soap.wsdl_cache_ttl=86400 1748 | 1749 | ; Sets the size of the cache limit. (Max. number of WSDL files to cache) 1750 | soap.wsdl_cache_limit = 5 1751 | 1752 | [sysvshm] 1753 | ; A default size of the shared memory segment 1754 | ;sysvshm.init_mem = 10000 1755 | 1756 | [ldap] 1757 | ; Sets the maximum number of open links or -1 for unlimited. 1758 | ldap.max_links = -1 1759 | 1760 | [dba] 1761 | ;dba.default_handler= 1762 | 1763 | [opcache] 1764 | ; Determines if Zend OPCache is enabled 1765 | ;opcache.enable=1 1766 | 1767 | ; Determines if Zend OPCache is enabled for the CLI version of PHP 1768 | ;opcache.enable_cli=0 1769 | 1770 | ; The OPcache shared memory storage size. 1771 | ;opcache.memory_consumption=128 1772 | 1773 | ; The amount of memory for interned strings in Mbytes. 1774 | ;opcache.interned_strings_buffer=8 1775 | 1776 | ; The maximum number of keys (scripts) in the OPcache hash table. 1777 | ; Only numbers between 200 and 1000000 are allowed. 1778 | ;opcache.max_accelerated_files=10000 1779 | 1780 | ; The maximum percentage of "wasted" memory until a restart is scheduled. 1781 | ;opcache.max_wasted_percentage=5 1782 | 1783 | ; When this directive is enabled, the OPcache appends the current working 1784 | ; directory to the script key, thus eliminating possible collisions between 1785 | ; files with the same name (basename). Disabling the directive improves 1786 | ; performance, but may break existing applications. 1787 | ;opcache.use_cwd=1 1788 | 1789 | ; When disabled, you must reset the OPcache manually or restart the 1790 | ; webserver for changes to the filesystem to take effect. 1791 | ;opcache.validate_timestamps=1 1792 | 1793 | ; How often (in seconds) to check file timestamps for changes to the shared 1794 | ; memory storage allocation. ("1" means validate once per second, but only 1795 | ; once per request. "0" means always validate) 1796 | ;opcache.revalidate_freq=2 1797 | 1798 | ; Enables or disables file search in include_path optimization 1799 | ;opcache.revalidate_path=0 1800 | 1801 | ; If disabled, all PHPDoc comments are dropped from the code to reduce the 1802 | ; size of the optimized code. 1803 | ;opcache.save_comments=1 1804 | 1805 | ; If enabled, compilation warnings (including notices and deprecations) will 1806 | ; be recorded and replayed each time a file is included. Otherwise, compilation 1807 | ; warnings will only be emitted when the file is first cached. 1808 | ;opcache.record_warnings=0 1809 | 1810 | ; Allow file existence override (file_exists, etc.) performance feature. 1811 | ;opcache.enable_file_override=0 1812 | 1813 | ; A bitmask, where each bit enables or disables the appropriate OPcache 1814 | ; passes 1815 | ;opcache.optimization_level=0x7FFFBFFF 1816 | 1817 | ;opcache.dups_fix=0 1818 | 1819 | ; The location of the OPcache blacklist file (wildcards allowed). 1820 | ; Each OPcache blacklist file is a text file that holds the names of files 1821 | ; that should not be accelerated. The file format is to add each filename 1822 | ; to a new line. The filename may be a full path or just a file prefix 1823 | ; (i.e., /var/www/x blacklists all the files and directories in /var/www 1824 | ; that start with 'x'). Line starting with a ; are ignored (comments). 1825 | ;opcache.blacklist_filename= 1826 | 1827 | ; Allows exclusion of large files from being cached. By default all files 1828 | ; are cached. 1829 | ;opcache.max_file_size=0 1830 | 1831 | ; Check the cache checksum each N requests. 1832 | ; The default value of "0" means that the checks are disabled. 1833 | ;opcache.consistency_checks=0 1834 | 1835 | ; How long to wait (in seconds) for a scheduled restart to begin if the cache 1836 | ; is not being accessed. 1837 | ;opcache.force_restart_timeout=180 1838 | 1839 | ; OPcache error_log file name. Empty string assumes "stderr". 1840 | ;opcache.error_log= 1841 | 1842 | ; All OPcache errors go to the Web server log. 1843 | ; By default, only fatal errors (level 0) or errors (level 1) are logged. 1844 | ; You can also enable warnings (level 2), info messages (level 3) or 1845 | ; debug messages (level 4). 1846 | ;opcache.log_verbosity_level=1 1847 | 1848 | ; Preferred Shared Memory back-end. Leave empty and let the system decide. 1849 | ;opcache.preferred_memory_model= 1850 | 1851 | ; Protect the shared memory from unexpected writing during script execution. 1852 | ; Useful for internal debugging only. 1853 | ;opcache.protect_memory=0 1854 | 1855 | ; Allows calling OPcache API functions only from PHP scripts which path is 1856 | ; started from specified string. The default "" means no restriction 1857 | ;opcache.restrict_api= 1858 | 1859 | ; Mapping base of shared memory segments (for Windows only). All the PHP 1860 | ; processes have to map shared memory into the same address space. This 1861 | ; directive allows to manually fix the "Unable to reattach to base address" 1862 | ; errors. 1863 | ;opcache.mmap_base= 1864 | 1865 | ; Facilitates multiple OPcache instances per user (for Windows only). All PHP 1866 | ; processes with the same cache ID and user share an OPcache instance. 1867 | ;opcache.cache_id= 1868 | 1869 | ; Enables and sets the second level cache directory. 1870 | ; It should improve performance when SHM memory is full, at server restart or 1871 | ; SHM reset. The default "" disables file based caching. 1872 | ;opcache.file_cache= 1873 | 1874 | ; Enables or disables opcode caching in shared memory. 1875 | ;opcache.file_cache_only=0 1876 | 1877 | ; Enables or disables checksum validation when script loaded from file cache. 1878 | ;opcache.file_cache_consistency_checks=1 1879 | 1880 | ; Implies opcache.file_cache_only=1 for a certain process that failed to 1881 | ; reattach to the shared memory (for Windows only). Explicitly enabled file 1882 | ; cache is required. 1883 | ;opcache.file_cache_fallback=1 1884 | 1885 | ; Enables or disables copying of PHP code (text segment) into HUGE PAGES. 1886 | ; This should improve performance, but requires appropriate OS configuration. 1887 | ;opcache.huge_code_pages=0 1888 | 1889 | ; Validate cached file permissions. 1890 | ;opcache.validate_permission=0 1891 | 1892 | ; Prevent name collisions in chroot'ed environment. 1893 | ;opcache.validate_root=0 1894 | 1895 | ; If specified, it produces opcode dumps for debugging different stages of 1896 | ; optimizations. 1897 | ;opcache.opt_debug_level=0 1898 | 1899 | ; Specifies a PHP script that is going to be compiled and executed at server 1900 | ; start-up. 1901 | ; https://php.net/opcache.preload 1902 | ;opcache.preload= 1903 | 1904 | ; Preloading code as root is not allowed for security reasons. This directive 1905 | ; facilitates to let the preloading to be run as another user. 1906 | ; https://php.net/opcache.preload_user 1907 | ;opcache.preload_user= 1908 | 1909 | ; Prevents caching files that are less than this number of seconds old. It 1910 | ; protects from caching of incompletely updated files. In case all file updates 1911 | ; on your site are atomic, you may increase performance by setting it to "0". 1912 | ;opcache.file_update_protection=2 1913 | 1914 | ; Absolute path used to store shared lockfiles (for *nix only). 1915 | ;opcache.lockfile_path=/tmp 1916 | 1917 | [curl] 1918 | ; A default value for the CURLOPT_CAINFO option. This is required to be an 1919 | ; absolute path. 1920 | ;curl.cainfo = 1921 | 1922 | [openssl] 1923 | ; The location of a Certificate Authority (CA) file on the local filesystem 1924 | ; to use when verifying the identity of SSL/TLS peers. Most users should 1925 | ; not specify a value for this directive as PHP will attempt to use the 1926 | ; OS-managed cert stores in its absence. If specified, this value may still 1927 | ; be overridden on a per-stream basis via the "cafile" SSL stream context 1928 | ; option. 1929 | ;openssl.cafile= 1930 | 1931 | ; If openssl.cafile is not specified or if the CA file is not found, the 1932 | ; directory pointed to by openssl.capath is searched for a suitable 1933 | ; certificate. This value must be a correctly hashed certificate directory. 1934 | ; Most users should not specify a value for this directive as PHP will 1935 | ; attempt to use the OS-managed cert stores in its absence. If specified, 1936 | ; this value may still be overridden on a per-stream basis via the "capath" 1937 | ; SSL stream context option. 1938 | ;openssl.capath= 1939 | 1940 | [ffi] 1941 | ; FFI API restriction. Possible values: 1942 | ; "preload" - enabled in CLI scripts and preloaded files (default) 1943 | ; "false" - always disabled 1944 | ; "true" - always enabled 1945 | ;ffi.enable=preload 1946 | 1947 | ; List of headers files to preload, wildcard patterns allowed. 1948 | ;ffi.preload= -------------------------------------------------------------------------------- /8/templates/authorized_keys.tmpl: -------------------------------------------------------------------------------- 1 | {{ range jsonArray (getenv "SSH_PUBLIC_KEYS") }}{{ . }} 2 | {{ end }} -------------------------------------------------------------------------------- /8/templates/crontab.tmpl: -------------------------------------------------------------------------------- 1 | {{ getenv "CRONTAB" }} -------------------------------------------------------------------------------- /8/templates/docker-php-8.1.ini.tmpl: -------------------------------------------------------------------------------- 1 | ; This file user only to override default php.ini values 2 | ; BASIC SETTINGS: $PHP_INI_DIR/php.ini 3 | ; PHP-FPM SETTINGS: /usr/local/etc/php-fpm.d/zz-www.conf 4 | 5 | [PHP] 6 | display_errors = {{ getenv "PHP_DISPLAY_ERRORS" "On" }} 7 | display_startup_errors = {{ getenv "PHP_DISPLAY_STARTUP_ERRORS" "On" }} 8 | expose_php = {{ getenv "PHP_EXPOSE" "Off" }} 9 | max_execution_time = {{ getenv "PHP_MAX_EXECUTION_TIME" "120" }} 10 | max_input_time = {{ getenv "PHP_MAX_INPUT_TIME" "60" }} 11 | max_input_vars = {{ getenv "PHP_MAX_INPUT_VARS" "2000" }} 12 | post_max_size = {{ getenv "PHP_POST_MAX_SIZE" "32M" }} 13 | upload_max_filesize = {{ getenv "PHP_UPLOAD_MAX_FILESIZE" "32M" }} 14 | max_file_uploads = {{ getenv "PHP_MAX_FILE_UPLOADS" "20" }} 15 | allow_url_fopen = {{ getenv "PHP_ALLOW_URL_FOPEN" "On" }} 16 | default_socket_timeout = {{ getenv "PHP_DEFAULT_SOCKET_TIMEOUT" "60" }} 17 | output_buffering = {{ getenv "PHP_OUTPUT_BUFFERING" "4096" }} 18 | short_open_tag = {{ getenv "PHP_SHORT_OPEN_TAG" "1" }} 19 | disable_functions = {{ getenv "PHP_DISABLE_FUNCTIONS" }} 20 | disable_classes = {{ getenv "PHP_DISABLE_CLASSES" }} 21 | 22 | realpath_cache_size = {{ getenv "PHP_REALPATH_CACHE_SIZE" "4096k" }} 23 | realpath_cache_ttl = {{ getenv "PHP_REALPATH_CACHE_TTL" "120" }} 24 | memory_limit = {{ getenv "PHP_CLI_MEMORY_LIMIT" "-1" }} 25 | error_reporting = {{ getenv "PHP_ERROR_REPORTING" "E_ALL" }} 26 | log_errors = {{ getenv "PHP_LOG_ERRORS" "On" }} 27 | log_errors_max_len = {{ getenv "PHP_LOG_ERRORS_MAX_LEN" "0" }} 28 | error_log = /proc/self/fd/2 29 | auto_prepend_file = {{ getenv "PHP_AUTO_PREPEND_FILE" }} 30 | auto_append_file = {{ getenv "PHP_AUTO_APPEND_FILE" }} 31 | 32 | [Date] 33 | date.timezone = {{ getenv "PHP_DATE_TIMEZONE" "UTC"}} 34 | 35 | [Phar] 36 | phar.readonly = {{ getenv "PHP_PHAR_READONLY" "1" }} 37 | phar.require_hash = {{ getenv "PHP_PHAR_REQUIRE_HASH" "1" }} 38 | phar.cache_list = {{ getenv "PHP_PHAR_CACHE_LIST" "" }} 39 | 40 | [mail function] 41 | sendmail_path = "{{ getenv "PHP_SENDMAIL_PATH" "/usr/bin/dos2unix -u | /usr/bin/msmtp -t -i" }}" 42 | 43 | [MySQLi] 44 | mysqli.cache_size = {{ getenv "PHP_MYSQLI_CACHE_SIZE" "2000" }} 45 | 46 | [Session] 47 | session.save_handler = {{ getenv "PHP_SESSION_SAVE_HANDLER" "files" }} 48 | session.save_path = "{{ getenv "PHP_SESSION_SAVE_PATH" "/mnt/files/sessions" }}" 49 | session.use_strict_mode = {{ getenv "PHP_SESSION_USE_STRICT_MODE" "0" }} 50 | session.use_cookies = {{ getenv "PHP_SESSION_USE_COOKIES" "1" }} 51 | session.cookie_secure = {{ getenv "PHP_SESSION_COOKIE_SECURE" "0" }} 52 | session.use_only_cookies = {{ getenv "PHP_SESSION_USE_ONLY_COOKIES" "1" }} 53 | session.name = {{ getenv "PHP_SESSION_NAME" "PHPSESSID" }} 54 | session.auto_start = {{ getenv "PHP_SESSION_AUTO_START" "0" }} 55 | session.cookie_lifetime = {{ getenv "PHP_SESSION_COOKIE_LIFETIME" "0" }} 56 | session.cookie_path = {{ getenv "PHP_SESSION_COOKIE_PATH" "/" }} 57 | session.cookie_domain = {{ getenv "PHP_SESSION_COOKIE_DOMAIN" }} 58 | session.cookie_httponly = {{ getenv "PHP_SESSION_COOKIE_HTTPONLY" "0" }} 59 | session.cookie_samesite = {{ getenv "PHP_SESSION_COOKIE_SAMESITE" }} 60 | session.serialize_handler = {{ getenv "PHP_SESSION_SERIALIZE_HANDLER" "php" }} 61 | session.gc_probability = {{ getenv "PHP_SESSION_GC_PROBABILITY" "1" }} 62 | session.gc_divisor = {{ getenv "PHP_SESSION_GC_DIVISOR" "100" }} 63 | session.gc_maxlifetime = {{ getenv "PHP_SESSION_GC_MAXLIFETIME" "1440" }} 64 | session.referer_check = {{ getenv "PHP_SESSION_REFERER_CHECK" "" }} 65 | session.cache_limiter = {{ getenv "PHP_SESSION_CACHE_LIMITER" "nocache" }} 66 | session.cache_expire = {{ getenv "PHP_SESSION_CACHE_EXPIRE" "180" }} 67 | session.use_trans_sid = {{ getenv "PHP_SESSION_USE_TRANS_SID" "0" }} 68 | session.sid_length = {{ getenv "PHP_SESSION_SID_LENGTH" "26" }} 69 | session.trans_sid_tags = "{{ getenv "PHP_SESSION_TRANS_SID_TAGS" "a=href,area=href,frame=src,form=" }}" 70 | session.trans_sid_hosts = {{ getenv "PHP_SESSION_TRANS_SID_HOSTS" "" }} 71 | session.sid_bits_per_character = {{ getenv "PHP_SESSION_SID_BITS_PER_CHARACTER" "5" }} 72 | session.upload_progress.enabled = {{ getenv "PHP_SESSION_UPLOAD_PROGRESS_ENABLED" "on" }} 73 | session.upload_progress.cleanup = {{ getenv "PHP_SESSION_UPLOAD_PROGRESS_CLEANUP" "on" }} 74 | session.upload_progress.prefix = "{{ getenv "PHP_SESSION_UPLOAD_PROGRESS_PREFIX" "upload_progress_" }}" 75 | session.upload_progress.name = "{{ getenv "PHP_SESSION_UPLOAD_PROGRESS_NAME" "PHP_SESSION_UPLOAD_PROGRESS" }}" 76 | session.upload_progress.freq = "{{ getenv "PHP_SESSION_UPLOAD_PROGRESS_FREQ" "1%" }}" 77 | session.upload_progress.min_freq = "{{ getenv "PHP_SESSION_UPLOAD_PROGRESS_MIN_FREQ" "1" }}" 78 | session.lazy_write = {{ getenv "PHP_SESSION_LAZY_WRITE" "on" }} 79 | 80 | [Assertion] 81 | zend.assertions = {{ getenv "PHP_ZEND_ASSERTIONS" "1" }} 82 | assert.active = {{ getenv "PHP_ASSERT_ACTIVE" "On" }} 83 | zend.exception_ignore_args = {{ getenv "PHP_ZEND_EXCEPTION_IGNORE_ARGS" "0" }} 84 | zend.multibyte = {{ getenv "PHP_ZEND_MULTIBYTE" "0" }} 85 | zend.signal_check = {{ getenv "PHP_ZEND_SIGNAL_CHECK" "0" }} 86 | zend.exception_string_param_max_len = {{ getenv "PHP_ZEND_EXCEPTION_STRING_PARAM_MAX_LEN" "15" }} 87 | {{- if getenv "PHP_ZEND_SCRIPT_ENCODING" }} 88 | zend.script_encoding = {{ getenv "PHP_ZEND_SCRIPT_ENCODING" }} 89 | {{- end }} 90 | {{- if getenv "PHP_ZEND_DETECT_UNICODE" }} 91 | zend.detect_unicode = {{ getenv "PHP_ZEND_DETECT_UNICODE" }} 92 | {{- end }} 93 | -------------------------------------------------------------------------------- /8/templates/docker-php-8.2.ini.tmpl: -------------------------------------------------------------------------------- 1 | ; This file user only to override default php.ini values 2 | ; BASIC SETTINGS: $PHP_INI_DIR/php.ini 3 | ; PHP-FPM SETTINGS: /usr/local/etc/php-fpm.d/zz-www.conf 4 | 5 | [PHP] 6 | display_errors = {{ getenv "PHP_DISPLAY_ERRORS" "On" }} 7 | display_startup_errors = {{ getenv "PHP_DISPLAY_STARTUP_ERRORS" "On" }} 8 | expose_php = {{ getenv "PHP_EXPOSE" "Off" }} 9 | max_execution_time = {{ getenv "PHP_MAX_EXECUTION_TIME" "120" }} 10 | max_input_time = {{ getenv "PHP_MAX_INPUT_TIME" "60" }} 11 | max_input_vars = {{ getenv "PHP_MAX_INPUT_VARS" "2000" }} 12 | post_max_size = {{ getenv "PHP_POST_MAX_SIZE" "32M" }} 13 | upload_max_filesize = {{ getenv "PHP_UPLOAD_MAX_FILESIZE" "32M" }} 14 | max_file_uploads = {{ getenv "PHP_MAX_FILE_UPLOADS" "20" }} 15 | allow_url_fopen = {{ getenv "PHP_ALLOW_URL_FOPEN" "On" }} 16 | default_socket_timeout = {{ getenv "PHP_DEFAULT_SOCKET_TIMEOUT" "60" }} 17 | output_buffering = {{ getenv "PHP_OUTPUT_BUFFERING" "4096" }} 18 | short_open_tag = {{ getenv "PHP_SHORT_OPEN_TAG" "1" }} 19 | disable_functions = {{ getenv "PHP_DISABLE_FUNCTIONS" }} 20 | disable_classes = {{ getenv "PHP_DISABLE_CLASSES" }} 21 | 22 | realpath_cache_size = {{ getenv "PHP_REALPATH_CACHE_SIZE" "4096k" }} 23 | realpath_cache_ttl = {{ getenv "PHP_REALPATH_CACHE_TTL" "120" }} 24 | memory_limit = {{ getenv "PHP_CLI_MEMORY_LIMIT" "-1" }} 25 | error_reporting = {{ getenv "PHP_ERROR_REPORTING" "E_ALL" }} 26 | log_errors = {{ getenv "PHP_LOG_ERRORS" "On" }} 27 | log_errors_max_len = {{ getenv "PHP_LOG_ERRORS_MAX_LEN" "0" }} 28 | error_log = /proc/self/fd/2 29 | auto_prepend_file = {{ getenv "PHP_AUTO_PREPEND_FILE" }} 30 | auto_append_file = {{ getenv "PHP_AUTO_APPEND_FILE" }} 31 | 32 | [Date] 33 | date.timezone = {{ getenv "PHP_DATE_TIMEZONE" "UTC"}} 34 | 35 | [Phar] 36 | phar.readonly = {{ getenv "PHP_PHAR_READONLY" "1" }} 37 | phar.require_hash = {{ getenv "PHP_PHAR_REQUIRE_HASH" "1" }} 38 | phar.cache_list = {{ getenv "PHP_PHAR_CACHE_LIST" "" }} 39 | 40 | [mail function] 41 | sendmail_path = {{ getenv "PHP_SENDMAIL_PATH" "/usr/bin/msmtp -t -i" }} 42 | mail.mixed_lf_and_crlf = {{ getenv "PHP_MAIL_MIXED_LF_AND_CRLF" "Off" }} 43 | 44 | [MySQLi] 45 | mysqli.cache_size = {{ getenv "PHP_MYSQLI_CACHE_SIZE" "2000" }} 46 | 47 | [Session] 48 | session.save_handler = {{ getenv "PHP_SESSION_SAVE_HANDLER" "files" }} 49 | session.save_path = "{{ getenv "PHP_SESSION_SAVE_PATH" "/mnt/files/sessions" }}" 50 | session.use_strict_mode = {{ getenv "PHP_SESSION_USE_STRICT_MODE" "0" }} 51 | session.use_cookies = {{ getenv "PHP_SESSION_USE_COOKIES" "1" }} 52 | session.cookie_secure = {{ getenv "PHP_SESSION_COOKIE_SECURE" "0" }} 53 | session.use_only_cookies = {{ getenv "PHP_SESSION_USE_ONLY_COOKIES" "1" }} 54 | session.name = {{ getenv "PHP_SESSION_NAME" "PHPSESSID" }} 55 | session.auto_start = {{ getenv "PHP_SESSION_AUTO_START" "0" }} 56 | session.cookie_lifetime = {{ getenv "PHP_SESSION_COOKIE_LIFETIME" "0" }} 57 | session.cookie_path = {{ getenv "PHP_SESSION_COOKIE_PATH" "/" }} 58 | session.cookie_domain = {{ getenv "PHP_SESSION_COOKIE_DOMAIN" }} 59 | session.cookie_httponly = {{ getenv "PHP_SESSION_COOKIE_HTTPONLY" "0" }} 60 | session.cookie_samesite = {{ getenv "PHP_SESSION_COOKIE_SAMESITE" }} 61 | session.serialize_handler = {{ getenv "PHP_SESSION_SERIALIZE_HANDLER" "php" }} 62 | session.gc_probability = {{ getenv "PHP_SESSION_GC_PROBABILITY" "1" }} 63 | session.gc_divisor = {{ getenv "PHP_SESSION_GC_DIVISOR" "100" }} 64 | session.gc_maxlifetime = {{ getenv "PHP_SESSION_GC_MAXLIFETIME" "1440" }} 65 | session.referer_check = {{ getenv "PHP_SESSION_REFERER_CHECK" "" }} 66 | session.cache_limiter = {{ getenv "PHP_SESSION_CACHE_LIMITER" "nocache" }} 67 | session.cache_expire = {{ getenv "PHP_SESSION_CACHE_EXPIRE" "180" }} 68 | session.use_trans_sid = {{ getenv "PHP_SESSION_USE_TRANS_SID" "0" }} 69 | session.sid_length = {{ getenv "PHP_SESSION_SID_LENGTH" "26" }} 70 | session.trans_sid_tags = "{{ getenv "PHP_SESSION_TRANS_SID_TAGS" "a=href,area=href,frame=src,form=" }}" 71 | session.trans_sid_hosts = {{ getenv "PHP_SESSION_TRANS_SID_HOSTS" "" }} 72 | session.sid_bits_per_character = {{ getenv "PHP_SESSION_SID_BITS_PER_CHARACTER" "5" }} 73 | session.upload_progress.enabled = {{ getenv "PHP_SESSION_UPLOAD_PROGRESS_ENABLED" "on" }} 74 | session.upload_progress.cleanup = {{ getenv "PHP_SESSION_UPLOAD_PROGRESS_CLEANUP" "on" }} 75 | session.upload_progress.prefix = "{{ getenv "PHP_SESSION_UPLOAD_PROGRESS_PREFIX" "upload_progress_" }}" 76 | session.upload_progress.name = "{{ getenv "PHP_SESSION_UPLOAD_PROGRESS_NAME" "PHP_SESSION_UPLOAD_PROGRESS" }}" 77 | session.upload_progress.freq = "{{ getenv "PHP_SESSION_UPLOAD_PROGRESS_FREQ" "1%" }}" 78 | session.upload_progress.min_freq = "{{ getenv "PHP_SESSION_UPLOAD_PROGRESS_MIN_FREQ" "1" }}" 79 | session.lazy_write = {{ getenv "PHP_SESSION_LAZY_WRITE" "on" }} 80 | 81 | [Assertion] 82 | zend.assertions = {{ getenv "PHP_ZEND_ASSERTIONS" "1" }} 83 | assert.active = {{ getenv "PHP_ASSERT_ACTIVE" "On" }} 84 | zend.exception_ignore_args = {{ getenv "PHP_ZEND_EXCEPTION_IGNORE_ARGS" "0" }} 85 | zend.multibyte = {{ getenv "PHP_ZEND_MULTIBYTE" "0" }} 86 | zend.signal_check = {{ getenv "PHP_ZEND_SIGNAL_CHECK" "0" }} 87 | zend.exception_string_param_max_len = {{ getenv "PHP_ZEND_EXCEPTION_STRING_PARAM_MAX_LEN" "15" }} 88 | {{- if getenv "PHP_ZEND_SCRIPT_ENCODING" }} 89 | zend.script_encoding = {{ getenv "PHP_ZEND_SCRIPT_ENCODING" }} 90 | {{- end }} 91 | {{- if getenv "PHP_ZEND_DETECT_UNICODE" }} 92 | zend.detect_unicode = {{ getenv "PHP_ZEND_DETECT_UNICODE" }} 93 | {{- end }} 94 | -------------------------------------------------------------------------------- /8/templates/docker-php-8.3.ini.tmpl: -------------------------------------------------------------------------------- 1 | ; This file user only to override default php.ini values 2 | ; BASIC SETTINGS: $PHP_INI_DIR/php.ini 3 | ; PHP-FPM SETTINGS: /usr/local/etc/php-fpm.d/zz-www.conf 4 | 5 | [PHP] 6 | display_errors = {{ getenv "PHP_DISPLAY_ERRORS" "On" }} 7 | display_startup_errors = {{ getenv "PHP_DISPLAY_STARTUP_ERRORS" "On" }} 8 | expose_php = {{ getenv "PHP_EXPOSE" "Off" }} 9 | max_execution_time = {{ getenv "PHP_MAX_EXECUTION_TIME" "120" }} 10 | max_input_time = {{ getenv "PHP_MAX_INPUT_TIME" "60" }} 11 | max_input_vars = {{ getenv "PHP_MAX_INPUT_VARS" "2000" }} 12 | post_max_size = {{ getenv "PHP_POST_MAX_SIZE" "32M" }} 13 | upload_max_filesize = {{ getenv "PHP_UPLOAD_MAX_FILESIZE" "32M" }} 14 | max_file_uploads = {{ getenv "PHP_MAX_FILE_UPLOADS" "20" }} 15 | allow_url_fopen = {{ getenv "PHP_ALLOW_URL_FOPEN" "On" }} 16 | default_socket_timeout = {{ getenv "PHP_DEFAULT_SOCKET_TIMEOUT" "60" }} 17 | output_buffering = {{ getenv "PHP_OUTPUT_BUFFERING" "4096" }} 18 | short_open_tag = {{ getenv "PHP_SHORT_OPEN_TAG" "1" }} 19 | disable_functions = {{ getenv "PHP_DISABLE_FUNCTIONS" }} 20 | disable_classes = {{ getenv "PHP_DISABLE_CLASSES" }} 21 | 22 | realpath_cache_size = {{ getenv "PHP_REALPATH_CACHE_SIZE" "4096k" }} 23 | realpath_cache_ttl = {{ getenv "PHP_REALPATH_CACHE_TTL" "120" }} 24 | memory_limit = {{ getenv "PHP_CLI_MEMORY_LIMIT" "-1" }} 25 | error_reporting = {{ getenv "PHP_ERROR_REPORTING" "E_ALL" }} 26 | log_errors = {{ getenv "PHP_LOG_ERRORS" "On" }} 27 | log_errors_max_len = {{ getenv "PHP_LOG_ERRORS_MAX_LEN" "0" }} 28 | error_log = /proc/self/fd/2 29 | auto_prepend_file = {{ getenv "PHP_AUTO_PREPEND_FILE" }} 30 | auto_append_file = {{ getenv "PHP_AUTO_APPEND_FILE" }} 31 | 32 | [Date] 33 | date.timezone = {{ getenv "PHP_DATE_TIMEZONE" "UTC"}} 34 | 35 | [Phar] 36 | phar.readonly = {{ getenv "PHP_PHAR_READONLY" "1" }} 37 | phar.require_hash = {{ getenv "PHP_PHAR_REQUIRE_HASH" "1" }} 38 | phar.cache_list = {{ getenv "PHP_PHAR_CACHE_LIST" "" }} 39 | 40 | [mail function] 41 | sendmail_path = {{ getenv "PHP_SENDMAIL_PATH" "/usr/bin/msmtp -t -i" }} 42 | mail.mixed_lf_and_crlf = {{ getenv "PHP_MAIL_MIXED_LF_AND_CRLF" "Off" }} 43 | 44 | [MySQLi] 45 | mysqli.cache_size = {{ getenv "PHP_MYSQLI_CACHE_SIZE" "2000" }} 46 | 47 | [Session] 48 | session.save_handler = {{ getenv "PHP_SESSION_SAVE_HANDLER" "files" }} 49 | session.save_path = "{{ getenv "PHP_SESSION_SAVE_PATH" "/mnt/files/sessions" }}" 50 | session.use_strict_mode = {{ getenv "PHP_SESSION_USE_STRICT_MODE" "0" }} 51 | session.use_cookies = {{ getenv "PHP_SESSION_USE_COOKIES" "1" }} 52 | session.cookie_secure = {{ getenv "PHP_SESSION_COOKIE_SECURE" "0" }} 53 | session.use_only_cookies = {{ getenv "PHP_SESSION_USE_ONLY_COOKIES" "1" }} 54 | session.name = {{ getenv "PHP_SESSION_NAME" "PHPSESSID" }} 55 | session.auto_start = {{ getenv "PHP_SESSION_AUTO_START" "0" }} 56 | session.cookie_lifetime = {{ getenv "PHP_SESSION_COOKIE_LIFETIME" "0" }} 57 | session.cookie_path = {{ getenv "PHP_SESSION_COOKIE_PATH" "/" }} 58 | session.cookie_domain = {{ getenv "PHP_SESSION_COOKIE_DOMAIN" }} 59 | session.cookie_httponly = {{ getenv "PHP_SESSION_COOKIE_HTTPONLY" "0" }} 60 | session.cookie_samesite = {{ getenv "PHP_SESSION_COOKIE_SAMESITE" }} 61 | session.serialize_handler = {{ getenv "PHP_SESSION_SERIALIZE_HANDLER" "php" }} 62 | session.gc_probability = {{ getenv "PHP_SESSION_GC_PROBABILITY" "1" }} 63 | session.gc_divisor = {{ getenv "PHP_SESSION_GC_DIVISOR" "100" }} 64 | session.gc_maxlifetime = {{ getenv "PHP_SESSION_GC_MAXLIFETIME" "1440" }} 65 | session.referer_check = {{ getenv "PHP_SESSION_REFERER_CHECK" "" }} 66 | session.cache_limiter = {{ getenv "PHP_SESSION_CACHE_LIMITER" "nocache" }} 67 | session.cache_expire = {{ getenv "PHP_SESSION_CACHE_EXPIRE" "180" }} 68 | session.use_trans_sid = {{ getenv "PHP_SESSION_USE_TRANS_SID" "0" }} 69 | session.sid_length = {{ getenv "PHP_SESSION_SID_LENGTH" "26" }} 70 | session.trans_sid_tags = "{{ getenv "PHP_SESSION_TRANS_SID_TAGS" "a=href,area=href,frame=src,form=" }}" 71 | session.trans_sid_hosts = {{ getenv "PHP_SESSION_TRANS_SID_HOSTS" "" }} 72 | session.sid_bits_per_character = {{ getenv "PHP_SESSION_SID_BITS_PER_CHARACTER" "5" }} 73 | session.upload_progress.enabled = {{ getenv "PHP_SESSION_UPLOAD_PROGRESS_ENABLED" "on" }} 74 | session.upload_progress.cleanup = {{ getenv "PHP_SESSION_UPLOAD_PROGRESS_CLEANUP" "on" }} 75 | session.upload_progress.prefix = "{{ getenv "PHP_SESSION_UPLOAD_PROGRESS_PREFIX" "upload_progress_" }}" 76 | session.upload_progress.name = "{{ getenv "PHP_SESSION_UPLOAD_PROGRESS_NAME" "PHP_SESSION_UPLOAD_PROGRESS" }}" 77 | session.upload_progress.freq = "{{ getenv "PHP_SESSION_UPLOAD_PROGRESS_FREQ" "1%" }}" 78 | session.upload_progress.min_freq = "{{ getenv "PHP_SESSION_UPLOAD_PROGRESS_MIN_FREQ" "1" }}" 79 | session.lazy_write = {{ getenv "PHP_SESSION_LAZY_WRITE" "on" }} 80 | 81 | [Assertion] 82 | zend.assertions = {{ getenv "PHP_ZEND_ASSERTIONS" "1" }} 83 | zend.exception_ignore_args = {{ getenv "PHP_ZEND_EXCEPTION_IGNORE_ARGS" "0" }} 84 | zend.multibyte = {{ getenv "PHP_ZEND_MULTIBYTE" "0" }} 85 | zend.signal_check = {{ getenv "PHP_ZEND_SIGNAL_CHECK" "0" }} 86 | zend.exception_string_param_max_len = {{ getenv "PHP_ZEND_EXCEPTION_STRING_PARAM_MAX_LEN" "15" }} 87 | {{- if getenv "PHP_ZEND_SCRIPT_ENCODING" }} 88 | zend.script_encoding = {{ getenv "PHP_ZEND_SCRIPT_ENCODING" }} 89 | {{- end }} 90 | {{- if getenv "PHP_ZEND_DETECT_UNICODE" }} 91 | zend.detect_unicode = {{ getenv "PHP_ZEND_DETECT_UNICODE" }} 92 | {{- end }} 93 | -------------------------------------------------------------------------------- /8/templates/docker-php-8.4.ini.tmpl: -------------------------------------------------------------------------------- 1 | ; This file user only to override default php.ini values 2 | ; BASIC SETTINGS: $PHP_INI_DIR/php.ini 3 | ; PHP-FPM SETTINGS: /usr/local/etc/php-fpm.d/zz-www.conf 4 | 5 | [PHP] 6 | display_errors = {{ getenv "PHP_DISPLAY_ERRORS" "On" }} 7 | display_startup_errors = {{ getenv "PHP_DISPLAY_STARTUP_ERRORS" "On" }} 8 | expose_php = {{ getenv "PHP_EXPOSE" "Off" }} 9 | max_execution_time = {{ getenv "PHP_MAX_EXECUTION_TIME" "120" }} 10 | max_input_time = {{ getenv "PHP_MAX_INPUT_TIME" "60" }} 11 | max_input_vars = {{ getenv "PHP_MAX_INPUT_VARS" "2000" }} 12 | post_max_size = {{ getenv "PHP_POST_MAX_SIZE" "32M" }} 13 | upload_max_filesize = {{ getenv "PHP_UPLOAD_MAX_FILESIZE" "32M" }} 14 | max_file_uploads = {{ getenv "PHP_MAX_FILE_UPLOADS" "20" }} 15 | allow_url_fopen = {{ getenv "PHP_ALLOW_URL_FOPEN" "On" }} 16 | default_socket_timeout = {{ getenv "PHP_DEFAULT_SOCKET_TIMEOUT" "60" }} 17 | output_buffering = {{ getenv "PHP_OUTPUT_BUFFERING" "4096" }} 18 | short_open_tag = {{ getenv "PHP_SHORT_OPEN_TAG" "1" }} 19 | disable_functions = {{ getenv "PHP_DISABLE_FUNCTIONS" }} 20 | disable_classes = {{ getenv "PHP_DISABLE_CLASSES" }} 21 | 22 | realpath_cache_size = {{ getenv "PHP_REALPATH_CACHE_SIZE" "4096k" }} 23 | realpath_cache_ttl = {{ getenv "PHP_REALPATH_CACHE_TTL" "120" }} 24 | memory_limit = {{ getenv "PHP_CLI_MEMORY_LIMIT" "-1" }} 25 | error_reporting = {{ getenv "PHP_ERROR_REPORTING" "E_ALL" }} 26 | log_errors = {{ getenv "PHP_LOG_ERRORS" "On" }} 27 | log_errors_max_len = {{ getenv "PHP_LOG_ERRORS_MAX_LEN" "0" }} 28 | error_log = /proc/self/fd/2 29 | auto_prepend_file = {{ getenv "PHP_AUTO_PREPEND_FILE" }} 30 | auto_append_file = {{ getenv "PHP_AUTO_APPEND_FILE" }} 31 | 32 | [Date] 33 | date.timezone = {{ getenv "PHP_DATE_TIMEZONE" "UTC"}} 34 | 35 | [Phar] 36 | phar.readonly = {{ getenv "PHP_PHAR_READONLY" "1" }} 37 | phar.require_hash = {{ getenv "PHP_PHAR_REQUIRE_HASH" "1" }} 38 | phar.cache_list = {{ getenv "PHP_PHAR_CACHE_LIST" "" }} 39 | 40 | [mail function] 41 | sendmail_path = {{ getenv "PHP_SENDMAIL_PATH" "/usr/bin/msmtp -t -i" }} 42 | mail.mixed_lf_and_crlf = {{ getenv "PHP_MAIL_MIXED_LF_AND_CRLF" "Off" }} 43 | 44 | [MySQLi] 45 | mysqli.cache_size = {{ getenv "PHP_MYSQLI_CACHE_SIZE" "2000" }} 46 | 47 | [Session] 48 | session.save_handler = {{ getenv "PHP_SESSION_SAVE_HANDLER" "files" }} 49 | session.save_path = "{{ getenv "PHP_SESSION_SAVE_PATH" "/mnt/files/sessions" }}" 50 | session.use_strict_mode = {{ getenv "PHP_SESSION_USE_STRICT_MODE" "0" }} 51 | session.use_cookies = {{ getenv "PHP_SESSION_USE_COOKIES" "1" }} 52 | session.cookie_secure = {{ getenv "PHP_SESSION_COOKIE_SECURE" "0" }} 53 | session.use_only_cookies = {{ getenv "PHP_SESSION_USE_ONLY_COOKIES" "1" }} 54 | session.name = {{ getenv "PHP_SESSION_NAME" "PHPSESSID" }} 55 | session.auto_start = {{ getenv "PHP_SESSION_AUTO_START" "0" }} 56 | session.cookie_lifetime = {{ getenv "PHP_SESSION_COOKIE_LIFETIME" "0" }} 57 | session.cookie_path = {{ getenv "PHP_SESSION_COOKIE_PATH" "/" }} 58 | session.cookie_domain = {{ getenv "PHP_SESSION_COOKIE_DOMAIN" }} 59 | session.cookie_httponly = {{ getenv "PHP_SESSION_COOKIE_HTTPONLY" "0" }} 60 | session.cookie_samesite = {{ getenv "PHP_SESSION_COOKIE_SAMESITE" }} 61 | session.serialize_handler = {{ getenv "PHP_SESSION_SERIALIZE_HANDLER" "php" }} 62 | session.gc_probability = {{ getenv "PHP_SESSION_GC_PROBABILITY" "1" }} 63 | session.gc_divisor = {{ getenv "PHP_SESSION_GC_DIVISOR" "100" }} 64 | session.gc_maxlifetime = {{ getenv "PHP_SESSION_GC_MAXLIFETIME" "1440" }} 65 | session.referer_check = {{ getenv "PHP_SESSION_REFERER_CHECK" "" }} 66 | session.cache_limiter = {{ getenv "PHP_SESSION_CACHE_LIMITER" "nocache" }} 67 | session.cache_expire = {{ getenv "PHP_SESSION_CACHE_EXPIRE" "180" }} 68 | session.use_trans_sid = {{ getenv "PHP_SESSION_USE_TRANS_SID" "0" }} 69 | session.trans_sid_tags = "{{ getenv "PHP_SESSION_TRANS_SID_TAGS" "a=href,area=href,frame=src,form=" }}" 70 | session.trans_sid_hosts = {{ getenv "PHP_SESSION_TRANS_SID_HOSTS" "" }} 71 | session.upload_progress.enabled = {{ getenv "PHP_SESSION_UPLOAD_PROGRESS_ENABLED" "on" }} 72 | session.upload_progress.cleanup = {{ getenv "PHP_SESSION_UPLOAD_PROGRESS_CLEANUP" "on" }} 73 | session.upload_progress.prefix = "{{ getenv "PHP_SESSION_UPLOAD_PROGRESS_PREFIX" "upload_progress_" }}" 74 | session.upload_progress.name = "{{ getenv "PHP_SESSION_UPLOAD_PROGRESS_NAME" "PHP_SESSION_UPLOAD_PROGRESS" }}" 75 | session.upload_progress.freq = "{{ getenv "PHP_SESSION_UPLOAD_PROGRESS_FREQ" "1%" }}" 76 | session.upload_progress.min_freq = "{{ getenv "PHP_SESSION_UPLOAD_PROGRESS_MIN_FREQ" "1" }}" 77 | session.lazy_write = {{ getenv "PHP_SESSION_LAZY_WRITE" "on" }} 78 | 79 | [Assertion] 80 | zend.assertions = {{ getenv "PHP_ZEND_ASSERTIONS" "1" }} 81 | zend.exception_ignore_args = {{ getenv "PHP_ZEND_EXCEPTION_IGNORE_ARGS" "0" }} 82 | zend.multibyte = {{ getenv "PHP_ZEND_MULTIBYTE" "0" }} 83 | zend.signal_check = {{ getenv "PHP_ZEND_SIGNAL_CHECK" "0" }} 84 | zend.exception_string_param_max_len = {{ getenv "PHP_ZEND_EXCEPTION_STRING_PARAM_MAX_LEN" "15" }} 85 | {{- if getenv "PHP_ZEND_SCRIPT_ENCODING" }} 86 | zend.script_encoding = {{ getenv "PHP_ZEND_SCRIPT_ENCODING" }} 87 | {{- end }} 88 | {{- if getenv "PHP_ZEND_DETECT_UNICODE" }} 89 | zend.detect_unicode = {{ getenv "PHP_ZEND_DETECT_UNICODE" }} 90 | {{- end }} 91 | -------------------------------------------------------------------------------- /8/templates/docker-php-ext-apcu.ini.tmpl: -------------------------------------------------------------------------------- 1 | [apcu] 2 | extension=apcu.so 3 | apc.enabled = {{ getenv "PHP_APCU_ENABLED" "1" }} 4 | apc.shm_segments = {{ getenv "PHP_APCU_SHM_SEGMENTS" "1" }} 5 | apc.shm_size = {{ getenv "PHP_APCU_SHM_SIZE" "128M" }} 6 | apc.entries_hint = {{ getenv "PHP_APCU_ENTRIES_HINT" "4096" }} 7 | apc.ttl = {{ getenv "PHP_APCU_TTL" "0" }} 8 | apc.gc_ttl = {{ getenv "PHP_APCU_GC_TTL" "3600" }} 9 | apc.slam_defense = {{ getenv "PHP_APCU_SLAM_DEFENSE" "1" }} 10 | apc.enable_cli = {{ getenv "PHP_APCU_ENABLE_CLI" "0" }} 11 | apc.use_request_time = {{ getenv "PHP_APCU_USE_REQUEST_TIME" "1" }} 12 | apc.coredump_unmap = {{ getenv "PHP_APCU_COREDUMP_UNMAP" "0" }} 13 | apc.preload_path = {{ getenv "PHP_APCU_PRELOAD_PATH" "NULL" }} 14 | 15 | {{ if getenv "PHP_APCU_SERIALIZER" }} 16 | ; Default value of serializer is "php" when it's not set 17 | ; Despite the segfault bug was resolved, avoid using "default" for safety 18 | ; https://github.com/krakjoe/apcu/issues/260 19 | ; https://github.com/krakjoe/apcu/issues/248 20 | apc.serializer = {{ getenv "PHP_APCU_SERIALIZER" }} 21 | {{ end }} 22 | -------------------------------------------------------------------------------- /8/templates/docker-php-ext-brotli.ini.tmpl: -------------------------------------------------------------------------------- 1 | [brotli] 2 | extension = brotli.so 3 | brotli.output_compression = {{ getenv "PHP_BROTLI_OUTPUT_COMPRESSION" "0" }} 4 | brotli.output_compression_level = {{ getenv "PHP_BROTLI_OUTPUT_COMPRESSION_LEVEL" "-1" }} -------------------------------------------------------------------------------- /8/templates/docker-php-ext-grpc.ini.tmpl: -------------------------------------------------------------------------------- 1 | [grpc] 2 | extension=grpc.so 3 | grpc.enable_fork_support = {{ getenv "PHP_GRPC_ENABLE_FORK_SUPPORT" "1" }} 4 | grpc.poll_strategy = {{ getenv "PHP_GRPC_POLL_STRATEGY" "epoll1" }} 5 | grpc.grpc_verbosity = {{ getenv "PHP_GRPC_VERBOSITY" "error" }} 6 | grpc.log_filename = {{ getenv "PHP_GRPC_LOG_FILENAME" "/proc/self/fd/2" }} 7 | {{- if getenv "PHP_GRPC_TRACE" }} 8 | grpc.grpc_trace = {{ getenv "PHP_GRPC_TRACE" }} 9 | {{- end }} 10 | -------------------------------------------------------------------------------- /8/templates/docker-php-ext-igbinary.ini.tmpl: -------------------------------------------------------------------------------- 1 | [igbinary] 2 | extension = igbinary.so 3 | igbinary.compact_strings = {{ getenv "PHP_IGBINARY_COMPACT_STRINGS" "On" }} -------------------------------------------------------------------------------- /8/templates/docker-php-ext-newrelic.ini.tmpl: -------------------------------------------------------------------------------- 1 | {{ if getenv "PHP_NEWRELIC_ENABLED" }} 2 | [newrelic] 3 | extension = newrelic.so 4 | newrelic.appname = "{{ getenv "PHP_NEWRELIC_APPNAME" "My PHP app" }}" 5 | newrelic.browser_monitoring.auto_instrument = "{{ getenv "PHP_NEWRELIC_BROWSER_MONITORING_AUTO_INSTRUMENT" "true" }}" 6 | newrelic.capture_params = {{ getenv "PHP_NEWRELIC_CAPTURE_PARAMS" "false" }} 7 | newrelic.daemon.logfile = "{{ getenv "PHP_NEWRELIC_DAEMON_LOGFILE" "/proc/self/fd/2" }}" 8 | newrelic.daemon.loglevel = "{{ getenv "PHP_NEWRELIC_DAEMON_LOGLEVEL" "warning" }}" 9 | newrelic.daemon.port = "{{ getenv "PHP_NEWRELIC_DAEMON_PORT" "@newrelic-daemon" }}" 10 | newrelic.enabled = {{ getenv "PHP_NEWRELIC_ENABLED" "false" }} 11 | {{ if getenv "PHP_NEWRELIC_FRAMEWORK" }} 12 | newrelic.framework = {{ getenv "PHP_NEWRELIC_FRAMEWORK" }} 13 | {{ end }} 14 | newrelic.guzzle_enabled = "{{ getenv "PHP_NEWRELIC_GUZZLE_ENABLED" "true" }}" 15 | newrelic.high_security = {{ getenv "PHP_NEWRELIC_HIGH_SECURITY" "false" }} 16 | newrelic.ignored_params = "{{ getenv "PHP_NEWRELIC_IGNORED_PARAMS" }}" 17 | newrelic.labels = "{{ getenv "PHP_NEWRELIC_LABELS" }}" 18 | newrelic.license = "{{ getenv "PHP_NEWRELIC_LICENSE" }}" 19 | newrelic.logfile = "{{ getenv "PHP_NEWRELIC_LOGFILE" "/proc/self/fd/2" }}" 20 | newrelic.loglevel = "{{ getenv "PHP_NEWRELIC_LOGLEVEL" "warning" }}" 21 | {{ if getenv "PHP_NEWRELIC_SPECIAL" }} 22 | newrelic.special = "{{ getenv "PHP_NEWRELIC_SPECIAL" }}" 23 | {{ end }} 24 | newrelic.transaction_tracer.detail = {{ getenv "PHP_NEWRELIC_TRANSACTION_TRACER_DETAIL" "1" }} 25 | newrelic.distributed_tracing_enabled = {{ getenv "PHP_NEWRELIC_DISTRIBUTED_TRACING_ENABLED" "0" }} 26 | {{ end }} 27 | -------------------------------------------------------------------------------- /8/templates/docker-php-ext-opcache.ini.tmpl: -------------------------------------------------------------------------------- 1 | [opcache] 2 | zend_extension = opcache.so 3 | opcache.enable = {{ getenv "PHP_OPCACHE_ENABLE" "1" }} 4 | opcache.validate_timestamps = {{ getenv "PHP_OPCACHE_VALIDATE_TIMESTAMPS" "1" }} 5 | opcache.revalidate_freq = {{ getenv "PHP_OPCACHE_REVALIDATE_FREQ" "2" }} 6 | opcache.max_accelerated_files = {{ getenv "PHP_OPCACHE_MAX_ACCELERATED_FILES" "4000" }} 7 | opcache.memory_consumption = {{ getenv "PHP_OPCACHE_MEMORY_CONSUMPTION" "128" }} 8 | opcache.interned_strings_buffer = {{ getenv "PHP_OPCACHE_INTERNED_STRINGS_BUFFER" "8" }} 9 | opcache.enable_cli = {{ getenv "PHP_OPCACHE_ENABLE_CLI" "0" }} 10 | opcache.huge_code_pages = {{ getenv "PHP_OPCACHE_HUGE_CODE_PAGES" "0" }} 11 | {{ if getenv "PHP_OPCACHE_PRELOAD" }} 12 | opcache.preload = "{{ getenv "PHP_OPCACHE_PRELOAD" "" }}" 13 | opcache.preload_user = "{{ getenv "PHP_OPCACHE_PRELOAD_USER" "www-data" }}" 14 | {{ end }} 15 | opcache.jit = {{ getenv "PHP_OPCACHE_JIT" "tracing" }} 16 | opcache.jit_buffer_size = {{ getenv "PHP_OPCACHE_JIT_BUFFER_SIZE" "0" }} 17 | -------------------------------------------------------------------------------- /8/templates/docker-php-ext-pcov.ini.tmpl: -------------------------------------------------------------------------------- 1 | [pcov] 2 | extension=pcov.so 3 | pcov.enabled = {{ getenv "PHP_PCOV_ENABLED" "0" }} 4 | pcov.directory = {{ getenv "PHP_PCOV_DIRECTORY" "auto" }} 5 | pcov.exclude = {{ getenv "PHP_PCOV_EXCLUDE" }} 6 | pcov.initial.memory = {{ getenv "PHP_PCOV_INITIAL_MEMORY" "65536" }} 7 | pcov.initial.files = {{ getenv "PHP_PCOV_INITIAL_FILES" "64" }} -------------------------------------------------------------------------------- /8/templates/docker-php-ext-spx.ini.tmpl: -------------------------------------------------------------------------------- 1 | [spx] 2 | extension = spx.so 3 | spx.data_dir = "{{ getenv "PHP_SPX_DATA_DIR" "/mnt/files/spx" }}" 4 | spx.http_enabled = {{ getenv "PHP_SPX_HTTP_ENABLED" "0" }} 5 | spx.http_key = "{{ getenv "PHP_SPX_HTTP_KEY" }}" 6 | spx.http_ip_whitelist = "{{ getenv "PHP_SPX_HTTP_IP_WHITELIST" }}" 7 | -------------------------------------------------------------------------------- /8/templates/docker-php-ext-sqlsrv.ini.tmpl: -------------------------------------------------------------------------------- 1 | [sqlsrv] 2 | extension=sqlsrv.so 3 | sqlsrv.WarningsReturnAsErrors = {{ getenv "PHP_SQLSRV_WARNINGS_RETURN_AS_ERRORS" "1" }} 4 | sqlsrv.LogSubsystems = {{ getenv "PHP_SQLSRV_LOG_SUBSYSTEMS" "0" }} 5 | sqlsrv.LogSeverity = {{ getenv "PHP_SQLSRV_LOG_SEVERITY" "1" }} 6 | sqlsrv.ClientBufferMaxKBSize = {{ getenv "PHP_SQLSRV_CLIENT_BUFFER_MAX_KB_SIZE" "10240" }} 7 | -------------------------------------------------------------------------------- /8/templates/docker-php-ext-xdebug.ini.tmpl: -------------------------------------------------------------------------------- 1 | [xdebug] 2 | zend_extension = xdebug.so 3 | xdebug.mode = {{ getenv "PHP_XDEBUG_MODE" "off" }} 4 | xdebug.cli_color = {{ getenv "PHP_XDEBUG_CLI_COLOR" "0" }} 5 | xdebug.client_discovery_header = "{{ getenv "PHP_XDEBUG_CLIENT_DISCOVERY_HEADER" "" }}" 6 | xdebug.client_host = {{ getenv "PHP_XDEBUG_CLIENT_HOST" "host.docker.internal" }} 7 | xdebug.client_port = {{ getenv "PHP_XDEBUG_CLIENT_PORT" "9003" }} 8 | xdebug.collect_assignments = {{ getenv "PHP_XDEBUG_COLLECT_ASSIGNMENTS" "0" }} 9 | xdebug.collect_return = {{ getenv "PHP_XDEBUG_COLLECT_RETURN" "0" }} 10 | xdebug.discover_client_host = {{ getenv "PHP_XDEBUG_DISCOVER_CLIENT_HOST" "false" }} 11 | xdebug.dump_globals = {{ getenv "PHP_XDEBUG_DUMP_GLOBALS" "1" }} 12 | xdebug.dump_once = {{ getenv "PHP_XDEBUG_DUMP_ONCE" "1" }} 13 | xdebug.dump_undefined = {{ getenv "PHP_XDEBUG_DUMP_UNDEFINED" "0" }} 14 | xdebug.use_compression = {{ getenv "PHP_XDEBUG_USE_COMPRESSION" "true" }} 15 | xdebug.file_link_format = "{{ getenv "PHP_XDEBUG_FILE_LINK_FORMAT" "" }}" 16 | xdebug.force_display_errors = {{ getenv "PHP_XDEBUG_FORCE_DISPLAY_ERRORS" "0" }} 17 | xdebug.force_error_reporting = {{ getenv "PHP_XDEBUG_FORCE_ERROR_REPORTING" "0" }} 18 | xdebug.halt_level = {{ getenv "PHP_XDEBUG_HALT_LEVEL" "0" }} 19 | xdebug.log = {{ getenv "PHP_XDEBUG_LOG" "/proc/self/fd/2" }} 20 | xdebug.log_level = {{ getenv "PHP_XDEBUG_LOG_LEVEL" "3" }} 21 | xdebug.manual_url = {{ getenv "PHP_XDEBUG_MANUAL_URL" "http://www.php.net" }} 22 | xdebug.max_nesting_level = {{ getenv "PHP_XDEBUG_MAX_NESTING_LEVEL" "256" }} 23 | xdebug.max_stack_frames = {{ getenv "PHP_XDEBUG_MAX_STACK_FRAMES" "-1" }} 24 | xdebug.output_dir = {{ getenv "FILES_DIR" }}/xdebug 25 | xdebug.profiler_aggregate = {{ getenv "PHP_XDEBUG_PROFILER_AGGREGATE" "0" }} 26 | xdebug.profiler_append = {{ getenv "PHP_XDEBUG_PROFILER_APPEND" "0" }} 27 | xdebug.profiler_output_name = {{ getenv "PHP_XDEBUG_PROFILER_OUTPUT_NAME" "cachegrind.out.%p" }} 28 | xdebug.scream = {{ getenv "PHP_XDEBUG_SCREAM" "0" }} 29 | xdebug.show_error_trace = {{ getenv "PHP_XDEBUG_SHOW_ERROR_TRACE" "0" }} 30 | xdebug.show_exception_trace = {{ getenv "PHP_XDEBUG_SHOW_EXCEPTION_TRACE" "0" }} 31 | xdebug.show_local_vars = {{ getenv "PHP_XDEBUG_SHOW_LOCAL_VARS" "0" }} 32 | xdebug.start_with_request = {{ getenv "PHP_XDEBUG_START_WITH_REQUEST" "default" }} 33 | xdebug.trace_format = {{ getenv "PHP_XDEBUG_TRACE_FORMAT" "0" }} 34 | xdebug.trace_options = {{ getenv "PHP_XDEBUG_TRACE_OPTIONS" "0" }} 35 | xdebug.trace_output_name = {{ getenv "PHP_XDEBUG_TRACE_OUTPUT_NAME" "trace.%c" }} 36 | xdebug.trigger_value = "{{ getenv "PHP_XDEBUG_TRIGGER_VALUE" "" }}" 37 | xdebug.var_display_max_children = {{ getenv "PHP_XDEBUG_VAR_DISPLAY_MAX_CHILDREN" "128" }} 38 | xdebug.var_display_max_data = {{ getenv "PHP_XDEBUG_VAR_DISPLAY_MAX_DATA" "512" }} 39 | xdebug.var_display_max_depth = {{ getenv "PHP_XDEBUG_VAR_DISPLAY_MAX_DEPTH" "3" }} 40 | {{ if getenv "PHP_XDEBUG_DUMP_COOKIE" }} 41 | xdebug.dump.COOKIE = {{ getenv "PHP_XDEBUG_DUMP_COOKIE" }} 42 | {{ end }} 43 | {{ if getenv "PHP_XDEBUG_DUMP_FILES" }} 44 | xdebug.dump.FILES = {{ getenv "PHP_XDEBUG_DUMP_FILES" }} 45 | {{ end }} 46 | {{ if getenv "PHP_XDEBUG_DUMP_GET" }} 47 | xdebug.dump.GET = {{ getenv "PHP_XDEBUG_DUMP_GET" }} 48 | {{ end }} 49 | {{ if getenv "PHP_XDEBUG_DUMP_POST" }} 50 | xdebug.dump.POST = {{ getenv "PHP_XDEBUG_DUMP_POST" }} 51 | {{ end }} 52 | {{ if getenv "PHP_XDEBUG_DUMP_REQUEST" }} 53 | xdebug.dump.REQUEST = {{ getenv "PHP_XDEBUG_DUMP_REQUEST" }} 54 | {{ end }} 55 | {{ if getenv "PHP_XDEBUG_DUMP_SERVER" }} 56 | xdebug.dump.SERVER = {{ getenv "PHP_XDEBUG_DUMP_SERVER" }} 57 | {{ end }} 58 | {{ if getenv "PHP_XDEBUG_DUMP_SESSION" }} 59 | xdebug.dump.SESSION = {{ getenv "PHP_XDEBUG_DUMP_SESSION" }} 60 | {{ end }} 61 | {{ if getenv "PHP_XDEBUG_IDEKEY" }} 62 | xdebug.idekey = {{ getenv "PHP_XDEBUG_IDEKEY" }} 63 | {{ end }} 64 | -------------------------------------------------------------------------------- /8/templates/docker-php-ext-xhprof.ini.tmpl: -------------------------------------------------------------------------------- 1 | [xhprof] 2 | extension = xhprof.so 3 | xhprof.output_dir = "{{ getenv "PHP_XHPROF_OUTPUT_DIR" "/mnt/files/xhprof" }}" 4 | xhprof.sampling_interval = {{ getenv "PHP_XHPROF_SAMPLING_INTERVAL" "100000" }} 5 | xhprof.collect_additional_info = {{ getenv "PHP_XHPROF_COLLECT_ADDITIONAL_INFO" "0" }} 6 | {{- if getenv "PHP_XHPROF_SAMPLING_DEPTH" }} 7 | xhprof.sampling_depth = {{ getenv "PHP_XHPROF_SAMPLING_DEPTH" }} 8 | {{- end }} -------------------------------------------------------------------------------- /8/templates/gitconfig.tmpl: -------------------------------------------------------------------------------- 1 | [user] 2 | name = {{ getenv "GIT_USER_NAME" }} 3 | email = {{ getenv "GIT_USER_EMAIL" }} 4 | 5 | {{- if getenv "HTTP_PROXY" }} 6 | [http] 7 | proxy = {{ getenv "HTTP_PROXY" }} 8 | {{- end }} 9 | -------------------------------------------------------------------------------- /8/templates/id_rsa.tmpl: -------------------------------------------------------------------------------- 1 | {{ getenv "SSH_PRIVATE_KEY" }} -------------------------------------------------------------------------------- /8/templates/mariadb-client.cnf.tmpl: -------------------------------------------------------------------------------- 1 | [client-mariadb] 2 | {{- if not (getenv "MARIADB_CLIENT_SSL_VERIFY_SERVER_CERT") }} 3 | disable-ssl-verify-server-cert 4 | {{- end }} 5 | -------------------------------------------------------------------------------- /8/templates/msmtprc.tmpl: -------------------------------------------------------------------------------- 1 | defaults 2 | port {{ getenv "MSMTP_PORT" "25" }} 3 | tls {{ getenv "MSMTP_TLS" "off" }} 4 | {{- if getenv "MSMTP_LOG" }} 5 | logfile {{ getenv "MSMTP_LOGFILE" "/proc/self/fd/2" }} 6 | {{- end }} 7 | 8 | account default 9 | auth {{ getenv "MSMTP_AUTH" "off" }} 10 | host {{ getenv "MSMTP_HOST" "opensmtpd" }} 11 | add_missing_date_header {{ getenv "MSMTP_ADD_MISSING_DATE_HEADER" "on" }} 12 | -------------------------------------------------------------------------------- /8/templates/ssh_config.tmpl: -------------------------------------------------------------------------------- 1 | # $OpenBSD: ssh_config,v 1.30 2016/02/20 23:06:23 sobrado Exp $ 2 | 3 | # This is the ssh client system-wide configuration file. See 4 | # ssh_config(5) for more information. This file provides defaults for 5 | # users, and the values can be changed in per-user configuration files 6 | # or on the command line. 7 | 8 | # Configuration data is parsed as follows: 9 | # 1. command line options 10 | # 2. user-specific file 11 | # 3. system-wide file 12 | # Any configuration value is only changed the first time it is set. 13 | # Thus, host-specific definitions should be at the beginning of the 14 | # configuration file, and defaults at the end. 15 | 16 | # Site-wide defaults for some commonly used options. For a comprehensive 17 | # list of available options, their meanings and defaults, please see the 18 | # ssh_config(5) man page. 19 | 20 | # Host * 21 | # ForwardAgent no 22 | # ForwardX11 no 23 | # RhostsRSAAuthentication no 24 | # RSAAuthentication yes 25 | # PasswordAuthentication yes 26 | # HostbasedAuthentication no 27 | # GSSAPIAuthentication no 28 | # GSSAPIDelegateCredentials no 29 | # BatchMode no 30 | # CheckHostIP yes 31 | # AddressFamily any 32 | # ConnectTimeout 0 33 | # StrictHostKeyChecking ask 34 | # IdentityFile ~/.ssh/identity 35 | # IdentityFile ~/.ssh/id_rsa 36 | # IdentityFile ~/.ssh/id_dsa 37 | # IdentityFile ~/.ssh/id_ecdsa 38 | # IdentityFile ~/.ssh/id_ed25519 39 | # Port 22 40 | # Protocol 2 41 | # Cipher 3des 42 | # Ciphers aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc 43 | # MACs hmac-md5,hmac-sha1,umac-64@openssh.com,hmac-ripemd160 44 | # EscapeChar ~ 45 | # Tunnel no 46 | # TunnelDevice any:any 47 | # PermitLocalCommand no 48 | # VisualHostKey no 49 | # ProxyCommand ssh -q -W %h:%p gateway.example.com 50 | # RekeyLimit 1G 1h 51 | 52 | {{ if getenv "SSH_DISABLE_STRICT_KEY_CHECKING" }} 53 | Host * 54 | StrictHostKeyChecking no 55 | {{ end }} -------------------------------------------------------------------------------- /8/templates/sshd_config.tmpl: -------------------------------------------------------------------------------- 1 | # $OpenBSD: sshd_config,v 1.101 2017/03/14 07:19:07 djm Exp $ 2 | 3 | # This is the sshd server system-wide configuration file. See 4 | # sshd_config(5) for more information. 5 | 6 | # This sshd was compiled with PATH=/bin:/usr/bin:/sbin:/usr/sbin 7 | 8 | # The strategy used for options in the default sshd_config shipped with 9 | # OpenSSH is to specify options with their default value where 10 | # possible, but leave them commented. Uncommented options override the 11 | # default value. 12 | 13 | #Port 22 14 | #AddressFamily any 15 | #ListenAddress 0.0.0.0 16 | #ListenAddress :: 17 | 18 | {{ $keys_dir := (getenv "SSHD_HOST_KEYS_DIR" "/etc/ssh") }} 19 | HostKey {{ $keys_dir }}/ssh_rsa_key 20 | HostKey {{ $keys_dir }}/ssh_dsa_key 21 | HostKey {{ $keys_dir }}/ssh_ecdsa_key 22 | HostKey {{ $keys_dir }}/ssh_ed25519_key 23 | 24 | # Ciphers and keying 25 | #RekeyLimit default none 26 | 27 | # Logging 28 | #SyslogFacility AUTH 29 | LogLevel {{ getenv "SSHD_LOG_LEVEL" "INFO" }} 30 | 31 | # Authentication: 32 | 33 | #LoginGraceTime 2m 34 | #PermitRootLogin prohibit-password 35 | #StrictModes yes 36 | #MaxAuthTries 6 37 | #MaxSessions 10 38 | 39 | PubkeyAuthentication yes 40 | 41 | # The default is to check both .ssh/authorized_keys and .ssh/authorized_keys2 42 | # but this is overridden so installations will only check .ssh/authorized_keys 43 | AuthorizedKeysFile .ssh/authorized_keys 44 | 45 | #AuthorizedPrincipalsFile none 46 | 47 | #AuthorizedKeysCommand none 48 | #AuthorizedKeysCommandUser nobody 49 | 50 | # For this to work you will also need host keys in /etc/ssh/ssh_known_hosts 51 | #HostbasedAuthentication no 52 | # Change to yes if you don't trust ~/.ssh/known_hosts for 53 | # HostbasedAuthentication 54 | #IgnoreUserKnownHosts no 55 | # Don't read the user's ~/.rhosts and ~/.shosts files 56 | #IgnoreRhosts yes 57 | 58 | # To disable tunneled clear text passwords, change to no here! 59 | PasswordAuthentication {{ getenv "SSHD_PASSWORD_AUTHENTICATION" "no" }} 60 | #PermitEmptyPasswords no 61 | 62 | # Change to no to disable s/key passwords 63 | #ChallengeResponseAuthentication yes 64 | 65 | # Kerberos options 66 | #KerberosAuthentication no 67 | #KerberosOrLocalPasswd yes 68 | #KerberosTicketCleanup yes 69 | #KerberosGetAFSToken no 70 | 71 | # GSSAPI options 72 | #GSSAPIAuthentication no 73 | #GSSAPICleanupCredentials yes 74 | 75 | # UsePAM NOT SUPPORTED 76 | 77 | #AllowAgentForwarding yes 78 | #AllowTcpForwarding yes 79 | GatewayPorts {{ getenv "SSHD_GATEWAY_PORTS" "no" }} 80 | #X11Forwarding no 81 | #X11DisplayOffset 10 82 | #X11UseLocalhost yes 83 | #PermitTTY yes 84 | #PrintMotd yes 85 | #PrintLastLog yes 86 | #TCPKeepAlive yes 87 | #UseLogin no 88 | PermitUserEnvironment {{ getenv "SSHD_PERMIT_USER_ENV" "yes" }} 89 | #Compression delayed 90 | #ClientAliveInterval 0 91 | #ClientAliveCountMax 3 92 | UseDNS {{ getenv "SSHD_USE_DNS" "yes" }} 93 | #PidFile /run/sshd.pid 94 | #MaxStartups 10:30:100 95 | #PermitTunnel no 96 | #ChrootDirectory none 97 | #VersionAddendum none 98 | 99 | # no default banner path 100 | #Banner none 101 | 102 | # override default of no subsystems 103 | Subsystem sftp /usr/lib/ssh/sftp-server 104 | 105 | # the following are HPN related configuration options 106 | # tcp receive buffer polling. disable in non autotuning kernels 107 | #TcpRcvBufPoll yes 108 | 109 | # disable hpn performance boosts 110 | #HPNDisabled no 111 | 112 | # buffer size for hpn to non-hpn connections 113 | #HPNBufferSize 2048 114 | 115 | 116 | # Example of overriding settings on a per-user basis 117 | #Match User anoncvs 118 | # X11Forwarding no 119 | # AllowTcpForwarding no 120 | # PermitTTY no 121 | # ForceCommand cvs server 122 | -------------------------------------------------------------------------------- /8/templates/wodby.settings.php.tmpl: -------------------------------------------------------------------------------- 1 | /mnt/files/cron 3 | -------------------------------------------------------------------------------- /8/tests/id_rsa: -------------------------------------------------------------------------------- 1 | -----BEGIN RSA PRIVATE KEY----- 2 | MIIJKQIBAAKCAgEAokwbFJ7hz+qItITGFlbMtqaomcdXOyruYngI+GOKn5MWi1kQ 3 | LO8MW3HvOmFKD3n2do4ZZJucMLN+zfgFkGk17p4rGEfuQDHGDmvt7UCA2NuxIpJS 4 | Dr45pBCNoTm0n6SeNhmEg+PkTJNcgyubazEPJ6WFZ5SVMg+/bEn4cl4k+jph6GBs 5 | NoyT3Yyga4TzXjd4O7x7CXT3k689/z/YgtiwIk8jXtduTc3eKAH30lxDpsHmb2SU 6 | jbQFpBRMNoK1g0pUih1V/mSTLBSdpwNgndYd5CDjKEYnTdKG3ze/cUjy/AOcX/4W 7 | AfxbyscU6S4rebgdXnaw8EDHyRd26/LELMtEwY+Y1/4SRS0LF9PXpd7I+/ky21PP 8 | tDYCcJ88bqtnf76Wu2gGFnA7CmOS+DmBg1yJ9ZHfWOTFL5gvo/mW7l3NrT9gacZG 9 | TCmY+dg0WSpGNOqw2rqMFh/DiHk7x967NykhIkutmhf6RVZGDGksAXzzCTkaaiSD 10 | NBt/irauYXYYYfdxooYjUofb48AvTHMZzcTGV9DIljGuiZxlRPFRUHpzjPUMxS7x 11 | 5F/KgxlnAUautHZc8DEmMJDNB/OZd/WbNkjh2gSuOl2qk1cUoXNrem/hyxsnIAfI 12 | l9V3Iy2SnUeZidtiqqm/feOyWM844FI8VIgRasYvOsYKeJtQ1B3mAKHEsdkCAwEA 13 | AQKCAgEAgUJj/xRbfKCqqDtnGLug54fsmC1viCw1GC/J1SpSaa1YMzuH6oGpMduY 14 | UMLTnWfhp6KdDsfwqckLoTd8Fvv0fEt0vy3qzy3VM/85y8+nzw+KEKLAwAU5GzYj 15 | 1tiCxvLxHt1L8U87sNFcyQueCM1V6Jmnmkt4WBq6tqBjQ5M/mBuPhufkx71Gtxkd 16 | WwTUX6GGHO2MgIer9u+HTReodO3nuiuVXB/wNf9UhECtA9l/9/xOb0GIHyPVqkyQ 17 | Non7zskQc7/RkX7AyEbTGQVTmeHChMK8qILXIuAdkwJvcuZKv/SQQtO263X2FZZh 18 | TSX8ckD1Axs86NxvQfVyPZFoNNTfuJTVJGaRoa5cwNQtCAKtQ9BmasAarlre02Jb 19 | xplj6N4elzYFPr7iQzZ0ae2weWs3oAriAG3e2Z6WZTbIbwnqTCMbVQlXBh+VggRK 20 | ja5VS3bkJDoX6C6dWjcFPkGhCSyKjjKJ3Ixw47EoZN+k+jlWNEOmpGpz/Q8DzctK 21 | mmA50zgmdHsj41W/saZ4dRBHbo3bdNY7Z9Fmk+wNTZD7KMfv6Hr/ajiERDewkvDd 22 | tIrODvZdDANPrtUEFa5lQKJ3e8yp8wx/FVXLX45b9kw4PwUlyyEHi2GD2nR8vHv6 23 | EqPInQA7YTeUC165wRFEz7POVWjnVDzQv+wHKoURnMz8uA4JQFECggEBAM4NzSs6 24 | 3XlG9M1Kpn/sNvLOPbP9ALZM9EQMEJrHvjMOEAfwzSWo5WiqRpLhKo/Fee1RPRn8 25 | db4vVztSXfKPh+3C3PeaE/ZHMIiDr+f0Xl+3+nHzmWfiKvjH1amBlAk0FRwQYD4r 26 | YxhAGJnRy90KeXTxRoTcsguYhk5E72nBd4+x+QUecxI1r+gbFJa4DpVqBLGDbszP 27 | jkoW/goZ+aLHxgq71lzWtHjjKoNqdzCI8LOYsTX+VSz3yYPXdAPLrpVaaITEb91Z 28 | hdca1B2NZiE9HsSuV1ou+KZtG00MTnnN/7tnGqzTYXdYbbdHFywAg3sCKo4Nl/K9 29 | 383OLwgd/MxJoT8CggEBAMmjFp2bWiBXg5AgDk0zGQrQ2rkfq+snJLwblj8HXoBp 30 | tIO1Nh+fEAs2sdY1bmGvdKp9TItciIEcPL+dCLUKXOQHpTqX0a6GS///XECtQDTZ 31 | eLAK6PC/FoBHbQE4aDj/5C2h5k32Hq0pLU+qwNhFF/KkV5ZZbg5oPUkyd3f3ARMM 32 | SdFBnmqq7vkWGpYvVVZuORmUYeRb56uuVxO/DOfBMr5A+ikU8eN3cxpUKu9ZaUJd 33 | RvbIRAztz/4dKsVLyBuOgeN8T8OzxAVI8HiUW3THAQQy68AkqEPvy9djujmU/yTx 34 | uf753mBb4ZVa/ocjbM4Pt1JWMKSIk8yHXRy4AFQNTucCggEAL0l7jDA2I17lTzeS 35 | fkj3U0GBZ4zoXO3MINGj/eFZBN51T10ztzDLdPmeuJZz7gqjsJK0MwJ9AuhaXILK 36 | jJ/j0eymSSxS6HHt8WZHODQcdFsEXqJI0k5VDkLOBdh24KXTMl2PuLS8SRRskOBU 37 | qKV+uhek11jOg1q9d7jaOKrthUySmVojjkpD1EBiuTQEJMXvzc0b4GTBgr9EDY1o 38 | fLLcABqbVzLut89qMj58m+bRVmX0RS/Y3DkBRgBr33Me3aeh1NY/1cx1qqe9hgqt 39 | JXOhXAGmiku9RHRFj6kDWXCs/5Tpyj+4XmsswqLN7osvoUsd+Pulo09vzQtEP9ih 40 | 6z/6gQKCAQEAocgX8jbedkqhRbdiojBYbGQsyhIOV2udvswHneSkvzWQ34g6t95g 41 | +g5VW8CdIwWq/svv6XVCFQ159Gfjv5Zj95XmzX9YfsZEHk9eTopzlLPUcLMgOWGo 42 | hR5J6IvAm9M82hwnc/AApwD92QjxF9VAJLAVko2Ij0i1u5AhaQCnPQhEBgC3QXCK 43 | sxI4HL43o1Rmvg5fCOFwnUARn8dPbHeH5jyuOt4SQmbp1Hspw8cifFvo/0KpzxHU 44 | K1hto8Vs9ic+Mi7gtO38Xh0qzCSEyMqPFzZgD1eaJoA1NklO9rqEiLjmeh0zfm7a 45 | LYLH69fRiff0J7z95FWs+JK3c75yjP3siwKCAQBOAf1hryhPigHfG1JAgY2IxQp5 46 | WNVg2ClDamAd6dfVCo4dn+NXf6WNjgGxopcaCEMv7YG+QMusWDNxy1h/Ai5xUovW 47 | 505qh8C1RF8/JBl/Ow9AU1Dc6zT6bX49wN7/ZDxwEinYz/2nuMl/15XL0iMcWQqH 48 | jMb2UfWbuyvn9WJi8wlVKwEulQy5DyqJZ4f9u/1fxuiC3X/WsfTJp4PdyYG35gRn 49 | c64EObY0Br/IXsZXqOx0aXwtEkhZq864QlBzwEvuj81oenkOzSt+fvwCNR5HjFxZ 50 | iWFfSRvJbky07BoT7SLrcFDNyXVhhorCHXiwav2wS/OwHo3tBiZ6qy5/xLoJ 51 | -----END RSA PRIVATE KEY----- 52 | -------------------------------------------------------------------------------- /8/tests/php_modules/8.1: -------------------------------------------------------------------------------- 1 | [PHP Modules] 2 | amqp 3 | apcu 4 | ast 5 | bcmath 6 | brotli 7 | bz2 8 | calendar 9 | Core 10 | ctype 11 | curl 12 | date 13 | dom 14 | ds 15 | event 16 | exif 17 | fileinfo 18 | filter 19 | ftp 20 | gd 21 | gmp 22 | grpc 23 | hash 24 | iconv 25 | igbinary 26 | imagick 27 | imap 28 | intl 29 | json 30 | ldap 31 | libsmbclient 32 | libxml 33 | mbstring 34 | memcached 35 | mongodb 36 | mysqli 37 | mysqlnd 38 | newrelic 39 | OAuth 40 | openssl 41 | opentelemetry 42 | pcntl 43 | pcov 44 | pcre 45 | PDO 46 | pdo_mysql 47 | pdo_pgsql 48 | pdo_sqlite 49 | pdo_sqlsrv 50 | pgsql 51 | Phar 52 | posix 53 | protobuf 54 | rdkafka 55 | readline 56 | redis 57 | Reflection 58 | session 59 | SimpleXML 60 | smbclient 61 | soap 62 | sockets 63 | sodium 64 | SPL 65 | SPX 66 | sqlite3 67 | sqlsrv 68 | standard 69 | tidy 70 | tokenizer 71 | uploadprogress 72 | uuid 73 | xdebug 74 | xhprof 75 | xml 76 | xmlreader 77 | xmlwriter 78 | xsl 79 | yaml 80 | Zend OPcache 81 | zip 82 | zlib 83 | 84 | [Zend Modules] 85 | Xdebug 86 | Zend OPcache 87 | 88 | -------------------------------------------------------------------------------- /8/tests/php_modules/8.2: -------------------------------------------------------------------------------- 1 | [PHP Modules] 2 | amqp 3 | apcu 4 | ast 5 | bcmath 6 | brotli 7 | bz2 8 | calendar 9 | Core 10 | ctype 11 | curl 12 | date 13 | dom 14 | ds 15 | event 16 | exif 17 | fileinfo 18 | filter 19 | ftp 20 | gd 21 | gmp 22 | grpc 23 | hash 24 | iconv 25 | igbinary 26 | imagick 27 | imap 28 | intl 29 | json 30 | ldap 31 | libsmbclient 32 | libxml 33 | mbstring 34 | memcached 35 | mongodb 36 | mysqli 37 | mysqlnd 38 | newrelic 39 | OAuth 40 | openssl 41 | opentelemetry 42 | pcntl 43 | pcov 44 | pcre 45 | PDO 46 | pdo_mysql 47 | pdo_pgsql 48 | pdo_sqlite 49 | pdo_sqlsrv 50 | pgsql 51 | Phar 52 | posix 53 | protobuf 54 | random 55 | rdkafka 56 | readline 57 | redis 58 | Reflection 59 | session 60 | SimpleXML 61 | smbclient 62 | soap 63 | sockets 64 | sodium 65 | SPL 66 | SPX 67 | sqlite3 68 | sqlsrv 69 | standard 70 | tidy 71 | tokenizer 72 | uploadprogress 73 | uuid 74 | xdebug 75 | xhprof 76 | xml 77 | xmlreader 78 | xmlwriter 79 | xsl 80 | yaml 81 | Zend OPcache 82 | zip 83 | zlib 84 | 85 | [Zend Modules] 86 | Xdebug 87 | Zend OPcache 88 | 89 | -------------------------------------------------------------------------------- /8/tests/php_modules/8.3: -------------------------------------------------------------------------------- 1 | [PHP Modules] 2 | amqp 3 | apcu 4 | ast 5 | bcmath 6 | brotli 7 | bz2 8 | calendar 9 | Core 10 | ctype 11 | curl 12 | date 13 | dom 14 | ds 15 | event 16 | exif 17 | fileinfo 18 | filter 19 | ftp 20 | gd 21 | gmp 22 | grpc 23 | hash 24 | iconv 25 | igbinary 26 | imagick 27 | imap 28 | intl 29 | json 30 | ldap 31 | libsmbclient 32 | libxml 33 | mbstring 34 | memcached 35 | mongodb 36 | mysqli 37 | mysqlnd 38 | newrelic 39 | OAuth 40 | openssl 41 | opentelemetry 42 | pcntl 43 | pcov 44 | pcre 45 | PDO 46 | pdo_mysql 47 | pdo_pgsql 48 | pdo_sqlite 49 | pdo_sqlsrv 50 | pgsql 51 | Phar 52 | posix 53 | protobuf 54 | random 55 | rdkafka 56 | readline 57 | redis 58 | Reflection 59 | session 60 | SimpleXML 61 | smbclient 62 | soap 63 | sockets 64 | sodium 65 | SPL 66 | SPX 67 | sqlite3 68 | sqlsrv 69 | standard 70 | tidy 71 | tokenizer 72 | uploadprogress 73 | uuid 74 | xdebug 75 | xhprof 76 | xml 77 | xmlreader 78 | xmlwriter 79 | xsl 80 | yaml 81 | Zend OPcache 82 | zip 83 | zlib 84 | 85 | [Zend Modules] 86 | Xdebug 87 | Zend OPcache 88 | 89 | -------------------------------------------------------------------------------- /8/tests/php_modules/8.4: -------------------------------------------------------------------------------- 1 | [PHP Modules] 2 | amqp 3 | apcu 4 | ast 5 | bcmath 6 | brotli 7 | bz2 8 | calendar 9 | Core 10 | ctype 11 | curl 12 | date 13 | dom 14 | ds 15 | event 16 | exif 17 | fileinfo 18 | filter 19 | ftp 20 | gd 21 | gmp 22 | grpc 23 | hash 24 | iconv 25 | igbinary 26 | imagick 27 | imap 28 | intl 29 | json 30 | ldap 31 | libsmbclient 32 | libxml 33 | mbstring 34 | memcached 35 | mongodb 36 | mysqli 37 | mysqlnd 38 | newrelic 39 | OAuth 40 | openssl 41 | opentelemetry 42 | pcntl 43 | pcov 44 | pcre 45 | PDO 46 | pdo_mysql 47 | pdo_pgsql 48 | pdo_sqlite 49 | pdo_sqlsrv 50 | pgsql 51 | Phar 52 | posix 53 | protobuf 54 | random 55 | rdkafka 56 | readline 57 | redis 58 | Reflection 59 | session 60 | SimpleXML 61 | smbclient 62 | soap 63 | sockets 64 | sodium 65 | SPL 66 | SPX 67 | sqlite3 68 | sqlsrv 69 | standard 70 | tidy 71 | tokenizer 72 | uploadprogress 73 | uuid 74 | xdebug 75 | xhprof 76 | xml 77 | xmlreader 78 | xmlwriter 79 | xsl 80 | yaml 81 | Zend OPcache 82 | zip 83 | zlib 84 | 85 | [Zend Modules] 86 | Xdebug 87 | Zend OPcache 88 | 89 | -------------------------------------------------------------------------------- /8/tests/run.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -eo pipefail 4 | 5 | if [[ -n "${DEBUG}" ]]; then 6 | set -x 7 | fi 8 | 9 | git_url=https://github.com/wodby/php.git 10 | 11 | wait_for_cron() { 12 | executed=0 13 | 14 | for i in $(seq 1 13); do 15 | if docker_exec crond cat /mnt/files/cron | grep -q "composer/vendor"; then 16 | executed=1 17 | break 18 | fi 19 | echo 'Waiting for cron execution...' 20 | sleep 5 21 | done 22 | 23 | if [[ "${executed}" -eq '0' ]]; then 24 | echo >&2 'Cron failed.' 25 | exit 1 26 | fi 27 | 28 | echo 'Cron has been executed!' 29 | } 30 | 31 | docker_exec() { 32 | docker compose exec -T "${@}" 33 | } 34 | 35 | run_action() { 36 | docker_exec "${1}" make "${@:2}" -f /usr/local/bin/actions.mk 37 | } 38 | 39 | docker compose up -d 40 | 41 | run_action php check-ready max_try=10 42 | run_action php migrate from=4.4.0 to=5.0.0 43 | 44 | # PHP tools 45 | docker_exec php tests.sh 46 | 47 | # SSH 48 | echo -n "Testing ssh... " 49 | docker_exec php touch /home/wodby/.ssh/known_hosts 50 | docker_exec php ssh wodby@sshd cat /home/wodby/.ssh/authorized_keys | grep -q admin@example.com 51 | echo "OK" 52 | 53 | # Git actions 54 | echo -n "Running git actions... " 55 | run_action php git-clone url="${git_url}" branch=master 56 | run_action php git-checkout target=develop 57 | echo "OK" 58 | 59 | # PHP-FPM 60 | echo -n "Checking PHP-FPM... " 61 | docker_exec php curl nginx | grep -q "Hello World!" 62 | echo "OK" 63 | 64 | if [[ $(uname -m) == "x86_64" ]]; then 65 | # Walter CD 66 | echo -n "Running walter scripts... " 67 | run_action php walter 68 | docker_exec php cat ./walter-shell-stage 69 | docker_exec php cat ./walter-command-stage 70 | echo "OK" 71 | fi 72 | 73 | # Crond 74 | wait_for_cron 75 | 76 | docker compose down 77 | -------------------------------------------------------------------------------- /8/tests/tests.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -eo pipefail 4 | 5 | if [[ -n "${DEBUG}" ]]; then 6 | set -x 7 | fi 8 | 9 | php -m > ~/php_modules.tmp 10 | echo -n "Checking PHP modules... " 11 | 12 | # Modify copy, keep the mounted version untouched. 13 | cp ~/php_modules/"${PHP_VERSION:0:3}" ~/expected_modules 14 | 15 | if ! cmp -s ~/php_modules.tmp ~/expected_modules; then 16 | echo "Error. PHP modules are not identical." 17 | diff ~/php_modules.tmp ~/expected_modules 18 | exit 1 19 | fi 20 | 21 | echo "OK" 22 | 23 | echo -n "Checking composer... " 24 | composer --version | grep -q 'Composer version' 25 | echo "OK" 26 | 27 | if [[ $(uname -m) == "x86_64" ]]; then 28 | echo -n "Checking walter... " 29 | walter -v | grep -q 'Walter version' 30 | echo "OK" 31 | fi 32 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | Copyright (c) 2016 Wodby, Inc. 3 | 4 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 5 | 6 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 7 | 8 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # PHP Docker Container Images 2 | 3 | [![Build Status](https://github.com/wodby/php/workflows/Build%20docker%20image/badge.svg)](https://github.com/wodby/php/actions) 4 | [![Docker Pulls](https://img.shields.io/docker/pulls/wodby/php.svg)](https://hub.docker.com/r/wodby/php) 5 | [![Docker Stars](https://img.shields.io/docker/stars/wodby/php.svg)](https://hub.docker.com/r/wodby/php) 6 | 7 | ## Table of Contents 8 | 9 | - [Docker Images](#docker-images) 10 | - [`-dev`](#-dev) 11 | - [`-dev-macos`](#-dev-macos) 12 | - [Supported architectures](#supported-architectures) 13 | - [Environment Variables](#environment-variables) 14 | - [PHP and PHP-FPM configuration](#php-and-php-fpm-configuration) 15 | - [Additional configuration](#additional-configuration) 16 | - [Build arguments](#build-arguments) 17 | - [PHP Extensions](#php-extensions) 18 | - [Tools](#tools) 19 | - [Xdebug](#xdebug) 20 | - [Changelog](#changelog) 21 | - [Users and permissions](#users-and-permissions) 22 | - [Crond](#crond) 23 | - [SSHD](#sshd) 24 | - [Adding SSH key](#adding-ssh-key) 25 | - [Complete PHP-based stack](#complete-php-based-stacks) 26 | - [Images based on `wodby/php`](#images-based-on-wodbyphp) 27 | - [Orchestration Actions](#orchestration-actions) 28 | 29 | ## Docker Images 30 | 31 | ❗For better reliability we release images with stability tags (`wodby/php:8-X.X.X`) which correspond 32 | to [git tags](https://github.com/wodby/php/releases). We strongly recommend using images only with stability tags. 33 | 34 | About images: 35 | 36 | - All images based on Alpine Linux 37 | - Base image: official [php](https://github.com/docker-library/php) 38 | - [GitHub actions builds](https://github.com/wodby/php/actions) 39 | - [Docker Hub](https://hub.docker.com/r/wodby/php) 40 | 41 | Supported tags and respective `Dockerfile` links: 42 | 43 | - `8.4`, `8`, `latest` [_(8/Dockerfile)_] 44 | - `8.3` [_(8/Dockerfile)_] 45 | - `8.2` [_(8/Dockerfile)_] 46 | - `8.1` [_(8/Dockerfile)_] 47 | - `8.4-dev`, `8-dev`, `dev` [_(8/Dockerfile)_] 48 | - `8.3-dev` [_(8/Dockerfile)_] 49 | - `8.2-dev` [_(8/Dockerfile)_] 50 | - `8.1-dev` [_(8/Dockerfile)_] 51 | - `8.4-dev-macos`, `8-dev-macos`, `dev-macos` [_(8/Dockerfile)_] 52 | - `8.3-dev-macos` [_(8/Dockerfile)_] 53 | - `8.2-dev-macos` [_(8/Dockerfile)_] 54 | - `8.1-dev-macos` [_(8/Dockerfile)_] 55 | 56 | ### `-dev` 57 | 58 | Images with `-dev` tag have a few differences: 59 | 60 | - `sudo` allowed for all commands for `wodby` user 61 | - PHP source code available under `/usr/src/php.tar.xz` 62 | - `PHP_FPM_CLEAR_ENV` is set to `no` by default 63 | - Additional packages installed: yarn 64 | 65 | ### `-dev-macos` 66 | 67 | Same as `-dev` but the default user/group `wodby` has uid/gid `501`/`20` to match the macOS default user/group ids. 68 | 69 | ### Supported architectures 70 | 71 | All images built for `linux/amd64` and `linux/arm64` 72 | 73 | ## Environment Variables 74 | 75 | #### PHP and PHP-FPM configuration 76 | 77 | The default configuration not recommended for use for production environment: 78 | 79 | | Variable | 8.4 | 8.3 | 8.2 | 8.1 | 80 | |---------------------------------------------|------------------------|------------------------|------------------------|------------------------------------------------| 81 | | [`PHP_ALLOW_URL_FOPEN`] | `On` | `On` | `On` | `On` | 82 | | [`PHP_APCU_ENABLE_CLI`] | `0` | `0` | `0` | `0` | 83 | | [`PHP_APCU_ENABLED`] | `1` | `1` | `1` | `1` | 84 | | [`PHP_APCU_ENTRIES_HINT`] | `4096` | `4096` | `4096` | `4096` | 85 | | [`PHP_APCU_COREDUMP_UNMAP`] | `0` | `0` | `0` | `0` | 86 | | [`PHP_APCU_GC_TTL`] | `3600` | `3600` | `3600` | `3600` | 87 | | [`PHP_APCU_PRELOAD_PATH`] | `NULL` | `NULL` | `NULL` | `NULL` | 88 | | [`PHP_APCU_SERIALIZER`] | | | | | 89 | | [`PHP_APCU_SHM_SEGMENTS`] | `1` | `1` | `1` | `1` | 90 | | [`PHP_APCU_SHM_SIZE`] | `128M` | `128M` | `128M` | `128M` | 91 | | [`PHP_APCU_SLAM_DEFENSE`] | `1` | `1` | `1` | `1` | 92 | | [`PHP_APCU_TTL`] | `0` | `0` | `0` | `0` | 93 | | [`PHP_APCU_USE_REQUEST_TIME`] | `1` | `1` | `1` | `1` | 94 | | [`PHP_ASSERT_ACTIVE`] | - | - | `On` | `On` | 95 | | [`PHP_AUTO_PREPEND_FILE`] | | | | | 96 | | [`PHP_AUTO_APPEND_FILE`] | | | | | 97 | | `PHP_BROTLI_OUTPUT_COMPRESSION` | `0` | `0` | `0` | `0` | 98 | | `PHP_BROTLI_OUTPUT_COMPRESSION_LEVEL` | `-1` | `-1` | `-1` | `-1` | 99 | | `PHP_CLI_MEMORY_LIMIT` | `-1` | `-1` | `-1` | `-1` | 100 | | [`PHP_DATE_TIMEZONE`] | `UTC` | `UTC` | `UTC` | `UTC` | 101 | | [`PHP_DEFAULT_SOCKET_TIMEOUT`] | `60` | `60` | `60` | `60` | 102 | | [`PHP_DISABLE_FUNCTIONS`] | | | | | 103 | | [`PHP_DISABLE_CLASSES`] | | | | | 104 | | [`PHP_DISPLAY_STARTUP_ERRORS`] | `On` | `On` | `On` | `On` | 105 | | [`PHP_ERROR_REPORTING`] | `E_ALL` | `E_ALL` | `E_ALL` | `E_ALL` | 106 | | [`PHP_EXPOSE`] | `Off` | `Off` | `Off` | `Off` | 107 | | `PHP_EXTENSIONS_DISABLE` | `xdebug,xhprof,spx` | `xdebug,xhprof,spx` | `xdebug,xhprof,spx` | `xdebug,xhprof,spx` | 108 | | [`PHP_FPM_CLEAR_ENV`] | `yes` | `yes` | `yes` | `yes` | 109 | | `PHP_FPM_ENV_VARS` | | | | | 110 | | [`PHP_FPM_LOG_LEVEL`] | `notice` | `notice` | `notice` | `notice` | 111 | | [`PHP_FPM_PM`] | `dynamic` | `dynamic` | `dynamic` | `dynamic` | 112 | | [`PHP_FPM_PM_MAX_CHILDREN`] | `8` | `8` | `8` | `8` | 113 | | [`PHP_FPM_PM_MAX_REQUESTS`] | `500` | `500` | `500` | `500` | 114 | | [`PHP_FPM_PM_MAX_SPARE_SERVERS`] | `3` | `3` | `3` | `3` | 115 | | [`PHP_FPM_PM_MIN_SPARE_SERVERS`] | `1` | `1` | `1` | `1` | 116 | | [`PHP_FPM_PM_STATUS_PATH`] | | | | | 117 | | [`PHP_FPM_REQUEST_SLOWLOG_TIMEOUT`] | | | | | 118 | | [`PHP_FPM_PM_START_SERVERS`] | `2` | `2` | `2` | `2` | 119 | | [`PHP_FPM_USER`] | `www-data` | `www-data` | `www-data` | `www-data` | 120 | | [`PHP_FPM_GROUP`] | `www-data` | `www-data` | `www-data` | `www-data` | 121 | | [`PHP_GRPC_ENABLE_FORK_SUPPORT`] | `1` | `1` | `1` | `1` | 122 | | [`PHP_GRPC_LOG_FILENAME`] | `/proc/self/fd/2` | `/proc/self/fd/2` | `/proc/self/fd/2` | `/proc/self/fd/2` | 123 | | [`PHP_GRPC_POLL_STRATEGY`] | `epoll1` | `epoll1` | `epoll1` | `epoll1` | 124 | | [`PHP_GRPC_TRACE`] | | | | | 125 | | [`PHP_GRPC_VERBOSITY`] | `error` | `error` | `error` | `error` | 126 | | `PHP_IGBINARY_COMPACT_STRINGS` | `On` | `On` | `On` | `On` | 127 | | [`PHP_LOG_ERRORS`] | `On` | `On` | `On` | `On` | 128 | | [`PHP_LOG_ERRORS_MAX_LEN`] | `0` | `0` | `0` | `0` | 129 | | [`PHP_MAX_EXECUTION_TIME`] | `120` | `120` | `120` | `120` | 130 | | [`PHP_MAX_FILE_UPLOADS`] | `20` | `20` | `20` | `20` | 131 | | [`PHP_MAX_INPUT_TIME`] | `60` | `60` | `60` | `60` | 132 | | [`PHP_MAX_INPUT_VARS`] | `2000` | `2000` | `2000` | `2000` | 133 | | [`PHP_MEMORY_LIMIT`] | `512M` | `512M` | `512M` | `512M` | 134 | | [`PHP_MYSQLI_CACHE_SIZE`] | `2000` | `2000` | `2000` | `2000` | 135 | | [`PHP_NEWRELIC_LICENSE`] | | | | | 136 | | _see all newrelic ext options_ | [8.x newrelic] | [8.x newrelic] | [8.x newrelic] | [8.x newrelic] | 137 | | [`PHP_OPCACHE_ENABLE`] | `1` | `1` | `1` | `1` | 138 | | [`PHP_OPCACHE_ENABLE_CLI`] | `0` | `0` | `0` | `0` | 139 | | [`PHP_OPCACHE_VALIDATE_TIMESTAMPS`] | `1` | `1` | `1` | `1` | 140 | | [`PHP_OPCACHE_REVALIDATE_FREQ`] | `2` | `2` | `2` | `2` | 141 | | [`PHP_OPCACHE_MAX_ACCELERATED_FILES`] | `4000` | `4000` | `4000` | `4000` | 142 | | [`PHP_OPCACHE_MEMORY_CONSUMPTION`] | `128` | `128` | `128` | `128` | 143 | | [`PHP_OPCACHE_INTERNED_STRINGS_BUFFER`] | `8` | `8` | `8` | `8` | 144 | | [`PHP_OPCACHE_FAST_SHUTDOWN`] | - | - | - | - | 145 | | [`PHP_OPCACHE_HUGE_CODE_PAGES`] | `0` | `0` | `0` | `0` | 146 | | [`PHP_OPCACHE_PRELOAD`] | - | - | - | - | 147 | | [`PHP_OPCACHE_PRELOAD_USER`] | `www-data` | `www-data` | `www-data` | `www-data` | 148 | | [`PHP_OPCACHE_JIT`] | `tracing` | `tracing` | `tracing` | `tracing` | 149 | | [`PHP_OPCACHE_JIT_BUFFER_SIZE`] | `0` | `0` | `0` | `0` | 150 | | [`PHP_OUTPUT_BUFFERING`] | `4096` | `4096` | `4096` | `4096` | 151 | | [`PHP_PCOV_ENABLED`] | `0` | `0` | `0` | `0` | 152 | | _see all pcov ext options_ | [8.x pcov] | [8.x pcov] | [8.x pcov] | [8.x pcov] | 153 | | [`PHP_PDO_MYSQL_CACHE_SIZE`] | - | - | - | - | 154 | | [`PHP_PHAR_READONLY`] | `1` | `1` | `1` | `1` | 155 | | [`PHP_PHAR_REQUIRE_HASH`] | `1` | `1` | `1` | `1` | 156 | | [`PHP_PHAR_CACHE_LIST`] | | | | | 157 | | [`PHP_POST_MAX_SIZE`] | `32M` | `32M` | `32M` | `32M` | 158 | | [`PHP_REALPATH_CACHE_SIZE`] | `4096k` | `4096k` | `4096k` | `4096k` | 159 | | [`PHP_REALPATH_CACHE_TTL`] | `120` | `120` | `120` | `120` | 160 | | [`PHP_SENDMAIL_PATH`] | `/usr/bin/msmtp -t -i` | `/usr/bin/msmtp -t -i` | `/usr/bin/msmtp -t -i` | `/usr/bin/dos2unix -u \| /usr/bin/msmtp -t -i` | 161 | | `PHP_MAIL_MIXED_LF_AND_CRLF` | `Off` | `Off` | `Off` | - | 162 | | [`PHP_SESSION_SAVE_HANDLER`] | `files` | `files` | `files` | `files` | 163 | | [`PHP_SHORT_OPEN_TAG`] | `1` | `1` | `1` | `1` | 164 | | [`PHP_SPX_DATA_DIR`] | `/mnt/files/spx` | `/mnt/files/spx` | `/mnt/files/spx` | `/mnt/files/spx` | 165 | | [`PHP_SPX_HTTP_ENABLED`] | `0` | `0` | `0` | `0` | 166 | | [`PHP_SPX_HTTP_KEY`] | | | | | 167 | | [`PHP_SPX_HTTP_IP_WHITELIST`] | | | | | 168 | | _see all sqlsrv ext options_ | [8.x sqlsrv] | [8.x sqlsrv] | [8.x sqlsrv] | [8.x sqlsrv] | 169 | | _see all session options_ | [8.3 session] | [8.3 session] | [8.2 session] | [8.1 session] | 170 | | _see all xhprof options_ | [8.x xhprof] | [8.x xhprof] | [8.x xhprof] | [8.x xhprof] | 171 | | [`PHP_UPLOAD_MAX_FILESIZE`] | `32M` | `32M` | `32M` | `32M` | 172 | | [`PHP_XDEBUG_MODE`] | `off` | `off` | `off` | `off` | 173 | | _see all xdebug ext options_ | [8.x xdebug] | [8.x xdebug] | [8.x xdebug] | [8.x xdebug] | 174 | | [`PHP_ZEND_ASSERTIONS`] | `1` | `1` | `1` | `1` | 175 | | [`PHP_ZEND_EXCEPTION_IGNORE_ARGS`] | `0` | `0` | `0` | `0` | 176 | | [`PHP_ZEND_MULTIBYTE`] | `0` | `0` | `0` | `0` | 177 | | [`PHP_ZEND_SIGNAL_CHECK`] | `0` | `0` | `0` | `0` | 178 | | [`PHP_ZEND_EXCEPTION_STRING_PARAM_MAX_LEN`] | `15` | `15` | `15` | `15` | 179 | | [`PHP_ZEND_SCRIPT_ENCODING`] | | | | | 180 | | [`PHP_ZEND_DETECT_UNICODE`] | | | | | 181 | 182 | > "-" - Not available for this version 183 | 184 | #### Additional configuration 185 | 186 | | Variable | Default value | 187 | |-----------------------------------------|---------------------| 188 | | `GIT_USER_EMAIL` | `wodby@example.com` | 189 | | `GIT_USER_NAME` | `wodby` | 190 | | `HTTP_PROXY` | | 191 | | `SSH_PRIVATE_KEY` | | 192 | | `SSH_DISABLE_STRICT_KEY_CHECKING` | | 193 | | `SSHD_GATEWAY_PORTS` | `no` | 194 | | `SSHD_HOST_KEYS_DIR` | `/etc/ssh` | 195 | | `SSHD_LOG_LEVEL` | `INFO` | 196 | | `SSHD_PASSWORD_AUTHENTICATION` | `no` | 197 | | `SSHD_PERMIT_USER_ENV` | `yes` | 198 | | `SSHD_USE_DNS` | `yes` | 199 | | `MSMTP_PORT` | `25` | 200 | | `MSMTP_TLS` | `off` | 201 | | `MSMTP_LOG` | | 202 | | `MSMTP_LOGFILE` | `/proc/self/fd/2` | 203 | | `MSMTP_AUTH` | `off` | 204 | | `MSMTP_HOST` | `opensmtpd` | 205 | | `MSMTP_ADD_MISSING_DATE_HEADER` | `on` | 206 | | `MARIADB_CLIENT_SSL_VERIFY_SERVER_CERT` | ` | 207 | 208 | ## Build arguments 209 | 210 | | Argument | Default value | 211 | |------------------|---------------| 212 | | `PHP_VER` | | 213 | | `PHP_DEV` | | 214 | | `WODBY_GROUP_ID` | `1000` | 215 | | `WODBY_USER_ID` | `1000` | 216 | 217 | Change `WODBY_USER_ID` and `WODBY_GROUP_ID` mainly for local dev version of images, if it matches with existing system 218 | user/group ids the latter will be deleted. 219 | 220 | ## PHP Extensions 221 | 222 | Extensions xdebug, xhprof and spx disabled by default, to change it override the default env 223 | var `PHP_EXTENSIONS_DISABLE=xdebug,xhprof,spx`. 224 | 225 | | Extension | 8.4 | 8.3 | 8.2 | 8.1 | 226 | |------------------|--------|--------|--------|--------| 227 | | [amqp] | 2.1.2 | 2.1.2 | 2.1.2 | 2.1.2 | 228 | | [apcu] | 5.1.24 | 5.1.24 | 5.1.24 | 5.1.24 | 229 | | [ast] | 1.1.2 | 1.1.2 | 1.1.2 | 1.1.2 | 230 | | bcmath | | | | | 231 | | brotli | 0.15.2 | 0.15.2 | 0.15.2 | 0.15.2 | 232 | | bz2 | | | | | 233 | | calendar | | | | | 234 | | Core | | | | | 235 | | ctype | | | | | 236 | | curl | | | | | 237 | | date | | | | | 238 | | dom | | | | | 239 | | [ds] | 1.5.0 | 1.5.0 | 1.5.0 | 1.5.0 | 240 | | exif | | | | | 241 | | [event] | 3.1.4 | 3.1.4 | 3.1.4 | 3.1.4 | 242 | | fileinfo | | | | | 243 | | filter | | | | | 244 | | ftp | | | | | 245 | | gd | | | | | 246 | | [grpc] | 1.68.0 | 1.68.0 | 1.68.0 | 1.68.0 | 247 | | hash | | | | | 248 | | iconv | | | | | 249 | | [igbinary] | 3.2.16 | 3.2.16 | 3.2.16 | 3.2.16 | 250 | | [imagick] | 3.8.0 | 3.8.0 | 3.8.0 | 3.8.0 | 251 | | [imap] | 1.0.3 | - | - | - | 252 | | imap | - | | | | 253 | | intl | | | | | 254 | | json | | | | | 255 | | ldap | | | | | 256 | | libxml | | | | | 257 | | mbstring | | | | | 258 | | [memcached] | 3.3.0 | 3.3.0 | 3.3.0 | 3.3.0 | 259 | | [mongodb] | 2.0.0 | 2.0.0 | 2.0.0 | 2.0.0 | 260 | | mysqli | | | | | 261 | | mysqlnd | | | | | 262 | | [newrelic] | latest | latest | latest | latest | 263 | | [OAuth] | 2.0.9 | 2.0.9 | 2.0.9 | 2.0.9 | 264 | | openssl | | | | | 265 | | [opentelemetry] | 1.1.3 | 1.1.3 | 1.1.3 | 1.1.3 | 266 | | [pcov] | 1.0.12 | 1.0.12 | 1.0.12 | 1.0.12 | 267 | | pcntl | | | | | 268 | | pcre | | | | | 269 | | PDO | | | | | 270 | | pdo_mysql | | | | | 271 | | pdo_pgsql | | | | | 272 | | pdo_sqlite | | | | | 273 | | [pdo_sqlsrv]* | 5.12.0 | 5.12.0 | 5.12.0 | 5.12.0 | 274 | | pgsql | | | | | 275 | | Phar | | | | | 276 | | posix | | | | | 277 | | [protobuf] | 4.30.2 | 4.30.2 | 4.30.2 | 4.30.2 | 278 | | [rdkafka] | 6.0.5 | 6.0.5 | 6.0.5 | 6.0.5 | 279 | | readline | | | | | 280 | | [redis] | 6.2.0 | 6.2.0 | 6.2.0 | 6.2.0 | 281 | | Reflection | | | | | 282 | | session | | | | | 283 | | SimpleXML | | | | | 284 | | [smbclient] | 1.1.1 | 1.1.1 | 1.1.1 | 1.1.1 | 285 | | soap | | | | | 286 | | sockets | | | | | 287 | | sodium | | | | | 288 | | SPL | | | | | 289 | | [spx] | 0.4.17 | 0.4.17 | 0.4.17 | 0.4.17 | 290 | | sqlite3 | | | | | 291 | | [sqlsrv]* | 5.12.0 | 5.12.0 | 5.12.0 | 5.12.0 | 292 | | standard | | | | | 293 | | tidy | | | | | 294 | | tokenizer | | | | | 295 | | [uploadprogress] | 2.0.2 | 2.0.2 | 2.0.2 | 2.0.2 | 296 | | [uuid] | 1.2.1 | 1.2.1 | 1.2.1 | 1.2.1 | 297 | | [xdebug] | 3.4.3 | 3.4.3 | 3.4.3 | 3.4.3 | 298 | | [xhprof] | 2.3.10 | 2.3.10 | 2.3.10 | 2.3.10 | 299 | | xml | | | | | 300 | | xmlreader | | | | | 301 | | xmlwriter | | | | | 302 | | xsl | | | | | 303 | | [yaml] | 2.2.4 | 2.2.4 | 2.2.4 | 2.2.4 | 304 | | Zend OPcache | | | | | 305 | | zip | | | | | 306 | | zlib | | | | | 307 | 308 | Legend: 309 | 310 | > - [EMPTY] – Core PHP extension 311 | > - "-" - Not exists in this version 312 | > Some extensions may not be available in [`-dev`](#-dev) images 313 | 314 | * sqlsrv extension has no arm64 support because the driver has no support for linux/arm64 315 | 316 | ## Tools 317 | 318 | | Tool | 8.4 | 8.3 | 8.2 | 8.1 | 319 | |-------------------------------------|--------|--------|--------|--------| 320 | | [Composer](https://getcomposer.org) | latest | latest | latest | latest | 321 | 322 | ## Xdebug 323 | 324 | By default, xdebug [mode](https://xdebug.org/docs/all_settings#mode) set to `off`, which has close to 0 overhead. If you 325 | want to disable the extension completely set `PHP_EXTENSIONS_DISABLE=xdebug`. 326 | 327 | ## Changelog 328 | 329 | Changes per stability tag reflected in git tags description under [releases](https://github.com/wodby/python/releases). 330 | 331 | ## Crond 332 | 333 | You can run Crond with this image changing the command to `sudo -E crond -f -d 0` and mounting a crontab file 334 | to `./crontab:/etc/crontabs/www-data`. Example crontab file contents: 335 | 336 | ``` 337 | # min hour day month weekday command 338 | */1 * * * * echo "test" > /mnt/files/cron 339 | ``` 340 | 341 | ## SSHD 342 | 343 | You can run SSHD with this image by changing the command to `sudo /usr/sbin/sshd -De` and mounting authorized public 344 | keys to `/home/wodby/.ssh/authorized_keys` 345 | 346 | ## Adding SSH key 347 | 348 | You can add a private SSH key to the container by mounting it to `/home/wodby/.ssh/id_rsa` 349 | 350 | ## Users and permissions 351 | 352 | Default container user is `wodby:wodby` (UID/GID `1000`). PHP-FPM runs from `www-data:www-data` user (UID/GID `82`) by 353 | default. User `wodby` is a part of `www-data` group. 354 | 355 | Codebase volume `$APP_ROOT` (`/var/www/html`) owned by `wodby:wodby`. Files volume `$FILES_DIR` (`/mnt/files`) owned 356 | by `www-data:www-data` with `775` mode. 357 | 358 | See https://github.com/wodby/php/issues/22 for more details. 359 | 360 | #### Helper scripts 361 | 362 | - `files_chmod` – in case you need write access for `wodby` user to a file/dir generated by `www-data` on this volume 363 | run `sudo files_chmod [FILEPATH]` script (FILEPATH must be under `/mnt/files`), it will recursively change the mode 364 | to `ug=rwX,o=rX` 365 | 366 | - `files_chown` – in case you manually uploaded files under `wodby` user to files volume and want to change the 367 | ownership of those files to `www-data` run `sudo files_chown [FILEPATH]` script (FILEPATH must be under `/mnt/files`), 368 | it will recursively change ownership to `www-data:www-data` 369 | 370 | ## Complete PHP-based stacks 371 | 372 | - [wodby/docker4php](https://github.com/wodby/docker4php) 373 | - [wodby/docker4laravel](https://github.com/wodby/docker4laravel) 374 | - [wodby/docker4drupal](https://github.com/wodby/docker4drupal) 375 | - [wodby/docker4wordpress](https://github.com/wodby/docker4wordpress) 376 | 377 | ## Images based on `wodby/php` 378 | 379 | - [wodby/drupal-php](https://github.com/wodby/drupal-php) 380 | - [wodby/wordpress-php](https://github.com/wodby/wordpress-php) 381 | - [wodby/adminer](https://github.com/wodby/adminer) 382 | - [wodby/matomo](https://github.com/wodby/matomo) 383 | - [wodby/cachet](https://github.com/wodby/cachet) 384 | - [wodby/webgrind](https://github.com/wodby/webgrind) 385 | - [wodby/xhprof](https://github.com/wodby/xhprof) 386 | 387 | ## Orchestration Actions 388 | 389 | Usage: 390 | 391 | ``` 392 | make COMMAND [params ...] 393 | 394 | commands: 395 | migrate 396 | check-ready [host max_try wait_seconds delay_seconds] 397 | git-clone url [branch] 398 | git-checkout target [is_hash] 399 | files-import source 400 | files-link public_dir 401 | update-keys 402 | walter 403 | 404 | default params values: 405 | is_hash 0 406 | branch "" Branch, tag or hash commit 407 | ``` 408 | 409 | [_(8/Dockerfile)_]: https://github.com/wodby/php/tree/master/8/Dockerfile 410 | 411 | [8.x xdebug]: https://github.com/wodby/php/tree/master/8/templates/docker-php-ext-xdebug.ini.tmpl 412 | 413 | [8.x pcov]: https://github.com/wodby/php/tree/master/8/templates/docker-php-ext-pcov.ini.tmpl 414 | 415 | [8.x newrelic]: https://github.com/wodby/php/tree/master/8/templates/docker-php-ext-newrelic.ini.tmpl 416 | 417 | [8.x xhprof]: https://github.com/wodby/php/tree/master/8/templates/docker-php-ext-xhprof.ini.tmpl 418 | 419 | [8.x sqlsrv]: https://github.com/wodby/php/tree/master/8/templates/docker-php-ext-sqlsrv.ini.tmpl 420 | 421 | [8.1 session]: https://github.com/wodby/php/tree/master/8/templates/docker-php-8.1.ini.tmpl 422 | 423 | [8.2 session]: https://github.com/wodby/php/tree/master/8/templates/docker-php-8.2.ini.tmpl 424 | 425 | [8.3 session]: https://github.com/wodby/php/tree/master/8/templates/docker-php-8.3.ini.tmpl 426 | 427 | [`PHP_ALLOW_URL_FOPEN`]: http://php.net/manual/en/filesystem.configuration.php#ini.allow-url-fopen 428 | 429 | [`PHP_APCU_COREDUMP_UNMAP`]: http://php.net/manual/en/apcu.configuration.php#ini.apcu.coredump-unmap 430 | 431 | [`PHP_APCU_ENABLE_CLI`]: http://php.net/manual/en/apcu.configuration.php#ini.apcu.enable-cli 432 | 433 | [`PHP_APCU_ENABLED`]: http://php.net/manual/en/apcu.configuration.php#ini.apcu.enabled 434 | 435 | [`PHP_APCU_ENTRIES_HINT`]: http://php.net/manual/en/apcu.configuration.php#ini.apcu.entries-hint 436 | 437 | [`PHP_APCU_GC_TTL`]: http://php.net/manual/en/apcu.configuration.php#ini.apcu.gc-ttl 438 | 439 | [`PHP_APCU_PRELOAD_PATH`]: http://php.net/manual/en/apcu.configuration.php#ini.apcu.preload-path 440 | 441 | [`PHP_APCU_SERIALIZER`]: http://php.net/manual/en/apcu.configuration.php#ini.apcu.serializer 442 | 443 | [`PHP_APCU_SHM_SEGMENTS`]: http://php.net/manual/en/apcu.configuration.php#ini.apcu.shm-segments 444 | 445 | [`PHP_APCU_SHM_SIZE`]: http://php.net/manual/en/apcu.configuration.php#ini.apcu.shm-size 446 | 447 | [`PHP_APCU_SLAM_DEFENSE`]: http://php.net/manual/en/apcu.configuration.php#ini.apcu.slam-defense 448 | 449 | [`PHP_APCU_TTL`]: http://php.net/manual/en/apcu.configuration.php#ini.apcu.ttl 450 | 451 | [`PHP_APCU_USE_REQUEST_TIME`]: http://php.net/manual/en/apcu.configuration.php#ini.apcu.use-request-time 452 | 453 | [`PHP_ASSERT_ACTIVE`]: http://php.net/assert.active 454 | 455 | [`PHP_AUTO_APPEND_FILE`]: http://php.net/auto-append-file 456 | 457 | [`PHP_AUTO_PREPEND_FILE`]: http://php.net/auto-prepend-file 458 | 459 | [`PHP_DATE_TIMEZONE`]: http://php.net/date.timezone 460 | 461 | [`PHP_DEFAULT_SOCKET_TIMEOUT`]: http://php.net/manual/en/filesystem.configuration.php#ini.default-socket-timeout 462 | 463 | [`PHP_DISPLAY_ERRORS`]: http://php.net/display-errors 464 | 465 | [`PHP_DISABLE_FUNCTIONS`]: https://www.php.net/manual/en/ini.core.php#ini.disable-functions 466 | 467 | [`PHP_DISABLE_CLASSES`]: https://www.php.net/manual/en/ini.core.php#ini.disable-classes 468 | 469 | [`PHP_DISPLAY_STARTUP_ERRORS`]: http://php.net/display-startup-errors 470 | 471 | [`PHP_ERROR_REPORTING`]: http://php.net/error-reporting 472 | 473 | [`PHP_EXPOSE`]: http://php.net/expose-php 474 | 475 | [`PHP_FPM_CLEAR_ENV`]: http://php.net/manual/en/install.fpm.configuration.php#clear-env 476 | 477 | [`PHP_FPM_GROUP`]: http://php.net/manual/en/install.fpm.configuration.php#group 478 | 479 | [`PHP_FPM_LOG_LEVEL`]: http://php.net/manual/en/install.fpm.configuration.php#log-level 480 | 481 | [`PHP_FPM_PM_MAX_CHILDREN`]: http://php.net/manual/en/install.fpm.configuration.php#pm.max-chidlren 482 | 483 | [`PHP_FPM_PM_MAX_REQUESTS`]: http://php.net/manual/en/install.fpm.configuration.php#pm.max-requests 484 | 485 | [`PHP_FPM_PM_MAX_SPARE_SERVERS`]: http://php.net/manual/en/install.fpm.configuration.php#pm.max-spare-servers 486 | 487 | [`PHP_FPM_PM_MIN_SPARE_SERVERS`]: http://php.net/manual/en/install.fpm.configuration.php#pm.min-spare-servers 488 | 489 | [`PHP_FPM_PM_START_SERVERS`]: http://php.net/manual/en/install.fpm.configuration.php#pm.start-servers 490 | 491 | [`PHP_FPM_PM_STATUS_PATH`]: http://php.net/manual/en/install.fpm.configuration.php#pm.status-path 492 | 493 | [`PHP_FPM_PM`]: http://php.net/manual/en/install.fpm.configuration.php#pm 494 | 495 | [`PHP_FPM_REQUEST_SLOWLOG_TIMEOUT`]: http://php.net/manual/en/install.fpm.configuration.php#request-slowlog-timeout 496 | 497 | [`PHP_GRPC_ENABLE_FORK_SUPPORT`]: https://github.com/grpc/grpc/blob/master/doc/environment_variables.md 498 | 499 | [`PHP_GRPC_POLL_STRATEGY`]: https://github.com/grpc/grpc/blob/master/doc/environment_variables.md 500 | 501 | [`PHP_GRPC_LOG_FILENAME`]: https://github.com/grpc/grpc/blob/master/doc/environment_variables.md 502 | 503 | [`PHP_GRPC_TRACE`]: https://github.com/grpc/grpc/blob/master/doc/environment_variables.md 504 | 505 | [`PHP_GRPC_VERBOSITY`]: https://github.com/grpc/grpc/blob/master/doc/environment_variables.md 506 | 507 | [`PHP_FPM_USER`]: http://php.net/manual/en/install.fpm.configuration.php#user 508 | 509 | [`PHP_LOG_ERRORS_MAX_LEN`]: http://php.net/log-errors-max-len 510 | 511 | [`PHP_LOG_ERRORS`]: http://php.net/log-errors 512 | 513 | [`PHP_MAX_EXECUTION_TIME`]: http://php.net/max-execution-time 514 | 515 | [`PHP_MAX_FILE_UPLOADS`]: http://php.net/manual/en/ini.core.php#ini.max-file-uploads 516 | 517 | [`PHP_MAX_INPUT_TIME`]: http://php.net/max-input-time 518 | 519 | [`PHP_MAX_INPUT_VARS`]: http://php.net/max-input-vars 520 | 521 | [`PHP_MBSTRING_ENCODING_TRANSLATION`]: http://php.net/mbstring.encoding-translation 522 | 523 | [`PHP_MBSTRING_HTTP_INPUT`]: http://php.net/mbstring.http-input 524 | 525 | [`PHP_MBSTRING_HTTP_OUTPUT`]: http://php.net/mbstring.http-output 526 | 527 | [`PHP_MEMORY_LIMIT`]: http://php.net/memory-limit 528 | 529 | [`PHP_MYSQLI_CACHE_SIZE`]: http://php.net/mysqli.cache_size 530 | 531 | [`PHP_NEWRELIC_APPNAME`]: https://docs.newrelic.com/docs/agents/php-agent/configuration/php-agent-configuration#inivar-appname 532 | 533 | [`PHP_NEWRELIC_BROWSER_MONITORING_AUTO_INSTRUMENT`]: https://docs.newrelic.com/docs/agents/php-agent/configuration/php-agent-configuration#inivar-autorum 534 | 535 | [`PHP_NEWRELIC_CAPTURE_PARAMS`]: https://docs.newrelic.com/docs/agents/php-agent/configuration/php-agent-configuration#inivar-enabled 536 | 537 | [`PHP_NEWRELIC_ENABLED`]: https://docs.newrelic.com/docs/agents/php-agent/configuration/php-agent-configuration#inivar-enabled 538 | 539 | [`PHP_NEWRELIC_FRAMEWORK`]: https://docs.newrelic.com/docs/agents/php-agent/configuration/php-agent-configuration#inivar-framework 540 | 541 | [`PHP_NEWRELIC_GUZZLE_ENABLED`]: https://docs.newrelic.com/docs/agents/php-agent/configuration/php-agent-configuration#inivar-autorum 542 | 543 | [`PHP_NEWRELIC_HIGH_SECURITY`]: https://docs.newrelic.com/docs/agents/php-agent/configuration/php-agent-configuration#inivar-high-security 544 | 545 | [`PHP_NEWRELIC_IGNORED_PARAMS`]: https://docs.newrelic.com/docs/agents/php-agent/configuration/php-agent-configuration#inivar-ignored_params 546 | 547 | [`PHP_NEWRELIC_LABELS`]: https://docs.newrelic.com/docs/agents/php-agent/configuration/php-agent-configuration#inivar-labels 548 | 549 | [`PHP_NEWRELIC_LICENSE`]: https://docs.newrelic.com/docs/agents/php-agent/configuration/php-agent-configuration#inivar-license 550 | 551 | [`PHP_NEWRELIC_LOGLEVEL`]: https://docs.newrelic.com/docs/agents/php-agent/configuration/php-agent-configuration#inivar-loglevel 552 | 553 | [`PHP_NEWRELIC_TRANSACTION_TRACER_DETAIL`]: https://docs.newrelic.com/docs/agents/php-agent/configuration/php-agent-configuration#inivar-tt-detail 554 | 555 | [`PHP_NEWRELIC_DISTRIBUTED_TRACING_ENABLED`]: https://docs.newrelic.com/docs/agents/php-agent/configuration/php-agent-configuration#inivar-misctt-settings 556 | 557 | [`PHP_OPCACHE_ENABLE_CLI`]: http://php.net/manual/en/opcache.configuration.php#ini.opcache.enable-cli 558 | 559 | [`PHP_OPCACHE_ENABLE`]: http://php.net/manual/en/opcache.configuration.php#ini.opcache.enable 560 | 561 | [`PHP_OPCACHE_FAST_SHUTDOWN`]: http://php.net/manual/en/opcache.configuration.php#ini.opcache.fast-shutdown 562 | 563 | [`PHP_OPCACHE_HUGE_CODE_PAGES`]: http://php.net/manual/en/opcache.configuration.php#ini.opcache.huge_code_pages 564 | 565 | [`PHP_OPCACHE_INTERNED_STRINGS_BUFFER`]: http://php.net/manual/en/opcache.configuration.php#ini.opcache.interned-strings-buffer 566 | 567 | [`PHP_OPCACHE_JIT`]: https://www.php.net/manual/en/opcache.configuration.php#ini.opcache.jit 568 | 569 | [`PHP_OPCACHE_JIT_BUFFER_SIZE`]: https://www.php.net/manual/en/opcache.configuration.php#ini.opcache.jit-buffer-size 570 | 571 | [`PHP_OPCACHE_MAX_ACCELERATED_FILES`]: http://php.net/manual/en/opcache.configuration.php#ini.opcache.max-accelerated-files 572 | 573 | [`PHP_OPCACHE_MEMORY_CONSUMPTION`]: http://php.net/manual/en/opcache.configuration.php#ini.opcache.memory-consumption 574 | 575 | [`PHP_OPCACHE_PRELOAD`]: http://php.net/manual/en/opcache.configuration.php#ini.opcache.preload 576 | 577 | [`PHP_OPCACHE_PRELOAD_USER`]: http://php.net/manual/en/opcache.configuration.php#ini.opcache.preload-user 578 | 579 | [`PHP_OPCACHE_REVALIDATE_FREQ`]: http://php.net/manual/en/opcache.configuration.php#ini.opcache.revalidate-freq 580 | 581 | [`PHP_OPCACHE_VALIDATE_TIMESTAMPS`]: http://php.net/manual/en/opcache.configuration.php#ini.opcache.validate-timestamps 582 | 583 | [`PHP_OUTPUT_BUFFERING`]: http://php.net/output-buffering 584 | 585 | [`PHP_PDO_MYSQL_CACHE_SIZE`]: http://php.net/pdo_mysql.cache_size 586 | 587 | [`PHP_PHAR_CACHE_LIST`]: http://php.net/manual/en/phar.configuration.php#ini.phar.cache-list 588 | 589 | [`PHP_PHAR_READONLY`]: http://php.net/manual/en/phar.configuration.php#ini.phar.readonly 590 | 591 | [`PHP_PHAR_REQUIRE_HASH`]: http://php.net/manual/en/phar.configuration.php#ini.phar.require-hash 592 | 593 | [`PHP_POST_MAX_SIZE`]: http://php.net/post-max-size 594 | 595 | [`PHP_REALPATH_CACHE_SIZE`]: http://php.net/realpath-cache-size 596 | 597 | [`PHP_REALPATH_CACHE_TTL`]: http://php.net/realpath-cache-ttl 598 | 599 | [`PHP_SENDMAIL_PATH`]: http://php.net/sendmail-path 600 | 601 | [`PHP_SESSION_SAVE_HANDLER`]: http://php.net/session.save-handler 602 | 603 | [`PHP_SHORT_OPEN_TAG`]: https://www.php.net/manual/en/ini.core.php#ini.short-open-tag 604 | 605 | [`PHP_TRACK_ERRORS`]: http://php.net/track-errors 606 | 607 | [`PHP_UPLOAD_MAX_FILESIZE`]: http://php.net/upload-max-filesize 608 | 609 | [`PHP_XDEBUG_MODE`]: https://xdebug.org/docs/all_settings#mode 610 | 611 | [`PHP_XDEBUG`]: #xdebug 612 | 613 | [`PHP_ZEND_ASSERTIONS`]: https://www.php.net/manual/en/ini.core.php#ini.zend.assertions 614 | 615 | [`PHP_ZEND_EXCEPTION_IGNORE_ARGS`]: https://www.php.net/manual/en/ini.core.php#ini.zend.exception-ignore-args 616 | 617 | [`PHP_ZEND_MULTIBYTE`]: https://www.php.net/manual/en/ini.core.php#ini.zend.multibyte 618 | 619 | [`PHP_ZEND_SIGNAL_CHECK`]: https://www.php.net/manual/en/ini.core.php#ini.zend.signal-check 620 | 621 | [`PHP_ZEND_EXCEPTION_STRING_PARAM_MAX_LEN`]: https://www.php.net/manual/en/ini.core.php#ini.zend.exception-string-param-max-len 622 | 623 | [`PHP_ZEND_SCRIPT_ENCODING`]: https://www.php.net/manual/en/ini.core.php#ini.zend.script-encoding 624 | 625 | [`PHP_ZEND_DETECT_UNICODE`]: https://www.php.net/manual/en/ini.core.php#ini.zend.detect-unicode 626 | 627 | [`PHP_PCOV_ENABLED`]: https://github.com/krakjoe/pcov#configuration 628 | 629 | [`PHP_SPX_DATA_DIR`]: https://github.com/NoiseByNorthwest/php-spx?tab=readme-ov-file#configuration 630 | 631 | [`PHP_SPX_HTTP_ENABLED`]: https://github.com/NoiseByNorthwest/php-spx?tab=readme-ov-file#configuration 632 | 633 | [`PHP_SPX_HTTP_KEY`]: https://github.com/NoiseByNorthwest/php-spx?tab=readme-ov-file#configuration 634 | 635 | [`PHP_SPX_HTTP_IP_WHITELIST`]: https://github.com/NoiseByNorthwest/php-spx?tab=readme-ov-file#configuration 636 | 637 | [amqp]: http://pecl.php.net/package/amqp 638 | 639 | [apcu]: http://pecl.php.net/package/apcu 640 | 641 | [ast]: https://github.com/nikic/php-ast 642 | 643 | [ds]: https://pecl.php.net/package/ds 644 | 645 | [event]: https://pecl.php.net/package/event 646 | 647 | [grpc]: https://pecl.php.net/package/grpc 648 | 649 | [igbinary]: https://pecl.php.net/package/igbinary 650 | 651 | [imagick]: https://pecl.php.net/package/imagick 652 | 653 | [imap]: https://pecl.php.net/package/imap 654 | 655 | [mcrypt]: http://pecl.php.net/package/mcrypt 656 | 657 | [memcached]: http://pecl.php.net/package/memcached 658 | 659 | [mongodb]: http://pecl.php.net/package/mongodb 660 | 661 | [newrelic]: http://download.newrelic.com/php_agent/release 662 | 663 | [OAuth]: http://pecl.php.net/package/oauth 664 | 665 | [pcov]: https://pecl.php.net/package/pcov 666 | 667 | [opentelemetry]: https://pecl.php.net/package/opentelemetry 668 | 669 | [pdo_sqlsrv]: http://pecl.php.net/package/sqlsrv 670 | 671 | [protobuf]: https://pecl.php.net/package/protobuf 672 | 673 | [rdkafka]: https://pecl.php.net/package/rdkafka 674 | 675 | [redis]: http://pecl.php.net/package/redis 676 | 677 | [smbclient]: http://pecl.php.net/package/smbclient 678 | 679 | [sqlsrv]: http://pecl.php.net/package/sqlsrv 680 | 681 | [spx]: https://github.com/NoiseByNorthwest/php-spx 682 | 683 | [uploadprogress]: https://pecl.php.net/package/uploadprogress 684 | 685 | [uuid]: https://pecl.php.net/package/uuid 686 | 687 | [xdebug]: https://pecl.php.net/package/xdebug 688 | 689 | [xhprof]: https://pecl.php.net/package/xhprof 690 | 691 | [yaml]: https://pecl.php.net/package/yaml 692 | 693 | [latest]: https://github.com/wodby/pecl-php-uploadprogress/releases/tag/latest 694 | -------------------------------------------------------------------------------- /index.php: -------------------------------------------------------------------------------- 1 | "${PWD}/walter-command-stage" 7 | directory: $PWD 8 | only_if: test "${APP_ROOT}" = "/var/www/html" 9 | - name: Run shell script 10 | type: command 11 | command: sh script.sh 12 | directory: $PWD --------------------------------------------------------------------------------