我可以用PHP读取.TXT文件吗?

12

我开始使用PHP和MySQL编写网站,其中第一个编写的PHP脚本是初始化数据库:删除/创建数据库,删除/创建每个表,然后从脚本中的字面值加载表格。这一切都很好!但我宁愿从文件中读取数据而不是在PHP脚本中硬编码它们。

我有几本关于PHP的书,但它们都面向使用MySQL进行Web开发的。我找不到任何有关读写普通文件的内容。

是的,我知道stackoverflow上有很多关于读取TXT文件的问题,但当我查看每个问题时,它们都是关于C、C#、VB或Perl。我开始认为PHP可能无法读取文件 :-(

我只需要一个简短的PHP示例来打开服务器上的TXT文件,在屏幕上顺序读取数据,显示数据并关闭文件,就像这个伪代码:

program readfile;
handle = open('myfile.txt');
data = read (handle);
while (not eof (handle)) begin
    display data;
    data = read (handle);
    end;
close (handle);
end;     

当我到达网站的头像上传部分时,我还需要在服务器上写文件,并将它们保存为JPG或GIF文件。但这是后话。

谢谢!


如果您只运行初始化脚本一次,您的数据应该已经在数据库中了,就不需要再读取文件了,对吧?我还知道您刚开始使用PHP编程,您应该考虑将这个很棒的资源添加到书签中:http://php.net/manual/ - Eric
2
是的,我知道在stackoverflow上有很多关于读取TXT文件的问题,但是当我查看每一个问题时,它们都是针对C、C#、VB或Perl的。我开始觉得PHP可能无法读取文件 :-( 如果一个问题没有在StackOverflow上被问到,这也可能意味着它非常琐碎,并且可以在明显的位置找到,例如编程语言的手册。 :-) - Eric
但我不想将数据嵌入我的脚本中。我希望我的数据在一个文本文件中...在你给我恶意回答之前,请务必完整阅读我的问题!!!我有几本关于PHP的书,它们都没有提到文件处理。它们都是讲如何使用PHP进行Web开发,并没有提到文件处理。 - Fredashay
6个回答

28

来自fread()的PHP手册

<?php
// get contents of a file into a string
$filename = "/usr/local/something.txt";
$handle = fopen($filename, "r");
$contents = fread($handle, filesize($filename));
fclose($handle);
?>

编辑 根据评论,你可以使用 fgets() 一行一行地读取文件。

<?php
$handle = @fopen("/tmp/inputfile.txt", "r");
if ($handle) {
    while (($buffer = fgets($handle, 4096)) !== false) {
        echo $buffer;
    }
    if (!feof($handle)) {
        echo "Error: unexpected fgets() fail\n";
    }
    fclose($handle);
}
?>

谢谢!这已经接近我所需的了。但我更喜欢使用单独的读取方式来读取文件中的每一行,这样我就可以使用substr逐行解析。将整个文件作为一个长字符串处理会很麻烦。 - Fredashay
@Fredashay,你可以使用fgets来实现,我已经更新了我的答案。 - JKirchartz
是的!那正是我想要的 :-) 再次感谢!我希望我能给你一个好评,但我只是个小职员 :-( - Fredashay

9
我只需要一个简短的PHP示例,演示如何在服务器上打开一个TXT文件,顺序读取它,在屏幕上显示数据,然后关闭文件,就像这个伪代码一样:
echo file_get_contents('/path/to/file.txt');

是的,简而言之,参见file_get_contents,通常不需要循环:

$file = new SPLFileObject('/path/to/file.txt');
foreach($file as $line) {
    echo $line;
}

3

好的,既然你问到这个话题的资源,PHP.net文档上有一整本书。

一个基本的例子:

<?php
// get contents of a file into a string
$filename = "/usr/local/something.txt";
$handle = fopen($filename, "r");
$contents = fread($handle, filesize($filename));
fclose($handle);
?>

谢谢!这已经接近我所需的了。但我更喜欢使用单独的读取方式来读取文件中的每一行,这样我就可以使用substr逐行解析。将整个文件作为一个长字符串处理会很麻烦。 - Fredashay

2

你为什么不阅读与 fopen 有关的 PHP 文档呢?

 $file = fopen("source/file.txt","r");
  if(!file)
    {
      echo("ERROR:cant open file");
    }
    else
    {
      $buff = fread ($file,filesize("source/file.txt"));
      print $buff;
    }

1
PHP 可以读取文件,你只需要使用 fopen()fread() 函数,这些函数在 php.net 上有详细的文档说明。 - Harry

1

file_get_contents可以为您完成所有操作,并将文本文件作为字符串返回 :)


0
你想逐行读取吗?使用fgets
$handle = @fopen("myfile.txt", "r");
if ($handle) {
    while (($content = fgets($handle, 4096)) !== false) {
        //echo $content;
    }
    if (!feof($handle)) {
        echo "Error: unexpected fgets() fail\n";
    }
    fclose($handle);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接