php文件目录操作实现程序(1/2)

二、目录操作

首先介绍的是一个从目录读取的函数,opendir(),readdir(),closedir(),使用的时候是先打开文件句柄,而后迭代列出:

 代码如下 复制代码

<?php
$base_dir = "filelist/";
$fso = opendir($base_dir);
echo $base_dir."<hr/>" ;
while($flist=readdir($fso)){
echo $flist."<br/>" ;
}
closedir($fso)
?>

这是讲返回文件目录下面的文件已经目录的程序(0文件将返回false).

有时候需要知道目录的信息,可以使用dirname($path)和basename($path),分别返回路径的目录部分和文件名名称部分,可用disk_free_space($path)返回看空间空余空间.

创建命令:

 代码如下 复制代码

mkdir($path,0777)

,0777是权限码,在非window下可用umask()函数设置.

 代码如下 复制代码

rmdir($path)

将删除路径在$path的文件.

dir -- directory 类也是操作文件目录的重要类,有3个方法,read,rewind,close,这是一个仿面向对象的类,它先使用的是打开文件句柄,然后用指针的方式读取的.,这里看php手册:

 代码如下 复制代码

<?php
$d = dir("/etc/php5");
echo "Handle: " . $d->handle . "n";
echo "Path: " . $d->path . "n";
while (false !== ($entry = $d->read())) {
echo $entry."n";
}
$d->close();
?>

输出:

Handle: Resource id #2
Path: /etc/php5
.
..
apache
cgi
cli

文件的属性也非常重要,文件属性包括创建时间,最后修改时间,所有者,文件组,类型,大小等.

下面我们重点谈文件操作.

三、文件操作

● 读文件

首先是一个文件看能不能读取(权限问题),或者存在不,我们可以用is_readable函数获取信息.:

 代码如下 复制代码

<?php
$file = 'dirlist.php';
if (is_readable($file) == false) {
die('文件不存在或者无法读取');
} else {
echo '存在';
}
?>

判断文件存在的函数还有file_exists(下面演示),但是这个显然无is_readable全面.,当一个文件存在的话可以用

 代码如下 复制代码

<?php
$file = "filelist.php";
if (file_exists($file) == false) {
die('文件不存在');
}
$data = file_get_contents($file);
echo htmlentities($data);
?>

但是file_get_contents函数在较低版本上不支持,可以先创建文件的一个句柄,然后用指针读取全部:

 代码如下 复制代码

$fso = fopen($cacheFile, 'r');
$data = fread($fso, filesize($cacheFile));
fclose($fso);

还有一种方式,可以读取二进制的文件:

 代码如下 复制代码

$data = implode('', file($file));

● 写文件

和读取文件的方式一样,先看看是不是能写:

 代码如下 复制代码

<?php

$file = 'dirlist.php';
if (is_writable($file) == false) {
die("我是鸡毛,我不能");
}
?>

能写了的话可以使用file_put_contents函数写入:

 代码如下 复制代码

<?php
$file = 'dirlist.php';
if (is_writable($file) == false) {
die('我是鸡毛,我不能');
}
$data = '我是可鄙,我想要';
file_put_contents ($file, $data);
?>

file_put_contents函数在php5中新引进的函数(不知道存在的话用function_exists函数先判断一下)低版本的php无法使用,可以使用如下方式:

 代码如下 复制代码

$f = fopen($file, 'w');
fwrite($f, $data);
fclose($f);

替换之.

写文件的时候有时候需要锁定,然后写:

 代码如下 复制代码

function cache_page($pageurl,$pagedata){
if(!$fso=fopen($pageurl,'w')){
$this->warns('无法打开缓存文件.');//trigger_error
return false;
}
if(!flock($fso,LOCK_EX)){//LOCK_NB,排它型锁定
$this->warns('无法锁定缓存文件.');//trigger_error
return false;
}
if(!fwrite($fso,$pagedata)){//写入字节流,serialize写入其他格式
$this->warns('无法写入缓存文件.');//trigger_error
return false;
}
flock($fso,LOCK_UN);//释放锁定
fclose($fso);
return true;
}

首页 1 2 末页

时间: 2024-10-03 10:21:29

php文件目录操作实现程序(1/2)的相关文章

一个对数据库进行操作的程序(之一)

程序|数据|数据库 又抄又改,终于弄出了一个能对数据库进行操作的程序,也算小有所成,鼓励下自已吧......没错,就是盗版! 主要包括以下几个功能页面: db.func:连结数据库的两个函数放在里边了 createtable.php:创建表的页面 input.htm:输入数据的表单 insert.php:表单后台程序 show.php:分页显示的页面 chaxun.php:按ID查询的一个页面 printf.php:修改页面 delete.php:删除一条记录的程序 写到这里先,再复习补充...

