如果 filename 所给出的文件是通过 HTTP POST 上传的则返回 TRUE。这可以用来确保恶意的用户无法欺骗脚本去访问本不能访问的文件,例如 /etc/passwd。 这种检查显得格外重要,如果上传的文件有可能会造成对用户或本系统的其他用户显示其内容的话。 is_uploaded_file() 仅可用于 PHP 3 的 3.0.16 版之后,以及 PHP 4 的 4.0.2 版之后。如果你执意要用老版本,可以用下面的函数来保护自己: 

解决方案 »

  1.   

    楼上的老大:能不能来点建设性的?这些在php文档上都有。
      

  2.   

    使用is_uploaded_file($_FILES['UserFile']['tmp_name'])当然返回true除非上传失败
    当register_globals=on时,这个测试就非常有必要了
      

  3.   

    xuzuning(唠叨):问题是现在我上传文件时is_uploaded_file($_FILES['UserFile']['tmp_name'])返回了false,但是如果我上传另外一个文件就不会出错。
      

  4.   

    看看php.ini的upload_max_filesize的设置是否限制了,还有就是表单中<input type="hidden" name="MAX_FILE_SIZE" value="30000">
    的设置。
      

  5.   

    我上传的是doc文档,2078kb,upload_max_filesize 设为5M,具体函数如下:
    function uploadFile($file_name, $temp_name="", $i=0){
        global $_FILES, $FILE_PATH;
        $file_path = $FILE_PATH;
        if(!is_uploaded_file($_FILES['FileName']['tmp_name'])){
            echo "不是通过http post上传的文件";
            return false;
        }
        if(!file_exists($file_path)){
            mkdir($file_path, 0777);
        }
        if(!$temp_name){
            $temp_name = str_replace(' ', '_', $file_name);
        }
        if(file_exists($file_path."/".$temp_name)){
            $i++;
            $temp_name = substr($file_name,0,strrpos($file_name,".")).
                "[$i]".strrchr($file_name,".");
            return uploadFile($file_name, $temp_name, $i);
        }
        $file_name = str_replace(' ', '_', $temp_name);
        move_uploaded_file($_FILES['FileName']['tmp_name'], $file_path ."/".$file_name);
        return $file_name;
    }
    if($_FILES['FileName']['name']){
    $FileName = uploadFile($_FILES['FileName']['name']);
    if(!$FileName){
    echo "上传正文失败";
    exit;
    }
    }
      

  6.   

    可能是超时了!
    下面引自本论坛(请原谅,我已不记得是谁说的了):需要更改 php.ini 的三个地方upload_max_filesize = 51M
    post_max_size = 52M
    memory_limit = 56M这三个参数分别定义 上传文件的允许最大体积、POST 数据允许的最大数据量、最大的内存占用量。每一个都需要定义的比前一个大才可以接收文件的那个 php 页的最顶端上加上这么一行,不然很可能传一半的时候就被告知超时:set_time_limit(0);