関数|データ|データベース
/**
* ファイルデータベース関数
* 規則:
* データベースの名前は、同じ名前のディレクトリです
* データテーブル名の接尾辞は tab
* インデックスファイルの接尾辞は ind
*管理ファイルはデータベースと同名のディレクトリ/manage.ini
* メモフィールドは で始まります 独立したファイルが存在し、ファイル名はテーブルに保持されます
* フィールドは指定された固定長または csv 形式で保存されます管理ファイルによる
* 1行に1レコード
* インデックスファイルにはキー値(固定長)とオフセットがバイナリ(長整数型)で含まれます
*
** 関数リスト(先頭に: + は実装済み、- を意味します)は部分的な実装を意味し、残りはまだ実装されていません)
FILE_DB という名前の MySQL 関数セットを適用します
* file_affected_rows: FILE_DB 列数の最後の操作の影響を取得します。
*-file_close: FILE_DB サーバー接続を閉じます。
* file_connect: FILE_DB サーバー接続を開きます。
*+file_create_db: 新しいデータベース FILE_DB を作成します。
* file_data_seek: 内部リターンポインタを移動します。
* file_db_query: クエリ文字列 (クエリ) を FILE_DB データベースに送信します。
* file_drop_db: データベースを削除します。
* file_errno: エラーメッセージコードを返します。
* file_error: エラー情報を返します。
*+file_fetch_array: 配列データを返します。
* file_fetch_field: フィールド情報を取得します。
* file_fetch_lengths: 単一列内のデータの各列の最大長を返します。
* file_fetch_object: クラスデータを返します。
*+file_fetch_row: 単一列の各フィールドを返します。
*+file_field_name: 指定されたフィールドの名前を返します。
* file_field_seek: 戻り値の特定のフィールドへのポインターを設定します。
* file_field_table: 現在のフィールドのテーブル名を取得します。
* file_field_type: 現在のフィールドのタイプを取得します。
* file_field_flags: 現在のフィールドのフラグを取得します。
* file_field_len: 現在のフィールドの長さを取得します。
* file_free_result: 占有されていたメモリを解放して返します。
* file_insert_id: 最後に使用された INSERT 命令の ID を返します。
* file_list_fields: 指定されたデータテーブルのフィールドをリストします。
* file_list_dbs: FILE_DB サーバーで利用可能なデータベースをリストします。
* file_list_tables: 指定されたデータベースのデータテーブル (テーブル) をリストします。
*+file_num_fields: 返されたフィールドの数を取得します。
*+file_num_rows: 返された列の数を取得します。
* file_pconnect: FILE_DB サーバーへの永続的な接続を開きます。
*-file_query: クエリ文字列を送信します。
* file_result: クエリの結果を取得します。
* file_select_db: データベースを選択します。
* file_tablename: データテーブルの名前を取得します。
*/
/**
*
*
$cmp_key;
/** FILE_DB データベースへのリンク
* @param データベース名
*/
function &file_connect($dbname) {
$filename = $dbname."/manage.ini";
if(!file_exists( $filename))
die("数据库:$dbnamee不存在");
$fp = fopen($filename,"r");
$s = fgets($fp,filesize($filename)+1);
fclose($fp);
$db = unserialize($s);
return $db;
}
/**FILE_DB リンクを閉じます
*
*/
function file_close(&$connection_id) {
unset($connection_id);
}
/**FILE_DB データベースを作成します
* @param データベース名
*/
function file_create_db($dbname) {
if(! @mkdir($dbname,0700))
$err = "目录已存在";
$filename = $dbname." /manage.ini";
$ar[path] = "$dbname/";
$s = Serialize($ar);
$fp = fopen($filename,"w");
fputs($fp,$ s);
fclose($fp);
}
/**SQLコマンドを実行
*
*/
function file_query($query,&$connection_id,$_line = __LINE__) {
// $query
$query = eregi_replace を解析します("[ ]+"," ",$query);
$ar = split(" ",trim(str_replace(" "," ",$query)));
$query = eregi_replace("r?n" ,"",$query);
$ch = each($ar);
switch(strtoupper($ch[1])) {
case "CREATE":
if(! eregi("テーブルを作成 (.+) [(] *(.+)[)] *$",$query,$pp))
die("SQL表达式错,$_line");
$table = $pp[1];
if(empty ($connection_id[$table])) {
// 解析字段表达式
$ar = split(",",$pp[2]);
while(list($key,$value) = each($ar) )){
$str = split(" ",trim($value));
eregi("([a-z0-9]+) ([a-z]+) ?([(]([0-9]+)[) ])?(.+)?",$value,$pp);
$field[name] = $pp[1];
$field[type] = $pp[2];
$field[len] = $pp[4];
$field[style] = trim($pp[5]);
$sss[] = $field;
}
$connection_id[$table] = array(
"fields" => $sss,
"ファイル名" => $table.".tab",
"タイプ" => "CSV"
);
$fp = fopen($connection_id[パス])。 .ini を管理する」 ,"w");
fputs($fp,serialize($connection_id));
fclose($fp);
break;
case "SELECT":
if(! eregi("select (.+) from ([ ^ ]+) *(.+)*$",$query,$pp))
die("SQL表达式错,$_line");
// SQL语句的制御部分
$exte = $pp [3];
if(! eregi("where ",$exte))
$exte = "where true ".$exte;
if(! eregi("order ",$exte))
$exte .= " order by 0";
if(! eregi("group ",$exte))
$exte = eregi_replace("order ","group by _ order ",$exte);
eregi("where (.+) *グループ化 (.+) 順序化 (.+)",$exte,$regs);
$filter = trim($regs[1]);
$group = trim($regs[2]);
$ order = trim($regs[3]);
if($group == "_") $group = "";
if($order == "0") $order = "";
// 读取データ文件
if(empty($connection_id[$pp[2]]))
die("表".$pp[2]."存在しない");
$table = $connection_id[$pp[2]] ;
if(!file_exists($connection_id[path].$table[filename])) {
// データ表尚未建立
return false;
}else {🎷 // 获取表定义字段名
for($i= 0;$i
$defaultfield = array_flip($defaultfield);
//解析筛选表达式
if($filter != "true") {
$filter = eregi_replace(" and "," && ",$filter);
$filter = eregi_replace(" or "," || ",$filter);
$filter = eregi_replace("=","==",$filter);
$filter = eregi_replace("==>","=>",$filter);
$ filter = eregi_replace(" $filter = eregi_replace("===","==",$filter);
while (ereg ('([a-z][a-z0-9_]*)', $filter, $regs)) {
$found = $regs[1];
$filter = eregi_replace("$found"," [". $defaultfield][$found]."]", $filter);
}
$filter = eregi_replace("[","$tmp][",$filter);
$filter = "$key= ($filter);";
}else
$filter ="";
// 装入文
$fp = fopen($connection_id][path].$table[filename],"r");
$ key = true;
while($tmp = fgetcsv($fp,4096,"`")) {
if(!empty($filter)) eval($filter);
if($key)
$temp[] = $tmp;
fclose($fp);
}
//输出字段を解析
$f = split(",",$pp[1]);
$expr = "";
while (リスト( $key,$value) = each($f)) {
if(eregi("(.+)[(](.+)[)](as (.+))?",$value,$pp) ) {
// 有関数数
switch(strtoupper($pp[1])) {
case "COUNT":
if(empty($pp[4]))
$n = "cnt";
else
$ n = $pp[4];
$expr .= "$rs[$n]=1;";
$sumname[] = $n;
break;
}
}else if(エレギ("(.+ ) as (.+)",$value,$pp)) {
// 有重命名
$n = $defaultfield[$pp[1]];
if(!isset($n)) die("字段名 $n 非法");
$expr .= "$rs[$pp[2]]=$temp[$i][$n];";
}else if($value == "*") {
for($i=0;$i
$expr .= "$rs[ $value]=$temp[$i][$i];";
}
}else {
$n = $defaultfield[$value];
if(!isset($n)) die("SQL エラー" );
$ expr。= "$ rs [$ value] = $ temp [$ i] [$ n];";
}
}
// expr);
$outfield = array_keys($rs);
// 分组
if($group) {
$groups = split(",",$group);
for($i=0;$i
$n = $groups[$i]>0?$groups[$i]-1:0;
$groups[$i] = $outfield[$n];
}
}
// 过录データベース
for($i=0;$i
if(!$group)
$result[] = $rs ;
else {
$n = $rs[$groups[0]];
if($sumname) {
for($ii=0;$ii
$result[$n] = $rs;
for($ii=0;$ii
}else
$result[$n] = $rs;
}
}
unset($temp);
// 解序
if($order) {
global $cmp_key;
$orders = split(",",$order);
for($i=count( $orders)-1;$i>=0;$i--) {
ereg("([0-9]+)?([a-z_][a-z0-9_]*)? *(desc )?",$orders[$i],$regs);
if(!empty($regs[1])) {
$n = $regs[1]-1;
if($n $cmp_key = $outfield[$n];
}else
$cmp_key = $regs[2];
if(empty($regs[3]))
usort($result, cmp_asc);
else
usort($result, cmp_desc);
}
}
return $result;
break;
case "INSERT":
if(! eregi("テーブル (.+) [(](.+)[)] *values? *[(](.+)[)]",$query,$pp))
die("SQL表达式错,$_line");
if(empty($connection_id[$pp[1]]))
die("表".$pp[1]."不存在");
$table = $connection_id[$ pp[1]];
// 解析目标字段名
$f = split(",",$pp[2]);
// 检查字段の適否
for($i=0;$i
die("字段名非法 ".$f[$i]);
/ / 表フィールドに基づく表构造データベース数组
for($i=0;$i
// 解析数据
eval("$d=array($pp[3]);");
// 充填表
for($i=0;$i
}
$fp = fopen($connection_id [パス].$table[ファイル名],"a");
fputs($fp,join("`",$data)."n");
fclose($fp);
break;
case "UPDATE ":
break;
default:
die("错误的SQL命令,在".$_line."行");
}
}
/**file_fetch_row: 単一列の各フィールドを返します
*
*/
function file_fetch_row(&$ result) {
$ar = each($result);
if(! $ar) return false;
while(list($k,$ch) = each($ar[1]))
$br[] = $ch;
return $br;
}
/**file_fetch_array: 配列データを返します
*
*/
function file_fetch_array(&$result) {
$ar = each($result);
if(! $ar) return false;
while(list($k,$ch) = each($ar[1])) {
$br[] = $ch;
$br[$k] = $ch;
}
return $br;
}
/**file_field_name: 指定されたフィールドの名前を返します
*
*/
function file_field_name(&$result,$n=0) {
$outfield = array_keys($result[0]);
return $outfield[$n];
}
/**file_num_rows: 返された列の数を取得します
*
*/
function file_num_rows(&$result) {
return count($result);
}
/**file_num_fields: 返されたフィールドの数を取得します
*
*/
function file_num_fields(&$result) {
return count( $result[0]);
}
/**動作する関数セット
*/
/**配列で取得
* @param $ar 配列
* @param $val 取得する値
* @param $key キー
*/
function array_scan($ar,$val,$key=0) {
for($ i=0;$i
return true;
return false;
}
/**ソート用の機能関数 (降順は usort() によって呼び出されます)
*/
function cmp_desc($a,$b) {
global $cmp_key;
if ($a[$cmp_key] == $b[$cmp_key]) return 0;
return ($a[$cmp_key] > $b[$cmp_key])? -1 : 1;
}
/**ソート用の機能関数 (昇順は usort() によって呼び出されます)
*/
function cmp_asc($a,$b) {
global $cmp_key;
if ($a[$cmp_key] == $b[$cmp_key] ) return 0;
return ($a[$cmp_key] > $b[$cmp_key]) ? 1 : -1;
}
// 应用例
file_create_db("test");
$conn = file_connect("test");
$s = "テーブルボードを作成します(
sn int Primary) key auto_increment,
name varchar(15) not null,
email varchar(30),
ip varchar(15),
time datetime,
content tinyblob not null)";
file_query($s,$conn);
/ /file_query("テーブルボード (sn,name,ip) 値 (15,'w,r,r,oi','$REMOTE_ADDR') に挿入",$conn);
//$rs = file_query(" select * from board",$conn);
$rs = file_query("select * from board where true group by 2 order by 2 desc",$conn);
//$rs = file_query("select count(*) as js,time as hj,ip as pi,name,sn from ボードグループから名前順 SN desc",$conn);
//$rs = file_query("select sn,name,email,io from board where true group by 1 order by 2 desc",$conn);
file_close($conn);
echo "
".file_field_name($rs,$i)." | ";
---|
".$d[$i]." | ";

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

SublimeText3 中国語版
中国語版、とても使いやすい

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません
