这个问题折腾之久,浪费的时间、香烟之严重,就不多说了,反正Linux系统重做过两次,Nginx+Apache反复装了N次,都不成功。论坛也有很多解决办法,都治标不治本。

一开始发现系统在其它服务器上运行ok,就新部署的项目始终无法上传文件。所以一直把精力放到服务器的环境配置上了,比如上传大小限制,上传的目录权限,网站文件夹的权限设置,折腾了两个周末外加清明节。

悲催而操蛋的节日。

发现问题是无意中看到php的错误日志,定位到错误发生在移动临时上传文件到保存目录的地方,路径中多了一条下划线。

然后才看到这段离奇的代码

[php]

$temp_filename = $this->getname($fileext);

$savefile = $this->savepath.$temp_filename;

$savefile = preg_replace("/(php|phtml|php3|php4|jsp|exe|dll|asp|cer|asa|shtml|shtm|aspx|asax|cgi|fcgi|pl)(\.|$)/i", "_\\1\\2", $savefile);

$filepath = preg_replace(new_addslashes("|^".$this->upload_root."|"), "", $savefile);

if(!$this->overwrite && file_exists($savefile)) continue;

$upload_func = $this->upload_func;

if(@$upload_func($file['tmp_name'], $savefile)) {

$this->uploadeds++;

@chmod($savefile, 0644);

@unlink($file['tmp_name']);

$file['name'] = iconv("utf-8",CHARSET,$file['name']);

$uploadedfile = array('filename'=>$file['name'], 'filepath'=>$filepath, 'filesize'=>$file['size'], 'fileext'=>$fileext, 'fn'=>$file['fn']);

$thumb_enable = is_array($thumb_setting) && ($thumb_setting[0] > 0 || $thumb_setting[1] > 0 ) ? 1 : 0;

$image = new image($thumb_enable,$this->siteid);

if($thumb_enable) {

$image->thumb($savefile,'',$thumb_setting[0],$thumb_setting[1]);

}

if($watermark_enable) {

$image->watermark($savefile, $savefile);

}

$aids[] = $this->add($uploadedfile);

}

[/php]

我理解这个程序员哥哥的意图是对非法的文件扩展名进行安全过滤,但发生一件很碉堡的事情,就是把整个路径给进行了过滤。

[php]$savefile = preg_replace("/(php|phtml|php3|php4|jsp|exe|dll|asp|cer|asa|shtml|shtm|aspx|asax|cgi|fcgi|pl)(\.|$)/i", "_\\1\\2", $savefile);[/php]

$savefile已经是一个完整的路径了,如/wwwroot/cn.php.net/uploadfile/2012/04/balabal.jpg,本身应该是对balabal.jpg进行过滤,现在把cn.php.net也算进去咯。

所以,如果某位朋友的域名中恰好出现了php|phtml|php3|php4|jsp|exe|dll|asp|cer|asa|shtml|shtm|aspx|asax|cgi|fcgi|pl+.,悲惨的生活就开始咯

解决办法很简单。注释掉这行或者改成下面的代码

[php]

$temp_filename = $this->getname($fileext);

$temp_filename = preg_replace("/(php|phtml|php3|php4|jsp|exe|dll|asp|cer|asa|shtml|shtm|aspx|asax|cgi|fcgi|pl)(\.|$)/i", "_\\1\\2", $temp_filename);

$savefile = $this->savepath.$temp_filename;

[/php]

这个bug应该在V9所有版本中均存在,呜呼~~

我把修改之后的代码也发到这里了,献给所有欲哭无泪的战友们~~~

