文件编程
⦁ 文件编程的必要性
⦁ 在网站开发中,我们要使用到文件的上传和下载,就是经典的文件编程的使用
⦁ 文件的基本概念
文件就是保存数据(二进制素具,文本数据),在程序员看来,文件就是数据的来源。
⦁ 文件流
在对文件进行操作的过程中,我们以流的概念来操作
从该图中我们可以看出,如果你的数据是从程序(内存)向文件(磁盘)流动,则我们成为输出流,反之输入流。
⦁ 文件-操作的方式
本地操作和远程操作(通过网络)
⦁ 常用的文件操作函数
⦁ 获取文件信息函数
- <?php
-
-
-
- $file_path = "/var/myphp/file/file.txt";
-
-
- $fp = fopen($file_path, "r+");
-
- if($fp){
-
- $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
-
- $file_path = "/var/myphp/file/file.txt";
-
-
-
-
-
-
- if(file_exists($file_path)){
- if($fp = fopen($file_path,"r+")){
- $buffer= 1024;
-
- while(!feof($fp)){
- $con = fread($fp, $buffer);
- echo "文件的内容是1111:</br>";
-
-
- $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";
-
-
-
-
- $con = "woaini\n";
-
- file_put_contents($file_path, $con,FILE_APPEND);
- echo "write Ok!";
-
-
-
⦁ 拷贝一个文件
- <?php
-
-
-
- $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/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!";
- }
-
-
-
-
- if(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'];
-
-
-
-
- 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'])){
-
-
-
-
-
- $user_path = "/var/myphp/file/".$username;
-
-
- if(!file_exists($user_path)){
- if(mkdir($user_path)){
- echo "创建成功!</br>";
- }
- }
-
-
- $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, '.'));
参考资料:
文件编程到此结束,有深入的问题欢迎在下面指出!
posted @
2016-12-29 11:21
天涯海角路
阅读(
199)
评论()
收藏
举报