PHP在Windows IIS上传的图片无法访问的解决方法_win服务器

PHP在Windows IIS上传的图片无法访问的解决方法

首先登录到网站后台进行了测试发现上传的图片在确实浏览器打不开且出现了无法访问的错误信息:“ 401 - 未 授权: 由于凭据无效,访问被拒绝。”

然后又测试了该服务器上其他几个php项目发现也出现了一样的错误: 图片上传成功,但浏览器没有权限访问。
因为测试的几个php系统是不一样的,有thinkphp,wordpress,百度ueditor编辑器。
所以这几个系统同时出现问题的概率实在是太小了,所以基本上排除了程序的bug,且看到上面的错误就知道文件是存在的只是没有访问的权限,于是登录到远程桌面进入服务器找到上传的图片目录并发现了测试的图片,说明图片是上传成功的。
既然之前上传的图片可以访问且图片也上传成功了,那为什么新上传的图片却不能访问了呢?
于是查看上传目录,目录的权限已经包含"Everyone",目录应该也没有问题(之前上传的图片都可以访问)

然后一看测试的图片属性傻眼了,原来图片的属性中并不包含 "Everyone"项这跟上传的目录的权限不相符啊( 如果在某个目录下新建文件,那么新建的文件是继承该目录的权限的 )

看到这我就想不明白了,既然目录的权限有 "Everyone"项那么上传的图片的权限也应该继承父类的权限才对,所以好长时间也没有想明白这其中的原因,因此也不知道该如何下手解决,只是在网络上漫无目的看有没有类似的问题,并按照网站的说明进行尝试。

最后在 windows下使用IIS配置的PHP无法上传文件的解决方法 这篇文章的帮助下成功解决了该问题

问题总结:
在Windows平台下如果PHP使用的是IIS的话那么php在上传文件时是先将文件上传到一个临时目录下的
(该配置项可以在php.ini的" upload_tmp_dir "里进行配置,由于我们的服务器并没有进行过配置 ,所以php将使用系统的临时目录"C:\Windows\Temp" )。

然后PHP再将临时目录中上传的文件再移动到你指定的目录中去,这样就存在一个问题,即Temp目录下默认的权限是没有相应的IIS访问权限的(windows默认配置),当文件上传到该目录时那么上传的文件默认是继承了Temp目录的权限,而PHP再将文件文件移到指定的目录时,被移动的文件并不会继承移动后所在的目录权限,从而导致从浏览器访问被移动的文件时,因为该文件没有相应的权限(IIS访问权限)而无法访正常问,也就出现了文件上传成功但浏览器访问时出现 “ 401 - 未授权: 由于凭据无效,访问被拒绝。 ”的问题。

Windows默认的权限配置

更改后的权限配置(必须包含 IUSER和IIS_IUSERS 权限或 Everyone )

解决办法:
给php.ini中的upload_tmp_dir项设置一个临时目录并做好相应的权限( 推荐方法 )
将"C:\Windows\Temp"目录添加相应的权限
重要说明:
php.ini 的upload_tmp_dir 目录权限必须要包含 IUSER和IIS_IUSERS 权限
或Everyone

以上就是本文的全部内容,希望对大家的学习有所帮助。

时间: 2024-11-03 00:53:47

PHP在Windows IIS上传的图片无法访问的解决方法_win服务器的相关文章

解决PHP在Windows IIS 上传的图片无法访问的问题

  1.我们先用鼠标点击电脑中的开始菜单,就是左下角的图标,然后点击里面的控制面板工具,点击就可以弹出控制面板窗口.   2.在弹出的控制面板窗口中,我们看到里面有很多的图标功能可以使用,我们这个时候就需要找到的是安全中心,点击了以后就看到里面有一个选项为windows 防火墙点击选中. 3.我们点击了以后,弹出一个新的窗口然后在进行设置,我们看到窗口中有一个名为关闭的选项,大家选择关闭选项点击,然后保存关闭窗口即可. 上面的三个步骤就是可以解决我们上网的时候弹出防火墙的提示窗口的解决技巧,大家

jsp fckeditor 上传中文图片乱码问题的解决方法_网页编辑器

