我在 php 中创建了一个简单的上传脚本,它获取从表单提交的文件并将其放在所需的目录中。问题是,由于某种原因,当您尝试在浏览器中显示此文件时,服务器会以 403 - Forbidden 消息进行回答。事实上,我修改了脚本,所以它首先从 tmp 文件夹复制文件,然后用不同的名称移动它:
copy($_FILES['photo']['tmp_name'],$new_file_name);
move_uploaded_file($_FILES['photo']['tmp_name'], 'm_'.$new_file_name);
所以如果我上传file.jpg,它会创建file.jpg(复制)和m_file.jpg(移动)。在服务器上,这两个文件位于同一个文件夹中,看起来相同,具有相同的权限、用户和组,除了 domain.com/file.jpg 显示图像并且 domain.com/m_file.jpg 返回 403 错误。
如果我禁用 nginx 并使其与 apache 一起工作,那么一切正常。我修改了nginx conf文件但没有什么奇怪的(实际上是使用默认配置)
更新: 奇怪的是,问题似乎只出现在 PHP 版本大于 5.3 并作为“由 nginx 提供的 fpm 应用程序”执行的配置中。因此,它适用于 5.3.3,但不适用于 php 5.5 或 7,除非您将其作为“Apache 提供的 fastCGI 应用程序”执行