2.2. 从文件中读取内容
持之以恒,方得始终!
上一篇中,我们已经能把下单数据保存到文件中了,现在我们在写个脚本读取订单信息。
打开文件
$document_root = $_SERVER['DOCUMENT_ROOT'];
$fp = fopen("$document_root/../orders/myorders.txt", 'rb');  // r只读模式
我们可以看下路径,放到了项目根目录之外,这样做可以加强安全性。
读文件
feof() ,告诉我们何时读完了一个文件
如果文件指针指向了文件末尾,返回true。
while(!feof($fp)) {
    // 读文件, 直到读完
}
fgets(), fgetss(), fgetcsv() 读取一行
这三个都是每次读取一行,既然是读取一行,那么想要都读完,肯定需要循环取读的。
while(!feof($fp)) {
    $order = fgets($fp, 999);
    ...
}
fgets()每次读取一行内容,直到遇到 \n,或文件结束符EOF,或者从文件中读取了999-1byte。
fgetss()和fgets()差不多。不过它可以过滤字符串中包含的php,html标记。或者自定义要过滤的字符串到 allowable_tags参数中。
fgetcsv()读取一行,并且按照指定的分隔符,将这行内容,分割为一个数组。
while(!feof){
    $order = fgetcsv($fp, 100, ",");
    ...
}
长度我们按大于最长行的字符数取即可。
给个完整的读取例子
$document_root = $_SERVER['DOCUMENT_ROOT'];
@$fp = fopen("$document_root/../myorders.txt", 'rb');
if(!$fp) {
echo "<p>没有订单</p>";
exit;
}
while(!feof($fp)) {
// $order = fgets($fp, 999);
$order = fgetcsv($fp, 999, ",");
// echo $order . "<br>";
print_r($order);
}
fclose($fp);
readfile()
readfile("$document_root/../order/myorder.txt");
使用这个函数,我们可以不用fopen(),fclose()了,调用它,将打开这个文件,并输出内容,然后关闭。
它的第二个可选参数 include_path,设置一个目录,文件在此目录下。不用再给文件路径了。
它的第三个可选参数 context, 是读远程文件使用的。
它返回从文件中读出的字节总数。
这个函数看起来好像很不错,但其实不常用,因为文件数据量大时,一次性读出来,是很耗性能的,并且我们很多时候,读出的内容,并不是直接输出的。
fpassthru()
$fp = fopen("./myorders.txt", 'rb'); // 只读模式打开文件
fpassthru($fp); // 将文件内容发送到标准输出
读操作成功,fpassthru返回true,否则返回false
file()
$filearr = file("./myorders.txt");
print_r($filearr);
将整个文件读入一个数组中,每一行都是数组中的一个元素。
还有file_get_contents()函数,上一篇已经说了。具体可见手册。
fgetc() 读取一个字符
从一个文件中,一次读取一个字符
$fp = fopen("./myorders.txt", 'rb');
while(!feof($fp)) {
    $char = fgetc($fp);
    if (!feof($fp)) {
        echo $char == '\n' ? '<br>' : $char;
    }
}
fread() 读取任意长度
从文件中,读取任意长度的字节。
注意:一个英文,数字,占1个字节,一个汉字一般占3个字节。
$fp = fopen("./myorders.txt", 'rb');
$data = fread($fp, 4);
var_dump($data); // string(4) "2023"
关闭文件
同写入文件一样,读完也需要关闭 fclose()。
一个完整的例子
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>订单列表</title>
</head>
<body>
    <h1>Bob's Auto Parts</h1>
    <h2>Customer Orders</h2>
    <?php
    $document_root = $_SERVER['DOCUMENT_ROOT'];
    // 打开一个文件
    @$fp = fopen("$document_root/../myorders.txt", 'rb');
    if(!$fp) {
        echo "<p>没有订单</p>";
        exit;
    }
    // 每次读取一行,使用循环依次读完
    while(!feof($fp)) {
        $order = fgets($fp, 999);
        echo $order . "<br>";
    }
    // 关闭这个打开的文件资源
    fclose($fp);
    ?>
</body>
</html>
                                            如有任何侵权行为,请通知我删除,谢谢大家!
个人邮箱:865460609@qq.com
          
读书笔记:《PHP和MySQL Web开发》
            
            
                关于 LearnKu
              
                    
                    
                    
 
推荐文章: