zoukankan      html  css  js  c++  java
  • php 编译代码

    编译其实就是把所有的代码整合在于一个文件,减少文件包含时间,加快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}
    ";
                        }
                        break;
                    // 过滤空格
                    case T_WHITESPACE :
                        if (! $last_space)
                        {
                            $stripStr .= ' ';
                            $last_space = true;
                        }
                        break;
                    case T_START_HEREDOC :
                        $stripStr .= "<<<
    ";
                        break;
                    case T_END_HEREDOC :
                        $stripStr .= "
    ";
                        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;
    }

    生成之后,代码会糅合在一起。

  • 相关阅读:
    动态生成java、动态编译、动态加载
    boostrap标签
    Java后端WebSocket的Tomcat实现
    编程过程与规范
    敏捷开发过程
    软件过程模型
    软件过程
    ISO9126 质量模型
    手机淘宝架构演化实践
    蒋勋:知识分子应具备怎样的美学修养
  • 原文地址:https://www.cnblogs.com/zhenghongxin/p/6795113.html
Copyright © 2011-2022 走看看