2013-12-21 44 views
0

我正在尝试编写该代码以作为应用程序窗体,并通过PHP邮件提交用户输入的信息。但是,我继续在它声明文件类型不被允许的情况下出现此错误。电子邮件附件将不允许某些类型

一些保留字未突出显示,所以我不确定程序是否无法识别其功能。我检查了基本名称函数,其中basename没有按照它应该高亮显示。所以我尝试使用pathinfo,但我不希望整个路径只是它的基本名称。是否因为编码不正确而无法识别文件类型?请检查我检查我的代码.....

<?php 

if(!empty($_FILES['resume_name']['name'])){ 

    $file_name=$_FILES['resume_name']['name']; 
    $temp_name=$_FILES['resume_name']['tmp_name']; 
    $file_type=$_FILES['resume_name']['type']; 
    $file_size=$_FILES['resume_name']['size']; 

    $base=basename($file_name); 
    $extension= pathinfo($base, PATHINFO_EXTENSION); 

    $allowed_ext=array(".doc",".docx",".pdf",".zip",".jpeg",".jpg",".txt"); 

    if (array_intersect($extension,$allowed_ext)){ 
    $from=$_POST['email']; 
    $to="[email protected]"; 
    $subject= $_POST['departments']; 
    $message=' 


      <table cellspacing="0" cellpadding="8" border="0" width="400"> 
      <tr> 
       <td colspan="2"></td> 
      </tr> 
      <tr bgcolor="#eeeeee"> 
       <td style="font-family:Verdana, Arial; font-size:11px; color:#333333;"><strong>Name</strong></td> 
       <td style="font-family:Verdana, Arial; font-size:11px; color:#333333;">'.$first_name.'</td> 
      </tr> 
      <tr bgcolor="#eeeeee"> 
       <td style="font-family:Verdana, Arial; font-size:11px; color:#333333;"><strong>Name</strong></td> 
       <td style="font-family:Verdana, Arial; font-size:11px; color:#333333;">'.$last_name.'</td> 
      </tr> 
      <tr><td colspan="2" style="padding:0px;"><img src="images/whitespace.gif" alt="" width="100%" height="1" /></td></tr> 
      <tr bgcolor="#eeeeee"> 
       <td style="font-family:Verdana, Arial; font-size:11px; color:#333333;"><strong>Email</strong></td> 
       <td style="font-family:Verdana, Arial; font-size:11px; color:#333333;">'.$email.'</td> 
      </tr> 

      <tr><td colspan="2" style="padding:0px;"><img src="images/whitespace.gif" alt="" width="100%" height="1" /></td></tr> 
       <tr bgcolor="#eeeeee"> 
       <td colspan="2" style="font-family:Verdana, Arial; font-size:11px; color:#333333;"><strong>Departments</strong></td> 
      </tr>     
      <tr bgcolor="#eeeeee"> 
       <td colspan="2" style="font-family:Verdana, Arial; font-size:11px; color:#333333;">'.$departments.'</td> 
      </tr>   

      <tr><td colspan="2" style="padding:0px;"><img src="images/whitespace.gif" alt="" width="100%" height="1" /></td></tr> 

      <tr bgcolor="#eeeeee"> 
       <td colspan="2" style="font-family:Verdana, Arial; font-size:11px; color:#333333;"><strong>Qualifications</strong></td> 
      </tr>     
      <tr bgcolor="#eeeeee"> 
       <td colspan="2" style="font-family:Verdana, Arial; font-size:11px; color:#333333;">'.$qualifications.'</td> 
      </tr>     

      <tr><td colspan="2" style="padding:0px;"><img src="images/whitespace.gif" alt="" width="100%" height="1" /></td></tr> 
     </table> 

'; 

    $file=$temp_name; 
    $content = chunk_split(base64_encode(file_get_contents($file))); 
    $uid=md5(uniqid(time())); 

    $header = "From: ". $from. "\r\n"; 
    $header .= "Reply-To: ". $replyto. "\r\n"; 
    $header .= "MIME-Version: 1.0\r\n"; 

    $header .="Content-Type: multipart/mixed; boundary=\"".$uid."\"\r\n\r\n"; 


    $header .= "--".$uid."\r\n"; 
    $header .= "Content-type:text/plain; charset=iso-8859-1\r\n"; 
    $header .= "Content-Transfer-Encoding: 7bit\r\n\r\n"; 
    $header .= $message."\r\n\r\n"; 
    $header .= "--".$uid."\r\n"; 

    $header .= "--".$uid."\r\n"; 
    $header .= "Content-type: ".$file_type."; name=\"".$file_name."\"\r\n"; 
    $header .= "Content-Transfer-Encoding: base64\r\n"; 
    $header .= "Content-Disposition: resume_name; filename=\"".$file_name."\""; 
    $header .= $content."\r\n\r\n"; 

    if(@mail($to, $subject, $message, $header)){ 
      echo "Success"; 
      } 
    else{ 
     echo "Fail"; 
     } 
    } 
else { 
    echo "File Type Not Allowed!!"; 
    } 
} 
else{  
    echo "No File Posted!!"; 
    } 
} 
exit(); 
?> 
+1

你会得到什么错误? –

+0

由于我犯了这么多的错误例程,它正在被抓到最后。当我从html文件加载它时,它显示默认语句“文件类型不允许”。我发现我的basename函数实际上是有效的,所以我想也许它不能识别完整路径,因为在html上它只提供基本名称和扩展名。但仍然没有运气,我也改变了allowed_ext = array(...)//在扩展名后没有点 – user3116769

+0

你会得到什么错误? –

回答

1

array_intersect接受一个数组作为它的第一个参数。 pathinfo($base, PATHINFO_EXTENSION);给出一个字符串,而不是一个数组。

您可以尝试in_array

if (in_array($extension, $allowed_ext)) { 
    .... 
} 

而且,你$allowed_ext应该没有点:

$allowed_ext = array("doc", "docx", "pdf", "zip", "jpeg", "jpg", "txt"); 

因为pathinfo($base, PATHINFO_EXTENSION);给人不点的扩展。

http://www.php.net/manual/en/function.pathinfo.php

0

电子邮件附件不会允许某些类型的,因为你已经指定在code.So一些文件扩展名可能不允许超过这些文件扩展名等。

也从你的文件扩展名中删除点你可以在这里添加更多的文件扩展名。

$allowed_ext=array("doc","docx","pdf","zip","jpeg","jpg","txt"); 
0
$allowed_ext=array("doc","docx","pdf","zip","jpeg","jpg","txt"); 


remove dot in the extence 
0

其实我想通了,什么是错的。你们都会笑,但是,我正在处理同一份文件,但来自不同的目录。所以我所做的修改没有被上传到服务器。在采取了所有建议后,它能够完美地上传文件。