検索
ホームページバックエンド開発PHPチュートリアルPHP_PHP チュートリアルで Web ページを Word ファイルとして保存する 3 つの方法

1. PHP で単語を生成するための 2 つのアイデアまたは原則

1. Windows で com コンポーネントを使用します
2. PHP を使用してコンテンツを doc ファイルに書き込みます
具体的な実装方法は次のとおりです。

2. Windows で com コンポーネントを使用します

原則: com は PHP の拡張クラスであり、office がインストールされているサーバーは自動的に word.application の com を呼び出し、PHP 公式ドキュメント マニュアル: http://www.php.net/manual/en/ を自動的に生成します。クラス.com.php

公式の例を使用してください:

コードをコピーします コードは次のとおりです:
// starting word
$word = new COM("word.application") or die("Unable to instantiate Word");
echo "Loaded Word, version {$word->Version}n";

//前面に表示
$word->Visible = 1;

//空の文書を開きます
$word->ドキュメント->Add();

//何か奇妙なことをしてください
$word->Selection->TypeText("これはテストです...");
$word->Documents[1]- >SaveAs( "Useless test.doc");

//単語を閉じる
$word->Quit();

//オブジェクトを解放する
$word = null;
?>

個人的な提案: com インスタンス以降 このメソッドの意味を知るには公式ドキュメントを参照する必要がありますが、エディターにはコード プロンプトがないため、非常に不便です 。

3. PHPを使用してコンテンツをdocファイルに書き込みます
この方法は2つの方法に分けられます

1. mht 形式 (HTML に非常に似ています) を生成し、Word に書き込みます
2. 純粋な HTML 形式を Word に書き込みます


1)、mht 形式 (HTML に非常に似ています) を生成し、Word に書き込みます

コードをコピーします コードは次のとおりです:
/**
* HTML コードに基づいて Word ドキュメントのコンテンツを取得します
* 本質的に mht であるドキュメントを作成します この関数は、ファイルのコンテンツを分析し、リモートの場所からページ内の画像リソースをダウンロードします
* この関数はクラス MhtFileMaker に依存します
*この関数は img タグを解析し、src の属性値を抽出します。ただし、src の属性値は引用符で囲む必要があります。そうしないと抽出できません
*
* @param string $content HTML コンテンツ
* @param string $absolutePath Web ページの絶対パス。 HTML コンテンツ内の画像パスが相対パスの場合、関数によって絶対パスが自動的に入力されるように、このパラメータを入力する必要があります。このパラメータは /
で終わる必要があります * @param bool $isEraseLink HTML コンテンツ内のリンクを削除するかどうか
*/
function getWordDocument( $content , $absolutePath = "" , $isEraseLink = true )
{
$mht = new MhtFileMaker();
if ($isEraseLink)
$content = preg_replace( '/(s*.*?s*)/i' , '$1' , $content); // リンクを削除します

$images = array ( );
$files = array();
$matches = array();
//このアルゴリズムでは、src の後の属性値を引用符で囲む必要があります
if ( preg_match_all('/PHP_PHP チュートリアルで Web ページを Word ファイルとして保存する 3 つの方法/i',$content ,$matches ) )
;
if ( $imgPath ! = "")
//絶対リンク、プレフィックスなし
elles $ mht-> addcontents( "tmp.html"、$ mht-> getmimeType( "tmp.html")、$ content); $i=0;$i {
$image = $images[$i];
if ( @ fopen($image, 'r') )
$imgcontent = mht- >GetMimeType ($image),$imgcontent);
Return $mht->GetFile ();
}

この関数の主な機能は、実際には、HTML コード内のすべての画像アドレスを分析し、それらを 1 つずつダウンロードすることです。画像のコンテンツを取得した後、MhtFileMaker クラスを呼び出して、画像を mht ファイルに追加します。追加の具体的な詳細は MhtFileMaker クラスにカプセル化されます。

利用方法1:リモート呼び出し

コードをコピー コードは以下の通りです:
$url= http://www.***.com;

$content = file_get_contents($url);

$fileContent = getWordDocument($content,"http://www.yoursite.com/Music/etc/");
$fp = fopen("test.doc", 'w');
fwrite($fp , $fileContent) ;
fclose($fp);
このうち、$content 変数は HTML ソース コードである必要があり、次のリンクは HTML コード内の画像の相対パスを記入できる URL アドレスである必要があります


このうち、$content変数はHTMLソースコードである必要があり、次のリンクはHTMLコード内の画像の相対パスを埋めることができるURLアドレスである必要があります

使用方法 2: ローカルで生成された呼び出し

コードをコピーします コードは次のとおりです:

