我的php.ini是从哪里加载的?

zwi*_*ion 6 php ini docker

我正在使用php 5.6 运行此Linux debian:jessie的Docker实例

这是我的phpinfo的一部分:

在此处输入图片说明

如我们所见,php.ini应该位于

/usr/local/etc/php
Run Code Online (Sandbox Code Playgroud)

这就是我在/ usr / local / etc /中的内容

在此处输入图片说明

但是里面没有php.ini。

另一方面,我里面有php.ini

在此处输入图片说明

那么,究竟从哪里加载我的php.ini?

我们甚至没有运行php进程,但是php似乎还可以-在屏幕上显示phpinfo。

在此处输入图片说明

snn*_*snn 6

聚会有点晚了,但由于问题今天仍然相关,让我补充一个简短的答案:

官方 php:7 图像从/usr/local/etc/php文件夹中获取它们的设置。

# First log into the running container
$ docker exec -it «container_name» /bin/bash

# List folder content
$ ls /usr/local/etc/php

# Which outputs following line
conf.d  php.ini-development  php.ini-production
Run Code Online (Sandbox Code Playgroud)

如果需要,通过 conf.d 文件夹修改设置似乎是更好的选择,因为 xdebug 使用它。例如,您可以通过添加uploads.iniconf.d具有以下内容的文件夹来更改上传大小:

file_uploads = On
memory_limit = 64M
upload_max_filesize = 64M
post_max_size = 64M
max_execution_time = 600
Run Code Online (Sandbox Code Playgroud)

ini 指令的完整列表可以在https://www.php.net/manual/en/ini.core.php找到

  • 要快速创建自定义 ini 文件,只需在命令行中输入 ```printf 'memory_limit = 256M\n' >> /usr/local/etc/php/conf.d/uploads.ini \``` 并重新加载容器。它将创建 uploads.ini 并设置 memory_limit = 256M 值 (2认同)

Nic*_*500 5

让我们尝试一下作为答案:

它根本不存在,这意味着php将运行默认选项。

查看您的docker文件,它从一个“干净”的操作系统开始,并在其中安装Apache和PHP。但是它从未将PHP安装中的php.ini文件复制到/ usr / local / etc / php中。实际上,在第31和32行中,它创建了conf.d目录,仅此而已。

因此,我建议在docker文件的末尾添加代码以将php.ini-production复制到/usr/local/etc/php.ini,并根据需要进行编辑。或使用默认选项。


joh*_*g12 5

docker php 图像查找的默认 php.ini 文件是:

 /usr/local/etc/php/php.ini
Run Code Online (Sandbox Code Playgroud)

您可以在 phpinfo 函数的输出中看到这一点(只需在容器中运行“php -a”,然后在提示符处运行“phpinfo();”):

Configuration File (php.ini) Path => /usr/local/etc/php
Loaded Configuration File => /usr/local/etc/php/php.ini
Run Code Online (Sandbox Code Playgroud)

在使用 -v 选项运行容器时,您始终可以将此文件作为卷链接以获取自定义文件,例如:

docker run -v /local/path/to/php.ini:/usr/local/etc/php/php.ini [OPTIONS] IMAGE [COMMAND] [ARG...]
Run Code Online (Sandbox Code Playgroud)

我通常更喜欢使用它附带的默认 ini 文件,只需根据需要修改一些选项。如果您希望您的容器在构建期间执行此操作,您可以在 Dockerfile 中执行以下操作:

    RUN cp /usr/local/etc/php/php.ini-production /usr/local/etc/php/php.ini && \
        sed -i -e "s/^ *memory_limit.*/memory_limit = 4G/g" /usr/local/etc/php/php.ini
Run Code Online (Sandbox Code Playgroud)

上面的RUN命令会复制默认的生产ini文件,然后在ini文件中修改memory_limit并设置为4G。

我更喜欢这种方法,因为它允许使用自定义配置,因此容器在拉出时始终使用默认值,但您仍然可以选择通过传入卷来覆盖容器中的 ini 文件。