if(isset($_FILES[ 'upload_file '][ 'name '])) 

$f_name=$_FILES[ 'upload_file '][ 'name ']; 
$exten=explode( '. ',strtolower($f_name)); 
$sz=sizeof($exten);
$newexten=array( 'zip ', 'rar ', 'txt ', 'doc '); 
foreach($newexten   as   $item) 
 { 
if($exten[$sz]==$item) 
    { 
    $flg=1;
    break; 
    }
else
    {
    $flg=0;
    } 
 }
if($flg==1)echo "true";else echo "false"; 
}

解决方案 »

  1.   

    <html>
    <body>
    <form   enctype= "multipart/form-data "     method= "POST "   action= "file.php ">
    <input   type= "file "   name= "upload_file "> <input   type= "submit "   value= "upload ">
    <?php
    if(isset($_FILES[ 'upload_file '][ 'name ']))
    {
    $f_name=$_FILES[ 'upload_file '][ 'name '];
    $exten=explode( '. ',$f_name);
    $newexten=array( 'zip ', 'rar ', 'txt ', 'doc ');
    foreach($exten   as   $item)
    {
    if(!in_array($item,$newexten))
      {
      echo   "error! ";
        exit;
    }
    }
      

  2.   

    1楼的感觉判断那里是错误了,刚好相反的意思。
    2楼使用in_array确实不错,但是不能确定后缀是最后一个。假设文件是这样的“file.rar.txt.jpg”if (isset($_FILES['upload_file']['name'])) {
    $fileName = $_FILES['upload_file']['name'];
    $arrFile = explode( '.', strtolower($fileName) ); // 分开
    // 下面我们取出的应该是最后一个,
    // 因为只有最后一个点后面的串才是判断一个文件的类型的。
    $fileExt = $arrFile( count($arrFile) - 1 );
    $allowExt = array('txt', 'gif', 'rar');
    foreach ($allowExt as $ext) {
    if ($fileExt != $$ext) {
    echo "unlowful file type!";
    exit;
    }
    }
    }
      

  3.   

    感谢各位的热心回帖,但是还是没有解决本质问题,比如:定义允许的类型有rar,zip,doc,txt.
    如果我上传的是doc,根据循环判断,首先查看数组中的第一个是rar,与doc不等,然后就提示error,它都没有继续向下查看。不知道我说的是否对。
      

  4.   

    参考2楼的再添了点自己的东西,终于解决了。代码如下:<html>
    <body>
    <form enctype="multipart/form-data" method="POST" action="file.php">
    <input type="file" name="upload_file"><input type="submit" value="upload">
    <?php
    if(isset($_FILES['upload_file']['name']))
    {
    $f_name=$_FILES['upload_file']['name'];
    $exten=explode('.',$f_name);
    $extenarray=array('zip','rar','doc','txt');
    foreach ($extenarray as $item)
    {
    $i=0;//计数器
    if($item==$exten[count($exten)-1])//最后那个才是文件后缀
    {
    $flag=1;
    break;
    }
    else 
    {
    $i=1;
    if($i==(count($extenarray)-1))//遍历完整个数组
    {
    $flag=0;
    }

    }

    }
    if($flag==1)
    {
    echo "allow";
    }
    else 
    {
    echo "error!";
    }
    }
    ?>
    </form>
    </body>
    </html>
      

  5.   

    if(isset($_FILES[''upload_file']['name'])){
    $newexten=array(   'zip',   'rar',   'txt',   'doc');  
    $f_name=$_FILES[''upload_file']['name'];
    $fz=strrev($f_name);//把字符串反过来排列;
    $bj = substr($fz,0,4);//比较;
    if(!in_array($bj,$newexten)){
    exit("error!"); }
    }
      

  6.   

    楼上的很搞笑,我刚才只是用doc来举个例子,如果是txt,你的方法就不管用了。
      

  7.   

    不好意思,是搞错了
    <?php
    if(isset($_FILES['upload_file']['name'])){
    echo $_FILES['upload_file']['name'];
        $newexten=array('piz.','rar.','txt.','cod.');  
        $f_name=$_FILES['upload_file']['name'];
        $fz=strrev($f_name);//把字符串反过来排列;
        $bj = substr($fz,0,4);//比较;
        if(!in_array($bj,$newexten)){
            exit("error!");    }
    }
    ?>
    <html>
    <head>
    </head>
    <body>
    <form action="./aa.php" method="POST" enctype="multipart/form-data">
    <input name="upload_file" type="file">
    <input type="submit" value="确定">
    </form>
    </body>
    </html>