从哪里加载我的php.ini?

时间:2017-11-13 19:36:57

标签: php docker ini

我使用php 5.6运行此Docker instance of a linux debian:jessie

这是我的phpinfo的一部分:

enter image description here

我们可以看到php.ini应位于

/usr/local/etc/php

这就是我在/ usr / local / etc /

中的内容

enter image description here

但是里面没有php.ini。

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

enter image description here

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

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

enter image description here

4 个答案:

答案 0 :(得分:3)

试试这个答案:

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

查看您的docker文件,它从“干净”的操作系统启动,在其中安装Apache和PHP。但它永远不会将PHP安装中的php.ini文件复制到/ usr / local / etc / php中。实际上在第31行和第32行中它创建了conf.d目录,但就是它。

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

答案 1 :(得分:3)

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

 /usr/local/etc/php/php.ini

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

Configuration File (php.ini) Path => /usr/local/etc/php
Loaded Configuration File => /usr/local/etc/php/php.ini

使用-v选项运行容器时,您始终可以将该文件链接为一个卷以获取自定义文件,

docker run -v /local/path/to/php.ini:/usr/local/etc/php/php.ini [OPTIONS] IMAGE [COMMAND] [ARG...]

我通常更喜欢使用它随附的默认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命令将复制默认的生产ini文件,然后修改ini文件中的memory_limit并将其设置为4G。

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

答案 2 :(得分:2)

聚会晚了一点,但是由于问题在今天仍然很重要,让我补充一个简短的答案:

正式的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

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

file_uploads = On
memory_limit = 64M
upload_max_filesize = 64M
post_max_size = 64M
max_execution_time = 600

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

中找到

答案 3 :(得分:0)

简短的回答是你不需要一个。如果您遗失或想要添加扩展程序,可以通过docker-php-ext-installdocker-php-ext-enable在Dockerfile中执行此操作。

大多数常见的,你可以简单地执行启用,例如mbstring,但对于一些不太常见的启用,你可能必须首先运行pecl或者某些东西来获取包。看看this Docker documentation page for more information on php extensions