热烈祝贺台州维博网络的站长论坛隆重上线!(2012-05-28)    热烈庆祝伟大的祖国60周年生日 点击进来我们一起为她祝福吧(2009-09-26)    站长论坛禁止发布广告,一经发现立即删除。谢谢各位合作!.(2009-08-08)    热烈祝贺台州网址导航全面升级,全新版本上线!希望各位一如既往地支持台州网址导航的发展.(2009-03-28)    台州站长论坛恭祝各位新年快乐,牛年行大运!(2009-01-24)    台州Link正式更名为台州网址导航,专业做以台州网址为主的网址导航!(2008-05-23)    热烈祝贺台州Link资讯改名为中国站长资讯!希望在以后日子里得到大家的大力支持和帮助!(2008-04-10)    热烈祝贺台州Link论坛改名为台州站长论坛!希望大家继续支持和鼓励!(2008-04-10)    台州站长论坛原[社会琐碎]版块更名为[生活百科]版块!(2007-09-05)    特此通知:新台州站长论坛的数据信息全部升级成功!">特此通知:新台州站长论坛的数据信息全部升级成功!(2007-09-01)    台州站长论坛对未通过验证的会员进行合理的清除,请您谅解(2007-08-30)    台州网址导航|上网导航诚邀世界各地的网站友情链接和友谊联盟,共同引领网站导航、前进!(2007-08-30)    禁止发广告之类的帖,已发现立即删除!(2007-08-30)    希望各位上传与下载有用资源和最新信息(2007-08-30)    热烈祝贺台州站长论坛全面升级成功,全新上线!(2007-08-30)    
便民网址导航,轻松网上冲浪。
台州维博网络专业开发网站门户平台系统
您当前的位置: 首页 » PHP/Perl编程 » 解决PHP上传is_uploaded_file的tmp_name错误

解决PHP上传is_uploaded_file的tmp_name错误

论坛链接
  • 解决PHP上传is_uploaded_file的tmp_name错误
  • 发布时间:2012-06-06 16:31:33    浏览数:5963    发布者:tzlink    设置字体【   
今天帮朋友配置一个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,所以不能提供更高深的解释:-) 我们共同研究吧。

      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组的除完全控制以及最后三个以外的所有权限,其他组权限默认。
娱乐休闲专区A 影视预告B 音乐咖啡C 英语阶梯D 生活百科
网页编程专区E AMPZF HTMLG CSSH JSI ASPJ PHPK JSPL MySQLM AJAX
Linux技术区 N 系统管理O 服务器架设P 网络/硬件Q 编程序开发R 内核/嵌入
管理中心专区S 发布网址T 版主议事U 事务处理