我正在构建一个 PHP/Docker Web 应用程序。我有一个 HTML 表单,用户可以在其中上传图像并将其存储到本地目录中。我正在使用 W3Schools 文件上传示例。
但是,当尝试通过表单上传时,我收到“权限被拒绝”错误:警告:move_uploaded_file(image/listingsorchid.jpg):无法打开流:/var/www/html/process-listing.php中的权限被拒绝59号线。
我正在使用 php-docker-simple_php 图像。我使用
docker exec -it 9381479b00e6 sh
和 whoami
来确认映像正在以 root 身份运行。 file_uploads = On
在我的本地 php 安装中启用。
我的 Dockerfile 如下所示:
FROM php:7.4-apache
RUN docker-php-ext-install mysqli
我的 docker-compose 看起来像这样:
version: '3.1'
services:
php:
build:
context: .
dockerfile: Dockerfile
ports:
- 80:80
volumes:
- ./src:/var/www/html/
db:
image: mysql
command: --default-authentication-plugin=mysql_native_password
restart: always
environment:
MYSQL_ROOT_PASSWORD: example
volumes:
- mysql-data:/var/lib/mysql
adminer:
image: adminer
restart: always
ports:
- 8080:8080
volumes:
mysql-data:
此线程中的一个用户建议创建一个 uploads.ini 来设置 file_uploads = On
并将其包含在 Dockerfile 中。我已经创建了 uploads.ini,但我不确定如何将其实现到我的 Dockerfile 中或者它是否有效。我应该怎么做才能解决这个错误?
COPY ./path/to/uploads.ini /usr/local/etc/php/conf.d/
您的完整 Dockerfile 将如下所示:
FROM php:7.4-apache
RUN docker-php-ext-install mysqli
COPY ./src /var/www/html/
COPY ./path/to/uploads.ini /usr/local/etc/php/conf.d/
这会将 ini 文件复制到正确的位置,并将覆盖原始配置。如果您不想修改原始文件或维护副本,这非常有用。您应该能够通过将
file_uploads
添加到 PHP 来查看
On
是否设置为
phpinfo()
。