Heim >Backend-Entwicklung >PHP-Tutorial >Detaillierte Erklärung des PHP-Lesens, Parsens von EML-Dateien und Generieren von Webseiten
In diesem Artikel wird hauptsächlich das Lesen, Parsen und Generieren von Webseiten durch PHP erläutert. Außerdem werden entsprechende Implementierungstechniken und Vorsichtsmaßnahmen zum Lesen, Parsen und Konvertieren von EML-Dateien durch PHP analysiert Quellcode als Referenz. Leser-Download-Referenz, Freunde in Not können auf
wie folgt verweisen:
PHP liest EML-Beispiel, dieses Beispiel kann die exportierte EML-Datei in Text analysieren und speichern Anbindung an den Server. Ohne weitere Umschweife poste ich einfach den Code.
<?php // Author: richard e42083458@163.com // gets parameters error_reporting(E_ALL ^ (E_WARNING|E_NOTICE)); header("Content-type: text/html; charset=utf-8"); echo "<pre class="brush:php;toolbar:false">"; define(EML_FILE_PATH,'./yjdata/'); //if ($filename == '') $filename = '21724696_niuyufu@qiaodazhao.com_ZC4422-r7GMz_R9QF3K6XUhmJOXd4c.eml'; //if ($filename == '') $filename = '21724696_niuyufu@qiaodazhao.com_ZC3218-dGquMgm7ytdF6HQgpSReC4c.eml'; //if ($filename == '') $filename = '163.eml'; //if ($filename == '') $filename = '166.eml'; //if ($filename == '') $filename = 'nyf.eml'; //if ($filename == '') $filename = 'email_header_icon.eml'; if ($filename == '') $filename = '20141230133705.eml'; $eml_file = EML_FILE_PATH.$filename; if (!($content = fread(fopen(EML_FILE_PATH.$filename, 'rb'), filesize(EML_FILE_PATH.$filename)))) die('File not found ('.EML_FILE_PATH.$filename.')'); //标题内容 $pattern="/Subject: (.*?)\n/ims"; preg_match($pattern,$content,$subject_results); $subject = getdecodevalue($subject_results[1]); echo "标题:".$subject; //发件人: $pattern="/From: .*?<(.*?)>/ims"; preg_match($pattern,$content,$from_results); $from = $from_results[1]; echo "\n\r"; echo "发件人:".$from; //收件人: $pattern="/To:(.*?):/ims"; preg_match($pattern,$content,$to_results); $pattern="/<(.*?)>/ims"; preg_match_all($pattern,$to_results[1],$to_results2); if(count($to_results2[1])>0){ $to = $to_results2[1]; }else{ $pattern="/To:(.*?)\n/ims"; preg_match($pattern,$content,$to_results); $to = $to_results[1]; } echo "\n\r"; echo "收件人:"; print_r($to); echo "\n\r"; //正文内容 $pattern = "/Content-Type: multipart\/alternative;.*?boundary=\"(.*?)\"/ims"; preg_match($pattern,$content,$results); if($results[1]!=""){ $seperator = "--".$results[1]; }else{ die("boundary匹配失败"); } $spcontent = explode($seperator, $content); $items = array(); $keyid = 0; $email_front_content_array = array(); foreach($spcontent as $spkey=>$item) { //匹配header编码等信息 $pattern = "/Content-Type: ([^;]*?);.*?charset=(.*?)\nContent-Transfer-Encoding: (.*?)\n/ims"; preg_match($pattern,$item,$item_results); if(count($item_results)==4){ $Content_code = str_replace($item_results[0],"",$item); $item_results[4] = $Content_code; if(trim($item_results[3])=="base64"){ $item_results[5] = base64_decode($item_results[4]); } if(trim($item_results[3])=="quoted-printable"){ $item_results[5] = quoted_printable_decode($item_results[4]); } $item_results[5] = mb_convert_encoding($item_results[5], 'UTF-8', trim($item_results[2])); //echo $item_results[5];exit; $email_front_content_array[] = $item_results; } } foreach ($email_front_content_array as $email_front_content_each_key=>$email_front_content_each_value){ if($email_front_content_each_value[1]=='text/html'){ $content_html = $email_front_content_each_value[5]; break; }else{ $content_html = $email_front_content_each_value[5]; } } echo "内容:"; echo "\n\r"; echo $content_html; echo "\n\r"; //附件内容 $pattern = "/Content-Type: multipart\/mixed;.*?boundary=\"(.*?)\"/ims"; preg_match($pattern,$content,$results); if($results[1]!=""){ $seperator = "--".$results[1]; $spcontent = explode($seperator, $content); $items = array(); $keyid = 0; $email_attachment_content_array = array(); foreach($spcontent as $spkey=>$item) { //匹配header编码等信息 $pattern = "/Content-Type: ([^;]*?);.*?name=(.*?)\nContent-Transfer-Encoding: (.*?)\nContent-Disposition: attachment;.*?filename=(.*?)\n/ims"; preg_match($pattern,$item,$item_results); //print_r($item_results); if(count($item_results)==5){ $Content_code = str_replace($item_results[0],"",$item); $item_results[5] = trim($Content_code); if(trim($item_results[3])=="base64"){ $item_results[6] = base64_decode($item_results[5]); } if(trim($item_results[3])=="quoted-printable"){ $item_results[6] = quoted_printable_decode($item_results[5]); } $item_results[7] = str_replace("\"","",getdecodevalue($item_results[2])); $item_results[8] = str_replace("\"","",getdecodevalue($item_results[4])); //保存附件内容到服务器? //符合规范的文件名时:有后缀名时。 if(strrpos($item_results[8], '.')!==false){ $ext = substr($item_results[8], strrpos($item_results[8], '.') + 1); //$filename = "./yjdata/attachment/".date("YmdHis").mt_rand(10000,99999).".".trim($ext); $attachment_filename = "./yjdata/attachment/".trim(str_replace("\"","",getbase64code($item_results[4]))).".".trim($ext); mkdirs(dirname($attachment_filename)); $fp = fopen($attachment_filename, "w+"); if (flock($fp, LOCK_EX)) { // 进行排它型锁定 fwrite($fp, $item_results[6]); flock($fp, LOCK_UN); // 释放锁定 } else { //echo "Couldn't lock the file !"; } fclose($fp); $item_results[9] = $attachment_filename; $email_attachment_content_array[] = $item_results; } } } //print_r($email_attachment_content_array); } if(count($email_attachment_content_array)>0){ echo "附件:"; echo "\n\r"; //附件读取 foreach($email_attachment_content_array as $email_attachment_content_each_key=>$email_attachment_content_each_value){ unset($email_attachment_content_each_value[5]); unset($email_attachment_content_each_value[6]); print_r($email_attachment_content_each_value[8]); print_r($email_attachment_content_each_value[9]); } } function getbase64code($content){ $pattern="/=\?GB2312\?B\?(.*?)\?=|=\?GBK\?B\?(.*?)\?=|=\?UTF-8\?B\?(.*?)\?=/ims"; preg_match($pattern,$content,$subject_results); if($subject_results[1]!=""){ $subject = $subject_results[1]; $charset = "GB2312"; } elseif($subject_results[2]!=""){ $subject = $subject_results[2]; $charset = "GBK"; } elseif($subject_results[3]!=""){ $subject = $subject_results[3]; $charset = "UTF-8"; }else{ $subject = $content; $charset = ""; } return $subject; } function getdecodevalue($content){ $pattern="/=\?GB2312\?B\?(.*?)\?=|=\?GBK\?B\?(.*?)\?=|=\?UTF-8\?B\?(.*?)\?=/ims"; preg_match($pattern,$content,$subject_results); if($subject_results[1]!=""){ $subject = base64_decode($subject_results[1]); $charset = "GB2312"; } elseif($subject_results[2]!=""){ $subject = base64_decode($subject_results[2]); $charset = "GBK"; } elseif($subject_results[3]!=""){ $subject = base64_decode($subject_results[3]); $charset = "UTF-8"; }else{ $subject = $content; $charset = ""; } if($charset!=""){ $subject = mb_convert_encoding($subject, 'UTF-8', $charset); } return $subject; } function mkdirs($dir) { if(!is_dir($dir)) { if(!mkdirs(dirname($dir))){ return false; } if(!mkdir($dir,0777)){ return false; } } chmod($dir, 777); //给目录操作权限 return true; } ?>
Verwandte Empfehlungen:
Wie man PHP liest Beispielfreigabe für das Parsen von EML-Dateien und das Generieren von Webseiten
Das obige ist der detaillierte Inhalt vonDetaillierte Erklärung des PHP-Lesens, Parsens von EML-Dateien und Generieren von Webseiten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!