16080891(Lamp→研讨会)

打开文件(fopen)

上一篇 / 下一篇  2007-05-08 21:30:16 / 个人分类:PHP学习笔记


  声明:fopen(string filename,string mode[,int use_include_path[,resource zcontext]]

  调用fopen函数的时候,需要传递2个,3个或者4个参数.通常使用两个参数.其中第一个参数filename表示要打开的文件名,而第二个参数mode表示打开的方式.不同的打开方式,可以进行的操作是不一样的.

 fopen()将filename指定名字绑定到一个流上.如果filename是"scheme://...."的格式,则被当成一个URL,PHP将搜索协议处理器(也被称为封装协议)来处理此模式.如果该协议尚未注册封装协议,PHP将发出一条信息来帮助检查脚本中潜在的问题并将filename当成一个普通的文件名继续执行下去.

 如果PHP认为filename指定的是一个本地文件,将尝试在该文件上打开一个流.该文件必须是PHP可以访问的,因此需要确认文件访问权限是否允许该访问.如果激活了安全模式或者open_basedir则会应用进一步的限制.

 如果PHP认为filename指定的是一个已注册的协议,而该协议被注册为一个网络URL,PHP将检查并确认allow_url_fopen已被激活.如果关闭了,PHP将发出一个警告,而fopen的调用则失败.

 可以这样理解,如果参数filename以http://开头,则表示打开的是远程WEB服务器上的文件,如果以ftp://开头,则表示要从远程FTP服务器上获取文件,并需要与指定的服务器建立FTP会话.如果前面没有任何前缀,一般情况下表示打开本地文件.
 第2个参数mode有多种取值,用来表示文件是读、写还是附加.mode参数具体取值如下:

mode说明
'r'只读方式打开,将文件指针指向文件头。
'r+'读写方式打开,将文件指针指向文件头。
'w'写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
'w+'读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
'a'写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
'a+'读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。

'x'创建并以写入方式打开,将文件指针指向文件头。如果文件已存在,则fopen()调用失败并返回FALSE,并生成一条E_WARNING级别的错误信息。如果文件不存在则尝试创建之。这和给 底层的open(2)系统调用指定O_EXCL|O_CREAT标记是等价的。此选项被 PHP 4.3.2 以及以后的版本所支持,仅能用于本地文件。

'x+'创建并以读写方式打开,将文件指针指向文件头。如果文件已存在,则fopen()调用失败并返回FALSE,并生成一条E_WARNING级别的错误信息。如果文件不存在则尝试创建之。这和给 底层的open(2)系统调用指定O_EXCL|O_CREAT标记是等价的。此选项被 PHP 4.3.2 以及以后的版本所支持,仅能用于本地文件。

注意:

  不同的操作系统家族具有不同的行结束习惯。当写入一个文本文件并想插入一个新行时,需要使用符合操作系统的行结束符号。基于 Unix 的系统使用\n作为行结束字符,基于 Windows 的系统使用\r\n作为行结束字符,基于 Macintosh 的系统使用\r作为行结束字符。

  如果写入文件时使用了错误的行结束符号,则其它应用程序打开这些文件时可能会表现得很怪异。

  Windows 下提供了一个文本转换标记('t')可以透明地将\n转换为\r\n。与此对应还可以使用'b'来强制使用二进制模式,这样就不会转换数据。要使用这些标记,要么用'b'或者用't'作为mode参数的最后一个字符。

  默认的转换模式依赖于 SAPI 和所使用的 PHP 版本,因此为了便于移植鼓励总是指定恰当的标记。如果是操作纯文本文件并在脚本中使用了\n作为行结束符,但还要期望这些文件可以被其它应用程序例如 Notepad 读取,则在 mode 中使用't'。在所有其它情况下使用'b'

  在操作二进制文件时如果没有指定'b'标记,可能会碰到一些奇怪的问题,包括坏掉的图片文件以及关于\r\n字符的奇怪问题。

注意:

  为移植性考虑,强烈建议在用fopen()打开文件时总是使用'b'标记。

注意:

  再一次,为移植性考虑,强烈建议你重写那些依赖于't'模式的代码使其使用正确的行结束符并改成'b'模式。

  如果也需要在include_path中搜寻文件的话,可以将可选的第三个参数use_include_path设为 '1' 或TRUE

  如果打开失败,本函数返回FALSE


TAG: PHP学习笔记

随心所欲☆工作室 引用 删除 xile_php   /   2007-05-09 15:53:28
首先你要有权限访问局域网其它计算机

比如你同事共享了一个info.txt文档放在info文件夹下。他的计算机名为tongshi
那么你就用
<?php
$handle = fopen("\\tongshi\\info\\info.txt", "r");
echo $handle;
?>
你看看能成功不。我现在没连局域网。不能帮你测.
引用 删除 Arun   /   2007-05-09 08:55:39
那能不能打开局域网上其他机器的文件,比如://aruncomputer/file/1.txt
 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

Open Toolbar