本帖最后由 UniverseOS 于 2013-03-09 13:39:28 编辑

解决方案 »

  1.   

    先打印出checkTitle方法的返回值是什么。
    checkTitle方法里面怎么还有个$filename=($_FILES['file']['tmp_name']);
      

  2.   

    1、
    function checkTitle($filename)  //判断文件类型
    {
        $filename=($_FILES['file']['tmp_name']);
    应写作function checkTitle($filename)  //判断文件类型
    {
        $filename = $filename['tmp_name']);2、
    if(!in_array(checkTitle($_FILES['file']['tmp_name']),$type)) //判断上传文件类型
    {
    应写作
    if(!in_array(checkTitle($_FILES['file']),$type)) //判断上传文件类型
    {因为你不能假定表单控件都只命名为 file,如果是别的名字呢?
      

  3.   

    我的表单里面上传文件就叫“file”: <input type="file" name="file" id="file">
      

  4.   

    如果我写$filename=($_FILES['file']['name']);会报错,只好把name改成tmp_name
      

  5.   

    自己把问题解决了:
    1.因为这时还没有移动临时文件,所以只能用tmp_name,如果用name当然无法得出结果(tmp_name的文件在服务器,而name的文件在客户端);
    2.判断不出来的原因是因为array()里面的值都有“.”,删除掉就可以了:
    $type=array('txt','rtf','doc','docx','xls','xlsx','ppt','.pptx','jpg','jpeg','png','bmp','png','zip','rar','7z','tar','gz','tar.gz');
    (因为我开始使用的是按扩展名判断的方法,所以都有“.”)
    现在文件上传的代码完全正常了,另外我在网上看到另一个代码,取文件头前4位,然后转换成16进制。