header("Cache-Control: no-cache, must-revalidate");
header("Pragma: no -cache") ;
$wordStr = 'PHP チュートリアル Web サイト--jb51.net';
$fileContent = getWordDocument($wordStr);
$fileName = iconv("utf-8", "GBK", 'PHP チュートリアル' . '_' . $intro . rand(100, 999));
header("Content-Disposition: 添付ファイル名 = . ".doc ");
この関数を使用する前に、MhtFileMaker クラスを含める必要があることに注意してください。このクラスは Mht ドキュメントの生成に役立ちます。

コードをコピーします

コードは次のとおりです:
/*************************************************** *******************
クラス: 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

最新の PHP 技術分享网站
PHP_PHP チュートリアルで Web ページを Word ファイルとして保存する 3 つの方法


表>
';

//批量生成
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.htmlwww.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/748163.html技術記事一、PHP で単語を生成する 2 つの考え方または原理 1. Windows 下のコンポーネントを利用する 2. PHP を利用してドキュメントファイルにコンテンツを書き込む 具体的な実現方法は次のとおりです。
PHP10086 http://www.jb51.net
PHP10086 http://www.jb51.net
声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
どのデータをPHPセッションに保存できますか?どのデータをPHPセッションに保存できますか?May 02, 2025 am 12:17 AM

phpssionscanStorestrings、numbers、arrays、andobjects.1.strings:textdatalikeusernames.2.numbers:integersorfloatsforcounters.3.arrays:listslikeshoppingcarts.4.objects:complextructuresthataresialized。

どのようにPHPセッションを開始しますか?どのようにPHPセッションを開始しますか?May 02, 2025 am 12:16 AM

tostartaphpsession、outsession_start()atthescript'sbeginning.1)placeitbe foreanyouttosetthesscookie.2)usesionsionsionsionserdatalikelogintatussorshoppingcarts.3)再生セッションインドストップレベントフィックスアタック

セッションの再生とは何ですか?また、セキュリティをどのように改善しますか?セッションの再生とは何ですか?また、セキュリティをどのように改善しますか?May 02, 2025 am 12:15 AM

セッション再生とは、新しいセッションIDを生成し、セッション固定攻撃の場合にユーザーが機密操作を実行するときに古いIDを無効にすることを指します。実装の手順には次のものが含まれます。1。感度操作を検出、2。新しいセッションIDを生成する、3。古いセッションIDを破壊し、4。ユーザー側のセッション情報を更新します。

PHPセッションを使用する際のパフォーマンスの考慮事項は何ですか?PHPセッションを使用する際のパフォーマンスの考慮事項は何ですか?May 02, 2025 am 12:11 AM

PHPセッションは、アプリケーションのパフォーマンスに大きな影響を与えます。最適化方法には以下が含まれます。1。データベースを使用してセッションデータを保存して応答速度を向上させます。 2。セッションデータの使用を削減し、必要な情報のみを保存します。 3.非ブロッキングセッションプロセッサを使用して、同時実行機能を改善します。 4.セッションの有効期限を調整して、ユーザーエクスペリエンスとサーバーの負担のバランスを取ります。 5.永続的なセッションを使用して、データの読み取り時間と書き込み時間を減らします。

PHPセッションはCookieとどのように異なりますか?PHPセッションはCookieとどのように異なりますか?May 02, 2025 am 12:03 AM

phpsesionsareserver-side、whilecookiesareclient-side.1)Sessionsionsionsoredataontheserver、aremoresecure.2)cookiesstoredataontheclient、cookiestoresecure、andlimitedinsizeisize.sesionsionsionivationivationivationivationivationivationivationivate

PHPはユーザーのセッションをどのように識別しますか?PHPはユーザーのセッションをどのように識別しますか?May 01, 2025 am 12:23 AM

phpidentifiesauser'ssessionsingsinssessionCookiesIds.1)whensession_start()iscalled、phpgeneratesauniquesidstoredsored incoookienadphpsessidontheuser'sbrowser.2)thisidallowsphptortorieSessiondatadata fromthata

PHPセッションを保護するためのベストプラクティスは何ですか?PHPセッションを保護するためのベストプラクティスは何ですか?May 01, 2025 am 12:22 AM

PHPセッションのセキュリティは、次の測定を通じて達成できます。1。session_regenerate_id()を使用して、ユーザーがログインまたは重要な操作である場合にセッションIDを再生します。 2. HTTPSプロトコルを介して送信セッションIDを暗号化します。 3。Session_Save_Path()を使用して、セッションデータを保存し、権限を正しく設定するためのSecure Directoryを指定します。

PHPセッションファイルはデフォルトで保存されていますか?PHPセッションファイルはデフォルトで保存されていますか?May 01, 2025 am 12:15 AM

phpsessionFilesToredInthededirectoryspecifiedBysession.save_path、通常/tmponunix-likesystemsorc:\ windows \ temponwindows.tocustomizethis:1)uesession_save_path()tosetaCustomdirectory、ensuringit'swritadistradistradistradistradistra

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン