首页 > 编程语言 >php 编译代码

php 编译代码

时间:2022-11-30 12:37:37浏览次数:33  
标签:CORE 代码 class 编译 result PATH php includeFile

编译其实就是把所有的代码整合在于一个文件,减少文件包含时间,加快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;
}

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

源码面前,了无秘密



标签:CORE,代码,class,编译,result,PATH,php,includeFile
From: https://blog.51cto.com/zhenghongxin/5898230

相关文章

  • 软件架构设计杂记: 好作品是改出来的,好的代码是不断重构打磨出来的, 心性是历经艰难
    软件架构设计杂记:好作品是改出来的,好的代码是不断重构打磨出来的,心性是历经艰难困苦修炼出来的原创: 陈光剑 Kotlin开发者社区 今天起 好作品是改出来的,好的代码......
  • 统计代码行数工具
    1.cloc github: AlDanial/cloc ubuntu上安装命令:sudoaptinstallcloc   使用:进入要统计的目录执行 cloc. 结果截图:  其他平台使用请参照github上......
  • school 代码 -2022-11-30
    CREATEDATABASEIFNOTEXISTSschool;--创建一个school数据库USEschool;--创建年级表DROPTABLEIFEXISTSgrade;CREATETABLEgrade(gradeidINT(11)NOTNULLAUT......
  • php中的XML DOM(10)
    1.PHPDOM(1)Php中的DOM跟javascript不一样,属性不用另外增加一个节点2.主要类    DOMDocument:文档类    DOMNodeList:节点列表类    DOMNode:节点类   ......
  • WebService-php- 2(17)
    wsdl实例<?xmlversion='1.0'encoding='UTF-8'?><definitionstargetNamespace='http://localhost/00/'xmlns:tns='http://localhost/00/'xmlns:soap='http://schemas.xm......
  • 在线编辑器Ckeditor (1) - php (30)
    在线编辑器在线编辑器也称之为所见即所得编辑器,是一种常见的html源码编辑器。所见即所得:用户在输入的时候,不论是格式和是样式都能被系统原封不动的保存,最后在查看的时候,可以......
  • 在线编辑器Ckeditor (2) - php (31)
    接上一篇3in-page(页内)配置,在使用Ckeditor的界面里进行直接配置页内配置效果 特点:配置项完全属于某个特定的Ckeditor实例,不可重用三种配置方式比较定制方式特点说明优先......
  • c#中使用ip2region组件 3行代码就能搞定ip地址定位
    如果你的软件需要根据公网IP获取定位,那么推荐使用ip2region这个组件,c#中只用3行代码就能搞定,按照下面步骤即可先从Nuget中下载下来。这里要注意下,ip2region本身支持net4.5......
  • PHP设计超级好用的文件上传处理类一 (37)
    <?phpclassFileUpload{private$filepath;//指定上传文件保存的路径private$allowtype=array('gif','jpg','png','jpeg');//充许上传文件......
  • PHP设计日历类一 (38)
    由两个文件组成:第一个test.php<style>table{border:1pxsolid#050;}.fontb{color:white;background:blue;}th{......