/*************************************************** ******************* クラス: Mht File Maker バージョン: 1.2 beta 日付: 2007/02/11 作成者: Wudi 説明: クラスは .mht ファイルを作成できます。 ************************************** ********************************/ class MhtFileMaker{ var $config = array(); var $headers = array(); var $headers_exists = array(); var $files = array(); var $boundary; var $dir_base; var $page_first; function MhtFile($config = array()){ } function SetHeader($header){ $this- > ;headers[] = $header; $key = strto lower(substr($header, 0, strpos($header, ':'))); $this->headers_exists[$key] = TRUE; } function SetFrom($from){ $this->SetHeader("From: $from"); } function SetSubject($subject){ $this->SetHeader("Subject: $subject") ; } 関数 SetDate($date = NULL, $istimestamp = FALSE){ if ($date == NULL) { $date = time(); } if ($istimestamp = = 本当) { $date = date('D, d M Y H:i:s O', $date); } $this->SetHeader("Date: $date"); } function SetBoundary($boundary = NULL) ){ if ($boundary == NULL) { $this->boundary = '--' 。 strtoupper(md5(mt_rand())) 。 '_MULTIPART_MIXED'; } else { $this->boundary = $boundary; } } 関数 SetBaseDir($dir){ $this->dir _base = str_replace("\", "/", realpath($dir)); } function SetFirstPage($filename){ $this->page_first = str_replace("\", "/", realpath("{$this->dir_base}/$filename ")); } function AutoAddFiles(){ if (!isset($this->page_first)) { exit ('最初のページを設定しません。'); $filepath = str_replace($ this->dir_base, '', $this->page_first); $filepath = 'http://mhtfile' 。 $filepath; $this->AddFile($this->page_first, $filepath, NULL); $this->AddDir($this->dir_base); } 関数 AddDir($dir) { $handle_dir = opendir($dir); while ($filename = readdir($handle_dir)) { if (($filename!='.') && ($filename!='..') && (" $dir/$filename"!=$this->page_first)) { if (is_dir("$dir/$filename")) { $this->AddDir("$dir/$filename"); }elseif (is_file("$dir/$filename")) { $filepath = str_replace($this->dir_base, '', "$dir/$filename"); $filepath = 'http://mhtfile' 。 $filepath; $this->AddFile("$dir/$filename", $filepath, NULL); } } closedir( $handle_dir); } function AddFile($filename, $filepath = NULL, $encoding = NULL){ if ($filepath == NULL) { $filepath = $filename; } $mimetype = $this->GetMimeType($filename); $filecont = file _get_contents($ filename); $this->AddContents($filepath, $mimetype, $filecont, $encoding); } function AddContents($filepath, $mimetype, $filecont, $encoding = NULL){ if ($ encoding == NULL) { $filecont = chunk_split(base64_encode($filecont), 76); $encoding = 'base64'; } $this->files[] = array('filepath' $ファイルパス, $mimetype, 'filecont' => 'encoding' => $encoding); } 関数 CheckHeaders(){ if (!array_key_exists('date ', $this->headers_exists)) { $this->SetDate(NULL, TRUE); } if ($this->boundary == NULL) { $this->SetBoundary() ; } } function CheckFiles(){ if (count($this->files) == 0) { return FALSE; } else { return TRUE; } } 関数 GetFile() { $this->CheckHeaders(); if (!$this->CheckFiles()) { exit ('ファイルは追加されませんでした。'); } $contents = implode("rn", $ this->headers); $contents .= "rn"; $contents .= "MIME-Version: 1.0rn"; $contents .= "Content-Type: multipart/popular;rn"; $contents .= "tboundary="{$this->境界}";rn"; $contents .= "ttype="" . $this->files[0]['mimetype'] . ""rn"; $contents .= "X-MimeOLE: Mht ファイルによって生成Maker v1.0 betarn"; $contents .= "rn"; $contents .= "これは MIME 形式のマルチパート メッセージです。rn"; $contents .= "rn"; foreach ($this ->ファイルを $file として) { $contents .= "--{$this->boundary}rn"; $contents .= "Content-Type: $file[mimetype]rn"; $contents 。 = "Content-Transfer-Encoding: $file[encoding]rn"; $contents .= "Content-Location: $file[filepath]rn"; $contents .= "rn"; $contents .= $file ['filecont']; $contents .= "rn"; } $contents .= "--{$this->boundary}--rn"; return $contents; } 関数ファイル( $filename){ $contents = $this->GetFile(); $fp = fopen($filename, 'w'); fwrite($fp, $contents); fclose($fp); } 関数 GetMimeType($filename){ $pathinfo = pathinfo($filename); switch ($pathinfo['extension']) { case 'htm': $mimetype = 'text/html'; Break; case 'html': $mimetype = 'text/html'; Break; case 'txt': $mimetype = 'text/plain'; Break; case 'cgi': $mimetype = 'text/plain'; Break; case 'php': $mimetype = 'text/plain'; Break; case 'css': $mimetype = 'text/css'; Break; case 'jpg': $mimetype = 'image/jpeg'; Break; case 'jpeg': $mimetype = 'image/jpeg'; Break; case 'jpe': $mimetype = 'image/jpeg'; Break; case 'gif': $mimetype = 'image/gif'; Break; case 'png': $mimetype = 'image/png'; Break; デフォルト: $mimetype = 'application/octet-stream'; Break; } return $mimetype; } } ?>
ポイント评:この方法の欠点は、承認量生成のダウンロードをサポートしていないため、1 つのヘッダーが 1 つあるためです(無论远程使用は本件で承認されており、ヘッダー面のみを出力できます)、循環生成の場合、結果も 1 つだけです単語生成(もちろん上面を修正できる方法で来实现)
2.纯HTML格式写入word
原理:
ob_start を利用して html 页面先存储起来(解决一下页面多个ヘッダー、大量生成可能)、その後、doc 文档コンテンツの書き込みに利用
代記入:
复制代記入 代記入如下:
class word { function start() { ob_start(); echo ' xmlns:w= "urn:schemas-microsoft-com:office:word" xmlns="http://www.w3.org/TR/REC-html40">'; } 関数 save($path) { echo ""; $data = ob_get_contents(); ob_end_clean(); $this->wirtefile ($path,$data); } function wirtefile ($fn,$data) ) { $fp=fopen($fn,"wb"); fwrite($fp,$data); fclose($fp); } }
复制代 代码如下:
$html = ' PHP10086 http://www.jb51.net PHP10086 http://www.jb51.net PHP10086 最新の PHP 技術分享网站 表> '; //批量生成 for($i=1;$i $word = new word(); $word->start(); //$html = "aaa".$i; $wordname = 'PHP教程网站--jb51.net'.$i.".doc"; echo $html; $word->save($wordname); ob_flush();//每次执行前刷新缓存 flush(); }
人点评:这种方法效果最好,原因三个:
最初の代価比较简洁、容易に理解できます 2番目は批量生成単語のサポート(これは重要)です 3番目は完全なhtml代コードのサポートです
http://www.bkjia.com/PHPjc/748163.html www.bkjia.com true http://www.bkjia.com/PHPjc/748163.html 技術記事 一、PHP で単語を生成する 2 つの考え方または原理 1. Windows 下のコンポーネントを利用する 2. PHP を利用してドキュメントファイルにコンテンツを書き込む 具体的な実現方法は次のとおりです。
声明: この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。