[PHP]文件的操作函数

fopen(filename,mode) — 打开或创建一个文件或者 URL

mode 说明

'r'  只读方式打开,将文件指针指向文件头。

'r+' 读写方式打开,将文件指针指向文件头。

'w'  写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。

'w+' 读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。

'a'  写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。

'a+' 读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。

'x'  创建并以写入方式打开,将文件指针指向文件头。如果文件已存在,则 fopen() 调用失败并返回 FALSE,

'x+' 创建并以读写方式打开,将文件指针指向文件头。如果文件已存在,则 fopen() 调用失败并返回 FALSE

eg:

$handle = fopen("/home/rasmus/file.txt", "r");

fwrite(资源,内容)//写入文件内容

fclose(资源,长度)//关闭一个打开文件资源

unlink(文件)//删除一个文件

rename( string $oldname , string $newname [, resource $context ] )

eg:

//将当前目录下的子目录a下面的文件1.gif重命名为2.gif。

rename(’/a/1.gif’, ‘/a/2.gif’);

说明:对目录也一样。系统会返回操作结果,成功则返回 TRUE,失败则返回 FALSE,可以用变量接收,就知道是否重命名成功。

$renameResult = rename(’/a/1.gif’, ‘/a/2.gif’);

如果要移动文件或目录,只要将重命名后的路径设置为新的路径就可以了:

//将当前目录下的子目录a下面的文件1.gif,移动到当前目录下的子目录b,并且重命名为2.gif。

rename(’/a/1.gif’, ‘/b/2.gif’);

不过要注意,如果目录b不存在,就会移动失败。

PHP文件操作大全详解

file(路径)

把整个文件读入一个数组中(此函数是很有用的)

和 file_get_contents() 一样,只除了 file() 将文件作为一个数组返回。数组中的每个单元都是文件中相应的一行,包括换行符在内。如果失败 file() 返回 FALSE。

eg:

$lines = file('http://www.example.com/');
// 在数组中循环,显示 HTML 的源文件并加上行号。
foreach ($lines as $line_num => $line) {
echo "Line #<b>{$line_num}</b> : " . htmlspecialchars($line) . "<br />\n";
}
// 另一个例子将 web 页面读入字符串。参见 file_get_contents()。
$html = implode('', file ('http://www.example.com/'));

fgets(资源,长度)

从文件指针中读取一行

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

eg:

$handle = @fopen("/tmp/inputfile.txt", "r");
if ($handle) {
while (!feof($handle)) {
$buffer = fgets($handle, 4096);
echo $buffer;
}
fclose($handle);
}

fgetss

从文件指针中读取一行并过滤掉 HTML 标记

和 fgets() 相同,只除了 fgetss 尝试从读取的文本中去掉任何 HTML 和 PHP 标记。可以用可选的第三个参数指定哪些标记不被去掉

file_get_contents ( file , flags , context , offset , maxlen)

file 必需。规定要写入数据的文件。如果文件不存在,则创建一个新文件。

flags 可选。规定如何读取文件。可能的值:

FILE_USE_INCLUDE_PATH:使用包含目录定义

FILE_TEXT:文本格式内容。

FILE_BINARY:仅用于二进制格式。

如果参数省略则默认为FILE_BINARY

context 上下文

offset 可选。起始读位置,偏移。

maxlen 可选。读入长度。

eg:

$file_path="text.txt";
    if(!file_exists($file_path)){
        echo "文件不存在";
        exit();
    }
    $content=file_get_contents($file_path);
    $content=str_replace("rn","",$content);
    echo  $content;

file_get_contents高级用法

增加超时的时间限制

注意:set_time_limit只是设定你的PHP程式的超时时间,而不是file_get_contents函数读取URL的超时时间。

我一开始以为set_time_limit也能影响到file_get_contents,后来经测试是无效的。真正的修改file_get_contents延时可以用resource $context的timeout参数:

PHP程序代码如下:

$opts = array(
    'http'=>array(
      'method'=>"GET",
      'timeout'=>60,
    )
); 
$context = stream_context_create($opts); 
$html =file_get_contents('http://www.jb51.net', false, $context);
fpassthru($fp);

多次尝试

$cnt=0;
while($cnt < 3 && ($str=@file_get_contents('http...'))===FALSE){
   $cnt++;
}

以上方法对付超时已经OK了。

用file_get_contents实现Post

function Post($url, $post = null){
    $context = array();
    if (is_array($post)) {
      ksort($post);
 
      $context['http'] = array (
        'timeout'=>60,
        'method' => 'POST',
        'content' => http_build_query($post, '', '&'),
       );
    } 
    return file_get_contents($url, false, stream_context_create($context));
} 
$data = array (
    'name' => 'test',
    'email' => 'test@gmail.com',
    'submit' => 'submit',
); 
echo Post('http://www.jb51.net', $data);

file_put_contents(file,data,mode,context)

file 必需。规定要写入数据的文件。如果文件不存在,则创建一个新文件。

data 可选。规定要写入文件的数据。可以是字符串、数组或数据流。

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

FILE_USE_INCLUDE_PATH:使用包含目录定义

FILE_APPEND:追加,防止被改写原文件内容

LOCK_EX:独占锁定方式

如果参数省略则默认为改写文件方式

context 可选。规定文件句柄的环境。

context 是一套可以修改流的行为的选项。

eg:

 $file_path="text.txt";
 $content="hello,worldrn";
 //将一个字符串写入文件  默认是【FILE_USE_INCLUDE_PATH 】"w+"重新写入
 file_put_contents($file_path,$content,FILE_APPEND);
 echo "OK";

对的目录的操作

opendir

打开目录句柄,打开一个目录句柄,可用于之后的 closedir(),readdir() 和 rewinddir() 调用中。

readdir

从目录句柄中读取条目,返回目录中下一个文件的文件名。文件名以在文件系统中的排序返回。

eg:

代码

// 注意在 4.0.0-RC2 之前不存在 !== 运算符

if ($handle = opendir('/path/to/files')) {
echo "Directory handle: $handle\n";
echo "Files:\n";
  
while (false !== ($file = readdir($handle))) {
echo "$file\n";
}
   
while ($file = readdir($handle)) {
echo "$file\n";
}
     closedir($handle);
}

scandir

列出指定路径中的文件和目录(很有用),返回一个 array,包含有 directory 中的文件和目录。

默认的排序顺序是按字母升序排列。如果使用了可选参数 sorting_order(设为 1),则排序顺序是按字母降序排列。

eg:

$dir    = '/tmp';
$files1 = scandir($dir);
$files2 = scandir($dir, 1);
print_r($files1);
print_r($files2);

  

分享到:更多 ()

抢沙发

评论前必须登录!