phpwind上传错误,HTTP Error 500 (I/O Error:[IOErrorEvent type=quot;ioError")

[ 2016-07-02 15:17:13 | 作者: admin ]
字号: | |
p.s. 有可能是下面的原因

附件上传中出现IOERROR的问题已经基本找到
新版的flash对url的格式要求更加严格了,在js/upload.js 文件中
var flashvar = 'url=' + getObj('headbase').href + '/job.php?' + 'action=mutiupload;mutiupload=' + (allowmutinum - mutiupload);
job.php 前面多了一个斜杠,去掉斜杠就好了



有可能是flash版本问题
有可能是浏览器问题
开启图片水印
服务器上的临时文件夹



为我这份执着的心,本帖申请加精吧!找了遍了五大洲 四大洋的结果

今天从早上百度到现在 PW官方也翻了个底朝天 到现在终于解决了 ,官方的方法都没用

因为 大部分服务器用的集成环境所以不会出现这个问题!

我用的IIS7.5+php5.3.10+mysql+FastCGI+Zend Optimizer

现在说一下这是什么原因吧

服务器上使用Apache2+PHP正常运行,换成IIS+PHP,先后出现了php.ini的环境变量无法读取,php中验证码无法显示的问题,如今又有人反应无法上传图片的问题。 内容来自www.hymhw.com


从IIS替换Apache2的过程仅仅是开启IIS,关闭Apache2,其它的没什么变化,但是却发生了如此多的差异,看样子IIS支持PHP还是有很多要进行修改的。 copyright www. hymhw.com





分析:
因为一开始安装好windows server 2008 R2 和IIS这些后 打开网站一切都可以 伪静态也可以,这样我就以为没问题了,后来有会员告诉我说上传不了图片,我才试了一下原来如此
 
上传图片提示 弹出:HTTP Error 500
然后弹出:I/O Error:[IOErrorEvent type=quot;ioError"bubbles=false cancelable=false eventPhase=2 text=quot;Error#2038"
 
 
然后我以为是PW程序出错,在官方找了个底朝天方法很多,但一一的尝试 全部没用,后来发帖子问题,楼上官方给一个连接来,那个连接不用他发我早就看了好多遍了
没办法了,重新安装一套全新的PW87看看,本地外网均上传不了
 
然后百度找IIS 上传下载限制
修改IIS配置文件“无效”
然后开始自己写一个最最简单的上传代码,一打开直接报:(HTTP 500 内部服务器错误

一步步排查,后来以为是php上传的临时目录不可写,但不知道临时目录在那儿呀,干脆把所有的盘都设置为可写可读,经常测试还是无效,还是报错

问题出在那儿呢?

后来才想到 "临时目录"

  那php上传的临时目录 是php.ini中有设置的呀,打开来看看,一看竟然是空的 还有注释 也就是说没有设置临时目录

那我就来给他设置一个upload_tmp_dir=“D:\php\tmp”

然后把d盘php目录下的tmp文件夹设置为可读写;

保存php.ini 重启IIS 上传图片看看

神奇:所有的网站上传均可以了


 
 
根据上面的描述,我怀疑问题出在IIS的权限配置上,IUSR_MACHINE的帐户对upload没有写入的权限,于是进行权限修改,IIS下的权限,NTFS下的权限都进行修改,但是终究都没用,查找网络上的资料也没有相应的,对上传页面进行测试,流程为:


=========================================================================
来自网络答案:
if (!@move_uploaded_file($f["tmp_name"], $dest_dir.'/'.$fileName)) header("HTTP/1.0 404 Not Found");
这句话的时候问题出现了,不能上传,查找上下文,一直没发现tmp_name的变量,不过看意思是先把文件上传到一个临时文件,再挪动到目的位置,那这个tmp位置在哪里呢?是不是这个位置不可写,才导致了无法上传文件?
查找网上资料,发现php.ini下面有2个地方关于上传的配置:
file_uploads = On 这里设置是否允许HTTP上传,默认应该为ON的
;upload_tmp_dir= 这里设置上传文件存放的临时位置 内容来自零度科技
网上对于这2个地方的相关资料有:
I try to set up file uploading under IIS 7 and PHP 5.
First problem was to set 2 variables in php.ini 内容来自www.00isp.com
file_uploads = On//这里是说php.ini文件这个地方设置成On
upload_tmp_dir = "C:\Inetpub\wwwroot\uploads"//这个路径就是自己设置的上传文件临时存储路径
For some reasons such directory name works,
but "upload_tmp" won't work.
The second problem was to set correct user rigths for upload folders where you try to save your file. I set my upload folder rights for the "WORKGROUP/users" for the full access. You may experiment by yourselves if you not need execute access, for example. 内容来自www.00host.cn
我的php.ini中upload_tmp_dir是被注释的,没有启用,更没有设置,可是为什么Apache2却可以正常上传呢?难道问题真的出在这里?
解决:
新建一个文件夹做临时上传目录,按照上面的英文说明修改php.ini中相应的那2项,把临时上传目录upload_tmp_dir设置成刚才建立的文件夹,把该文件夹的权限赋予“IUSR_计算机名”用户可写,重新启动IIS,上传试试,问题真的就这样解决了。
最终的分析答案: 零度科技提供技术支持
上面的内容写于09年,但是现在2010年7月我新增一台服务器,又出现了这个问题,同时再次按照上面的解决方法实施,在操作的过程中大概是由于哪里出了错,竟然没有成功,不得不抽出点时间来研究具体原因,找到了最终产生这个问题的原因如下。
无法上传文件,不代表所有文件都无法上传,因为我的一个网站,flash调用fwrite()传头像之类的成功了,但是调用@move_uploaded_file($f["tmp_name"], $dest_dir.'/'.$fileName)这样的函数传照片的时候仍旧无法上传。
经过我的分析,原因是由于fwrite()是传的二进制文件,而move_uploaded_file()传的是文本文件,而windows操作系统是区分这2种文件的 [参考php手册fwrite()函数的说明],这也就是说这2种不同的文件在php环境下上传时所存储的临时上传目录是不同的,由于在配置IIS环境下的PHP的时候,设置的临时目录为E:\tmp,设置该目录的iusr用户可写,二进制文件即可上传,所以我怀疑该目录就是二进制文件上传临时文件的存储位置,那么move_uploaded_file()传的文本文件的临时文件存储位置在哪里呢?其实就是在上面的那段英文里面,upload_tmp_dir设置的路径就是了,但是我的几台服务器中,每台服务器的这个设置的值都是被注释掉的“no value”,为什么有的服务器可以上传,而有的服务器不可以上传呢?这也就回到了以前我提出的问题,为什么Apache2可以上传而iis不可以上传呢?
这次我再次分析upload.php文件,分析其中造成该故障的代码具体内容如下:
// 检查是否有文件上传
if (! $_FILES['upload'.$num]['name'] == ""){if ($_FILES['upload'.$num]['size'] < $max_size) {echo "文件上传路径:".$location.$_FILES['upload'.$num]['name'];echo "文件临时文件名:".$_FILES['upload'.$num]['tmp_name'];move_uploaded_file($_FILES['upload'.$num]['tmp_name'],$location.$_FILES['upload'.$num]['name']) or $event = "Failure";}else {$event = "File too large!";}
[最后修改由 admin, 于 2016-07-02 15:51:29]
评论Feed 评论Feed: http://blog.xg98.com/feed.asp?q=comment&id=2317

这篇日志没有评论。

此日志不可发表评论。