php文件目录操作类

Java代码   <?php   /*  #文件目录操作类    #例子:  $fileutil = new fileDirUtil();  $fileutil->createDir('a/1/2/3');                 #测试建立文件夹  建一个a/1/2/3文件夹  $fileutil->copyDir('a', 'd/e');           #测试复制文件夹  建立一个d/e文件夹,把a文件夹下的内容复制进去  $fileutil->moveDir('

excel-c#如何操作“应用程序任务“关闭任务管理器的&amp;amp;quot;指定任务&amp;amp;quot;

问题描述 c#如何操作"应用程序任务"关闭任务管理器的"指定任务" 怎么才能关闭**应用程序任务**,而**不是关闭进程**,关闭进程就直接关闭打开的全部任务了,我要是关闭**任务管理器**里面的"**单个任务**" 就是要关闭excel其中打开的一个excel任务,(不是用程序打开的内部excel)是外部打开excel,客户操作用鼠标操作打开的. 解决方案 跟我一样,我也没解决,求解~~~~~~~~~~~~~~~~~~~~~ 解决方案二: 电脑

Scala入门到精通—— 第二节Scala基本类型及操作、程序控制结构

本节主要内容 Scala基本类型 基本类型操作 Scala程序控制结构 Scala基本类型 Scala中的基本数据类型如下图: (来源:Programming in Scala) 从上表中可以看出,Scala的基本数据类型与Java中的基本数据类型是一一对应的,不同的是Scala的基本数据类型头字母必须大写,本节以Int.Long.String.Char.Double及Float类型为例介绍Scala的基本类型定义 整数类型变量定义: //16进制定义法 scala> val x=0x29 x:

c++-文件目录的拷贝程序:实现符合条件的文件拷贝功能

问题描述 文件目录的拷贝程序:实现符合条件的文件拷贝功能 C++实现 (支持子目录结构,通过命令行参数完成,文件名支持通配符"*",如 .zip *abc.rar) 命令行参数格式: 程序名 -s源目录 -d目的目录 -sub=true|false 零个或一个文件名通配符 例如:test5 -s/sdzw/aaa -d/sdzw/bbb hello. test5 -s/sdzw/dst -d/sdzw/src -sub=true .txt test5 -s/sdzw/src -d/sd

vc++-在VC++6.0操作access2003程序里换成操作access2007

问题描述 在VC++6.0操作access2003程序里换成操作access2007 用VC和数据库access2003编好的程序中把数据库换成access2007需要修改哪些内容呢?新手求助高手 解决方案 主要是导入新的access类库,然后再编译,有没有错误,再修改 解决方案二: 只要数据源和名称和操作没有变化,就没有太大的变化. 还是你自己调试一下,然后有具体的问题再来提. 解决方案三: 如果用的是oledb的话,只需要更改driver格式就可以了,2000-2003用的是mdb,2007

任务管理器-MFC程序,程序在运行中一切良好,如果长时间不进行程序操作,程序就卡死了

问题描述 MFC程序,程序在运行中一切良好,如果长时间不进行程序操作,程序就卡死了 写的MFC程序,程序在运行中一切良好,如果长时间不进行程序操作,程序就卡死了,最小化到托盘后,界面也显示不出来了,不知道是怎么回事?还有通过任务管理器看内存情况,内存也没有 明显的增加,也不占CPU,有谁遇到过这样的事情呢?帮帮忙了,谢谢了! 解决方案 可能存在隐藏较深的.或随机发生.或者在一定条件下发生的指针操作越界. 内存也没有 明显的增加,是不是说明内存在不操作下还是有增加,特别是 GDI 等.这样,有可能

PHP面试题之文件目录操作_php实例

这道题其实并不难,考点主要在函数substr() strrchr()  array_pop()  strrpos() strpos() strrev() explode()  pathinfo(). 废话不多说了,直接给大家贴代码了. 获取文件后缀,遍历目录层次 /** * 5种方式获取文件后缀名 * 这道题其实就是考函数substr() strrchr() array_pop() strrpos() strpos() strrev() explode() pathinfo() * @param

php文件夹/文件目录操作函数

php文件夹操作函数 string basename ( string path [, string suffix] ) 给出一个包含有指向一个文件的全路径的字符串,本函数返回基本的文件名.如果文件名是以 suffix 结束的,那这一部分也会被去掉. 在 Windows 中,斜线(/)和反斜线()都可以用作目录分隔符.在其它环境下是斜线(/).   string dirname ( string path )   给出一个包含有指向一个文件的全路径的字符串,本函数返回去掉文件名后的目录名. 在