Heim  >  Artikel  >  Backend-Entwicklung  >  Eine Zusammenfassung der richtigen Möglichkeiten, PHP zum Lesen von Dateien zu verwenden. Vergessen Sie nicht, die Datei zu schließen

Eine Zusammenfassung der richtigen Möglichkeiten, PHP zum Lesen von Dateien zu verwenden. Vergessen Sie nicht, die Datei zu schließen

伊谢尔伦
伊谢尔伦Original
2018-05-15 17:48:442158Durchsuche

Die fopen-Methode ist wahrscheinlich den ehemaligen C- und C++-Programmierern am vertrautesten, da es sich, wenn Sie diese Sprachen verwendet haben, mehr oder weniger um Werkzeuge handelt, die Ihnen seit Jahren zur Verfügung stehen. Bei beiden Methoden wird die Datei mit der Standardmethode fopen (der Funktion zum Lesen von Daten) geöffnet und dann mit fclose geschlossen, wie in Listing 1 gezeigt.

Liste 1. Verwenden Sie fgets, um die Datei zu öffnen und zu lesen.

$file_handle = fopen("myfile", "r"); 
while (!feof($file_handle)) { 
$line = fgets($file_handle); 
echo $line; 
} 
fclose($file_handle);

Öffnen Sie die Datei. $file_handle speichert einen Verweis auf die Datei selbst.
Überprüfen Sie, ob Sie das Ende der Datei erreicht haben.
Lesen Sie die Datei weiter, bis das Ende der Datei erreicht ist, und drucken Sie jede Zeile aus, während sie gelesen wird.
Schließen Sie die Datei.
Beachten Sie diese Schritte.

feof Der Befehl
feof erkennt, ob Sie das Ende der Datei erreicht haben und gibt True oder False zurück. Die Schleife in Listing 1 wird fortgesetzt, bis Sie das Ende der Datei „myfile“ erreichen. Hinweis: feof gibt auch „False“ zurück, wenn eine URL gelesen wird und der Socket eine Zeitüberschreitung erfährt, weil keine Daten mehr zum Lesen vorhanden sind.
fclose
Wenn wir zum Ende von Listing 1 springen, bewirkt fclose das Gegenteil von fopen: Es schließt die Verbindung zu einer Datei oder URL. Nach Ausführung dieser Funktion können Sie keine Informationen mehr aus der Datei oder dem Socket lesen.
fgets
Springen Sie ein paar Zeilen in Listing 1 zurück und Sie gelangen zum Kern der Dateiverwaltung: dem eigentlichen Lesen der Datei. Für das erste Beispiel ist die Funktion fgets die Waffe der Wahl. Es extrahiert eine Datenzeile aus der Datei und gibt sie als Zeichenfolge zurück. Anschließend können Sie die Daten ausdrucken oder anderweitig bearbeiten. Das Beispiel in Listing 1 druckt die gesamte Datei einwandfrei.
Wenn Sie die Größe der verarbeiteten Datenblöcke begrenzen möchten, können Sie fgets einen Parameter hinzufügen, um die maximale Zeilenlänge zu begrenzen. Verwenden Sie beispielsweise den folgenden Code, um die Zeilenlänge auf 80 Zeichen zu begrenzen: $string = fgets($file_handle, 81);

$file_handle = fopen("myfile", "r"); 
while (!feof($file_handle)) { 
echo = fgetss($file_handle); 
} 
fclose($file_handle);

