PHP - 读取文件和回显结果

时间:2011-01-20 13:14:28

标签: php dir opendir

我的/ fonts /文件夹中有.js文件。

我知道如何阅读此文件夹并列出其中的所有文件:

 $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 个答案:

答案 0 :(得分:0)

来自php manual

$lines = file($file);

编辑:这可能是优化的,但要获得字体的行:

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

您可以使用字符串函数或正则表达式在该行中进一步挖掘以获取确切的字体名称(例如使用strpos()),但如何执行此操作取决于文件的一般格式。

答案 1 :(得分: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中,因为这就是它们的用途。

答案 2 :(得分: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的评论,详细阐述链接文档。

答案 3 :(得分: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>';
                }
        }
}