Я использую CentOS 7 и PHP 7.2.5. Я не могу получить move_uploaded_file (), file_put_contents () или exec ('cp /tmp/test.txt /var/www/html/test.txt', $ out); работать в любой папке кроме / tmp. / var / www / html принадлежит apache: apache и только для разрешений 755. Я пробовал 777, и я все еще получаю отказано в разрешении. Он застрял в папке systemd-private-123abc-httpd.service-11cba / tmp /, но я отключил PrivateTmp для httpd.
Загруженный файл загружен, и все хорошо, пока я не попытаюсь переместить его. Я могу переместить его в другое имя файла в каталоге / tmp, но не могу переместить его в любой другой каталог.
Все это прекрасно работает:
file_put_contents('/tmp/test.txt', 'TTTTTEEEESSSSTTTTT!!!!');
exec('cp /tmp/test.txt /tmp/test2.txt', $out);
move_uploaded_file($_FILES['fileToUpload']['tmp_name'], '/tmp/'.$file);
Все это выдает предупреждение: ***: не удалось открыть поток: отказано в разрешении
file_put_contents('/var/www/html/test.txt', 'TTTTTEEEESSSSTTTTT!!!!');
move_uploaded_file($_FILES['fileToUpload']['tmp_name'], '/var/www/html/'.$file);
exec('cp /tmp/test.txt /var/www/html/test2.txt', $out);
И снова, / var / www / html принадлежит apache: apache и имеет права доступа 755. Я полностью сбит с толку. Весь этот код прекрасно работал на старом сервере, но абсолютно отказывался работать на новом сервере. Я посмотрел и посмотрел, но если ответ там, он заблокирован слишком много ответов о стандартных разрешениях файла / каталога.
exec ('cp / ... на самом деле не дает предупреждений или ошибок. Он работает или не работает. Он может копировать в каталог / tmp, но нигде больше.