|

楼主 |
发表于 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组的除完全控制以及最后三个以外的所有权限,其他组权限默认。
|
|