Contents

IIS+PHP上传的图片没有访问权限

Contents

网站搬家到wimp,真是问题不断,刚刚解决了个,现在又遇到了个。写了一篇博文说说,发现上传的图片不能显示(对外提示500,对内提示URL重写错误),醉了

初步百度了一下,有两种可能,

  • 路径不对
  • 没有权限。

检查了路径,没问题,那就是权限的问题了。

找到这张图片,在属性-安全里-发现没有父目录uploads的Users用户的读取权限,

/IMG_1901.jpg
1
/IMG_1902.jpg
2

于是手动给添加个User用户权限,发现正常了,但是新上传的图片又不能访问。

一般上传的文件会继承父目录的权限,但是在这里上传的文件却没有继承父目录的权限,而且还多了个I开头的用户组

再次百度google找原因,原来是PHP在上传文件的时候,会先放在一个临时的文件夹里(这时会继承该文件夹的权限,所以多了个I开头的用户组)),然后再移动到指定文件夹

那么问题就出现在,上传的临时文件夹没有Users用户权限,移动的过程中不会继承新的父目录的权限,所以没有Users用户权限。

解决方法

既然知道了原因,那么该怎么解决呢,最简单的方法是指定PHP上传的临时文件夹为uploads的子目录

哀差闷具体的解决步骤如下

1.uploads下面新建了个phpUpLoadTemp文件夹,然后再属性-安全里添加IUSR用户组(这个是必须的,php.ini 的upload_tmp_dir 目录权限必须要包含 IUSR)

/IMG_1903.jpg
3

2.打开php.ini,查找upload_tmp_dir将前面的分号去掉 后面添加上phpUpLoadTemp文件夹的路径

upload_tmp_dir = "D:\xxxxx\www\wp-content\uploads\PHPupLoadTemp"

最后还需要注意一点:上传的文件名不能带有中文,否则会出现找不到的问题,原因不多说了,因为编码不同。