2011-01-20 2 views
0

У меня есть/fonts/папка, полная файлов .js.PHP - чтение файлов и результатов эха

Я знаю, как читать эту папку и перечислить все файлы там:

$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:

(...) "семейство шрифтов": "NameOfTheFont" (...)

Итак, как изменить мой первый скрипт, чтобы открыть-прочитать каждый файл и захватить имя семейства шрифтов вместо имени файла?

Большое спасибо!

ответ

0

От php manual:

$lines = file($file); 

Edit: Это, вероятно, может быть оптимизирован, но, чтобы получить строку с шрифтом:

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

Вы можете вырыть далее в этой строке, используя строку функции или регулярные выражения для получения точного имени шрифта (используя, например, strpos()), но как это сделать, зависит от общего формата файла.

+0

Я знаю, как открыть файл, но я не уверен, как захватить точное слово. – anonymous

+0

@anonymous Я добавил несколько подробностей, чтобы получить правильную линию. – jeroen

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-файле или в БД, потому что для этого они созданы.

+1

Один простой ответ: Cufon :) – anonymous

+0

Хорошо, теперь это имеет смысл ^^. – Maher4Ever

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 ]]]])

ПРИМЕЧАНИЕ: Другие уже ответили на вопрос в деталях. Отредактировал этот ответ в ответ на комментарий sel-fish, чтобы подробно рассказать о связанной документации.

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>'; 
       } 
     } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^