質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

Q&A

解決済

2回答

1138閲覧

セキュリティの関わる問題なので削除させていただきました。

amaguri

総合スコア227

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

0グッド

0クリップ

投稿2016/07/14 02:24

編集2018/06/18 09:35

セキュリティの関わる問題なので削除させていただきました。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答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
amaguri

総合スコア227

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

coba-coba

2016/07/20 08:55

入力ファイルがあれば分かりやすいんですけどね。 ありますか? あと、このコードを読む目的って何でしょうか。 学習用ならさらっと読めばいいと思いますし、このコードを使うと決まっているならテスト用データなどで試しながら読めばいいですし。
amaguri

2016/07/20 09:44

EXPLAINファイルでしょうか? また読解した続きや CheckTOK2SQLtypeの追加しました。 今回の目的としては このコードから EXPLAINで宣言されたDB名とクエリの抽出するのが目的です。。 例えばhiveクエリでこのコマンドを実行すると use default; use default; create table IF NOT EXISTS tb_20160719170325 (col int); show tables; Logging initialized using configuration in file:/opt/mapr/hive/hive-1.0/conf/hive-log4j.properties use default OK Time taken: 1.133 seconds use default OK Time taken: 0.031 seconds explain extended create table IF NOT EXISTS tb_20160719170325 (col int) OK ABSTRACT SYNTAX TREE: TOK_CREATETABLE TOK_TABNAME tb_20160719170325 TOK_IFNOTEXISTS TOK_LIKETABLE TOK_TABCOLLIST TOK_TABCOL col TOK_INT STAGE DEPENDENCIES: Stage-0 is a root stage STAGE PLANS: Stage: Stage-0 Create Table Operator: Create Table columns: col int if not exists: true input format: org.apache.hadoop.mapred.TextInputFormat output format: org.apache.hadoop.hive.ql.io.IgnoreKeyTextOutputFormat serde name: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe name: default.tb_20160719170325 Time taken: 0.313 seconds, Fetched: 27 row(s) explain extended show tables OK ABSTRACT SYNTAX TREE: TOK_SHOWTABLES STAGE DEPENDENCIES: Stage-0 is a root stage Stage-1 depends on stages: Stage-0 STAGE PLANS: Stage: Stage-0 Show Table Operator: Show Tables database name: default result file: file:/tmp/apache/488d427e-20a5-487c-87ca-b7c191ccef94/hive_2016-07-19_17-03-44_191_4220815827536929933-1/-local-10000 Stage: Stage-1 Fetch Operator limit: -1 Processor Tree: ListSink Time taken: 0.031 seconds, Fetched: 22 row(s) のようなファイルが出ています
coba-coba

2016/07/20 12:16

目的はご質問文中のコードをそのまま使ってEXPLAINファイルから必要なデータを抽出するということですね。 EXPLAINファイルが手元にあるようなので、ご質問文中のコードの各ステップで変数の中身を出力させてみましょう。 コードをただ読むだけよりも理解度が高まります。 確かに他人が書いたコードを追っていくのは難しいですよね。 でも、ご質問文中のコードに書かれているamaguriさんのコメントを読む限りは、コードの意味は理解できていると思います。 もし分からない部分があれば、また別途質問してください。 今回のような質問だと、amaguriさんは何が分からないのか分かりません。 それにもしも私がコードが分かったとして、何をどのように答えていいのか分かりません……。
amaguri

2016/07/20 12:32

$dataの動き fgets($fp, 10240); $data=str_replace(array("\r\n","\n","\r"), '', $data); $objects = array(); など がうごきをみてもイマイチ分からないのと このコードのながれはなんとなくわかるんですが。。 EXPLAINで宣言されたDB名とクエリの抽出をどうされているのがまったくわからないです。。 このクエリで宣言されている DB名 クエリ は最終的にどの変数で宣言されているのかを教えていただきたいです。
coba-coba

2016/07/20 13:04

fgets($fp, 10240); http://php.net/manual/ja/function.fgets.php →ファイルから1行を読みこむ。10240 - 1 バイト または行末までを読み込む。 $data=str_replace(array("\r\n","\n","\r"), '', $data); http://php.net/manual/ja/function.str-replace.php $dataの文字列に対して、array("\r\n","\n","\r")(改行コード)に該当する部分を''(空)に置換して、置換後の文字列を$dataに入れる。 $objects = array(); http://php.net/manual/ja/language.types.object.php →配列を宣言。後のコードでオブジェクトとして扱っていますが、最近はこれはできません。 --------------------------- 多分ですが、 DB名:$results[$cnt]->db クエリ:$sql_query クエリタイプ:$results[$cnt]->type クエリタイプはCheckTOK2SQLtype()から返される値のことです。
amaguri

2016/07/20 13:57

