PHP バッチ生成静的 html_PHP チュートリアル

WBOY
リリース: 2016-07-13 17:48:02
オリジナル
892 人が閲覧しました

ご存知のとおり、ほとんどの Web サイトのニュース情報や製品情報は静的なページです。これを行うことの主な利点は次のとおりです。 1. アクセスが高速化され、過剰なデータベース操作が回避されます。 2. SEO が最適化され、検索エンジンへの組み込みが容易になります。

この例は、CMS システムの静的ページ ソリューションに基づいており、静的 html をバッチ生成する機能を示しています。

注: この記事のプログラムは、Windows、DOS、または Linux で PHP コマンドを実行することによってのみ実行できます。

この例には主に 4 つのファイルがあります: config.inc.php (設定ファイル)、Db.class.php (データベース PDO クラス)、Model.class.php (PDO データベース操作クラス)、index.php (実行ファイル)

config.inc.php


plaincopy をクリップボードに表示print? header('Content-Type:text/html;Charset=utf-8'); date_default_timezone_set('PRC'); define('ROOT_PATH', dirname(__FILE__)); // ルートディレクトリ
define('DB_DSN', 'mysql:host=localhost;dbname=article'); // MySQL の PDO DSN
define('DB_USER', 'root'); // データベースユーザー名
define('DB_PWD', '1715544'); // データベースパスワード (実際の状況に応じて設定してください)
関数 __autoload($className) {
require_once ROOT_PATH . ucfirst($className)
; }
?>
header('Content-Type:text/html;Charset=utf-8');
date_default_timezone_set('PRC');
define('ROOT_PATH', dirname(__FILE__)); // ルートディレクトリ
define('DB_DSN', 'mysql:host=localhost;dbname=article'); // MySQL の PDO DSN
define('DB_USER', 'root'); // データベースユーザー名
define('DB_PWD', '1715544'); // データベースパスワード (実際の状況に応じて設定してください)
関数 __autoload($className) {
require_once ROOT_PATH . '/includes/'.ucfirst($className) .'.class.php';
}
?>
DB.class.php

plaincopy をクリップボードに表示print? // データベースに接続します
クラス DB {
静的パブリック関数 getDB() {
{
をお試しください $pdo = 新しい PDO(DB_DSN, DB_USER, DB_PWD); $pdo->setAttribute(PDO::ATTR_PERSISTENT, true); // データベース接続を永続接続に設定します
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION) // セットアップでエラーがスローされます
$ PDO-& GT; Setattribute (PDO :: Attr_Ooracle_nulls, TRUE); // 文字列を空の SQL に変換します
$pdo->query('SET NAMES utf8') // データベースのエンコーディングを設定します
} catch (PDOException $e) {
exit( 'データベース接続エラー、エラーメッセージ:'。$ e-> getmessage()); }
$pdo を返します
}
}
?>
// データベースに接続します
クラス DB {
静的パブリック関数 getDB() {
試してみてください{
$pdo = 新しい PDO(DB_DSN, DB_USER, DB_PWD);
$pdo->setAttribute(PDO::ATTR_PERSISTENT, true); //データベース接続を永続接続として設定します
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION) // エラーをスローするように設定します
$pdo->setAttribute(PDO::ATTR_ORACLE_NULLS, true); //文字列が空の場合に設定され、SQL で NULL に変換されます
$pdo->query('SET NAMES utf8') // データベースのエンコーディングを設定します
} キャッチ (PDOException $e) {
exit('データベース接続エラー、エラー メッセージ:'. $e->getMessage());
}
$pdo を返します;
}
}
?>
Model.class.php


plaincopy をクリップボードに表示print? // SQL を操作します
クラスモデル {
    /**
* SQL の追加、削除、変更操作では、影響を受ける行の数を返します
* @param 文字列 $sql
* @return int
​​*/
    パブリック関数 aud($sql) {
        {
を試してください             $pdo = Db::getDB(); 
            $row = $pdo->exec($sql); 
        } catch (PDOException $e) {
            exit($e->getMessage()); 
        }
        $row を返します。 
    }
     
    /**
* すべてのデータを返し、PDOStatement オブジェクトを返します
* @param 文字列 $sql
* @return PDOStatement
​​*/
    パブリック関数 getAll($sql) {
        {
を試してください             $pdo = Db::getDB(); 
            $result = $pdo->query($sql); 
            $result を返します。 
        } catch (PDOException $e) {
            exit($e->getMessage()); 
        }
    }
}
?> 
// SQL を操作します
クラスモデル{
 /**
* SQL の追加、削除、変更操作では、影響を受ける行の数を返します
* @param 文字列 $sql
* @return int
​*/
 パブリック関数 aud($sql) {
  試してみてください{
   $pdo = Db::getDB();
   $row = $pdo->exec($sql);
  } キャッチ (PDOException $e) {
   exit($e->getMessage());
  }
  $row を返します;
 }
 
 /**
* すべてのデータを返し、PDOStatement オブジェクトを返します
* @param 文字列 $sql
* @return PDOStatement
​*/
 パブリック関数 getAll($sql) {
  試してみてください{
   $pdo = Db::getDB();
   $result = $pdo->query($sql);
   $result を返します;
  } キャッチ (PDOException $e) {
   exit($e->getMessage());
  }
 }
}
?>
        インデックス.php


