2016-10-16 3 views
1

Недавно я развернул конфигурацию веб-сервера с Apache, PHP-FPM и MariaDB. он работал гладко, пока мой коллега не развернул приложение laravel 4 с возможностью загрузки изображений.Почему laravel нуждается в chmod() файле или папке после создания или загрузки?

Проблема была у меня есть chmod() функция отключена в PHP вместе с system() и т.д. функций, в то время как скрипт для загрузки изображений использует chmod() и umask() (мой коллега сказал, что это поведение по умолчанию).

Я знаю, что есть дебаты по поводу опасности chmod Жека PHP как this site, который говорит он безвреден, и this post, что говорит о том, что сервер никогда не должен быть 777

, что я не понимаю, почему вам нужно до chmod() что-то, когда PHP-процесс может нормально читать загруженный файл даже без chmod()? он может даже создавать папки и удалять папки без chmod(), так как файлы и папки создаются с правильным разрешением для процесса PHP.

Т.Л., д-р
так, что приносит на мой вопрос, верно ли, что загрузка файлов в Laravel 4 необходимости chmod() функционировать должным образом? и почему?

редактировать
для тех, кто хотел бы знать код (этот код находится в vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/File/UploadedFile.php):

$target = $this->getTargetFile($directory, $name); 

if ([email protected]_uploaded_file($this->getPathname(), $target)) { 
    $error = error_get_last(); 
    throw new FileException(sprintf('Could not move file "%s" to "%s" (%S)', $this->getPathname(), $target, strip_tags($error['message']))); 
} 

@chmod($target, 0666 & ~umask()); 
+0

Можете ли вы показать код, чтобы мы знали, какую функцию в Laravel вы говорите конкретно. – Devon

+0

@ Devon хорошо да, я сделаю редактирование прямо сейчас – am05mhz

+0

Если вы прочитали сообщение, с которым вы связались, редактирование поясняет, что сам chmod не является опасным, если у них нет возможности выполнять загруженный скрипт через нечто вроде 'system() 'или' exec() '. – Devon

ответ

0

Я не могу говорить за доводами Laravel за этим. Похоже, что он встроен в их функциональность, но быстрый поиск по этому поводу вызвал комментарии под номером http://php.net/manual/en/function.move-uploaded-file.php.

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

+0

Хмм, это довольно странно, как это не упоминалось в документе, но пользователи сообщили об этом, возможно, это была ошибка. Я буду играть на нем и решить, что делать, благодаря кучу. – am05mhz