クエリ:$sql_queryとするとこのコードでの クエリに解析はすぐに終わって DB名の抽出からの書き起こしがめいんなのでしょうか? 最後のほうの $sql_query = ""; でなかみをからにしている理由もよくわからず、、です このコードを読解してDB名とクエリを抽出して何がしたいかというと 別途でしつもんして答えていただいた クエリの対象のデータベースがDBに登録してあるかの確認と このクエリが更新系なのか参照系なのかの切り分けをするため クエリとデータベースをもってきたいという感じです
coba-coba

2016/07/20 14:07

そうですね、このコードではクエリは使わず、CheckTOK2SQLtype()のクエリタイプを使っています。 クエリが入っているはずの$sql_queryは結局何にも使いません。 なので$sql_query = "";とする意味もありません。 もしかしたらCheckTOK2SQLtype()のクエリタイプがamaguriさんのいうクエリなんでしょうか。 クエリタイプでも更新系か参照系か判別することはできますし。
amaguri

2016/07/21 00:43

function CheckTOK2SQLtype($data,$sql_type) 使っているということですかね? 自分の言ってるクエリは INSERT DROPなどがわかるものを指しています
amaguri

2016/07/21 00:52

$sql_type = CommonComponent::CheckTOK2SQLtype(trim($data), $sql_type); と宣言していますが function CheckTOK2SQLtype($data,$sql_type)が動く意味をいまいちわからず CommonComponentでcommon.phpの中のものを使う宣言対象が CheckTOK2SQLtype($data,$sql_type)なのに CheckTOK2SQLtype(trim($data), $sql_type);と $dataにtrimの宣言をしていて 宣言が別物になってる気がするんですが、、 あくまでもCommonComponentの宣言はCheckTOK2SQLtype()に対してかかっているんでしょうか。。。
coba-coba

2016/07/21 01:32

「クエリ」も「クエリタイプ」もコードでの言い方なので、私もそれに合わせていました。 function CheckTOK2SQLtype($data,$sql_type)で何をしているか分かりますか? この関数を呼び出したら、"select"や"insert"などの文字列を返してくれます。 amaguriさんが欲しいクエリはこのことですよね。 -------------------------- ①CommonComponent::CheckTOK2SQLtype(trim($data), $sql_type); ↓ ②function CheckTOK2SQLtype($data,$sql_type) これは①から②にデータを送り、②で処理を行うということです。 データの受け渡しは、  ①のtrim($data)の値は②の$dataで受け取る  ①の$sql_typeは②の$sql_typeで受け取る のようになります。 例えば、②function CheckTOK2SQLtype($a,$b)としたら、$aと$bでデータを受け取ることになります。 つまり、  $a = trim($data);  $b = $sql_type; のようなことをしています。
amaguri

2016/07/21 01:51

$dataがEXPLAINファイルを展開して 整列などをして必要なデーターの抽出しているのはイメージできたんですが $sql_typeや$results[$cnt]->type を持ってきても もうこれはCheckTOK2SQLtype()によってreturnで書き換えられたコマンドを持ってくるだけにんりますよね? クエリの判断をTOK_のトークン状態の時に識別しようとしたらどの時に$data?か何かを持ってきたらTOK_トークン状態で持ってこれるでしょうか?
amaguri

2016/07/21 01:56

つまり CommonComponent::CheckTOK2SQLtype(trim($data), $sql_type); ↓ function CheckTOK2SQLtype($data,$sql_type) にデータを送る時の引数が$data、$sql_typeなのを CommonComponent::CheckTOK2SQLtype(trim($data), $sql_type); の時に$dataのデータをtrimして文字列の先頭および末尾にあるホワイトスペースを取り除いた$dataを渡しているといるということであっていますでしょうか?
coba-coba

2016/07/21 02:08

//クエリ if ( eregi("^explain ",$data) ){ $sql_query=substr($data,8); //$this->log("QUERY=[$sql_query]",LOG_DEBUG); $sql_query_no++; } このクエリというのが元データを見ていないので不明ですが、このクエリってなんなんでしょうね。 > クエリの判断をTOK_のトークン状態の時に識別しようとしたらどの時に$data?か何かを持ってきたらTOK_トークン状態で持ってこれるでしょうか? $sql_type = CommonComponent::CheckTOK2SQLtype(trim($data), $sql_type); ここでの$dataです。
coba-coba

2016/07/21 02:09

> CommonComponent::CheckTOK2SQLtype(trim($data), $sql_type); の時に$dataのデータをtrimして文字列の先頭および末尾にあるホワイトスペースを取り除いた$dataを渡しているといるということであっていますでしょうか? その認識で合っています。
amaguri

2016/07/21 02:20 編集

なるほどなんとなく理解できていたのが繋がってきました、、 $objects = array();の if (count($objects) >= 2)や(count($objects) == 1)の数値が array()の中?の1や2や0も何処で決まっているのかがわからないです。。
coba-coba

