在PHP使用 fopen 函数打开文件demo

PHP使用 fopen 函数打开文件demo

how-to-user-php-fopen

调用fopen()函数的时候,需要传递2个、3个或4个参数。通常使用2个参数即可,正下代码所示。
假设要将sitemap信息写入sitemap.xml文件中,可以用如下语句打开这个文件:
$fp = fopen("$DOCUMENT_ROOT/../sitemap/sitemap.xml",'w');

第一个参数是要打开的文件。正如上代码所示,可以指定该文件的路径——在这里,sitemap.xml文件保存在sitemap目录中。我们已经使用了 PHP 内置变量 $_SERVER[‘DOCUMENT_ROOT’] 。由于整个表单的名称太长了,我们可以指定一个简短的名称。

这个变量指向了Web服务器文档树的根。我们使用“..”表示文档根目录的父目录。出于安全考虑的原因,这个目录位于整个文档树的外部。在这个例子中,除了通过我们所提供的接口之外,我们不希望还有其他 Web 接口能够访问它。这个路径称之为相对路径,因为它描述了一个相对于文档根目录的文件系统位置。

由于我们为表单定义了一个简短名称,我们需要在脚本的开始处加上如下代码:
$DOCUMENT_ROOT = $_SERVER['DOCUMENT_ROOT'];

将冗长风格变量内容复制给简短风格的变量名称。

就像有不同的方法可以访问表单数据一样,也可以使用不同的方法访问预定义的服务器变量。根据服务器设置不同,可以通过如下3种方式得到文档根目录:
$_SERVER[‘DOCUMENT_ROOT’]
$DOCUMENT_ROOT
$HTTP_SERVER_VARS[‘DOCUMENT_ROOT’]

对于表单数据,第一个风格是首选的。

我们还可以指定绝对路径。这个路径是从根目录开始的(在 UNIX 系统中,根目录是/,而在Windows系统中通常都是C:\)。在UNIX服务器中,根目录就是/home/book/orders。这样做的问题在于,特别是如果将网站安装在别人的服务器上,这个绝对路径可能会改变。我们曾经有过沉重的教训,如果系统管理员没有发出任何通知就决定修改目录结构后,我们就不得不手工更改包含在大量脚本中的绝对路径。

如果没有指定路径,这个文件就将在脚本本身的相同目录中查找或者创建。如果通过某种CGI封装程序来运行PHP的,这可能又会有所不同,具体需要根据服务器的设置而定。

在UNIX环境下,目录中的间隔符是正斜线(/)。如果你使用的是Windows平台,可以使用正斜线或者反斜线。如果使用反斜线,就必须使用转义(escape,标注为一个特殊字符)字符,这样fopen()函数才能正确理解这些字符。要转义一个字符,只需简单地在其前面添加一个反斜线。如下代码所示:
$fp = fopen("$DOCUMENT_ROOT\\..\\sitemap\\sitemap.xml",'w');
在PHP代码中,只有少数人会使用反斜线,因为这意味着代码智能在Windows上运行。

如果使用了正斜线,代码不需要任何修改就可以在Windows和UNIX机器上运行。
fopen()函数的第二个参数是文件模式,它是一个字符串,指定了将对文件进行的操作。
在这个例子中,我们将“w”传给了fopen()——这就意味着要以只写的方式打开这个文件

下表给出了所有文件模式及其意义。

fopen() 函数的文件模式总结表
模式
模式名称
模式意义
r只读只读模式——从文件头开始读取
r+只读读写模式——从文件头开始读写
w只写只写模式——从文件头开始读取,如果这个文件已经存在,将删除所有文件已有内容。如果该文件不存在,函数将创建和这个文件
w+只写只写模式——从文件头开始读写,如果这个文件已经存在,将删除所有文件已有内容。如果该文件不存在,函数将创建和这个文件
x谨慎写只写模式——才能够文件头开始写。如果文件已经存在,该文件将不会被打开,fopen()函数将返回false,而且PHP将产生一个警告
x+谨慎写读写模式——才能够文件头开始写。如果文件已经存在,该文件将不会被打开,fopen()函数将返回false,而且PHP将产生一个警告
a追加追加模式——如果该文件已有内容,将从文件末尾开始追加(写),如果该文件不存在,函数将创建这个文件。
a+追加追加模式——如果该文件已有内容,将从文件末尾开始追加(写)或者读,如果该文件不存在,函数将创建这个文件。
b二进制二进制模式——用于与其他模式进行链接。如果文件系统能够区分二进制文件和文本文件,你可能会使用它。Windows系统可以区分,而UNIX则不区分。推荐一直用这个选项,以便最大程度的可移植性。二进制模式是默认模式
t文本用于与其他模式的结合。这个模式只是Windows系统下一个选项,它不是推荐选项,除非你曾在代码中使用了b选项

在我们的例子中所使用的文件模式取决于需要如何使用这个系统.
例子中我们已经用了“w”,这表示可以将一个网址写入文件中.每当一个新网址被写入文件,它将覆盖以前的订单.这样做可能没有什么意义,所以最好使用追加模式(以及推荐的二进制模式):
$fp = fopen("$DOCUMENT_ROOT/../sitemap/sitemap.xml","ab");

fopen()函数的第3个参数是可选的.
如果要在include_path(在PHP的配置中设置)中搜索一个文件,就可以用它.如果希望进行此操作,可以将这个参数设置为1.如果希望PHP搜索include_path,就不需要提供目录名称或路径:
1.$fp = fopen('sitemap.xml','ab',true);
第4个参数也是可选的.fopen()函数允许文件名称以协议名称开始(例如,http://)并且在一个远程的位置打开文件.对于这个额外的参数,它还支持一些其他的协议.

如果fopen()成功地打开一个文件,该函数将返回一个指向这个文件的文件指针.在这个例子中,文件指针保存在$fp中.
当读者的确希望能够读写这个文件时,将使用这个变量来访问文件

how-to-user-php-fopen

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

«    2024年11月    »
123
45678910
11121314151617
18192021222324
252627282930
搜索
标签列表
网站分类
最新留言
    文章归档
    友情链接

    Powered By Z-BlogPHP 1.7.3

    Copyright Your WebSite.Some Rights Reserved.闽ICP备11018667号-2