iis配置php无法上传文件解决办法

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

   swf文件调用save.php上传文件---->swf文件对上传的文件进行重命名--->名字返回给save.php--->显示出最后的名字。

   现在的问题一直停留在swf对文件重命名的这里,一直没有到显示出最后的名字,并且swf文件不参与上传过程,那就只能在save.php文件中进行问题查找了,在该文件中进行测试,最后显示的名字所使用的变量为fileName,于是插入下面的语句进行测试:

   echo "fileName=2008*****.gif";

   这句话的作用就是使得fileName有值,save.php能正常显示,先把原来的语句一句一句的进行屏蔽测试,都正常的返回了,但是当测试到:
    if (mailto:!@move_uploaded_file($f[%22tmp_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

file_uploads = On           //这里是说php.ini文件这个地方设置成On

upload_tmp_dir = "C:Inetpubwwwrootuploads"    //这个路径就是自己设置的上传文件临时存储路径

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.

    我的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) { 
   1、 echo "文件上传路径:".$location.$_FILES['upload'.$num]['name'];
    2、echo "文件临时文件名:".$_FILES['upload'.$num]['tmp_name'];
    3、    move_uploaded_file($_FILES['upload'.$num]['tmp_name'],$location.$_FILES['upload'.$num]['name']) or $event = "Failure";
    } else {
     $event = "File too large!";
    }

   其中正常代码中第2句是不存在的,为了测试方便我加上来的,它的主要目的就是测试我的php.ini没有设置upload_dir_tmp的值的时候,上传的文件临时保存在哪里的,经过这个测试发现原来在不配置php.ini的upload_dir_tmp的值的时候,默认的存储位置是在C:windowstemp目录,并且临时文件是以.tmp为后缀存储的,该文件马上就会被删除,所以你想通过操作系统的文件修改搜索功能是无法找到的,也就无法找到upload_dir_tmp的默认路径是哪里。

   既然找到了upload_dir_tmp的默认路径了,那么修改c:windowstemp的访问权限,赋予IUSR_用户可写,重启动IIS Admin服务,上传文件,终于成功了。这就是为什么我的多台服务器upload_dir_tmp的值都为空的时候有的可传,有的不可传的原因。

时间: 2024-09-20 08:09:58

iis配置php无法上传文件解决办法的相关文章

网站空间无法使用swfupload上传文件解决办法

使用swfupload上传$_FILES变量一直为空 今天使用了万网的M3型虚拟主机,linux系统,apache服务器.在本地以及其他服务器测试完好的程序上传到万网M3主机之后一直提示无法上传文件,经过调试发现是上传文件需要的 $_FILES变量一直为空了,所以无法上传图片. 解决办法: 经过在M3控制面板不断寻找,发现了php.ini设置页面: 默认的上传文件开关控制是关闭的,选择打开->提交->等待5分钟.上传成功... 顺便提一下,这个M3主机竟然还不支持pathinfo. 其他swf

Loadrunner上传文件解决办法(大文件)

最近再做一个跟海量存储相关的项目测试,需要通过LR模拟用户大量上传和下载文件,请求是Rest或Soap,同时还要模拟多种大小尺寸不一的文件 通常情况下,都是使用简单的post协议即可: 方法一: web_submit_data("importStudent.do", "Action=https://testserver/console/importStudent.do", "Method=POST", "EncType=multipar

iis服务器接收post上传文件代码求助

问题描述 <html><head></head><body><scriptLanguage="C#"AutoEventWireup="true"encType="multipart/form-data"ruat="server">protectedvoidPage_Load(objectsender,EventArgse){try{foreach(stringfinR

Windows中IIS7 大文件上传限制解决办法

在IIS7下,即便你在web.config设置了maxRequestLength="1048576"最大允许上传的大小,也是没用的,其实是受C:/Windows/System32/inetsrv/config/applicationHost.config的限制, 默认最大只能上传30M的文件,修改下这个文件就好了,在该文件的system.webServer/security/requestFiltering/节内添加 <requestLimits maxAllowedConten

小钱APP身份证上传失败解决办法

给各位小钱软件的使用者们来详细的解析分享一下身份证上传失败问题的解决办法. 办法分享:   1.要注意看看照片的大小有没有规定,还有清晰度的问题; 2.也要检查自己手机信号是否畅通; 3.还可以过一段时间在试下,可能系统出现错误. 好了,以上的信息就是小编给各位小钱的这一款软件的使用者们带来的详细的身份证上传失败问题的解决办法解析分享的全部内容了,各位看到这里的软件使用者们,小编相信你们现在那是非常的清楚了解决的方法了吧,那么大家就快去按照小编上面的方法自己去解决身份证上传失败的问题吧.

windows下使用IIS配置的PHP无法上传文件的解决方法_win服务器

延续<Windows Server 2003中iis配置php>一文 服务器上使用Apache2+PHP正常运行,换成IIS+PHP,先后出现了php.ini的环境变量无法读取,php中验证码无法显示的问题,如今又有人反应无法上传图片的问题. 从IIS替换Apache2的过程仅仅是开启IIS,关闭Apache2,其它的没什么变化,但是却发生了如此多的差异,看样子IIS支持PHP还是有很多要进行修改的. 分析: 根据上面的描述,我怀疑问题出在IIS的权限配置上,IUSR_MACHINE的帐户对u

JSP实现上传文件的两种方法

js|上传 在用Java开发企业器系统的使用,特别是涉及到与办公相关的软件开发的时候,文件的上传是客户经常要提到的要求.因此有 一套很好文件上传的解决办法也能方便大家在这一块的开发. 首先申明,该文章是为了自己记录一备以后开发需要的时候,不用手忙脚乱哈哈........ 现在在国内用的非常多的一般是两种方法解决来解决文件上传. cos.jar + uploadbean.jar + filemover.jar 这个是用的非常普遍的,原因是因为他操作方便,是我们不必再去关注,那些文件的输入和输出流,

用JSP实现上传文件的两种方法

js|上传 在用Java开发企业器系统的使用,特别是涉及到与办公相关的软件开发的时候,文件的上传是客户经常要提到的要求.因此有 一套很好文件上传的解决办法也能方便大家在这一块的开发. 首先申明,该文章是为了自己记录一备以后开发需要的时候,不用手忙脚乱哈哈........ 现在在国内用的非常多的一般是两种方法解决来解决文件上传. cos.jar + uploadbean.jar + filemover.jar这个是用的非常普遍的,原因是因为他操作方便,是我们不必再去关注,那些文件的输入和输出流,使

Apache 2.3.6以上的版本上传文件500错误问题

我先测试一个1K的图片文件是可以上传成功的,然后我再上传一个1MB的文件提示错误500了, 现在找到apache 配置文件Apache2confhttpd.conf,然后搜索MaxRequestLen 这里我们就可以进行修改了 在这个文件里增加下面的参数设置即可.  代码如下 复制代码 MaxRequestLen 10240000 注意上面是一KB为单位了 以上是小编为您精心准备的的内容,在的博客.问答.公众号.人物.课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索文件 , apac