ローカルでの検索

find.php(Local Version)では検索対象ファイルのルートは「Homepage」である。
SAMPLE
define("FILE_ROOT", "C:/Users/Editor/Homepage/");

そして最終的には検索ファイルのパス名の部分で以下のようにしている。
SAMPLE
$filename = preg_replace("/C:\/Users\/Editor\/Homepage/", "", $filename);

そしてそのパス名を次のように表示している。
SAMPLE
echo "【 ".$number." 】 <a href=\"$filename\" target=\"_blank\">$title</a><br>\n";

この実行例は次のようになる。


この検索結果表示画面で「表示(V)」-「ソース(C)」を見ると次のようになっている(日本語は文字化けしているが修正した)。
SAMPLE
<a href="/library/book/bn1/book_0087.html" target="_blank">芥川龍之介「義仲論」(No.0087)</a><br>

正規のパス名「C:/Users/Editor/Homepage/library/book/bn1/book_0087.html」の「C:/Users/Editor/Homepage」がカットされている(当然)。
このリンクにマウスカーソルを置くと次のようなリンクが表示される。
SAMPLE
http://localhost/library/book/bn1/book_0087.html

これをクリックすると「http://localhost」以下に存在するファイルとして表示される。


以前はどうしていたか
さてここで、検索ファイルのパス名の部分の設定を次のように変えるとどうなるか。
SAMPLE
$filename = preg_replace("/C:\/Users\/Editor\/Homepage/", "http://localhost", $filename);

実は少し前まではこうしていたが、この変換はなくても動作は同じなので先のように「""」としてそれをカットしただけなのである。


(FileName/URL) の部分は上と違うが(当然)、他は同じである。
もちろん、リンクをクリックした時の動作も同じである。


今のようにしていいワケは
これは検索プログラム(スクリプト)を「http://localhost」で起動して実行しているからである。
SAMPLE
Homepage(C:)エリア内の検索(find.php)
<form method="post" action="http://localhost/bin/find.php" target="_blank">
(中略)
</form>

したがって、このプログラムで表示されるURLはすべて「http://localhost」にあるファイルとして表示される。わざわざ二重に「http://localhost」を付ける必要はない
これは Apache/conf/httpd.conf で「DocumentRoot "c:/Users/Editor/Homepage"」としているからである。

ただし、ファイルの検索ディレクトリを以下のようにした場合、ファイルの検索はできるが、それに「http://localhost」を付けても、検索結果の表示画面でそれをクリックしてもファイルは表示されない(クリックできない)。
SAMPLE
define("FILE_ROOT", "D:/Homepage2/");
define("FILE_ROOT", "C:/Users/Editor/CupidArt/");

これらは「いわばサイト外のファイル」であるから、このサイト内(http://localhost)ではクリックはできないというわけである。
この点については、ローカルでのCGI/PHPの実行の注意点を参照。

下記は「define("FILE_ROOT", "D:/Homepage2/");」とした場合の検索実行例。




リンクをクリックした場合

上のどちらの場合も動作は同じである。



メモ帳で編集
メニューの「ファイル(F)」-「メモ帳で編集(D)」の場合。
元のファイルではないことを示す [1] がファイルボディの末尾に付いている。
拡張子が「.htm」に変わっている。
ちなみに、元のファイル名は「book_0087.html」である。




ソース
メニューの「表示(V)」-「ソース(C)」の場合。
上とほぼ同じだが、ファイル名に拡張子が付いていない。



ファイルの保存

上のパターンでメモ帳に表示されたテキストを保存する場合である。

メモ帳で編集
メニューの「ファイル(F)」-「メモ帳で編集(D)」で読み込み、これを編集した後、そのメモ帳で「名前をつけて保存(A)...」した場合である。
現在の場合は、「D:\Homepage2\tavern\sjk\ns3」の位置に保存される。これは多分カレントディレクトリであろう。固定的なものではなく、状況によってさまざまに変わる。


デフォルトのファイル名をそのまま使ってもよい。
ここを別のファイル名や拡張子に変更して保存してもよい。たとえば、book_0087.htmlなどでもよい。
これを元のファイルがあるディレクトリにそれと同名のbook_0087.htmlで保存すると、実質的に書き換えができることになる。


ソース
メニューの「表示(V)」-「ソース(C)」で読み込み、これを編集した後、そのメモ帳で「名前をつけて保存(A)...」した場合である。ほぼ上と同じである。


ここでファイル名が「book_0087[2]」になっているのは、先に保存した「book_0087[1]」があったからである。
ここは拡張子がないと確認などで不便になるから「.txt」という拡張子をつけて保存する。
「.txt」にしても実質的にはHTML形式のファイルである。


seek.cgiの場合

ほとんどfind.phpの場合と同じである。
seek.cgi(Local Version)でも検索対象ファイルのルートは「Homepage」である。
SAMPLE
$gTargetDir = "C:/Users/Editor/Homepage/" . $gFolder;

ブラウザで利用できるように実際のパス名をURLに変換する必要があるが、そこが問題になってくる点は同じである。
SAMPLE
$file =~ s/C:\/Users\/Editor\/Homepage/http:\/\/localhost/;
$file =~ s/C:\/Users\/Editor\/Homepage//;

こうすればリンクをクリックしてファイルは表示できるが、元のファイルそのものを直接は編集はできないが、上のようにメモ帳で読み込み、ファイルの保存をすることはできる。
このプログラムを http;//localhost から起動するかぎり、上2つは同じ結果になる(find.phpと同じ)。

- 2019/08/17 -