0

.js ファイルでいっぱいの /fonts/ フォルダーがあります。

このフォルダーを読み、そこにあるすべてのファイルを一覧表示する方法を知っています。

 $dir = "/fonts"; 
        if (is_dir($dir)) {     
            if ($dh = opendir($dir)) {
                while (($file = readdir($dh)) !== false) {
                    echo '<tr><td>'. $file .'</td></tr>';
                }
            closedir($dh);
            }
        }

しかし、ファイル名ではなく、保存するデータを書きたいのです。

内部のパターンは次のようになります。

NameOfTheFontFile_400_font.js:

(...) "font-family":"NameOfTheFont" (...)

では、最初のスクリプトを変更して、各ファイルを開いて読み取り、ファイル名の代わりにフォント ファミリ名を取得する方法を教えてください。

どうもありがとう!

4

4 に答える 4

0

これは仕事をします:

$dir = '/fonts';

$files = array_filter(glob("$dir/*"), 'is_file');
$contents = array_map('file_get_contents', $files);
foreach ($contents as $content) {
        if (preg_match('#"font-family":"([^"]+)"#', $content, $matches)) {
                echo '<tr><td>'.htmlspecialchars($matches[1]).'</td></tr>';
        }
}

または別のスタイルで:

$files = glob("$dir/*");
foreach($files as $file) {
        if (is_file($file)) {
                $content = file_get_contents($file);
                if (preg_match('#"font-family":"([^"]+)"#', $content, $matches)) {
                        echo '<tr><td>'.htmlspecialchars($matches[1]).'</td></tr>';
                }
        }
}
于 2011-01-20T14:12:25.817 に答える
0

PHPマニュアルから:

$lines = file($file);

編集:これはおそらく最適化できますが、フォントの行を取得するには:

foreach ($lines as $line)
{
  if (strpos($line, 'font-family') !== false)
  {
    echo $line;
  }
}

文字列関数または正規表現を使用してその行をさらに掘り下げて (たとえばstrpos()を使用して) 正確なフォント名を取得できますが、その方法はファイルの一般的な形式によって異なります。

于 2011-01-20T13:19:57.833 に答える
0

readfile()出力をエコーするために使用できます。また、これはテストされていませんが、動作するはずです。

$dir = "/fonts"; 
    if (is_dir($dir)) {     
        if ($dh = opendir($dir)) {
            while (($file = readdir($dh)) !== false) {
                echo '<tr><td>';
                readfile($file);
                echo '</td></tr>';
            }
        closedir($dh);
        }
    }

.js ファイルにフォント名の横に余分なデータがある場合は、次のようにしてファイル名を見つけます。

$dir = "/fonts"; 
    if (is_dir($dir)) {     
        if ($dh = opendir($dir)) {
            while (($file = readdir($dh)) !== false) {
                $lines = file($file);   
                foreach ($lines as $line) {
                    if (preg_match('/("font-family":)(".+")/', $line, $parts) ) {                   
                        echo '<tr><td>', $parts[2], '</td></tr>';   
                    }
                }
            }
        closedir($dh);
        }
    }

トピック外: フォントの名前を .js ファイル内に保存するのはなぜですか? xml ファイルまたは DB に格納する方がよいでしょう。それが目的であるためです。

于 2011-01-20T13:22:37.117 に答える
0

ドキュメント - http://www.php.net/manual/en/function.file-get-contents.phpから、 file_get_contents を使用して、ディレクトリ リストから取得したファイル名を使用してファイルの内容を取得できます。

string file_get_contents ( string$filename [, bool$use_include_path = false [, resource $context [, int $offset = 0 [, int $maxlen ]]]] )

注:他の人はすでに質問に詳細に答えています。リンクされたドキュメントについて詳しく説明するために、self-fish のコメントに応じてこの回答を編集しました。

于 2011-01-20T13:23:56.443 に答える