为什么laravel在创建或上传后需要chmod()文件或文件夹?

时间:2016-10-16 19:28:01

标签: php laravel chmod

最近,我已经部署了Apache,PHP-FPM和MariaDB的Web服务器配置。它运行顺利,直到我的同事在其上部署laravel 4应用程序并具有图像上传功能。

问题是我已禁用PHP的(?:(?![\u0009-\u002F\u003A-\u0040])[a-zA-Z\u006E-\u0302\u006D-\u0302\u004A-\u030C'0-9-])功能以及chmod()等功能,而上传图片的脚本使用system()chmod()(我的同事说这是是默认行为。)

我知道有一个关于umask() PHP和this site的危险的辩论,它告诉它是无害的,this post告诉服务器永远不应该是777

我不明白的是,即使没有chmod,当PHP进程可以正确读取上传的文件时,为什么还需要chmod()?它甚至可以创建文件夹并删除没有chmod()的文件夹,因为这些文件和文件夹是使用正确的PHP进程权限创建的。

TL;博士
所以我想问一下,在laravel 4中上传的文件是否需要chmod()才能正常运行?为什么?

修改
对于那些想要了解代码的人(此代码可在chmod()中找到):

vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/File/UploadedFile.php

1 个答案:

答案 0 :(得分:0)

我无法代表Laravel背后的推理。它确实看起来像是内置在他们的功能中,但快速搜索它会在http://php.net/manual/en/function.move-uploaded-file.php下提出评论。

评论建议在使用move_uploaded_file移动上传的文件后,权限设置为0600.如果Web服务器和PHP进程在同一个用户下运行,则可以正常运行,但如果它依赖于组或者在apachenobody等通用用户下运行的网络服务器。所以我的假设是Laravel为了与后者系统兼容而这样做,因为0600对用户来说意味着rw并且无法访问该组或其他人。