plaincopy をクリップボードに表示print? require_once './config.inc.php'; $m = 新しいモデル
; $ids = $m->getAll("ID ASC 順に記事から ID を選択"); foreach ($ids as $rowIdArr) {
$idStr .= $rowIdArr['id'].','; }
$idStr = rtrim($idStr, ',') // 全記事のID番号の集合
; $idArr =explode(',', $idStr) // 配列に分割します
; //次のプログラムはループして静的ページを生成します
foreach ($idArr as $articleId) {
$re = $m->getAll("SELECT id,title,date,author,source,content FROMarticle WHERE id =". $articleId); // $re は各記事のコンテンツです。 注: そのタイプは次のとおりです。 :PDOステートメント
$article = array(); // $article は各記事のタイトル、日付、著者、内容、ソースを保存する配列です
foreach ($re として $r) {
$article = array(
'タイトル'=>$r['タイトル']、
「日付」=>$r[「日付」]、
‘著者’=>$r['著者'],
‘ソース’=>$r['ソース'],
「コンテンツ」=>$r['コンテンツ']
); }
$articlePath = ROOT_PATH. '/article'; // $articlePath は静的ページが配置されるディレクトリです
If (!is_dir($articlePath)) mkdir($articlePath, 0777); // ディレクトリが存在するかどうかを確認し、存在しない場合は作成します
$fileName = ROOT_PATH . '/article/' . $articleId . '.html'; // $fileName によって生成される静的ファイル名、形式: 記事 ID.html (主キー ID は競合できません) $articleTemPath = ROOT_PATH . '/templates/article.html' // $articleTemPath 記事テンプレートのパス
$articleContent = file_get_contents($articleTemPath) // テンプレートのコンテンツを取得します
; //テンプレートに設定されている変数を置き換えます。つまり、例: テンプレート内の <{title}> をデータベースから読み取ったタイトルに置き換え、その値を変数 $articleContent に割り当てます
; $articleContent = getArticle(array_keys($article), $articleContent, $article); $resource = fopen($fileName, 'w'); File_put_contents($fileName, $articleContent) // HTML ファイルを書き込みます
}

/**
* getArticle($arr, $content, $article) はテンプレートを置き換えます
* @param 配列 $arr 置換変数配列
* @param string $content テンプレートのコンテンツ
* @param array $article 各記事のコンテンツの配列、形式: array('title'=>xx, 'date'=>xx, 'author'=>xx, 'source'=>xx, 'コンテンツ '=>xx);
​*/
関数 getArticle($arr, $content, $article) {
// ループ置換
foreach ($arr as $item) {
$content = str_replace('<{'. $item .'}>', $article[$item], $content); }
$content を返します。 }
?>
require_once './config.inc.php';
$m = 新しいモデル();
$ids = $m->getAll("記事から ID を選択 ID ASC で注文");
foreach ($ids as $rowIdArr) {
$idStr .= $rowIdArr['id'].',';
}
$idStr = rtrim($idStr, ',') // 全記事のID番号の集合
; $idArr =explode(',', $idStr) // 配列に分割します
; //次のプログラムはループして静的ページを生成します
foreach ($idArr として $articleId) {
$re = $m->getAll("SELECT id,title,date,author,source,content FROMarticle WHERE id =". $articleId); // $re は各記事のコンテンツです。 注: そのタイプは次のとおりです。 :PDOステートメント
$article = array(); // $article は各記事のタイトル、日付、著者、内容、ソースを保存する配列です
foreach ($re として $r) {
$article = 配列(
'タイトル'=>$r['タイトル'],
'日付'=>$r['日付'],
'著者'=>$r['著者'],
'ソース'=>$r['ソース'],
'コンテンツ'=>$r['コンテンツ']
);
}
$articlePath = ROOT_PATH. '/article'; // $articlePath は静的ページが配置されるディレクトリです
if (!is_dir($articlePath)) mkdir($articlePath, 0777); // ディレクトリが存在するかどうかを確認し、存在しない場合は作成します
$fileName = ROOT_PATH . '/article/' . $articleId . '.html'; // $fileName によって生成される静的ファイル名、形式: 記事 ID.html (主キー ID は競合できません) $articleTemPath = ROOT_PATH . '/templates/article.html' // $articleTemPath 記事テンプレートのパス
$articleContent = file_get_contents($articleTemPath) // テンプレートのコンテンツを取得します
; //テンプレートに設定されている変数を置き換えます。例: テンプレート内の <{title}> をデータベースから読み取ったタイトルに置き換え、その値を変数 $articleContent
; $articleContent = getArticle(array_keys($article), $articleContent, $article);
$resource = fopen($fileName, 'w');
file_put_contents($fileName, $articleContent) //HTML ファイルを書き込みます
}

/**

* getArticle($arr, $content, $article) はテンプレートを置き換えます
* @param 配列 $arr 置換変数配列
* @param string $content テンプレートのコンテンツ
* @param array $article 各記事のコンテンツの配列、形式: array('title'=>xx, 'date'=>xx, 'author'=>xx, 'source'=>xx, 'コンテンツ '=>xx);
​*/
function getArticle($arr, $content, $article) {
// ループの置き換え
foreach ($arr as $item) {
$content = str_replace('<{'. $item .'}>', $article[$item], $content);
}
$content を返します;
}
?>
​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​(Windows DOS を例として)

実行後のスクリーンショット:


9,000 を超える HTML を生成するには約 2 分かかります。

Lee.さんのコラムより抜粋



http://www.bkjia.com/PHPjc/478451.htmlwww.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/478451.html技術記事ご存知のとおり、ほとんどの Web サイト上のニュース情報や製品情報のほとんどは静的なページです。これを行う主な利点は次のとおりです。 1. アクセスを高速化し、過剰なデータベース操作を回避します。 2. S...
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート