文件编程
⦁ 文件编程的必要性
⦁ 在网站开发中,我们要使用到文件的上传和下载,就是经典的文件编程的使用
⦁ 文件的基本概念
文件就是保存数据(二进制素具,文本数据),在程序员看来,文件就是数据的来源。
⦁ 文件流
在对文件进行操作的过程中,我们以流的概念来操作

 
从该图中我们可以看出,如果你的数据是从程序(内存)向文件(磁盘)流动,则我们成为输出流,反之输入流。
⦁ 文件-操作的方式
本地操作和远程操作(通过网络)

⦁ 常用的文件操作函数
⦁ 获取文件信息函数

<?php//文件的基本信息//1、fopen 打开文件,参数 URL及 打开方式MOde$file_path = "/var/myphp/file/file.txt";//该函数返回一个指向文件的指针//chmod($file_path, 777);$fp = fopen($file_path, "r+");if($fp){//fstat 获得文件的信息$file_info = fstat($fp);echo "<pre>";print_r($file_info);echo "</pre>";echo "文件大小".$file_info['size'];} else{echo "fopen file error!</br>";}//关闭文件!!必须关闭fclose($fp);//****获取文件信息第二种方式echo "<br/>".filesize($file_path);echo "<br/>".filemtime($file_path);echo "<br/>".filectime($file_path);echo "<br/>".fileatime($file_path);?>

⦁ 读文件获得文件内容

<?php
/**** @author jsh* @version */$file_path = "/var/myphp/file/file.txt";//该函数返回一个指向文件的指针/**********************一种读取方式***********************if(file_exists($file_path)){if($fp = fopen($file_path,"r+")){$con = fread($fp, filesize($file_path));echo "文件的内容是:</br>";//注意:在默认情况下,我们得到的内容输出到网页后,是没有换行的//不认\r\n 需要进行下面的替换$con1 = str_replace("\n", "</br>", $con);echo $con1;}else{echo "file open error!";}}else{echo "file is not exist!";}fclose($fp);*//***********************第二种读取方式****************$con = file_get_contents($file_path);$con1 = str_replace("\n", "</br>", $con);echo $con1;*//***********************第三种读取方式************/if(file_exists($file_path)){if($fp = fopen($file_path,"r+")){$buffer= 1024;//一边读,一边判断是都到文件的末尾while(!feof($fp)){$con = fread($fp, $buffer);echo "文件的内容是1111:</br>";//注意:在默认情况下,我们得到的内容输出到网页后,是没有换行的//不认\r\n 需要进行下面的替换$con1 = str_replace("\n", "</br>", $con);echo $con1;}}else{echo "file open error!";}}else{echo "file is not exist!";}fclose($fp);//文件内容$arr =  parse_ini_file($file_path);echo "<pre>";print_r($arr);echo "</pre>";

⦁ 写文件

<?php//如何写文件$file_path = "/var/myphp/file/file.txt";/*************传统的方法******************if(file_exists($file_path)){//如果是追加内容,使用a+//如果是全新的写到文件,则使用w+,清空原文件再写入if($fp = fopen($file_path,"a+")){$buf="asd123123\n";fwrite($fp, $buf);}else{echo "file open error!";}}else{echo "file is not exist!";}fclose($fp);*//***************另外方法**************/$con = "woaini\n";//默认情况,即不加第三个参数,则是w+方式file_put_contents($file_path, $con,FILE_APPEND);echo "write Ok!";//注意,此函数在底层调用fopen fwrite,调用这个函数一般不使用循环写

⦁ 拷贝一个文件

<?php//拷贝一个文件//copy函数/***********注意************ 默认情况下路径是不能带汉字的,如果使用汉字* 需要只用iconv("utf-8","gb2312","date");转换下*/$file_path="file.txt";$new_file="1.txt";if(!copy($file_path, $new_file)){echo "copy error!";}else{echo "copy OK!";}

⦁ 文件下载
        http://blog.csdn.net/sjin_1314/article/details/8981745
⦁ 文件创建,删除,文件的创建,删除

<?php//文件及文件夹的创建和删除/************创建文件夹************$dir_name="/var/jsh1";if(!is_dir($dir_name)){if(mkdir($dir_name)){echo "创建文件成功!</br>";}else{echo "创建失败!</br>";}}else{echo "文件夹存在!</br>";}*//*********创建多级目录*****/$dir_name="/var/jsh1/aaa/bbb/ccc";if(!is_dir($dir_name)){if(mkdir($dir_name,0777,true)){echo "创建文件成功!</br>";}else{echo "创建失败!</br>";}}else{echo "文件夹存在!</br>";}/*********删除文件夹********///如果文件夹下有文件,或者目录,均不能删除if(rmdir("/var/jsh1/aaa/bbb/ccc")){echo "删除文件夹Ok!</br>";}/*************创建文件*********/$file_name="/var/jsh1/1.txt";if($fp = fopen($file_name,"w+")){$buf="asd123123\n";fwrite($fp, $buf);}else{echo "file open error!";}/***********删除文件******///2个方法 delete 和unlinkif(is_file($file_name)){if(unlink($file_name)){echo "删除成功!</br>";}}else{echo "文件不存在!</br>";}

•          文件上传
如果要上传文件,需要把
<formenctype="multipart/form-data"action="upLoad.php"name="myform"method="post">
Enctype  post 必须填写成上面内容:下面界面如下:

采用前面讲解的Mvc模式,代码如下:

界面(V):

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>文件上传</title>
</head>
<body><form enctype="multipart/form-data" action="upProcess.php" name="myform" method="post"><table><tr><td align="center" colspan="2" ><font style="font-size: 40px; font-family:华文彩云">文件上传</font></td></tr><tr><td>请填写用户名:</td><td><input type="text" name="username" ></td></tr><tr><td>请简单介绍该文件:</td><td><textarea name="fileinfo" rows="10" cols="80"></textarea></td></tr><tr><td>请选择要上传的文件:</td><td><input type="file" name="myfile"></td></tr><tr><td><input type="submit" value="上传文件"></td><td></td></tr></table></form>
</body>
</html>

控制器(c)

<?php//获得提交文件的用户$username=$_POST['username'];$fileinfo=$_POST['fileinfo'];//我们这边需要使用到$FILES超全局数组,获得上传文件属性,打印如下echo "<pre>";print_r($_POST);print_r($_FILES);echo "</pre>";//获取文件的大小$file_size=$_FILES['myfile']['size'];if($file_size > 2*1024*1024){echo "文件过大!,不能上传大于2M的文件</br>";exit(1);}//获取文件的类型$file_type = $_FILES['myfile']['type'];if($file_type!='image/jpg' && $file_type!='image/jpeg' ){echo "文件类型只能是jpg的!</br>";exit(1);}//判断是否上传成功if(is_uploaded_file($_FILES['myfile']['tmp_name'])){//把文件转存到指定的目录/*注意:* 上传文件的大小,在php.ini文件中有说明,默认最大2M,可以自己设置* * *///我们给每个用户动态的创建一个文件夹$user_path = "/var/myphp/file/".$username;//判断该用户是否存在文件夹if(!file_exists($user_path)){if(mkdir($user_path)){echo "创建成功!</br>";}}//$file_path=$user_path.$_FILES['myfile']['name'];$file_name=$_FILES['myfile']['name'];$file_path=$user_path."/".time().rand(1,1000).substr($file_name, strrpos($file_name, '.'));if(move_uploaded_file($_FILES['myfile']['tmp_name'], $file_path)){echo "上传成功!</br>";}else{echo "上传失败2!</br>";}}else{echo "上传失败1!</br>";}?>

上传文件细节
1.        如果控制用户上传文件的大小<2M
2.        如果控制用户上传的文件类型
3.        如果防止用户图片覆盖问题
解决方法:
给每个用户创建一个文件夹(或者按照日期),将个人的文件保存的自己的文件夹里面
4.        如果防止同一用户文件名相同的问题
格式:路径.时间戳.文件后缀
$file_path=$user_path."/".time().rand(1,1000).substr($file_name,strrpos($file_name, '.'));

参考资料:

PHP文件上传后缀名与文件类型对照表

文件编程到此结束,有深入的问题欢迎在下面指出!

