PHP - 读取文件并回显结果

发布于 2024-10-13 21:00:06 字数 595 浏览 8 评论 0原文

我有 /fonts/ 文件夹,里面装满了 .js 文件。

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

 $dir = "/fonts"; 
        如果 (is_dir($dir)) {     
            如果 ($dh = opendir($dir)) {
                while (($file = readdir($dh)) !== false) {
                    回显''。 $file .'';
                }
            关闭($dh);
            }
        }

但我不想写文件名,而是写它们存储的数据。

里面的模式如下所示:

NameOfTheFontFile_400_font.js:

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

那么如何修改我的第一个脚本以打开读取每个文件并获取字体系列名称而不是文件名?

多谢!

I have /fonts/ folder full of .js files.

I know how to read this folder and list all the files there:

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

But I don't want to write filenames but data they store.

The pattern inside looks like this:

NameOfTheFontFile_400_font.js:

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

So how to modify my first script to open-read each file and grab the font-family name instead of file name?

Thanks a lot!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

岁月染过的梦 2024-10-20 21:00:06

您可以使用 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);
        }
    }

Off-topic:为什么您是否将字体名称存储在 .js 文件中?最好将它们存储在 xml 文件或数据库中,因为这就是它们的用途。

You could use readfile() to echo it's output. Also note that this is not tested, but it should work:

$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);
        }
    }

If your .js file has extra data beside the font name, you do do something like this to find the file name:

$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);
        }
    }

Off-topic: Why are you storing the font's names inside .js files? It would be better to store them inside a xml file or in a DB, because that's what they are made for.

御守 2024-10-20 21:00:06

php 手册

$lines = file($file);

编辑: 这可能可以进行优化,但要获取带有字体的行:

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

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

From the php manual:

$lines = file($file);

Edit: This can probably be optimized, but to get the line with the font:

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

You can dig further in that line using string functions or regular expressions to get the exact font name (using for example strpos()), but how to do that depends on the general format of the file.

如果没结果 2024-10-20 21:00:06

这可以完成工作:

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

This does the job:

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

Or in a different style:

$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>';
                }
        }
}
独木成林 2024-10-20 21:00:06

从文档 - 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 ]]]] )

注意:其他人已经详细回答了这个问题。编辑此答案以回应自私的评论,以详细说明链接的文档。

From the documentation - http://www.php.net/manual/en/function.file-get-contents.php , you can use file_get_contents to get the contents of files using the filenames you got from directory listing.

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

NOTE: Others have already answered the question in detail. Edited this answer in response to sel-fish's comment to elaborate on the linked documentation.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文