在DEDE内容管理系统(CMS)中,上传文件时遇到“Upload filetype not allow”错误是一个常见问题。这个错误通常意味着上传的文件类型不符合系统设定的限制,或者是在读取上传文件时出现了权限问题。本文将探讨这个问题,并提供安全的解决方案。
首先,我们来分析一下DEDE中导致这个错误的代码段:
php
$imtypes = array('image/pjpeg','image/jpeg','image/gif','image/png','image/xpng','image/wbmp','image/bmp');
if(in_array(strtolower(trim($_key.'_type')),$imtypes)) {
$image_dd = @getimagesize($$_key);
if (!is_array($image_dd)) { //phpfensi.com
exit('Upload filetype not allow !');
}
}
这段代码中,$imtypes数组定义了允许的上传文件类型,而$_key则代表上传文件的临时路径,例如“d:/php/temp/aaa.tmp”。getimagesize($$_key)函数用于获取上传文件的大小和类型信息,但如果这个函数返回False,说明读取文件时出现了问题,而DEDE的开发者简单地使用@抑制了错误信息,导致用户无法获得真正的问题原因。
问题可能出在以下几个方面:
1. 文件类型限制:如果上传的文件类型不在$imtypes数组中,系统会认为文件类型不允许。
2. 权限问题:DEDE在读取上传文件时可能没有足够的权限访问临时目录,例如“d:/php/temp”。
为了解决这个问题,一些用户可能会尝试删除代码中的错误处理部分,但这可能会导致安全风险,因为DEDE本身就存在一些安全问题。任何不安全的修改都可能会破坏网站的安全性。
以下是一些安全的解决方案:
1. 检查文件类型:确保上传的文件类型确实在允许的范围内。
2. 检查权限:
- 对于大多数用户,d:/php/temp目录应该是可读写的,因为上传文件需要这个权限。
- 如果您的服务器启用了php_admin_value open_basedir指令,确保在指令中添加了对“d:/php/temp”目录的权限,例如:
php_admin_value open_basedir 'E:/wwwroot/www.a.com;D:/PHP/temp'
- 重新启动Web服务器以应用更改。
通过上述步骤,您应该能够解决“Upload filetype not allow”问题,同时保持网站的安全性。请记住,任何时候都要谨慎对待对代码的修改,特别是当涉及到安全问题时。