真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

遍歷sql文件和項目文件,查詢表名出現(xiàn)過的文件

最近在整理項目的數(shù)據(jù)庫的內(nèi)容,有兩個問題是要解決的,一個問題是有些表已經(jīng)沒有在文件里跑了,我需要篩選掉,一個問題是還在用的那些表,分別是在哪些文件里跑的?

創(chuàng)新互聯(lián)公司-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價比遂溪網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式遂溪網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋遂溪地區(qū)。費用合理售后完善,十年實體公司更值得信賴。

數(shù)據(jù)表我統(tǒng)計了一下,有200+。項目的控制器文件,當(dāng)然是兩個文件夾,一個關(guān)于前臺的,一個關(guān)于后臺的。

然后,邏輯上是這樣的,先把sql文件遍歷一遍,取出所有表名,再把每個表名去兩個文件夾里跑一遍。

寫這個程序,有三個頭是必不可少的:

header("Content-type: text/html; charset=utf-8");
error_reporting(0);
set_time_limit(0);

其實一般都是等到出現(xiàn)問題,再加上這三個頭的...

先說說遍歷sql文件,取出表名,其實很容易,不過正則表達(dá)式我寫不好,就用str_replace函數(shù)代替了。

    function sqlarr($mdir)
    {
        $str=file_get_contents($mdir);
        if(!$str)
        {
            echo '';return false;
        }
        $pattern = '/表的結(jié)構(gòu) \`.*\`/isU';
        preg_match_all($pattern, $str, $match);
        $match = array_unique($match[0]);
        static $arr = array();
        foreach ($match as $key => $value) 
        {
            $value = str_replace("`","",$value);
            $value = str_replace("表的結(jié)構(gòu) ","",$value);
            $v2 = str_replace("head_","",$value);
            //不能是帶日期的錯誤文件
            $w = '/-/isU';
            preg_match_all($w,$v2,$mm);
                if (!$mm[0]) {
                    $arr[] = $v2;
                }
        }
      return $arr;
    }

$mdir就是sql文件的路徑了,因為有些帶日期的錯誤文件,也被我篩選掉了,值得一提,這是phpmyadmin導(dǎo)出來的sql文件,一般是可以用這個方法找出所有表名的。

然后就是將返回的數(shù)組進(jìn)行循環(huán),每個值都對文件進(jìn)行遍歷就行了。

    $mSqlArr = sqlarr('URL');
        foreach ($mSqlArr as $k => $v) {
        $k++;
        echo '

'.$v.'('.$k.')

';         listDir("./",$v);     }

listDir()就是遍歷函數(shù)了。這樣子,會輸出表名和表名的排序。對兩百多個表名來說,這個查詢過程很久,程序至少需要運行十幾分鐘。

下一步就是listDir這個遞歸函數(shù)了,這個沒什么好說的,寫出來調(diào)試就可以了,我的代碼是這樣的:

function listDir($dir,$keyword)
{
//前臺的有效文件
$arrA = array();
//后臺的有效文件
$arrB = array();
$a_files = '';
$b_files = '';
  if(is_dir($dir))
    {
      if ($dh = opendir($dir)) 
    {
          while (($file = readdir($dh)) !== false)
      {
          if((is_dir($dir."/".$file)) && $file!="." && $file!="..")
        { 
          if($file == 'Action')echo "
Action路徑:",$dir.$file,"
";             listDir($dir.$file."/",$keyword);           }         else         {           $extension=substr(strrchr($file, '.'), 1);                 //這里加篩選條件               if($file!="." && $file!=".." && $extension='php' )           {             $content=file_get_contents($dir.$file);             $parameter = 'M(\''.$keyword.'\')';             $match = strpos($content,$parameter);             $num = substr_count($content,$parameter);             if(!$match)             {               $con ='';             }             else             {                $file = str_replace("Action.class.php","",$file);               $con = '文件名:'.$file;               $con .= '  次數(shù):'.$num;               //前臺               if($dir == './A/Lib/Action/')               {                 if(in_array($file,$arrA))                 {                   $con .= '(有效)

';                   $a_files .= $file.'、';                 }                 else                 {                   $con .= '(無效)

';                 }               }               elseif($dir == './B/Lib/Action/')               {                 //后臺                 if(in_array($file,$arrB))                 {                   $con .= '(有效)

';                   $b_files .= $file.'、';                 }                 else                 {                   $con .= '(無效)

';                 }               }               else               {                 $con .= '(未知)

';               }             }             //file_put_contents('../test.php',$match,FILE_APPEND);               print_r($con);               ob_flush();               flush();               }           }           }           closedir($dh);       }     }     print_r($a_files);     print_r($b_files);     return false; }

這個函數(shù)的作用,就是讓表名到兩個文件夾里去循環(huán),輸出含有該表名的文件名稱了,$arrA和$arrB就是給他判斷哪些是有效文件了(有些文件我知道作廢了)。

從路徑上看可知,這是thinkphp的目錄結(jié)構(gòu),是控制器放置的文件夾。

第一個參數(shù)是路徑,第二個參數(shù)是關(guān)鍵字,也就是表名。

最后,我寫了個可以簡單查詢單獨一個表名情況的代碼。

    $keyword = isset($_POST['keyword'])?$_POST['keyword']:'';
    //一律小寫,刪除空格
    $keyword = str_replace(' ','',strtolower($keyword));
    echo '';
    echo '搜索的表名:'.$keyword.'
';     if(!$keyword){echo '';return false;}     //開始運行     listDir("./",$keyword);

這里有個得到當(dāng)前域名的函數(shù):

    function GetCurUrl()
    {
        if(!empty($_SERVER["REQUEST_URI"]))
        {
            $scriptName = $_SERVER["REQUEST_URI"];
            $nowurl = $scriptName;
        }
        else
        {
            $scriptName = $_SERVER["PHP_SELF"];
            if(empty($_SERVER["QUERY_STRING"]))
            {
              $nowurl = $scriptName;
            }
            else
            {
              $nowurl = $scriptName."?".$_SERVER["QUERY_STRING"];
            }
        }
        return $nowurl;
    }

最后,就大功告成了。


當(dāng)前名稱:遍歷sql文件和項目文件,查詢表名出現(xiàn)過的文件
標(biāo)題來源:http://weahome.cn/article/iidehh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部