批改状态:合格
老师批语:
文件操作以及目录遍历
* 文件操作的基本过程
* 1.打开文件 fopen()
* 2.操作文件:读写追加 fgets()
* 3.关闭文件 fclose()
案列如下:
//1.创建文件或代开一个本地文件
//以r(只读)方式打开文件,不会创建文件,指针在开头
$fh = fopen('file1.txt','r') or die('打开失败');
//以w只写方式打开文件,如文件不存在则创建,指针在开头
$fh = fopen('file2.txt','w') or die('打开失败');
//以a(追加只写)方式打开文件,如文件不存在则创建,指针在末尾
$fh = fopen('file3.txt','a') or die('打开失败');
//2.打开一个远程文件
$fh = fopen('http://www.php.cn/','r');
文件读取 fgets
3.读取文件到浏览器fgets,从文件指针读取一行并自动下移
echo '<pre>';
while($s = fgets($fh)){
echo $s;
};
fclose($fh);
//fgetss() 可过滤所有html标记,得到纯文本
while ($s = fgetss($fh)){
print $s;
}
4.读取文件到字符串
file_get_contents($filename)返回字符串
$content = file_get_contents('http://www.php.cn/');
将整个页面读取到一个字符串中,有利于抓取网站内容
echo '文件的大小: ',strlen($content),' 字节<br>';
if (strlen($content)>0){
echo $content;
}
//5. 把整个文件读入都数组,用换行符进行分割
$arr = file('file3.txt');
//foreach($arr as $key => $value){
// echo '<span style="color:greenyellow;">格言'.($key+1).': </span>'.$value.'<hr>';
//}
//随机返回一条格言
//var_dump($arr);
//if (shuffle($arr)){
// echo $arr[1],'<hr>';
// echo current($arr);
//}
echo $arr[rand(0,count($arr)-1)],'<br>';
//随机返回3条格言
//array_rand($arr,1)返回一个或多个键名
$k = array_rand($arr,'3');
foreach($k as $key =>$value){//值就是$arr 的键名
echo ($key+1).'.'.$arr[$value].'<br>';
}点击 "运行实例" 按钮查看在线实例
2.目录的遍历操作
* 第一种方式: 传统的目录函数
* 1.opendir(目录)打开目录,成功返回资源,失败返回false
* 2.readdir($dir) 读取目录内容,成功则遍历返回文件名,失败返回false
* 3.closedir()关闭当前目录
* 第二种方式:将目录内容及保存到数组中进行遍历
* 1.scandir($dir) 将目录转为数组
* 2.遍历数组
$dir = opendir('../8.27') or die('打开失败');
echo $dir,'<br>';//opendir 返回一个资源
//验证readdir是否返回false .表示当前目录 ..表示上级目录
while (false !== ($file = readdir($dir))){//只有false过不了
if ($file != '.' && $file != '..'){//去掉前面两个字符
print $file.'<br>';
}
}
closedir($dir);
echo '<hr>';
$arr = scandir('../8.27');
foreach ($arr as $value){
if ($value != '.'&& $value!='..'){
echo $value,"<br>";
}
}点击 "运行实例" 按钮查看在线实例
3.文件的上传操作
通过表单选择要上传的文件,然后用全局变量$_FILES这个二维数组来上传并获取上传文件的信息
代码如下:
<form action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']);?>" method="post" enctype="multipart/form-data">
<fieldset >
<inpunt type="hidden" name="MAX_FILE_SIZE" value="542488">
<legend align="center">上传文件</legend>
<input type="file" name="upload">
<p align="center"><button type="submit" value="上传">上传</button></p>
</fieldset>
</form>
<?php
var_dump($_FILES,$_SERVER['REQUEST_METHOD']);
//判断上传方式为post
if ($_SERVER['REQUEST_METHOD'] == 'POST'){
//判断是否上传了文件 $_FILES['upload']['error']=0 上传成功,>0则出错
if ($_FILES['upload']['error'] == 0){
//判断上传格式
$file_arr = ['image/jpg','image/jpeg','text/html','text/php'];
if (in_array($_FILES['upload']['type'],$file_arr)){
//从临时文件夹移到指定文件夹
if (move_uploaded_file($_FILES['upload']['tmp_name'],"./upload/{$_FILES['upload']['name']}")){
echo "<script>alert('上传成功')</script>";
}else{
echo "<script>alert('上传失败')</script>";
}
}else{
echo "<script>alert('上传文件的格式不对')</script>";
}
}else{
echo "<script>alert('请上传文件')</script>";
}
//对上传错误进行处理
if ($_FILES['upload']['error'] > 0 ){
echo '<p>错误原因是:<strong>';
switch ($_FILES['upload']['error']){
case 1:
echo '文件超过了php.ini配置中设置的大小';
break;
case 2:
echo '文件超过了表单中常量设置的大小';
break;
case 33:
echo '仅有部分文件被上传';
break;
case 4:
echo '没有文件被上传';
break;
default:
echo '系统未知错误';
break;
}
}
//删除临时文件
if (file_exists($_FILES['upload']['tmp_name']) && is_file($_FILES['upload']['tmp_name'])){
unlink($_FILES['upload']['tmp_name']);
}
}else{
echo '上传方式错误';
}
?>点击 "运行实例" 按钮查看在线实例
总结:文件与目录的操作很类似,都是打开、操作读取、关闭这三个基本步骤,一些常量来可以代替函数的功能,文件会上传到一个临时文件夹,会随着脚本的关闭而消失,所以需要用move_uploaded_file() 来移动到别的文件夹。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号