>  기사  >  백엔드 개발  >  PHP를 사용하여 파일을 읽는 올바른 방법에 대한 요약입니다. 파일을 닫는 것을 잊지 마세요.

PHP를 사용하여 파일을 읽는 올바른 방법에 대한 요약입니다. 파일을 닫는 것을 잊지 마세요.

伊谢尔伦
伊谢尔伦원래의
2018-05-15 17:48:442212검색

fopen 방법은 아마도 이전 C 및 C++ 프로그래머에게 가장 익숙할 것입니다. 왜냐하면 해당 언어를 사용해 본 적이 있다면 그 언어는 수년간 마음대로 사용할 수 있었던 도구이기 때문입니다. 두 방법 중 하나를 사용하면 목록 1에 표시된 대로 fopen(데이터를 읽는 데 사용되는 함수)을 사용하는 표준 방법으로 파일을 연 다음 fclose를 사용하여 닫습니다.

목록 1. fgets를 사용하여 파일을 열고 읽기

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

엽니다. $file_handle은 파일 자체에 대한 참조를 저장합니다.
파일의 끝에 도달했는지 확인하세요.
파일 끝에 도달할 때까지 계속해서 파일을 읽고, 읽은 대로 각 줄을 인쇄합니다.
파일을 닫습니다.
다음 단계를 기억하세요.

feof
feof 명령은 파일 끝에 도달했는지 감지하고 True 또는 False를 반환합니다. 목록 1의 루프는 "myfile" 파일의 끝에 도달할 때까지 계속됩니다. 참고: feof는 URL을 읽는 중이고 읽을 데이터가 더 이상 없기 때문에 소켓 시간이 초과되는 경우에도 False를 반환합니다.
fclose
목록 1의 끝으로 건너뛰면 fclose는 fopen과 반대되는 작업을 수행합니다. 즉, 파일이나 URL에 대한 연결을 닫습니다. 이 함수를 실행한 후에는 더 이상 파일이나 소켓에서 어떤 정보도 읽을 수 없습니다.
fgets
목록 1에서 몇 줄 뒤로 이동하면 파일 처리의 핵심인 실제로 파일 읽기에 도달합니다. fgets 함수는 첫 번째 예에서 선택한 무기입니다. 파일에서 데이터 행을 추출하여 문자열로 반환합니다. 그런 다음 데이터를 인쇄하거나 조작할 수 있습니다. 목록 1의 예에서는 전체 파일을 제대로 인쇄합니다.
처리된 데이터 청크의 크기를 제한하기로 결정한 경우 fgets에 매개변수를 추가하여 최대 행 길이를 제한할 수 있습니다. 예를 들어 다음 코드를 사용하여 줄 길이를 80자로 제한합니다. $string = fgets($file_handle, 81)
Recall the "

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

위 내용은 PHP를 사용하여 파일을 읽는 올바른 방법에 대한 요약입니다. 파일을 닫는 것을 잊지 마세요.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.