亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

遍歷sql文件和項目文件,查詢表名出現過的文件

發布時間:2020-07-10 15:57:28 來源:網絡 閱讀:678 作者:xmyID 欄目:web開發

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

數據表我統計了一下,有200+。項目的控制器文件,當然是兩個文件夾,一個關于前臺的,一個關于后臺的。

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

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

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

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

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

    function sqlarr($mdir)
    {
        $str=file_get_contents($mdir);
        if(!$str)
        {
            echo '<script>';echo 'alert(\'文件路徑不存在!\');';echo '</script>';return false;
        }
        $pattern = '/表的結構 \`.*\`/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("表的結構 ","",$value);
            $v2 = str_replace("head_","",$value);
            //不能是帶日期的錯誤文件
            $w = '/-/isU';
            preg_match_all($w,$v2,$mm);
                if (!$mm[0]) {
                    $arr[] = $v2;
                }
        }
      return $arr;
    }

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

然后就是將返回的數組進行循環,每個值都對文件進行遍歷就行了。

    $mSqlArr = sqlarr('URL');
        foreach ($mSqlArr as $k => $v) {
        $k++;
        echo '<br/><br/><b><font color="green">'.$v.'('.$k.')</font></b><br/><br/>';
        listDir("./",$v);
    }

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

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

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 "<hr><b><font color='red'>Action路徑:</font></b>",$dir.$file,"<br/>";
            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 .= '&nbsp;&nbsp;次數:'.$num;
              //前臺
              if($dir == './A/Lib/Action/')
              {
                if(in_array($file,$arrA))
                {
                  $con .= '<b><font color="blue">(有效)</font></b><br/><br/>';
                  $a_files .= $file.'、';
                }
                else
                {
                  $con .= '<b><font color="red">(無效)</font></b><br/><br/>';
                }
              }
              elseif($dir == './B/Lib/Action/')
              {
                //后臺
                if(in_array($file,$arrB))
                {
                  $con .= '<b><font color="blue">(有效)</font></b><br/><br/>';
                  $b_files .= $file.'、';
                }
                else
                {
                  $con .= '<b><font color="red">(無效)</font></b><br/><br/>';
                }
              }
              else
              {
                $con .= '<b><font color="green">(未知)</font></b><br/><br/>';
              }
            }
            //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;
}

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

從路徑上看可知,這是thinkphp的目錄結構,是控制器放置的文件夾。

第一個參數是路徑,第二個參數是關鍵字,也就是表名。

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

    $keyword = isset($_POST['keyword'])?$_POST['keyword']:'';
    //一律小寫,刪除空格
    $keyword = str_replace(' ','',strtolower($keyword));
    echo '<form method="post" action="'.GetCurUrl().'" ><input type="text" name="keyword"/><input type="submit" value="搜索表名" /></form>';
    echo '搜索的表名:'.$keyword.'<br/>';
    if(!$keyword){echo '<script>';echo 'alert(\'不能為空\');';echo '</script>';return false;}
    //開始運行
    listDir("./",$keyword);

這里有個得到當前域名的函數:

    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;
    }

最后,就大功告成了。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

佳木斯市| 邹平县| 阳西县| 贵溪市| 敦煌市| 大丰市| 钦州市| 凉山| 读书| 奎屯市| 翼城县| 尼勒克县| 扶沟县| 田阳县| 巴林右旗| 邵东县| 青铜峡市| 永州市| 红原县| 星子县| 达日县| 东乌| 黄大仙区| 永和县| 康平县| 阳城县| 钦州市| 勐海县| 碌曲县| 什邡市| 卢氏县| 明光市| 鲜城| 三台县| 常山县| 三明市| 托克托县| 雅安市| 泗洪县| 板桥市| 胶南市|