標籤:架構 require clu pre config sql substr get define
編譯其實就是把所有的代碼整合在於一個檔案,減少檔案包含時間,加快php解析,雖然最佳化後時間上提升了不多,但
能最佳化便多多少少進行最佳化。下面給一個編譯例子,從而引申。
// 定義編譯狀態define(‘COMPILE‘, true);// 引入架構入口(項目架構入口)require_once ‘rukou.php‘;$result = ‘‘;// 引入想要引入的核心檔案$result .= includeFile(PATH_CORE_DRIVER . "Config/ConfigBase.class.php");$result .= includeFile(PATH_CORE_DRIVER . ‘Config/ConfigPhp.class.php‘);$result .= includeFile(PATH_CORE_DRIVER . ‘Config/Config.class.php‘);$result .= includeFile(PATH_CORE_DRIVER . "Cache/CacheBase.class.php");$result .= includeFile(PATH_CORE_DRIVER . ‘Cache/CacheFile.class.php‘);$result .= includeFile(PATH_CORE_DRIVER . ‘Cache/Cache.class.php‘);$result .= includeFile(PATH_CORE_DRIVER . ‘Log/LogBase.class.php‘);$result .= includeFile(PATH_CORE_DRIVER . ‘Log/LogFile.class.php‘);$result .= includeFile(PATH_CORE_DRIVER . ‘Log/Log.class.php‘);$result .= includeFile(PATH_CORE_DRIVER . "Db/DbBase.class.php");$result .= includeFile(PATH_CORE_DRIVER . ‘Db/DbMysql.class.php‘);$result .= includeFile(PATH_CORE_DRIVER . ‘Db/Db.class.php‘);// 引入核心其它檔案foreach ($arr as $value){ $result .= includeFile(PATH_CORE . "{$value}.class.php");}// 定義已編譯狀態$fc = strip_whitespace(file_get_contents(‘Yurun.php‘));$fc = substr($fc, 5);$fc = "<?php define(‘IS_COMPILED‘,true);{$fc}";// 寫出檔案file_put_contents(‘compile_success.php‘, str_replace(‘// {compile}‘, $result, $fc),LOCK_EX);header(‘Content-type: text/html; charset=utf-8‘);echo ‘產生成功!‘;/** * 將PHP檔案讀入並去除空格和注釋 * * @param type $file * @return type */function includeFile($file){ return substr(strip_whitespace(file_get_contents($file)), 5);}/** * 去除代碼中的空白和注釋 * * @param string $content * 代碼內容 * @return string */function strip_whitespace($content){ $stripStr = ‘‘; // 分析php源碼 $tokens = token_get_all($content); $last_space = false; for ($i = 0, $j = count($tokens); $i < $j; $i ++) { if (is_string($tokens[$i])) { $last_space = false; $stripStr .= $tokens[$i]; } else { switch ($tokens[$i][0]) { // 過濾各種PHP注釋 case T_COMMENT : case T_DOC_COMMENT : if (stripos($tokens[$i][1], ‘{compile}‘) !== false) { $stripStr .= "// {compile}\n"; } break; // 過濾空格 case T_WHITESPACE : if (! $last_space) { $stripStr .= ‘ ‘; $last_space = true; } break; case T_START_HEREDOC : $stripStr .= "<<<\n"; break; case T_END_HEREDOC : $stripStr .= "\n"; for ($k = $i + 1; $k < $j; $k ++) { if (is_string($tokens[$k]) && $tokens[$k] === ‘;‘) { $i = $k; break; } else if ($tokens[$k][0] === T_CLOSE_TAG) { break; } } break; default : $last_space = false; $stripStr .= $tokens[$i][1]; } } } return $stripStr;}
產生之後,代碼會糅合在一起。
php 編譯代碼