PHP自学之路------PHP文件编程相关推荐

  1. 扩展编程PHP自学之路--------PHP数据库编程

    查了好多资料,发现还是不全,干脆自己整理吧,至少保证在我的做法正确的,以免误导读者,也是给自己做个记录吧! 1.1 启用mysql扩展库 extension=php_mysql.dll extensi ...

  2. 马士兵_JAVA自学之路(为那些目标模糊的码农们)

    JAVA自学之路 一:学会选择  为了就业,不少同学参加各种各样的培训.  决心做软件的,大多数人选的是java,或是.net,也有一些选择了手机.嵌入式.游戏.3G.测试等. 那么究竟应该选择什么方 ...

  3. 小猿圈Linux零基础自学之路

    对于不是科班出身的IT从业者,其实刚开始学习是很难的,特别是没有人带的时候,有时候一个问题可以困扰你几天甚至几周,小猿圈Linux讲师给大家讲一个linux学员的自学之路,希望对大家有所启发. 对于L ...

  4. JAVA自学之路 [原创 - 尚学堂科技 - 马士兵老师]

    (我觉得看了之后挺不错的所以分享一下) JAVA自学之路 一:学会选择 为了就业,不少同学参加各种各样的培训. 决心做软件的,大多数人选的是java,或是.net,也有一些选择了手机.嵌入式.游戏.3 ...

  5. JAVA自学之路——马士兵

    JAVA自学之路--马士兵  2007年11月06日 星期二 05:47 P.M.[原创 - 尚学堂科技 - 马士兵老师]    JAVA自学之路 一:学会选择  [转载请注明出处:http://ww ...

  6. Java自学之路 - 马士兵

    一.学会选择 为了就业,不少同学参加各种各样的培训. 决心做软件的,大多数人选的是java,或是.net,也有一些选择了手机.嵌入式.游戏.3G.测试等. 那么究竟应该选择什么方向呢? 我的意见是,不 ...

  7. JAVA自学之路 七:路线图明细

    [原创 - 尚学堂科技 - 马士兵老师] JAVA自学之路 七:路线图明细 [转载请注明出处:http://www.bjsxt.com/zixue/zixuezhilu_7.html] 下面给出第二节 ...

  8. 零基础 Java 自学之路(2021年最新版)

    前言 无论你是否想自学 Java,认真看完本文,你以后的职场生涯至少少走1年弯路. 本文会持续更新,建议收藏. 初衷 在 CSDN 上经常有同学私聊我询问 "如何自学 Java". ...

  9. 【经验】马士兵Java自学之路——(精华版)

    目录  JAVA自学之路 一: 学会选择 2  JAVA自学之路 二: JAVA自学路线图 3  JAVA自学之路 三: 要动手 3  JAVA自学之路 四: 要事为先 4  JAVA自学之路 五: ...

最新文章

  1. 一条直线上N个线段所覆盖的总长度
  2. 文件服务器搭建 xp,xp文件服务器搭建
  3. Linux下php连接sql server 2008
  4. 深入理解Java虚拟机——读书笔记01
  5. VS中的C#项目怎样引入另一个项目
  6. 重口味动漫_每种口味的图标样式
  7. ubuntu编译ubus及相关依赖库
  8. 更灵活的定位内存地址的方法05 - 零基础入门学习汇编语言36
  9. 【实习之T100开发】T100 P处理开发流程
  10. SQLServer 与 MySQL
  11. Markdown编辑器对比分析
  12. ansys linux安装包_ANSYS15.0 for Linux下载及安装教程 - 图文 -
  13. MeasureSpec介绍及使用详解
  14. Arduino Uno - 控制4位8段共阴极数码管 显示数字
  15. 机器学习之One-Hot Encoding详解
  16. JS 根据date日期格式返回周几
  17. JS 堆栈事件调用(同步调用、异步调用);消息队列和作业队列
  18. Linux下安装配置各种软件和服务
  19. Hello Shader之Hello Trangle
  20. IMP ORA-20005: object statistics are locked(二)

热门文章

  1. Potsdam,Vaihingen数据集(附百度网盘下载地址)
  2. 【密码学】RSA的攻与防_3.0
  3. 确定因果随机森林的树木数量 the number of trees
  4. java的smalltalk规则_Smalltalk 入门学习
  5. String的定义及常用方法
  6. 关于windows server 2003 web服务器搭建详解(内涵步骤)
  7. [翻译]Looking Back at Postgres,Postgres 过往
  8. 美丽田园以公司实力 通过港股ipo上市一度涨近70%
  9. 篮球馆的利润点在哪里?
  10. qtp11与java_11.5 QTP对象识别