Ошибка move_uploaded_file PHP

Это частый вопрос, но я дважды безуспешно проверял предлагаемые решения.

ошибки PHP:

Warning: move_uploaded_file(images/img01.jpg): failed to open stream: Permission denied in /usr/share/nginx/html/media/test.php on line 28

Warning: move_uploaded_file(): Unable to move '/tmp/phpRvUCVx' to 'images/img01.jpg' in /usr/share/nginx/html/media/test.php on line 28

На сервере установлен nginx с php 7.3 (php-fpm)

Разрешения на папку загрузки:

 drwxrwxrwx.  2 nginx  nginx       6 Apr  5 03:11 images

Информация из ps aux | grep php

centos   24211  0.0  0.0 112708   980 pts/0    S+   16:01   0:00 grep --color=auto php
root     24674  0.0  0.6 285532 11452 ?        Ss   Apr04   0:04 php-fpm: master process (/etc/opt/remi/php73/php-fpm.conf)
nginx    24675  0.0  0.4 287740  8724 ?        S    Apr04   0:00 php-fpm: pool www
nginx    24676  0.0  0.4 287740  8720 ?        S    Apr04   0:00 php-fpm: pool www
nginx    24677  0.0  0.4 287740  8684 ?        S    Apr04   0:00 php-fpm: pool www
nginx    24678  0.0  0.5 287916  9232 ?        S    Apr04   0:00 php-fpm: pool www
nginx    24679  0.0  0.5 287916  9308 ?        S    Apr04   0:00 php-fpm: pool www
nginx    25107  0.0  0.4 287740  8716 ?        S    Apr04   0:00 php-fpm: pool www

Информация из ps aux | grep nginx

root     15041  0.0  0.1 125116  2324 ?        Ss   Apr04   0:00 nginx: master process /usr/sbin/nginx
nginx    15042  0.0  0.2 125956  5328 ?        S    Apr04   0:00 nginx: worker process
nginx    15043  0.0  0.2 125956  5328 ?        S    Apr04   0:00 nginx: worker process
nginx    24675  0.0  0.4 287740  8724 ?        S    Apr04   0:00 php-fpm: pool www
nginx    24676  0.0  0.4 287740  8720 ?        S    Apr04   0:00 php-fpm: pool www
nginx    24677  0.0  0.4 287740  8684 ?        S    Apr04   0:00 php-fpm: pool www
nginx    24678  0.0  0.5 287916  9272 ?        S    Apr04   0:00 php-fpm: pool www
nginx    24679  0.0  0.5 287916  9308 ?        S    Apr04   0:00 php-fpm: pool www
nginx    25107  0.0  0.4 287740  8716 ?        S    Apr04   0:00 php-fpm: pool www
centos   26097  0.0  0.0 112712   976 pts/0    S+   16:39   0:00 grep --color=auto nginx

Конфигурация для PHP-FPM

user = nginx
group = nginx
listen = /var/run/php73-fpm/php73-fpm.sock
listen.owner = nginx
listen.group = nginx

Что мне не хватает? Заранее спасибо.

0
задан 5 April 2019 в 20:42
1 ответ

У вас здесь несколько проблем, возможно, некоторые из которых вы представили сами, пытаясь решить исходную проблему.

Во-первых, ваш PHP-процесс, похоже, запущен как пользователь nginx. Это не была конфигурация по умолчанию и не рекомендуется. Вы должны позволить ему работать с собственным идентификатором пользователя, как это было изначально установлено.

Во-вторых, разрешение вашего каталога images позволяет всем пользователям писать в него. Очевидно, что это плохая идея, и ее никогда не следует делать, даже для «тестирования». Правильно установите права собственности и разрешения. Если вам когда-нибудь приходит в голову, что chmod 777 может вам помочь, помните, что вы идете по неправильному пути.

В-третьих, вы, кажется, разместили файлы своего веб-сайта в / usr / share / nginx / html . Вы не должны использовать этот каталог для своих файлов; он предназначен только для файлов по умолчанию, поставляемых с nginx. Вместо этого используйте каталог в / srv , например / srv / www . Также избегайте / var / www , который является еще одним каталогом, зарезервированным для файлов по умолчанию веб-сервера (обычно тех, которые поставляются Apache httpd).

Наконец, для непосредственной проблемы SELinux не разрешает nginx или php- fpm для записи в случайные каталоги. Вам нужно сообщить SELinux, что каталог и его содержимое должны быть доступны для записи, установив для него контекст по умолчанию httpd_sys_rw_content_t , а затем установив контекст всех существующих файлов. Например:

semanage fcontext -a -t httpd_sys_rw_content_t "/srv/www/wherever/images(/.*)?"
restorecon -rv /srv/www/wherever/images
5
ответ дан 4 December 2019 в 11:24

Теги

Похожие вопросы