延续《Windows Server 2003中iis配置php》一文

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

从IIS替换Apache2的过程仅仅是开启IIS,关闭Apache2,其它的没什么变化,但是却发生了如此多的差异,看样子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 (!@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

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.

我的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:\windows\temp目录,并且临时文件是以.tmp为后缀存储的,该文件马上就会被删除,所以你想通过操作系统的文件修改搜索功能是无法找到 的,也就无法找到upload_dir_tmp的默认路径是哪里。

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

现在已经修改了IIS使用环境变量方式精简配置php的那篇文章了,因为当时没有注意这个位置的权限设置,造成了如今的问题,不过最终解决也是好的。

转载于:https://www.cnblogs.com/yorian/archive/2012/03/15/2397532.html

IIS+php无法上传图片(转载自http://hi.baidu.com/0wem/blog/item/d222db163c3c831e972b4306.html)...相关推荐

  1. 微软Bug管理(转载网址 http://hi.baidu.com/shan108/blog/item/90680b1f55bfba66f624e488.html)

    一. 团队组织 1.常见问题TestAge 中国软件测试时代 lt8Q$W F 没有人愿意做测试TestAge 中国软件测试时代 k4M.z'c.c,n+j1n t 觉得养不起那么多测试人员TestA ...

  2. 让IIS支持PHP (转载)

    我没试过,先贴在这里,回家试试!不知道大家谁弄过!我有点不明白,它和ASP端口号会不会冲突呢?呵!!我以前只在WIN98下安装完成过! 一.首先把php的压缩包(这里以PHP4.3.2为例)解压到C: ...

  3. AngularJS中service,factory,provider的区别(转载:http://my.oschina.net/tanweijie/blog/295067)...

    目录[-] 一.service引导 二.service 1.factory() ‍2.service()‍ ‍3.provider()‍‍ 一.service引导 刚开始学习Angular的时候,经常 ...

  4. 转载---C#遍历访问Dictionary和HashTable--- http://blog.csdn.net/yan_hyz/article/details/7415221...

    dictionaryc#stringtableclasssystem 一般地Dictionary是按照元素的添加顺序输出的,这和HashTable不同. [csharp] view plaincopy ...

  5. 什么是ods(转载)https://baike.baidu.com/item/ODS/15146368?fr=aladdin

    原文位置:https://baike.baidu.com/item/ODS/15146368?fr=aladdin ODS (操作数据存储) 编辑 讨论 操作数据存储ODS(Operational D ...

  6. 转载linux图形界面编程基本知识(X11, xorg, gdm/gnome)

    水平有限,有错误请指正: 在windows上运行的X11 server,通常我们会使用Xmanager.putty+Xming等等 Fluxbox是一个基于GNU/Linux的轻量级图形操作界面 图 ...

  7. [转载]《博客园精华集》Winform筛选结果(共105篇)

    本文转载:http://hi.baidu.com/322yali/blog/item/07bb2438e86d103796ddd86f.html 转载于:https://www.cnblogs.com ...

  8. (实验学习)MATLAB与C/C++混合编程之MATLAB调用C程序,转载的

    转载源于:http://hi.baidu.com/renrsh/blog/item/69c664117abe0b18b9127bc1.html >> mex -setup Please c ...

  9. IE兼容问题IE6,IE7,IE8,IE9,IE10

    x-ua-compatible 用来指定IE浏览器解析编译页面的model x-ua-compatible 头标签大小写不敏感,必须用在 head 中,必须在除 title 外的其他 meta 之前使 ...

最新文章

  1. 众人皆醉我独醒——深入理解“特征值”和“特征向量”
  2. SpringBoot整合RabbitMQ-整合演示
  3. Windows下将MySQL5.5升级为MySQL5.7
  4. 一个可以设置中奖概率的抽奖程序[转]
  5. Spring Boot 项目的 API 接口防刷
  6. ALV中动态内表+行转化为列
  7. Hadoop Hive创建外部表及多表join操作
  8. Python编程专属骚技巧10
  9. New StoryBoard in iOS9
  10. VLAN的概念和链路分类
  11. ALTOVA XMLSPY使用,建xml文件,构建xpath和XQuery查询,xml和json格式转换
  12. 如何去掉PDF右下角的全能扫描王水印
  13. 写论文修改word标题的编号1/1.1/1.1.1/1.1.1.1
  14. ios课堂派怎么提交附件_iOS怎么在课堂派上传文件?
  15. 省级税务大数据平台应用建设的分析与思考
  16. HTML5期末大作业:山河旅行社网站设计——山河旅行社网站(5页) HTML+CSS+JavaScript 学生DW网页 出行 旅途 游玩
  17. 向 Dockerfile 传参 --build-arg 遇到的一些小坑
  18. 妙用AccessibilityService黑科技实现微信自动加好友拉人进群聊
  19. 计算机应用基础常见英语词汇,数学专业常用英语词汇.doc
  20. C语言strcpy()函数,字符数组复制

热门文章

  1. mysql联合索引的数据结构
  2. 操作系统(三十四)覆盖和交换
  3. HISTORY OF ETHEREUM SECURITY VULNERABILITIES, HACKS AND THEIR FIXES
  4. 【IPFS + 区块链 系列】 入门篇 - IPFS环境配置
  5. Android6.0 wakelock深入分析
  6. java中给变量赋值_java中变量赋值的理解
  7. java web文件夹_JAVA WEB项目文件夹上传下载解决方案
  8. python文档生成工具_pydoc --- 文档生成器和在线帮助系统 — Python 3.9.1rc1 文档
  9. python 编译函数_在Python的Django框架中编写编译函数
  10. python 相关性分析_数据分析---用Python进行相关性分析(兼谈假设检验)