2011-01-11 4 views
0

私はこのようになりますディレクトリ構造を持っている:読むのファイル構造が、特定のファイルのみ

/expandables 
- folder 
- folder 
- folder 
- folder 
    - BannerInfo.txt 
    - index.html 

folderのそれぞれがまったく同じstuctureを持っています。 1つのファイルはBannerInfo.txtindex.htmlです。これらのフォルダが約250あります。

これらのフォルダをループして、index.html個の各ファイルをアレイに格納したいとします。 index.htmlファイルの中には、単純なHTMLとJavascriptがあり、後で表示する文字列を読みたいものです。

個別のフォルダからindex.htmlファイルのみをフィルタリングする方法に苦労しています。

この目的は、index.htmlファイルをランダムに選択してその内容をテキストエリアに入れたいからです。私は返された配列に単純なarray_rand()を実行し、文字列を吐き出すことができると思った。

アイデア?

EDIT:

私はこのような何かを思い付いた:

<? 

    $expandables = array(); 

    $expandables = scandir("expandables/"); 

    $count = 0; 

    foreach($expandables as $expandable) { 
     if ($expandable != "." && $expandable != "..") { 
      $expandableCode = "expandables/" . $expandable . "/index.html"; 

      // get value of index.html for select list 
      $expandableValue = file_get_contents($expandableCode); 


      // echo out options 
      echo "<option value='$expandableValue'>$expandable</option>"; 

     } 
    }  



?> 

しかし、これは厳密に正しく動作していません。選択ボックスから一度選択すると、テキストエリアにindex.htmlの内容を動的に入力する方法はありますか?

+0

ファイルを開いてファイルを読み込んで操作する必要があります。 PHPドキュメントを見てください:http://www.php.net/manual/en/function.file.php – B4NZ41

答えて

1

readdir()またはscandir()を使用すると、各ディレクトリの内容(ファイル名)を取得できます。 is_dir()を使用して、見つかった項目がファイルかディレクトリかを確認してください。それがディレクトリの場合は、そのディレクトリでプロセスを繰り返します。ファイルの場合は 'index.html'かどうかをチェックし、そうであれば配列に入れます。

コンテンツの代わりにファイル名(パスを含む)を配列に格納する方がよい場合があります。後者を実行すると、各要求で250ファイルのすべてが読み取られます。

ディレクトリをトラバースすると問題が発生する可能性があるので、このリストもキャッシュする方がよいでしょう。

パスの配列をファイルに保存できます。次に、このファイルを配列にロードすることができます。これは、これらのディレクトリをすべてチェックするよりも高速です。ファイルが存在しない場合は、そのプロシージャを実行してファイルを作成できます。それが存在する場合は、それが1日よりも古くなっているかどうかを確認することができます。 index.htmlファイルのいずれかが存在しない場合は、ファイルを作成するプロセスを実行することもできます。なぜなら、これは明らかに最新のものではないからです。

この配列をPHPコードとして保存すると、その配列を含めることができます。これにより、APCのようなPHPキャッシュがあれば、さらに優れたパフォーマンスが得られます。

関連する問題