cms php上传失败,PHPCMSV9无法上传附件,提示空信息的超级bug相关推荐

  1. 究极方法!!!CSDN图片上传失败无法重新上传和删除的解决

    有一次CSDN上传文件的时候因为直接复制MD笔记,然后出现一堆图片上传失败 然后草稿就保存不了了 显示这个东西: 如需帮助,请点击,进去也没什么卵用-.- 陷入无法删除也无法重新上传的尴尬,太难了.. ...

  2. 阿里云视频点播-视频上传失败(一直显示上传中)

    控制台显示ErrorCode=null 这说明aliyun-java-vod-upload版本不对应 如今官网给出的最高版本为1.4.14,使用1.4.11版本即可上传成功 这里我将该1.4.11版本 ...

  3. linux php文件上传失败,linux不能上传文件

    问题: 无法向Linux主机上传文件. 例如:我们现在想把A文件上传到 /opt/software 目录下,但是此时发现怎么都上传不上去.[isea@redis99 software]$ ll 总用量 ...

  4. px4在ubuntu中make px4fmu-v2_default upload上传失败

    px4在ubuntu中make px4fmu-v2_default upload上传失败 在ubuntu中上传编译完成的px4固件时报错,提示 If the board does not respod ...

  5. 图片上传失败了?憋慌,有可能不是Bug哦~

    常常有猿猿在创作的时候,会选择图文并茂的形式写成一篇文章.但是有时候会发现图片上传失败,憋慌,这很大可能不是Bug哦!可以先自行排查是否为以下原因: 0.网络状况不佳(如在不稳定的WiFi环境下,或网 ...

  6. onethink后台使用上传驱动时,文件上传失败

    onethink后台最近使用阿里云的OSS上传驱动上传文件(thinkphp没有OSS驱动,自己百度找的一个驱动),碰到一个问题:后台建模的时候,选择了上传文件类型,但是实际上传失败,要么上传成功,插 ...

  7. 微信小程序之图片上传、多图上传、头像上传、头像获取、图片上传失败问题解决

    小程序用户授权获取用户头像,需点击才可以让用户选择是否授权. 图片上传失败问题解决 图片上传 一定要记得修改合法域名,不然会失败,而且找不到报错信息哟!并且域名采用 https 点击,用户授权,获取用 ...

  8. html如何设计上传头像失败,【微信上传头像失败】微信上传头像失败怎么回事?...

    微信上传头像失败怎么回事?不少小伙伴会遇到微信上传头像失败的情况,但不知道哪里出了问题.下面小编给大家总结了一些导致微信上传头像失败的原因,快来看看吧! 一.微信上传头像失败常见原因 1.有可能你需要 ...

  9. springboot上传文件及文件上传限制大小异常捕获

    一个简单的页面上传文件,上传的接口是/upload,请求方法是post,enctype(表单类型)是multipart/form-data <!DOCTYPE html> <html ...

最新文章

  1. IEEE最新薪资报告 | 手机开发者年入153万,机器学习并非最高(附链接)
  2. 动手写一个简单版的谷歌TPU
  3. Java连接Oracle数据库示例
  4. cvpr 2015 2016论文地址
  5. php数组中插入数值,php中如何在数组指定位置插入数据单元
  6. MacosX 下GCC编译指定版本的代码
  7. php str pa,php截取字符串方法有哪些
  8. js和ajax点赞功能代码_FANUC数控机床:你会用“M代码”调用“系统程式”吗
  9. 笨办法学 Python · 续 练习 7:`grep`
  10. 一笔期货成交的始末(可能有问题)
  11. MariaDB 10.3 解决掉了UPDATE不支持同一张表的子查询更新
  12. 长大了还不如小时候那么能够坚持了
  13. 字符串常量池、堆、栈
  14. 『Tableau』 地图显示不正确的一种可能原因
  15. 政府支撑智慧城市建设 楼宇对讲投身社区成长
  16. Java语言十五讲(第十一讲 Script)
  17. 用计算机怎么谈黑人团队,光遇黑人抬棺乐谱怎么弹奏 计算机演奏乐谱16
  18. 计算机网络与互联网(三)
  19. 工作篇 之 解决谷歌地图与 NestedScrollView 滑动冲突
  20. 【JAVA类与对象----5(static、代码块)】

热门文章

  1. C语言通过数组指针获取长度
  2. intellij idea 忽略文件不提交
  3. java 读取Zip文件进行写入
  4. 【转】 Android常用实例—Alert Dialog的使用
  5. Ubuntu自定义服务
  6. 客户网站被黑导致CDN加速后打开域名就提示域名纠错
  7. 【JS】引用类型之RegExp
  8. 昼猫笔记 JavaScript -- 闭包
  9. 常用排序算法(八)桶排序
  10. Mysql 执行顺序