起因
在利用MooPHP的一个项目中,接到用户反馈说其所有客户不能上传文件,都返回失败。经过排查发现是PHP中的is_uploaded_file函数在 捣鬼。

细节分析
在正常情况下,通过PHP 上传文件 ,需要通过is_uploaded_file函数来判断文件是否是通过 HTTP POST 上传的,这可以用来确保恶意的用户无法欺骗脚本去访问本不能访问的文件,例如 /etc/passwd。

而本次遇到的问题是本来应该是C:/WINDOWS/Temp/php99.tmp这样的tmp_name,却变成了C://WINDOWS //Temp//php99.tmp这种,导致is_uploaded_file函数返回错误的信息。

处理方式
在加上如下代码后,问题解决。
$file['tmp_name'] = str_replace(’’, ‘//’, $file['tmp_name']);
注意,“”实际字符串就是两个/,其他两个是用来表示转义的。

深入研究
为什么在默写特定的环境下会出现这种情况呢,我们来看如下分析:
; Magic quotes for incoming GET/POST/Cookie data.
magic_quotes_gpc = On
在PHP的默认配置中magic_quotes_gpc是On的,而打开了magic_quotes_gpc参数的PHP环境会自动对GET/POST /Cookie添加addslashes效果。注意,并不会为$_FILES添加addslashes效果。
而当magic_quotes_gpc是Off的时候,由于为$_FILES数组添加了addslashes作用,反而出现了问题。也就在 magic_quotes_gpc是Off的PHP环境下都会出现此问题。

顺带说句,SVN上的MooPHP代码已经修复此问题。

is_uploaded_file函数解析
判断文件是否是通过 HTTP POST 上传的
bool is_uploaded_file ( string $filename )
如果 filename 所给出的文件是通过 HTTP POST 上传的则返回 TRUE。这可以用来确保恶意的用户无法欺骗脚本去访问本不能访问的文件,例如 /etc/passwd。 这种检查显得格外重要,如果上传的文件有可能会造成对用户或本系统的其他用户显示其内容的话。

为了能使 is_uploaded_file() 函数正常工作,必段指定类似于 $_FILES['userfile']['tmp_name'] 的变量,而在从客户端上传的文件名 $_FILES['userfile']['name'] 不能正常运作。

转载于:https://www.cnblogs.com/jackspider/archive/2012/12/14/2817947.html

is_uploaded_file函数引发的问题相关推荐

  1. php is uploaded file,is_uploaded_file函数引发的不能上传文件问题

    is_uploaded_file函数引发的不能上传文件问题 更新时间:2013年10月29日 16:20:11   作者: 不能上传文件,都返回失败.经过排查发现是PHP中的is_uploaded_f ...

  2. 由c#事件监听、回调函数引发观察者模式

    由c#事件监听.回调函数引发观察者模式 事件监听: C#中的事件,可以简单的理解为类或者对象发生了一件事,并且把这件事通知给了其他的类或者对象,其他的类或者对象可以根据事件的消息有所反应. 这非常类似 ...

  3. 转:一个Sqrt函数引发的血案

    转自:http://www.cnblogs.com/pkuoliver/archive/2010/10/06/1844725.html 源码下载地址:http://diducoder.com/sotr ...

  4. 一个Sqrt函数引发的血案

    我们平时经常会有一些数据运算的操作,需要调用sqrt,exp,abs等函数,那么时候你有没有想过:这个些函数系统是如何实现的?就拿最常用的sqrt函数来说吧,系统怎么来实现这个经常调用的函数呢? 虽然 ...

  5. oracle trim 性能,ORACLE sql调优之记录一次trim函数引发的大表全表扫描

    2017年8月14日,一地市oracle相关的调度程序ETL抽取速度奇慢,sql语句每次执行平均时间要9秒左右,如果所示: 该调度过程涉及的sql语句如下: select count(*) from ...

  6. php is uploaded file,PHP中的is_uploaded_file()函数

    is_uploaded_file()函数检查文件是否通过HTTP POST上传.如果文件是通过HTTP POST上传的,则该函数返回TRUE.失败时返回FALSE. 语法is_uploaded_fil ...

  7. python 使用异常函数_您如何测试Python函数引发异常?

    python 使用异常函数 This article elaborates on how to implement a test case for a function that raises an ...

  8. realloc函数引发的慘案

    帮别人调试个程序,程序的功能主要涉及动态数组.实现动态数组元素的加入,删除,查找.显示功能.可是在运行加入功能的时候,连续运行三次加入的时候就会出现故障,让人感到很的莫名其妙. 涉及到的函数例如以下所 ...

  9. _tcscpy_s函数引发的问题

    网上下载的VS2017 VC++工程,发现一段代码老是报堆破坏的的错误,当时没去理会,自己写了一段代码重新实现了需要的功能: if(dwDevName != NULL)                ...

最新文章

  1. 听食品企业大佬讲故事:寻找记忆深处的年味
  2. FPGA 实验六 计数器、 ROM和DDS
  3. 了解和使用类库(47)
  4. page,client,offset区别
  5. 深度学习之生成式对抗网络 GAN(Generative Adversarial Networks)
  6. mexcuda中矩阵数据的传输
  7. ios xcode文件前缀_关于ios8:Xcode 6错误:“嵌入式二进制文件的包标识符未以父应用程序的包标识符为前缀。”...
  8. 背景色透明度影响字体的透明度
  9. 2020杭电多校第六场—【1002 Little Rabbit‘s Equation】
  10. oracle 取前行,【企业信息化研究所】TF-SWUFE Oracle Club抵着寒风前行—甲骨文俱乐部第九周分享会...
  11. 域控制器升级的先决条件失败之解决方式
  12. Unity3D 《拥挤城市》3D房子建筑透视效果实
  13. (简单)华为P20 EML-AL00的USB调试模式在哪里打开的步骤
  14. 如何判断测试项目是否需要高频交直流电流探头
  15. 2022年P气瓶充装特种作业证考试题库及模拟考试
  16. 教你怎么去辨别电脑配置的好或坏
  17. 数智学习|湖仓一体实践与探索
  18. 杭州抢人:本科1万、硕士3万、博士5万
  19. 发布一个智能密码钥匙内部证书导出工具ExportCert
  20. Java中矩阵运算Array2DRowRealMatrix(math3的使用)

热门文章

  1. 在 iOS 11 中使用 Core Bluetooth
  2. tweak 项目 快速搭建CocoaAsyncSocket(建连、断开、重连、心跳、通用请求)
  3. 利用Landsat8 进行利用土地分类
  4. C++关键字Volatile的作用
  5. 【小白的CFD之旅】13 敲门实例【续3】
  6. 74cms 骑士人才系统v3.5.1 正式版
  7. 忘记Windows 7 登录密码,3分钟我来搞定
  8. [推荐推荐][提供下载]ORACLE SQL:经典查询练手系列文章收尾(目录篇)
  9. 桌面虚拟化之iPad客户端大比拼
  10. 【转载】C#编码标准━━项目设置和项目结构