• 技术文章 >php教程 >php手册

    一个可以找出源代码中所有中文的工具

    2016-06-13 12:36:54原创317
    一个可以找出源代码中所有中文的工具

    填写需要查找的路径$sf即可。

    功能
    1 找出所有中文
    2 忽略注释语句中的中文
    3 可添加需要忽略的文件和文件夹
    4 生成日志文件

    如果您正发愁为自己的软件更新语言包
    请使用此工具。

    我的例子:
    http://127.0.0.1/tools/searchcn.php
    http://127.0.0.1/tools/cnlog.txt

    复制代码 代码如下:


    set_time_limit(0);
    ob_implicit_flush();

    //注释格式
    $remark = array(
    array('//debug', "\r\n")
    , array('/**', '*/')
    , array('/*debug', '*/')
    , array('/*note', '*/')
    , array('//note', "\r\n")
    );

    //以下目录和文件不被查询
    $filter = 'forumdata|config\.inc\.php|debug|test|readme|utilities|upgrade|\.tpl.php|index\.htm|\.lang.php';

    //项目目录
    $sf = 'd:\\data\\labs\\develop\\dzhead\\';

    //日志目录
    $logname = 'cnlog.txt';
    $langfile = 'lang.php';


    $log = fopen($logname, 'w');
    fclose($log);

    $lf = fopen($langfile, 'wb');
    fwrite($lf, "\r\n\r\n\t'spilt' => '----------------------------------------------------',");
    fclose($lf);

    $lf = fopen($langfile, 'ab');


    $ptag = '\\';

    findfile($sf);
    fwrite($lf, "\r\n);\r\n\r\n?>");
    fclose($lf);
    function findfile($sf){
    global $ptag, $logname, $filter, $lf;
    $log = fopen($logname, 'ab');
    global $remark;
    if(is_dir($sf)) {
    if($dh = opendir($sf)) {

    while(($file = readdir($dh)) !== false) {
    if($file == '.' || $file == '..') {
    continue;
    } elseif(filetype($sf.$file) == 'dir') {
    findfile($sf.$file.$ptag);
    } elseif((preg_match('/\.php$/', $file) || preg_match('/\.htm$/', $file)) && !preg_match('/('.$filter.')/', $sf.$file)) {

    $sfp = fopen($sf.$file, 'rb');
    $buf = fread($sfp, filesize($sf.$file));
    fclose($sfp);
    foreach($remark as $v) {
    $data = '';
    while(count($strcut = explode($v[0], $buf, 2)) > 1) {
    $data .= $strcut[0];
    if(($strcut = explode($v[1], $strcut[1], 2)) > 1){
    $buf = $strcut[1];
    } else {
    $buf = $strcut[0];
    break;
    }

    }
    $data .= $strcut[0];
    $buf = $data;
    }
    $data = $buf;
    $lines = 0;
    $cn = $str = '';
    $cns = 0;
    $ldata = "\r\n\t'".str_replace('.', '_', $file)."' => '";
    for($i = 0; $i < strlen($data); $i++){
    $c = ord($data{$i});
    if($c == 0x0A || $data{$i+1} == ''){
    $lines++;
    if(!empty($cn)){
    $ldata .= "',";
    $ldata = str_replace("\r\n\t'".str_replace('.', '_', $file)."' => '',", '', $ldata);
    fwrite($lf, $ldata);
    $cn = "\r\n$lines:".$cn;
    $str .= $cn;
    $cn = '';
    $ldata = "\r\n\t'".str_replace('.', '_', $file)."' => '";
    }
    } elseif($c >= 0x81 && $c <= 0xFE) {
    $c = ord($data{++$i});
    if($c >= 0x40 && $c <= 0xFE) {
    $cn .= $data{$i-1}.$data{$i};
    $ldata .= $data{$i-1}.$data{$i};
    while(($c = ord($data{++$i})) != 0x3C && $c != 0x0A && $c != 0x0D && $c != 0x27 && $c != 0x3E && $c != 0x3B && $c != 0x22 && $c != 0x3D && $c < 0x81) {
    $space .= chr($c);
    }
    $i--;
    if(ord($data{$i+1}) < 0x81) {
    $cns++;
    $cn .= '$';
    $ldata .= "',\r\n\t'".str_replace('.', '_', $file)."' => '";
    } else {
    $cn .= $space;
    }
    $space = '';
    }
    }
    }
    if($str != '') {
    fwrite($log, "\n--".$sf.$file."----------------------- (共 $cns 处)");
    echo "{$sf}$file (共 $cns 处)
    ";
    ob_flush();flush();
    $cns = 0;
    }
    fwrite($log, $str);
    $str = '';
    }
    }
    }
    }
    fclose($log);

    }
    ?>

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    上一篇:《APMServ 5.1.2》使用图解 下一篇:php.ini 中文版
    千万级数据并发解决方案

    相关文章推荐

    • PHP查询登录中的sql注入• PHP数字字符串左侧补0、字符串填充和自动补齐的几种方法• PHP MySQL开发中的一些经验• CodeIgniter自带的数据库类使用介绍• 鸟哥谈PHP的架构与未来发展
    1/1

    PHP中文网