セキュリティの関わる問題なので削除させていただきました。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
全く意味がわからないです、、
php
1//EXPLAINファイルを解析してクエリ種類とデータベース名を抽出 2 function CheckExplainParce($u_userid,$u_id){ 3 $cnt=0;//$cnt=無効 4 $results=array();//結果=配列() 5 $cur_db="default";//$cur_db(使用DB)="default" 6 $sql_query="";//$sql_query=""(クエリ種類?) 7 $sql_query_no=0;//$sql_query_no=無効 8 $exp_file=DIR_RESULT."/${u_userid}/${u_id}.exp";//大事 9 10 if ( !($fp=fopen($exp_file,"r")) ){ return $results; }//fopen()=ファイルをオープン。 $fp=開けた$exp_fileが"r"ではない場合 $resultsを返す。 11 while(!feof($fp)){//while=ループ文 feof — ファイルポインタがファイル終端に達しているかどうか調べる $fのファイルポインタがファイル終端に達していない場合以下をループする。 12 13 14 $data = fgets($fp, 10240); //fgets — ファイルポインタから1行取得する $data = ($fp, 10240)でファイルポインタから1行取得する 15 $data=str_replace(array("\r\n","\n","\r"), '', $data);//str_replace — 検索文字列に一致したすべての文字列を置換する 配列(改行、改行、改行),空白,fgets($fp, 10240); 16 if ( eregi("^use ",$data) ){//eregi — 大文字小文字を区別せずに正規表現によるマッチングを行う useからはじまる、$data(どうなってるか不明?)の場合 17 list($dummy,$cur_db)=split("[ ;]",$data); //list — 配列と同様の形式で、複数の変数への代入を行う split — 正規表現により文字列を分割し、配列に格納する ($dummy,$cur_db("default"?))=("[ ;]"を,$dataに配列に格納する) 18 }"[ ;]",$data//よくわからない 19 20 //クエリ 21 if ( eregi("^explain ",$data) ){//explainからはじまる,$data(どうなっているか不明)の場合 22 $sql_query=substr($data,8);//substr — 文字列の一部分を返す $sql_query=($dataの8)を返す 23 //$this->log("QUERY=[$sql_query]",LOG_DEBUG); 24 $sql_query_no++;//$sql_query_noに1を足す 25 } 26 27 // トークン部分の解析 28 // 29 // 【解析仕様】 30 // ・トークンは『ABSTRACT SYNTAX TREE』行と『STAGE DEPENDENCIES』行の間にある 31 // ・データベース名及びテーブル名(以降 オブジェクト部)は次のターゲットトークンの次の行以降にインデントされて定義されている 32 // → TOK_TABNAME、TOK_TABTYPE、TOK_ALTERTABLE、TOK_TABTYPE、TOK_SHOW 33 // ・オブジェクト部には『データベース名行 + テーブル名行』または『テーブル名行』のパターンがある 34 // ・オブジェクト部の範囲はターゲットトークンのインデントと同じまたは浅い行の前行までとする 35 // ・オブジェクト部に別のターゲットトークンがあった場合、オブジェクト部はその前行までとし、別のターゲットトークン以降を新しいオブジェクト部として処理する 36 // 37 if (eregi("^ABSTRACT SYNTAX TREE", $data) and !feof($fp)) {//^ABSTRACT SYNTAX TREE"からはじまる$data(どうなってるか不明?)と$fpがファイルポインタがファイル終端に達していない場合 38 $data = fgets($fp, 10240);//$data = ($fp, 10240)でファイルポインタから1行取得する 39 $data = str_replace(array("\r\n","\n","\r"), '', $data);//配列(改行、改行、改行),空白,fgets($fp, 10240); 40 41 $sql_type="";//$sql_type=空白 42 43 while (!feof($fp)) {//$fのファイルポインタがファイル終端に達していない場合以下をループする。 44 if (eregi("^STAGE DEPENDENCIES", $data)) { break; }//STAGE DEPENDENCIESからはじまる$data(どうなってるか不明?)の場合、break(何するか不明) 45 46 $sql_type = CommonComponent::CheckTOK2SQLtype(trim($data), $sql_type);//トークン名からクエリに変換 //trim — 文字列の先頭および末尾にあるホワイトスペースを取り除く 47 48 if (eregi("^TOK_TABNAME|^TOK_TABTYPE|^TOK_ALTERTABLE|^TOK_TABTYPE|^TOK_SHOW|^TOK_CREATEDATABASE|^TOK_DROPDATABASE", trim($data))) {//trim — 文字列の先頭および末尾にあるホワイトスペースを取り除く "^TOK_TABNAME|^TOK_TABTYPE|^TOK_ALTERTABLE|^TOK_TABTYPE|^TOK_SHOW|^TOK_CREATEDATABASE|^TOK_DROPDATABASE"からはじまる(文字列の先頭および末尾にあるホワイトスペースを取り除いた$data())の場合 49 $tok_indent = strlen($data) - strlen(ltrim($data));//strlen — 文字列の長さを得る ltrim — 文字列の最初から空白 (もしくはその他の文字) を取り除く $tok_indent = ($data)の長さ - (($data))の文字列の最初から空白 (もしくはその他の文字) を取り除いた長さ 50 $token = trim($data);// $token =文字列の先頭および末尾にあるホワイトスペースを取り除いた($data)(何が入っているかさっぱり) 51 52 $data = fgets($fp, 10240);//$data = ($fp, 10240)でファイルポインタから1行取得する 53 $data = str_replace(array("\r\n","\n","\r"), '', $data);//配列(改行、改行、改行),空白,fgets($fp, 10240); 54 55 $objects = array();//$objects = 配列() 56 57 while (!feof($fp)) {//fpがファイルポインタがファイル終端に達していない場合 58 if (eregi("^TOK_TABNAME|^TOK_TABTYPE|^TOK_ALTERTABLE|^TOK_TABTYPE|^TOK_SHOW|^TOK_CREATEDATABASE|^TOK_DROPDATABASE", trim($data))) { break; }//"^TOK_TABNAME|^TOK_TABTYPE|^TOK_ALTERTABLE|^TOK_TABTYPE|^TOK_SHOW|^TOK_CREATEDATABASE|^TOK_DROPDATABASE"からはじまる(文字列の先頭および末尾にあるホワイトスペースを取り除いた$data())の場合,break(何するか不明) 59 if ($tok_indent >= (strlen($data) - strlen(ltrim($data)))) { break; }//>= より多いか等しい $tok_indentの長さが($data) -(($data))の文字列の最初から空白 (もしくはその他の文字) を取り除いた長さと等しいかそれより多い場合、break(何するか不明) 60 61 if (!eregi("^TOK_|\.", trim($data))) {//^TOK_|\.からはじまる文字列の先頭および末尾にあるホワイトスペースを取り除いた$data(どうなってるか不明?)ではない場合 62 $objects[] = trim($data);//$objectsの[]の中身=先頭および末尾にあるホワイトスペースを取り除いた$data(どうなってるか不明?) 63 } 64 $data = fgets($fp, 10240);//$data = ($fp, 10240)でファイルポインタから1行取得する 65 $data=str_replace(array("\r\n","\n","\r"), '', $data);//配列(改行、改行、改行),空白,fgets($fp, 10240); 66 } 67 68 if (count($objects) >= 2) {//count — 変数に含まれるすべての要素、 あるいは$objectsつまりarray()に含まれる何かの数を数える $objectsが2と等しいかそれより大きい場合 69 $results[$cnt]->no = $sql_query_no; 70 $results[$cnt]->type = $sql_type; 71 $results[$cnt]->db = $objects[0]; 72 $results[$cnt]->tbl = $objects[1]; 73 $cnt++; 74 } else if (count($objects) == 1) {//上のifが偽で$objectsつまりarray()が1と等しい場合 75 $results[$cnt]->no = $sql_query_no; 76 $results[$cnt]->type = $sql_type; 77 if (eregi("^TOK_SHOW|^TOK_CREATEDATABASE|^TOK_DROPDATABASE", $token)) {//"^TOK_SHOW|^TOK_CREATEDATABASE|^TOK_DROPDATABASE"からはじまる $tokenつまり(trim($data)の場合 78 $results[$cnt]->db = $objects[0]; 79 $results[$cnt]->tbl = ""; 80 } else {//上のifが偽の場合 81 $results[$cnt]->db = $cur_db; 82 $results[$cnt]->tbl = $objects[0]; 83 } 84 $cnt++; 85 } else if (count($objects) == 0 and eregi("^TOK_SHOW", $token)) {//上のeleseifが偽で$objectsつまりarray()が0と等しい&"^TOK_SHOW"からはじまる $tokenつまり(trim($data)の場合 86 $results[$cnt]->no = $sql_query_no; 87 $results[$cnt]->type = $sql_type; 88 $results[$cnt]->db = $cur_db; 89 $results[$cnt]->tbl = ""; 90 $cnt++; 91 } 92 } else {//上のif,eleseifが全て偽の場合 93 $data = fgets($fp, 10240);//$data = ($fp, 10240)でファイルポインタから1行取得する 94 $data = str_replace(array("\r\n","\n","\r"), '', $data);//配列(改行、改行、改行),空白,fgets($fp, 10240); 95 } 96 } 97 98 $sql_query = "";//$sql_query = 空白 99 } 100 } 101 fclose($fp);//fclose — オープンされたファイルポインタをクローズする $fpをクローズする 102 return $results;//$resultsを返す。 103 }
php
1 //トークン名からクエリに変換 2 function CheckTOK2SQLtype($data,$sql_type){ 3 if ( $data == "TOK_DESCTABLE" ){ return "desc"; } 4 if ( $data == "TOK_CREATETABLE" ){ return "create table"; } 5 if ( $data == "TOK_TABREF" ){ return "select"; } 6 if ( $data == "TOK_INSERT" ){ return "insert"; } 7 if ( $data == "TOK_DROPTABLE" ){ return "drop table"; } 8 if ( eregi("^TOK_SHOW",$data) ){ return "show"; } 9 if ( eregi("^TOK_ALTER",$data) ){ return "alter table"; } 10 11 if ( $data == "TOK_CREATEDATABASE" ){ return "create database"; } 12 if ( $data == "TOK_DROPDATABASE" ){ return "drop database"; } 13 14 return $sql_type; 15 }
投稿2016/07/20 08:07
編集2016/07/20 10:27総合スコア227
0
ベストアンサー
丸投げしても誰もまともに答えてくれませんよ。
分かる部分もあるはずなので、分からない部分を聞いた方がいいと思います。
これはファイルを読み込んで必要なデータを抽出するコードですね。
SQLのリストを読み込んでいるのでしょうか。
結構古いコードかもしれません。
eregi()はもう非推奨ですし、$objects = array();をオブジェクトとして扱っていますし。
投稿2016/07/14 17:54
総合スコア1409
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/07/20 08:55
2016/07/20 09:44
2016/07/20 12:16
2016/07/20 12:32
2016/07/20 13:04
2016/07/20 13:57
2016/07/20 14:07
2016/07/21 00:43
2016/07/21 00:52
2016/07/21 01:32
2016/07/21 01:51
2016/07/21 01:56
2016/07/21 02:08
2016/07/21 02:09
2016/07/21 02:20 編集
2016/07/21 02:20
2016/07/21 02:25
2016/07/21 02:31
2016/07/21 02:33
2016/07/21 03:06
2016/07/21 04:17
2016/07/21 05:09
2016/07/21 06:12
2016/07/21 06:21
2016/07/21 06:35