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


why laravel needs to chmod() a file or folder after being created or uploaded?

最近,我用Apache、PHP-FPM和MariaDB部署了一个web服务器配置。在我的同事部署了带有图片上传功能的laravel 4应用程序之前,它一直运行平稳。

问题是我已经禁用了PHP的chmod()函数以及system()等函数,而用于上传图像的脚本使用chmod()umask()(我的同事说这是默认行为)。

我知道有一个关于chmod在PHP中的危险的争论,像这个网站说它是无害的,这篇文章告诉服务器永远不应该是777

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

tl;博士
所以这带来了我的问题,这是真的,文件上传在laravel 4需要chmod()功能正常吗?,为什么?

编辑
对于那些想知道代码的人(该代码在vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/File/UploadedFile.php中找到):

$target = $this->getTargetFile($directory, $name);
if (!@move_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());

我不能说明Laravel背后的原因。它看起来确实是内置在他们的功能中,但是快速搜索这个,会在http://php.net/manual/en/function.move-uploaded-file.php下出现评论。

注释建议使用move_uploaded_file移动上传文件后,将权限设置为0600。如果web服务器和PHP进程在相同的期望用户下运行,这将是好的,但如果它依赖于组或在apachenobody等通用用户下运行的web服务器,则不是这样。所以我的假设是Laravel这样做是为了与后面的系统兼容,因为0600对用户意味着rw,不能访问组或其他人。