As we all know, most websites’ news information or product information are static pages. The main benefits of doing this are: 1. Speeding up access and avoiding excessive database operations; 2. SEO optimization to facilitate search engine inclusion.
This example is based on the static page solution of the CMS system and demonstrates the function of batch generating static html.
Note: The program in this article can only be run by executing PHP commands under Windows, DOS or Linux.
This example mainly has 4 files: config.inc.php (configuration file), Db.class.php (database PDO class), Model.class.php (PDO database operation class), index.php (execution file )
config.inc.php
Copy code The code is as follows:
header('Content-Type: text/html; Charset=utf-8');
date_default_timezone_set('PRC');
define('ROOT_PATH', dirname(__FILE__)); // Root directory
define('DB_DSN', 'mysql:host =localhost;dbname=article'); // MySQL's PDO dsn
define('DB_USER', 'root'); // Database user name
define('DB_PWD', '1715544'); // Database password (please set it yourself according to the actual situation)
function __autoload($className) {
require_once ROOT_PATH . '/includes/'. ucfirst($className) .'.class.php';
}
?>
Db.class.php
Copy code The code is as follows:
// Connect to database
class Db {
static public function getDB() {
try {
$pdo = new PDO(DB_DSN, DB_USER, DB_PWD);
$pdo->setAttribute(PDO::ATTR_PERSISTENT, true); // Set the database connection as a persistent connection
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // Set to throw an error
$pdo->setAttribute(PDO::ATTR_ORACLE_NULLS, true) ; // Set the string to be converted to NULL in SQL when it is empty
$pdo->query('SET NAMES utf8'); // Set the database encoding
} catch (PDOException $e) {
exit('Database connection error, error message:'. $e->getMessage());
}
return $pdo;
}
}
?>
Model.class.php
Copy code The code is as follows:
// Operation SQL
class Model {
/**
* SQL addition, deletion and modification operations, return the number of affected rows
* @param string $sql
* @return int
*/
public function aud($sql) {
try {
$pdo = Db::getDB();
$row = $pdo-> exec($sql);
} catch (PDOException $e) {
exit($e->getMessage());
}
return $row;
}
/**
* Return all data, return PDOStatement object
* @param string $sql
* @return PDOStatement
*/
public function getAll($sql) {
try {
$pdo = Db::getDB();
$result = $pdo-> ;query($sql);
return $result;
} catch (PDOException $e) {
exit($e->getMessage());
}
}
}
?>
index.php
Copy code The code is as follows:
require_once './config.inc.php';
$m = new Model();
$ids = $m->getAll("SELECT id FROM article ORDER BY id ASC");
foreach ($ids as $rowIdArr) {
$idStr .= $rowIdArr['id'].',';
}
$idStr = rtrim($idStr, ','); // Collection of ID numbers of all articles
$idArr = explode(',', $idStr); // Split into arrays
// The following program loop generates Static page
foreach ($idArr as $articleId) {
$re = $m->getAll("SELECT id,title,date,author,source,content FROM article WHERE id =". $articleId) ; // $re is the content of each article, note: its type is: PDOStatement
$article = array(); // $article is an array, saving the title, date, author, content, source
foreach ($re as $r) {
$article = array(
'title'=>$r['title'],
'date'=>$r[ 'date'],
'author'=>$r['author'],
'source'=>$r['source'],
'content'=>$r ['content']
);
}
$articlePath = ROOT_PATH. '/article'; // $articlePath is the directory where static pages are placed
if (!is_dir($articlePath)) mkdir ($articlePath, 0777); // Check whether the directory exists. If it does not exist, create it
$fileName = ROOT_PATH . '/article/' . $articleId . '.html'; // $fileName is the static file name generated, Format: article ID.html (primary key ID cannot conflict)
$articleTemPath = ROOT_PATH . '/templates/article.html'; // $articleTemPath article template path
$articleContent = file_get_contents($articleTemPath); / / Get the content in the template
// Replace the variables set in the template. For example: replace <{title}> in the template with the title read from the database, and assign the value to the variable $articleContent
$articleContent = getArticle(array_keys($article), $articleContent, $article) ;
$resource = fopen($fileName, 'w');
file_put_contents($fileName, $articleContent); // Write HTML file
}
/**
* getArticle($arr, $content, $article) Replace the template
* @param array $arr Replacement variable array
* @param string $content Template content
* @param array $article Array of content for each article, format: array('title'=>xx, 'date'=>xx, 'author'=>xx, 'source'=>xx, 'content'=> xx);
*/
function getArticle($arr, $content, $article) {
// Loop replacement
foreach ($arr as $item) {
$ content = str_replace('<{'. $item .'}>', $article[$item], $content);
}
return $content;
}
?> ;
Screenshot of the operation (DOS on Windows as an example)
Screenshot of the completion of the operation:
More than 9,000 html can be generated in about 2 minutes of running .
Column from Lee. Please indicate the source when reprinting! ! !
http://www.bkjia.com/PHPjc/756572.htmlwww.bkjia.comtruehttp: //www.bkjia.com/PHPjc/756572.htmlTechArticleAs we all know, the news information or product information on most websites are static pages. The main benefits of doing this are: 1. Speed up access and avoid excessive database operations; 2. S...