查看: 4535|回复: 1

解决PHP上传is_uploaded_file的tmp_name错误

[复制链接]
发表于 2012-6-6 16:31:33 | 显示全部楼层 |阅读模式
台州网址导航
今天帮朋友配置一个PHP的程序,里面有一些上传图片的功能,统统的不能用了,上传的时候提示没有此文件或者文件格式不正确。

icech查看了一下代码,发现是在
!move_uploaded_file($_FILES['upphoto']['tmp_name']
这里返回的是false值

查看了半天终于解决了这个问题。下面icech说说自己解决的思路。

1、临时文件权限的问题

因为朋友的服务器是IIS里面配置的PHP,所以要考虑到权限的问题。

找到PHP安装目录中php.ini文件,查找upload_tmp_dir,里面的值为“"C:\temp”。配置这个目录的权限,就是将IIS的匿名访问用户的可写和修改权限付给这个目录。

2、返回路径的问题

还是php.ini文件的配置问题,找到magic_quotes_gpc一项,如果是Off就改成On。因为打开了magic_quotes_gpc参数的PHP环境会自动对GET/POST/Cookie添加addslashes效果。

基本检查这两点就可以了,因为icech也是初学PHP,所以不能提供更高深的解释:-) 我们共同研究吧。

台州维博网络(www.tzweb.com)专门运用PHP+MYSQL/ASP.NET+MSSQL技术开发网站门户平台系统等。
 楼主| 发表于 2012-6-6 16:32:04 | 显示全部楼层
台州网址导航
PHP无法上传文件问题的解决

今天小杰反映服务器有问题,具体表现为ECShop中无法上传图片等,一开始还以为是FCKEditor的问题,但是发现非FCKEditor中的上传功能也都无法使用,但是都没有报错(可能是ECShop屏蔽了错误)。

于是这个问题又回到了服务器上。。。首先查看了上传路径的权限,一切正常,IIS用户有完全控制权限,所以应该不存在文件夹不可写的问题。

然后去事件查看器中翻日志,发现有很多Zend Optimizer的错误信息,马上就测试了一下,进行上传的操作后,就出现一条Zend Optimizer的错误信息,问题好像有点线索了。

错误信息有2条:

1、事件 ID ( 5 )的描述(在资源( Zend Optimizer )中)无法找到。本地计算机可能没有必要的注册信息或消息 DLL 文件来从远程计算机显示消息。您可能可以使用 /AUXSOURCE= 标识来检索词描述;查看帮助和支持以了解详细信息。下列信息是事件的一部分: Unable to write base address, 拒绝访问。

2、事件 ID ( 5 )的描述(在资源( Zend Optimizer )中)无法找到。本地计算机可能没有必要的注册信息或消息 DLL 文件来从远程计算机显示消息。您可能可以使用 /AUXSOURCE= 标识来检索词描述;查看帮助和支持以了解详细信息。下列信息是事件的一部分: C:WINDOWSTEMPZendOptimizer.MemoryBase@sitepool3@262916123, 拒绝访问。

于是百度去查阅了一下Unable to write base address,找到了很多几乎一样的解决方法:

例如:http://www.anyliz.com/blog/article.asp?id=304 中写道:

解决办法:
1.修改C:WINDOWSTemp目录的访问权限,使Zend可以对目录进行修改
一般添加IIS_WPG和Network Service的写入权限就够了
2.有可能在C:WINDOWStemp目录下找不到该文件,方法是新建文件名为ZendOptimizer.MemoryBase@SYSTEM和ZendOptimizer.MemoryBase@NETWORK SERVICE(如果没有)空文件即可
3.php.ini文件中设置upload_tmp_dir = “c:windowstemp”(注意=两边的空格)
4.还有可能就是IIS没有读取ZEND目录的权限,为C:Program FilesZendOptimizer-2.6.2libOptimizer-2.6.2目录和C:Program FilesZendOptimizer-2.6.2libZendExtensionManager.dll文件添加IIS_WPG读取权限(注意版本不同可能路径也有所不同)

按照他的解决方法,我开始进行排错。发现第1个方法无效,加入了IIS_WPG和Network Service的写入权限并重启IIS服务无效。第二个方法也尝试了一下,同样无效。

第三点给了我点启发,由于php.ini默认是未指定upload_tmp_dir的,所以应该默认的路径就是环境变量中的C:WindowsTemp,因此对这个文件夹的权限进行检查,给予Everyone进行诊断,有效!所以可以看出是Temp文件夹的权限不足,而IIS_WPG和Network Service前面已经试过,均无效,剩下看到还有个Users组,因此,尝试了一下,给予完全控制,果然有效。然后开始对每个权限进行测试,最后测试下来全部都要给~晕。。然后就去掉了完全控制和最后三个权限。第四点就不用看了,Zend我本来就是这样给的权限。

总结一下最终解决方法:

给予C:WindowsTemp目录Users组的除完全控制以及最后三个以外的所有权限,其他组权限默认。
台州维博网络(www.tzweb.com)专门运用PHP+MYSQL/ASP.NET+MSSQL技术开发网站门户平台系统等。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

网站推广
关于我们
  • 台州维博网络(Tzweb.com)拥有多年开发网站平台系统门户手机客户端等业务的成功经验。主要从事:企业网站建设、网站程序开发、手机APP客户端、平面设计、主机域名、虚拟空间、网站推广、网站优化、后期维护等服务,满足不同企业公司的需求,是台州地区领先的网络技术服务商!

Hi,扫描关注我

Copyright © 2005-2018 站长论坛 All rights reserved

Powered by 站长论坛 with TZWEB Update Techonolgy Support

快速回复 返回顶部 返回列表