以下是输出: My title
If you understand what "Cause there ain't no one for to give you no pain"
means then you listen to too much of the band America
fpassthru 函数
无论怎样读取文件,您都可以使用 fpassthru 将其余数据转储到标准输出通道。fpassthru($fh);
此外,此函数将打印数据,因此无需使用变量获取数据。
非线性文件处理:跳跃访问
当然,以上函数只允许顺序读取文件。更复杂的文件可能要求您来回跳转到文件的不同部分。这时就用得着 fseek 了。fseek($fh, 0);
以上示例将跳转回文件的开头。如果不需要完全返回 —— 我们可设定返回千字节 —— 然后就可以这样写:fseek($fh, 1024);
从 PHP V4.0 开始,您有一些其他选项。例如,如果需要从当前位置向前跳转 100 个字节,则可以尝试使用:fseek($fh, 100, SEEK_CUR);
类似地,可以使用以下代码向后跳转 100 个字节:fseek($fh, -100, SEEK_CUR);
如果需要向后跳转至文件末尾前 100 个字节处,则应使用 SEEK_END。fseek($fh, -100, SEEK_END);
在到达新位置后,可以使用 fgets、fscanf 或任何其他方法读取数据。
注:不能将 fseek 用于引用 URL 的文件处理。 

回页首
提取整个文件
现在,我们将接触到一些 PHP 的更独特的文件处理功能:用一两行处理大块数据。例如,如何提取文件并在 Web 页面上显示其全部内容?好的,您看到了 fgets 使用循环的示例。但是如何能够使此过程变得更简单?用 fgetcontents 会使过程超级简单,该方法将把整个文件放入一个字符串中。$my_file = file_get_contents("myfilename");
echo $my_file;
虽然它不是最好的做法,但是可以将此命令更简明地写为:echo file_get_contents("myfilename");
本文主要介绍的是如何处理本地文件,但是值得注意的是您还可以用这些函数提取、回显和解析其他 Web 页面。echo file_get_contents("http://127.0.0.1/");
此命令等效于:$fh = fopen("http://127.0.0.1/", "r");
fpassthru($fh);
您一定会查看此命令并认为:“那还是太费力”。PHP 开发人员同意您的看法。因此可以将以上命令缩短为:readfile("http://127.0.0.1/");
readfile 函数将把文件或 Web 页面的全部内容转储到默认的输出缓冲区。默认情况下,如果失败,此命令将打印错误消息。要避免此行为(如果需要),请尝试:@readfile("http://127.0.0.1/");
当然,如果确实需要解析文件,则 file_get_contents 返回的单个字符串可能有些让人吃不消。您的第一反应可能是用 split() 函数将它分解一下。$array = split("\n", file_get_contents("myfile"));
但是既然已经有一个很好的函数为您执行此操作为什么还要这样大费周章?PHP 的 file() 函数一步即可完成此操作:它将返回分为若干行的字符串数组。$array = file("myfile");
应当注意的是,以上两个示例有一点细微差别。虽然 split 命令将删除新行,但是当使用 file 命令(与 fgets 命令一样)时,新行仍将被附加到数组中的字符串上。
但是,PHP 的力量还远不止于此。您可以在一条命令中使用 parse_ini_file 解析整个 PHP 样式的 .ini 文件。
当然,您可能注意到此命令合并了各个部分。这是默认行为,但是您可以通过将第二个参数传递给 parse_ini_file 轻松地修正它:process_sections,这是一个布尔型变量。将 process_sections 设为 True。

$file_array = parse_ini_file("holy_grail.ini", true); 
print_r $file_array;

并且您将获得以下输出:

Array 
( 
[personal information] => Array 
( 
[name] => King Arthur 
[quest] => To seek the Holy Grail 
[favorite color] => Blue 
) 
[more stuff] => Array 
( 
[Samuel Clemens] => Mark Twain 
[Caryn Johnson] => Whoopi Goldberg 
) 
)
<?php
$file_path = "test.txt";
if(file_exists($file_path)){
 $fp = fopen($file_path,"r");
 $str = "";
 $buffer = 1024;//每次读取 1024 字节
 while(!feof($fp)){//循环读取,直至读取完整个文件
  $str .= fread($fp,$buffer);
 } 
 $str = str_replace("\r\n","<br />",$str);
 echo $str;
}
?>

Das obige ist der detaillierte Inhalt vonEine Zusammenfassung der richtigen Möglichkeiten, PHP zum Lesen von Dateien zu verwenden. Vergessen Sie nicht, die Datei zu schließen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn