PHP 文件处理

fopen() 函数用于在 PHP 中打开文件。

打开文件

PHP 中没有单独的文件创建函数,创建和打开文件都是用 fopen() 函数。 当使用 fopen() 函数打开一个文件时,如果文件不存在,则会尝试创建该文件,并返回一个资源。 如果打开失败,函数返回 FALSE 。

语法

resource fopen ( string $文件名, string 模式)

此函数的第一个参数含有要打开的文件的名称,第二个参数规定了使用哪种模式来打开文件:

<html>
<body>
<?php
$file=fopen("welcome.txt","r");
?>
</body>
</html>

文件可能通过下列模式来打开:

模式            描述

r                 只读。在文件的开头开始。    

r+              读/写。在文件的开头开始。    

w               只写。打开并清空文件的内容;如果文件不存在,则创建新文件。    

w+             读/写。打开并清空文件的内容;如果文件不存在,则创建新文件。    

a               追加。打开并向文件末尾进行写操作,如果文件不存在,则创建新文件。    

a+             读/追加。通过向文件末尾写内容,来保持文件内容。    

x               只写。创建新文件。如果文件已存在,则返回 FALSE 和一个错误。    

x+            读/写。创建新文件。如果文件已存在,则返回 FALSE 和一个错误。    

注释:如果 fopen() 函数无法打开指定文件,则返回 0 (false)。

实例

如果 fopen() 函数不能打开指定的文件,下面的实例会生成一段消息:

<html>
<body>
<?php
$file=fopen("welcome.txt","r") or exit("Unable to open file!");
// 不能打开指定文件的错误信息: Unable to open file 
?>
</body>
</html>

关闭文件

fclose() 函数用于关闭打开的文件:

<?php
$file = fopen("test.txt","r");
//执行一些代码
fclose($file);
?>

检测文件末尾(EOF)

feof() 函数检测是否已到达文件末尾(EOF)。

在循环遍历未知长度的数据时,feof() 函数很有用。

注释:在 w 、a 和 x 模式下,您无法读取打开的文件!

if (feof($file)) echo "文件结尾";

逐行读取文件

fgets() 函数用于从文件中逐行读取文件。

注释:在调用该函数之后,文件指针会移动到下一行。

语法

string fgets( int handle [, int length] )

fgets() 从 handle 指向的文件中读取一行并返回长度最多为 length-1 字节的字符串。 碰到换行符(包括在返回值中)、EOF 或者已经读取了 length-1 字节后停止。 如果没有指定 length ,则默认为 1K ,或者说 1024 字节。

实例

下面的实例逐行读取文件,直到文件末尾为止:

<?php
$file = fopen("welcome.txt", "r") or exit("无法打开文件!");
// 读取文件每一行,直到文件结尾
while(!feof($file))
{
 echo fgets($file). "<br>";
}
fclose($file);
?>

逐字符读取文件

fgetc() 函数用于从文件中逐字符地读取文件。

注释:在调用该函数之后,文件指针会移动到下一个字符。

实例

下面的实例逐字符地读取文件,直到文件末尾为止:

<?php
$file=fopen("welcome.txt","r") or exit("无法打开文件!");
while (!feof($file))
{
  echo fgetc($file);
}
fclose($file);
?>

读取整个文件

fread() 函数用于读取文件(可安全用于二进制文件)。

语法:

string fread( int handle, int length )

fread() 从文件指针 handle 读取最多 length 个字节。当遇到下列任何一种情况时,会停止读取文件:

在读取完最多 length 个字节数时

达到文件末尾的时候(EOF)

(对于网络流)当一个包可用时

或(在打开用户空间流之后)已读取了 8192 个字节时

从文件中读取 10 个字节(包括空格):

<?php
  $filename = "test.txt";
  $fh = fopen($filename, "r");
  echo fread($fh, "10");
  fclose($fh);
?>

file_get_contents()

file_get_contents() 函数用于把 整个文件 读入一个字符串,成功返回一个字符串,失败则返回 FALSE。

语法:

string file_get_contents( string filename [, int offset [, int maxlen]] )

参数说明:

参数          说明

filename    要读取的文件名称    

offset    可选,指定读取开始的位置,默认为文件开始位置    

maxlen    可选,指定读取文件的长度,单位字节    

例子:

<?php
 $filename = 'NoAlike.txt';
 $filestring = file_get_contents($filename);
 echo $filestring;
?>

fwrite()

fwrite() 函数用于向文件写入字符串,成功返回写入的字符数,否则返回 FALSE 。

语法:

int fwrite( resource handle, string string [, int length] )

fwrite() 把 string 的内容写入文件指针 handle 处。

参数说明:

参数         说明

handle    要写入字符串的文件指针,一般由 fopen() 函数创建    

data        要写入的字符串    

length    可选,规定要写入的最大字节数    

如果指定了可选参数 length,当写入了 length 个字节或者写完了 string 以后,写入就会停止。

例子:

<?php
  // 要写入的文件名字
  $filename = 'file.txt';
   // 写入的字符
  $word = "你好!";
  $fh = fopen($filename, "w");
  echo fwrite($fh, $word);    // 输出:6
  fclose($fh);
?>

执行该例子程序,在程序同目录下,file.txt 文件内容为:你好!

上面的例子中,如果使用了 length 参数,则至多写入 length 个字符串:

echo fwrite($fh, $word, 4); // 输出:4


file_put_contents()

file_put_contents() 函数用于把字符串写入文件,成功返回写入到文件内数据的字节数,失败则返回 FALSE。

语法:

int file_put_contents ( string filename, string data [, int flags [, resource context]] )

参数说明:

参数            说明

filename    要写入数据的文件名    

data           要写入的数据。类型可以是 string,array(但不能为多维数组),或者是 stream 资源    

flags           可选,规定如何打开/写入文件。可能的值:

FILE_USE_INCLUDE_PATH:检查 filename 副本的内置路径

FILE_APPEND:在文件末尾以追加的方式写入数据

LOCK_EX:对文件上锁

context    可选,Context是一组选项,可以通过它修改文本属性    

例子:

<?php
   echo file_put_contents("test.txt", "This is something.");
?>

运行该例子,浏览器输出:

18


Weiter lernen
||
<?php $filename = "test.txt"; //需要创建一个test.txt文件 $fh = fopen($filename, "r"); echo fread($fh, "10"); fclose($fh); ?>
einreichenCode zurücksetzen