2016/07/21 02:25

コードのコメントに、 // ・オブジェクト部には『データベース名行 + テーブル名行』または『テーブル名行』のパターンがある とありますよね。 『データベース名行 + テーブル名行』の場合は「データベース名行」と「テーブル名行」の2つ、『テーブル名行』の場合は「テーブル名行」が1つをオブジェクトから取得できるということだと思います。
amaguri

2016/07/21 02:31

なるほど、、 これはDBとTBのオブジェクトだったんですね。。 これ解読して疑問が浮かんだんですが コマンドでDBの選択するとき 複数選択できますが たとえばクエリが対象しているDBが 二つ以上あるときでもDBがちゃんと2つとも抽出されて表示されていますがこれはどうやって抽出して表示してるのかが疑問です。。
amaguri

2016/07/21 02:33

while (!feof($fp)) {  if (eregi("^STAGE DEPENDENCIES", $data)) { break; } } でループしているからひたすら叩いて表示するものを何度も持ってきているんでしょうか?
coba-coba

2016/07/21 03:06

下記のコメントとコードから、データベース名はデータがある限り全て取得しているように思えます。 // ・データベース名及びテーブル名(以降 オブジェクト部)は次のターゲットトークンの次の行以降にインデントされて定義されている // → TOK_TABNAME、TOK_TABTYPE、TOK_ALTERTABLE、TOK_TABTYPE、TOK_SHOW while (!feof($fp)) { if (eregi("^TOK_TABNAME|^TOK_TABTYPE|^TOK_ALTERTABLE|^TOK_TABTYPE|^TOK_SHOW|^TOK_CREATEDATABASE|^TOK_DROPDATABASE", trim($data))) { break; } if ($tok_indent >= (strlen($data) - strlen(ltrim($data)))) { break; } if (!eregi("^TOK_|\.", trim($data))) { $objects[] = trim($data); } $data = fgets($fp, 10240); $data=str_replace(array("\r\n","\n","\r"), '', $data); }
amaguri

2016/07/21 04:17

なるほど、、 これが $results[$cnt]->db や $results[$cnt]->type に送信されると思うのですが この中に複数DBやTBの指定があった場合は複数のデータが $results[$cnt]->db や $results[$cnt]->type に入っているということなのでしょうか?
coba-coba

2016/07/21 05:09

そうですね。$resultsに必要なデータが複数入っています。
amaguri

2016/07/21 06:12

処理が全て終わった return $results;の中に入っているということであっていますでしょうか? なので この$results;を取得してそこから$results[$cnt]->dbと$results[$cnt]->typeを抽出してあげないと、 if文上の$results[$cnt]->dbと$results[$cnt]->typeを取得してもその時のループの値でしかないため複数データは入っていないという認識でよろしいでしょうか? それとも$results[$cnt]->dbを宣言してあげていれば宣言されたクエリの対象のDB名が全て取得できるのでしょうか?
coba-coba

2016/07/21 06:21

> 処理が全て終わったreturn $results;の中に入っているということであっていますでしょうか? その通りです。 > この$results;を取得してそこから$results[$cnt]->dbと$results[$cnt]->typeを抽出してあげないと、 if文上の$results[$cnt]->dbと$results[$cnt]->typeを取得してもその時のループの値でしかないため複数データは入っていないという認識でよろしいでしょうか? これもその通りです。
amaguri

2016/07/21 06:35

なるほどありがとうございます おかげさまで解読という点での謎は解けました。 ここから INSERT DROPなどの宣言された時更新先のDBを判断するという解析をしなければいけないので おそらくこのコードでは TOK_ほにゃらら の取得はできますが TOK_更新系 の場合 TOK_更新系 DB名 のDBをおそらくEXPLAINファイルを解析して抽出するに移行しますので一度closeとして 新たに質問させていただきたいと思います。
guest

0

ベストアンサー

丸投げしても誰もまともに答えてくれませんよ。
分かる部分もあるはずなので、分からない部分を聞いた方がいいと思います。

これはファイルを読み込んで必要なデータを抽出するコードですね。
SQLのリストを読み込んでいるのでしょうか。

結構古いコードかもしれません。
eregi()はもう非推奨ですし、$objects = array();をオブジェクトとして扱っていますし。

投稿2016/07/14 17:54

coba-coba

総合スコア1409

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

amaguri

2016/07/19 00:48

お返事ありがとうございます。 次から意識して質問したいと思います。
coba-coba

2016/07/19 03:47

解読は進んでますか?
amaguri

2016/07/19 04:04

少しずつ読み進めていますが クエリ文、DBの抽出はわかるんですが if (eregi("^ABSTRACT SYNTAX TREE", $data) and !feof($fp)) { 以下は表示方法のだしわけなのではないかというところまではできました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問