PHP使用文件和目录
1.使用include()包含文件
(1):使用include()从一个被包含文档返回一个值
(2):在控制结构中使用include()
include_once()函数需要一个包含文件的路径,此外,第一次调用它的情况和include()一样,如果在脚本执行中再次对同一个文件调用,那么这个文件不会再次包含。
在php.ini文件中设置include_path命令,如:include_path .;/home/user/bob/htdocs/project4/lib/
include_path的值可以包含任意多的目录,中间用分号隔开(Windows系统)。include_path指令中的项目顺序决定了查找指定文件的目录的顺序。第一个分号前的第一个(.)表示“当前目录”,并且应该给出。这样,include()或include_once()中使用的任何路径都是相对与include_path的值。
PHP也有一个require()函数,它执行和include()类似的功能,另外还有一个require_once()函数。不管脚本的流程如何,require()带入到代码中的一切内容都会执行,因此,不应该将其用作条件或循环结构的一部分。另外要注意,作为一条require()语句的结果所包含的文件,不能返回一个值。
2.验证文件
使用file_exists()检查存在性
文件还是目录?is_file(),is_dir()
检查一个文件的状态
is_readable() 是否可以读取一个文件
is_writable() 是否可以写入到这个文件
is_executable() 是否可以根据给定文件的许可或者其扩展名,在你的特定平台来执行它。
使用filesize()确定文件的大小,以字节为单位。
使用fileatime()函数来获取一个文件的最后访问时间。
使用filemtime()函数来获得一个文件的修改日期。
filectime()函数测试一个文件的修改时间。在UNIX系统上,当一个文件的内容被修改或者当其许可权限或所有者发生变化的时候,就设置修改日期。在其他平台上,返回文件的
创建日期。
3.创建并删除文件
如果一个文件还不存在,touch()函数创建。如果这个文件存在,其内容不会被打乱,但是修改日期将会更新,以反映出该函数的执行时间。
使用unlink()函数删除一个已有的函数。
4.打开一个文件供写入,读取或添加(添加内容,即在文件末尾添加数据)。
$fp=fopen("test.txt","r");
$fp=fopen("test.txt","w");
$fp=fopen("test.txt","a");
对由于许多原因导致无法打开文件异常进行处理
if($fp=fopen("test.txt","w")){
//do something with the $fp resource
}
或者:
($fp=fopen("test.txt","w")) or die("Couldn't open file,sorry");
关闭文件:fclose($fp)。
5.读取文件:
使用fgets()和feof()来从一个文件读取行。
fgets()函数读取文件,直到它遇到一个换行字符(“\\n”),或者达到长度参数中指定的字节数,或者是到达文件的末尾,不管它先遇到哪一个。
feof(),当到达了文件的末尾的时候,该函数返回true,否则返回false。
使用fread()函数从文件读取任意数量的数据。
fseek()函数允许我们在一个文件中修改当前的位置。它需要一个文件源以及一个整数作为参数,这个整数表示从文件的开始跳过的偏移量(字节数)。
使用fgetc()函数从文件读取字符。
6.写入文件或向文件添加内容
$fp=fopen("test.txt","w");
所有后续的写入都发生在文件的开头处。如果这个文件还不存在,就创建它。如果这个文件已经存在,之前的所有内容都销毁并且由你写入的数据替代。
$fp=fopen("test.txt","a");
所有后续的写入文件的内容都将添加到现有内容的末尾,但是,如果你试图向一个不存在的文件添加内容,会先创建这个文件。
使用fwrite()或fputs()写入文件
fwrite()函数接受一个文件源和一个字符串,然后把字符串写入文件中。fputs()函数也以相同的方式工作。
7.锁定文件,防止多个用户对同一个文件同时进行写入操作,导致这个文件被毁坏。
使用flock()锁定文件,flock()函数需要一个来自打开的文件的有效文件源以及一个整数,这个整数表示你想要设置的锁定的种类。
flock()函数的整数参数
——————————————————————————————————————————————————
常量 整数 锁定类型说明
——————————————————————————————————————————————————
LOCK_SH 1 共享允许其他进程读取文件但是阻止写入(在读取一个文件的时候使用)
LOCK_EX 2 独占阻止其他进程读取文件或者写入文件(在写入一个文件时使用)
LOCK_UN 3 释放一个共享锁定或独占锁定
——————————————————————————————————————————————————
我们应该在调用fopen()之后直接调用flock(),然后,在关闭一个文件之前再次调用它来释放锁定。
8.使用目录
使用mkdir()创建目录。mkdir()函数需要一个字符串和一个八进制整数。字符串表示到我们想要创建的目录的路径,整数表示我们想要为目录设置的模式。模式参数
只在UNIX系统下有效。
使用rmdir()删除一个目录
如果运行脚本的进程有权利这么做,并且目录为空的话,rmdir()函数允许我们从文件系统删除一个目录。
使用opendir()打开一个目录以供读取
$dh=opendir("testdir");$dh就是打开目录的目录句柄。
使用readdir()从一个目录读取内容
readdir()函数需要一个目录句柄并且返回包含了项目名的一个字符串。如果到达了目录的末尾,readdir()返回false。只返回其项目的名字,而不是完整的路径。
9.使用popen()打开到进程和离开进程的管道
$file_pointer=popen("some command",mode)
模式可以是r(读取)或w(写入)。
10.使用exec()运行命令
exec()函数是我们可以用来向shell传送命令的几个函数之一。exec()函数需要一个字符串并且可选地接受一个数组变量和一个标量变量,字符串表示要运行的命令的路径,数组变量将会包含命令的输出,标量变量将包含返回值(1或0)。我们可以直接使用exec()来访问已有的脚本并利用其功能。调用一个外部应用程序总是会增加脚本的负担,无论从时间上还是从内存使用上都是如此。
使用system()或passthru()运行命令
system()函数和exec()函数类似,因为它们都启动一个外部应用程序,并且它使用一个标量变量来存储返回值:
system("/path/to/somecommand",$return_val);
system()函数和exec()函数的不同在于,它直接向浏览器输出信息,而没有编程的干预。类似地,passthru()函数的语法和system()函数相同,但行为不同。使用passthru()的时候,shell命令的任何输出在返回给你的过程中不会缓存,这适用于运行产生二进制数据而不是简单的文本数据的命令。一个例子就是使用shell工具来定位一个图像并且将其发送回浏览器。