php 編譯代碼

來源:互聯網
上載者:User

標籤:架構   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 編譯代碼

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.