列挙型ファイル検索
Perl/CGIで常用している列挙型ファイル検索をPHPでも作ってみたものである。
任意の検索ディレクトリを指定できパラメーターや対象ファイルがUTF-8でもShift_JISでも検索できる。
これはローカルでの動作確認である。SJISで記述したHTMLから呼び出している。送出されるデータもSJISである。
なお、UTF-8で記述したHTMLから呼び出す例はここ。その実行結果は同じである。そのログも同じである。
【POST方式/find.php】
access log
::1 - - [11/Jul/2013:19:35:54 +0900] "POST /bin/find.php HTTP/1.1" 200 3379
【GET方式/find.php】
マルクス/実行できる
access log
::1 - - [11/Jul/2013:19:36:00 +0900] "GET /bin/find.php?fd=cupid/card&wd=\x83}\x83\x8b\x83N\x83X HTTP/1.1" 200 9307
%A5%DE%A5%EB%A5%AF%A5%B9/実行できる
access log
::1 - - [11/Jul/2013:19:36:05 +0900] "GET /bin/find.php?fd=cupid/card&wd=%A5%DE%A5%EB%A5%AF%A5%B9 HTTP/1.1" 200 9307
PHPの場合。
CGIによる列挙型ファイル検索
これは従来からあるCGI版である。POST/GET両用である。検索結果の表示形式をHTML5に合わせただけである。
【POST方式/seek.cgi】
access log
::1 - - [11/Jul/2013:19:36:14 +0900] "POST /bin/seek.cgi HTTP/1.1" 200 3047
【GET方式/seek.cgi】
マルクス/実行できない(ローカルではGETの日本語引数は動作しない)
error log
[Thu Jul 11 19:44:03.993069 2013] [cgi:error] [pid 23288:tid 844] [client ::1:60515] AH01215: Quantifier follows nothing in regex; marked by <-- HERE in m/? <-- HERE }???N?X/ at C:/Users/Editor/Homepage/bin/seek.cgi line 175, <IN> line 1.\r
この場合は動作が中途終了している。
参考
<!doctype html>
<html lang="ja">
<head>
<meta name="robots" content="noindex,nofollow">
<meta charset="euc-jp">
<meta http-equiv="content-style-type" content="text/css">
<style type="text/css">
body {color:black;font-size:9pt;line-height:130%;font-family:」ヘ」モ フタトォ,Osaka;background-color:white;margin:5px 20px;}
hr {width:100%;size:1px;}
.rd {color:red;}
.brd {color:red;font-weight:bold;}
.nv {color:navy;}
.bnv {color:navy;font-weight:bold;}
.ma {color:#cc3366;}
.bma {color:#cc3366;font-weight:bold;}
.bu {color:blue;}
.gr {color:green;}
.cy {color:#008080;}
</style>
<title>ク。コ・フ</title>
</head>
<body>
<span class='rd'>。・?}???N?X </span><span class='bu'>、゙、爭ユ・。・、・・/span> <br>
<hr>
%A5%DE%A5%EB%A5%AF%A5%B9/実行できる(ローカルのGETでは日本語はURLエンコードが必要)
access log
::1 - - [11/Jul/2013:19:36:26 +0900] "GET /bin/seek.cgi?fd=cupid/card&wd=%A5%DE%A5%EB%A5%AF%A5%B9 HTTP/1.1" 200 9198
Perl/CGIの場合。
CGIでの日本語引数の場合
CGIのプログラムを見ればわかるように、これでは「日本語」のクエリキーワードの解釈は無理なことは明白である。
クエリキーワードにナマの日本語を使った場合のログをみれば、検索すべきキーワードが正しい文字列として取得されていないということは明らかである。
具体的にいえば、$strWord の値が得体の知れないものだからこういうエラーになるということである。
その175行目はこれである。
SAMPLE
if ( $line =~ /$strWord/i )
Quantifierは「量を定める、量を表す」という意味である。
このメッセージは得体の知れない文字列を正規表現だと誤解したもののようである。それで「Quantifier follows nothing in regex」ということになった。実際の問題点とはまるで見当違いなものである。もっとも、これはこういうエラーメッセージには普通のことである。
重要
実行できるできない、動作するしない、は固定的なものではなく、現時点でのseek.cgiとfind.phpに基づいたものである。以後の修正によってどのように変わるかはわからない。
- 2013/07/09 -
タコの殿堂
改悪退化を突っ走るMicrosoftの営業方針の弊害で、フレーム分割でのPOST方式での別画面での実行はできない。
単発ページとして表示すると実行できる。