最近,我已经部署了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 { p>
我不明白的是,即使没有chmod
,当PHP进程可以正确读取上传的文件时,为什么还需要chmod()
?它甚至可以创建文件夹并删除没有chmod()
的文件夹,因为这些文件和文件夹是使用正确的PHP进程权限创建的。
TL;博士
所以我想问一下,在laravel 4中上传的文件是否需要chmod()
才能正常运行?为什么?
修改
对于那些想要了解代码的人(此代码可在chmod()
中找到):
vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/File/UploadedFile.php
答案 0 :(得分:0)
我无法代表Laravel背后的推理。它确实看起来像是内置在他们的功能中,但快速搜索它会在http://php.net/manual/en/function.move-uploaded-file.php下提出评论。
评论建议在使用move_uploaded_file移动上传的文件后,权限设置为0600.如果Web服务器和PHP进程在同一个用户下运行,则可以正常运行,但如果它依赖于组或者在apache
或nobody
等通用用户下运行的网络服务器。所以我的假设是Laravel为了与后者系统兼容而这样做,因为0600对用户来说意味着rw并且无法访问该组或其他人。