例えば、FLASHが外部画像を読み込む場合、FLASHはディレクトリにどんなファイルがあるのか分からないので、ファイルのリストをXMLなどに持つことになるが、更新の際に画像ファイルのアップとXMLの更新が必要でめんどくさいし、ミスも起こりやすい。
なので自動的にXMLを吐き出してくれるPHPを作った。
ソース
<?php //GETで受け取ったフォルダ名を適応 if($_GET["dir"]){ //上位階層へのパスであればエラーにする if (ereg("../", $_GET["dir"])){ $erorr="セキュリティ上、上位階層は表示できません"; } //ルートパスであればエラーにする if($_GET["dir"][0] == "/"){ $erorr="セキュリティ上、ルートパスは使えません"; } //末尾に"/"がついていなければつける if(substr($_GET["dir"], -1, 1) != "/"){ $_GET["dir"] = $_GET["dir"] . "/"; } $path = $_GET["dir"]; }else{ $path = "./"; } //フォルダを開く if ($dir = @opendir($path) ) { //繰り返しディレクトリ内のファイルを読む while(false !== ($file = readdir($dir))) { //is_dirは参照が狂うので、パスで指定 $filePath = $path . $file; if (is_dir($filePath)){ if($file != "." && $file != ".."){ $dirs[] = $file; } }else{ $files[] = $file; } } }else if($erorr == false){ $erorr="ディレクトリを開けませんでした"; } //以下出力部分 print "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n"; ?> <info> <?php if($erorr){ print "\t<erorr message=\"" . $erorr . "\" />\n"; }else{ ?> <dirs> <?php if($dirs){ foreach($dirs as $value){ print "\t\t<dir name=\"" . $value . "\" />\n"; } } ?> </dirs> <files> <?php if($files){ foreach($files as $value){ print "\t\t<file name=\"" . $value . "\" />\n"; } } ?> </files> <?php } ?> </info>
出力例
<?xml version="1.0" encoding="UTF-8" ?> <info> <dirs> <dir name="css" /> <dir name="js" /> </dirs> <files> <file name="index.html" /> <file name="top.html" /> </files> </info>
PHPのファイル名をdirInfo.phpとしたとする
dirInfo.phpにアクセスすると、カレントディレクトリの内容のXMLが吐き出される。
また、dirInfo.php?dir=hogehogeとdirパラメータを渡すことで、hogehogeディレクトリの内容のXMLが吐き出すことができる。
※悪用されると、このPHPを設置したディレクトリ以下で表示権限を持っているファイルは、すべて見られる可能性があるので注意すること。