我在php中创建了一个简单的上传脚本,它接受从表单提交的文件并将其放在所需的目录中。问题在于,出于某种原因,当您尝试在浏览器中显示此文件时,服务器会回复403 - 禁止消息。事实上,我修改了脚本,因此它首先从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应用程序”执行