Назад | Перейти на главную страницу

Ошибка PHP move_uploaded_file

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

Это ошибки 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

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

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

Во-первых, кажется, что ваш 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