经过我修改ConnectorServlet.java和SimpleUploaderServlet.java两个文件,重新生成fckeditor-java-2.3.jar包,要解决所有的乱码问题,有3部要修改1.修改Web容器的字符编码,如果Web容器用的是Tomcat,则修改conf/server.xml文件,在两个Connector中添加"URIEncoding="utf-8"",我这里用的是utf-8编码,所以修改成utf-8,若项目是gb2312编码,则设置为

win2008 iis7 上传大文件限制的真正解决办法_win服务器

iis7 上传大文件限制的真正解决办法 修改IIS_schema.xml这个文件要先获得这个文件的控制权; 进入目录C:\Windows\System32\inetsrv\config\schema,修改文件IIS_schema.xml 权限: 进入IIS_schema.xml文件权限修改,选择"高级" 选择"所有者" 选中 administrators 确定 再进入权限编辑,修改administrators 完全控制. 再去掉IIS_schema.xml的只读属性

IIS 7.5 部署ASP.NET失败的解决方法_win服务器

    近日在win7的IIS7.5上部署ASP.NET4.0 程序时,发现浏览网页都出现错误代码为"503"的错误,但是我已经将对应用程序部署到IIS上了,怎么会出现找不到页面的情况呢?开始以为是ASP.Net 环境没有安装到IIS7.5中,执行了几遍ASPNET_REGIIS -i都还是一样,结果查看ASP.NET应用程序使用的[应用程序池]-DefaultAppPool停止了,于是我马上启动,但是马上它有恢复成[停止]状态:       于是,查看[windows事件查看器]发现

针对aspx木马可以读取iis站点信息,跨网站目录的临时解决方法_win服务器

1.aspx 木马文件可以在asp.net空间中实现读取进程.iis信息.跨站.执行cmd命令. 解决方法 1.对于每个网站建立一个用户.并将用户放入guest组,给站点写入.读取的权限.并在iis上允许匿名访问. 2. 复制代码 代码如下: <system.web> <identity impersonate="true" /> </system.web> 将以上代码复制到C:\WINDOWS\Microsoft.NET\Framework\v2.

IIS ADMIN不能启动,提示错误代码-2146893818的解决方法_win服务器

主要错误原因是因为'C:\Documents and Settings\All Users\Application Data\Microsoft\Crypto\RSA\MachineKeys' 文件夹下keys被破坏了,修改一下名称就可以了. 该文件夹默认为隐藏,你可以直接在我的电脑里输入该路径. 在文件夹下至少有两个文件,如下格式: c23***********************_MachineGUID 7a4***********************_MachineGUID 当出现

Windows 2008 R2服务管理器刷新失败的解决方法_win服务器

这几天在做实验,一台服务器安装了Windows 2008 R2 X64系统,当我想安装服务器角色的时候,发现无法安装,出现了"服务器刷新失败",点击它弹出对话框提示"刷新服务器管理器时出现意外错误: 异常来自 HRESULT:0x800F0818.有关详细信息,请参阅事件日志: 诊断.事件查看器.应用程序和服务日志.Microsoft.Windows.服务器管理器.操作" 然后我就查看日志,日志内容如下: 无法发现系统的状态.找到一个意外的异常:System.Run

IIS部署asp.net报404错误的解决方法_win服务器

1).所建网站->(右键)权限->"ASP.NET计算机帐户"是否已添加. 2).所建网站->(右键)属性->ASP.NET选项卡->版本是否为2.0,不是则修改为2.0; 3).IIS->WEB服务扩展中->ASP.NETV2.0是否被禁止,若为禁止状态则启动; 4).所建网站->(右键)属性->主目录->执行权限是否为:纯脚本;应用程序池是否设置: 5).所建网站->(右键)属性->ASP.NET选项卡->

iis加载不到php.ini的解决方法_win服务器

查看文件夹c:\windows是否存在文件php.ini 如果不存在到php安装目录下找到文件php.ini-dist复制到c:\windows目录下并修改文件名php.ini 如果存在查看php.ini的权限everyone是否有读取\执行权限如果没有添加上