2011-09-19 4 views
0

신청인의 첨부 파일의 doc 유형을 doc, docX, rtf 및 PDF로 제한하기 위해 현재 사용하는이 업 로더 업 그레 이드 코드를 수정하고 싶습니다. 나는 이것을 SourceForge.net에서 찾은 것으로 생각되는 것으로 변경했다.PHP 양식 메일 첨부를 특정 문서 유형으로 제한하려면 어떻게해야합니까?

성공적인 제출시 리디렉션하고 싶습니다. 현재 페이지가 완성되면 비어 있습니다. 아마 그걸 알아낼 수있을거야.

내 PHP 기술이 좋지 않아서 파일 형식 유효성 검사 코드를 어디에 두어야할지 잘 모르겠습니다.

<?php 
if ($_SERVER['REQUEST_METHOD']=="POST"){ 

    $to="[email protected]"; 
    $subject= stripslashes($_POST['apply']); 

    $from = stripslashes($_POST['fromname'])."<".stripslashes($_POST['fromemail']).">"; 

    $mime_boundary="==Multipart_Boundary_x".md5(mt_rand())."x"; 

    $headers = "From: $from\r\n" . 
    "MIME-Version: 1.0\r\n" . 
     "Content-Type: multipart/mixed;\r\n" . 
     " boundary=\"{$mime_boundary}\""; 

    $message= stripslashes($_POST['msg']); 

    $message = "This is a multi-part message in MIME format.\n\n" . 
     "--{$mime_boundary}\n" . 
     "Content-Type: text/plain; charset=\"iso-8859-1\"\n" . 
     "Content-Transfer-Encoding: 7bit\n\n" . 
    $message . "\n\n"; 

    foreach($_FILES as $userfile){ 
     $tmp_name = $userfile['tmp_name']; 
     $type = $userfile['type']; 
     $name = $userfile['name']; 
     $size = $userfile['size']; 

     if (file_exists($tmp_name)){ 

     if(is_uploaded_file($tmp_name)){ 

      $file = fopen($tmp_name,'rb'); 
      $data = fread($file,filesize($tmp_name)); 
      fclose($file); 

      $data = chunk_split(base64_encode($data)); 
     } 

      $message .= "--{$mime_boundary}\n" . 
      "Content-Type: {$type};\n" . 
      " name=\"{$name}\"\n" . 
      "Content-Disposition: attachment;\n" . 
      " filename=\"{$fileatt_name}\"\n" . 
      "Content-Transfer-Encoding: base64\n\n" . 
     $data . "\n\n"; 
      } 
    } 

    $message.="--{$mime_boundary}--\n"; 
    if (@mail($to, $subject, $message, $headers)) 
    echo '<script type="text/javascript">alert("Resume Uploaded Successfully");</script>'; 
    else 
     echo '<script type="text/javascript">alert("Sorry Failed to Upload Your Resume");</script>'; 
} else { 
?> 

사용할 수있는 빈 필드를 확인하는 양식 검사기도 있습니다. 누군가가 내가 JS에있는 파일 형식 유효성 검사기를 추가 할 것을 제안하는 경우

이것은 PHP 문서

var frmvalidator = new Validator("form1"); 
frmvalidator.addValidation("fromname","req","Please enter your name"); 
frmvalidator.addValidation("fromemail","req","Please enter your email"); 
frmvalidator.addValidation("apply","req","Please enter the position you are applying for"); 
frmvalidator.addValidation("file1","req","Please Upload Your resume"); 

에, 그 코드를 게시 할 수 있습니다. 길기 때문에 일반적으로 사용되는 파일이라고 생각합니다.

답변

0

서버 측 유효성 검사 당신은 즉이 모든 경우 조건을 은폐 단지 * 경우 (file_exists ($의 tmp_name)) * 전에 파일 유형을 확인해야

.... 여기 불가피하다.

처럼 :

if($userfile['type'] == in_array('filetype1','filetype2','filetype3'))) 
     { 
     if(file_exists($tmp_name)) 
      { 

     ........ 

      } 
     } 

이 도움이 :)

0

파일 형식 업로드 한 파일의 MIME-type을 확인하여 점검 할 수 있기를 바랍니다. 그리고 슬프게도 파일의 MIME-type을 찾는 휴대용 솔루션이 없었습니다. 당신은 FileInfo 라이브러리를 사용하여 시도 할 수 있습니다 :

$finfo = finfo_open(FILEINFO_MIME_TYPE); 

foreach($_FILES as $userfile){ 
    $tmp_name = $userfile['tmp_name']; 
    $type = $userfile['type']; 
    $name = $userfile['name']; 
    $size = $userfile['size']; 

    $mime_type = finfo_file($finfo, $tmp_name); 
    if($mime_type != "application/pdf" && 
    $mime_type != "application/msword" && 
    $mime_type != "application/vnd.openxmlformats-officedocument.wordprocessingml.document" && 
    $mime_type != "application/rtf" && 
    $mime_type != "text/rtf" && 
    $mime_type != "text/richtext") 
     continue; 
    ... 
} 
finfo_close($finfo); 

또 다른 옵션 대신 $mime_type의 비교를 위해 $type 변수를 사용하는 것입니다. 그러나 이것은 신뢰할 수 없습니다.

마지막으로, 최후의 수단으로, 당신은이를 사용하여 스니핑 파일 확장자 수행

$filename = basename($tmp_name);    
$fileExt = strtolower(substr(strrchr($filename, "."), 1)); 

을 그리고 원하는 파일의 확장자 $fileExt을 비교합니다. (doc, docx, rtfpdf)

+0

이 Mac 사용자는 망칠까요? 아니면 파일에도 확장명이 있습니다. – Lazykins

관련 문제