PHP學習 文件上傳

本文详细介绍PHP文件编程的基础知识,包括文件的基本概念、文件流的概念、文件的读写操作、文件信息的获取方法以及文件编程的实际应用案例,如文件上传。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

這裏老師還講過防止圖片重複的方法:time(),random(1,10000), 時間拼接一個隨機數


文件编程


  • 文件编程的必要性

  1. 在网站开发中,我们要使用到文件的上传和下载,就是经典的文件编程使用.



    • 文件的基本概念


文件就是保存数据(二进制数据,文本数据),在程序员的角度看,文件就是数据来源.

  • 文件流


在对文件进行操作的过程中,我们是以的概念来操作.

从该图我们可以看出.如果你的数据是从程序(内存)文件(磁盘)流动,则我们称为输出流., 反之,则称为输入流.



  • php文件操作的基本用法



  1. 如何获取文件的信息.


  1. fopen打开文件


基本用法

fopen(文件路径[相对路径/绝对路径],打开模式);


模式:

代码:

<?php




//1文件信息


//打开文件

$file_path="test.txt";

//该函数返回一个指向文件的指针

if($fp=fopen($file_path,"r")){

$file_info=fstat($fp);

echo"<pre>";

print_r($file_info);

echo"</pre>";


//取出看看

echo"<br/>文件大小是{$file_info['size']}";

echo"<br/>文件上次修改时间".date("Y-m-dH:i:s)",$file_info['mtime']);

echo"<br/>文件上次访问时间".date("Y-m-dH:i:s)",$file_info['atime']);

echo"<br/>文件上次change时间".date("Y-m-dH:i:s)",$file_info['ctime']);

}else{

echo"打开文件失败";

}


//关闭文件!!!很重要

fclose($fp);



//***第二种方式获取文件信息


echo"<br/>".filesize($file_path);

echo"<br/>".date("Y-m-dH:i:s",fileatime($file_path));

echo"<br/>".filectime($file_path);

echo"<br/>".filemtime($file_path);



?>




fstat函数

该函数返回有几个信息

[atime]=> 1316831240 【该文件上一次被访问的时间】

[mtime]=> 1316831237 【该文件上一次内容被修改时间】

[ctime]=> 1316831228 【该文件上一次文件所有者/文件所在组修改】


  1. 如何读文件


<?php




//读文件


//1.打文件

//打开文件

$file_path="test.txt";

//该函数返回一个指向文件的指针

//先判断文件是否存在


//************************第一种读取方法********************

/* if(file_exists($file_path)){

//打开文件

$fp=fopen($file_path,"a+");

//读内容,并输入

//****第一种读取方法**************

$con=fread($fp,filesize($file_path));

echo"文件的内容是:<br/>";

//在默认情况下,我们得到内容输出到网页后,不会换行,因为网页

//不认\r\n是换行符,\r\n -><br/>

$con=str_replace("\r\n","<br/>",$con);

echo$con;

}else{

echo"文件不存在!";

}


fclose($fp);*/



//*************第二种读取方法,一个函数****************


/* $con=file_get_contents($file_path);


//替换

$con=str_replace("\r\n","<br/>",$con);

echo$con;*/


//*************第三种读取方法,循环读取(对付打文件)*********


$fp=fopen($file_path,"a+");


//我们设置一次读取1024个字节

$buffer=1024;

$str="";

//一边读,一边判断是否到达文件末尾

while(!feof($fp)){

//

$str=fread($fp,$buffer);

}

$str=str_replace("\r\n","<br/>",$str);

echo$str;

fclose($fp);



?>


文件读取的实际用法

我们连接数据库的时候,可以把用户名,密码,主机,配置到一个外部文件.,然后再php运行时,实时的获取


db.ini

host=192.168.1.23

user=admin

password=12345

dbname=test


<?php

$arr1=parse_ini_file("db.ini");

print_r($arr1);


?>



  1. 如何写文件

<?php



//如何写文件


//1.传统的方法


/* $file_path="test.txt";


if(file_exists($file_path)){

//如果是追加内容,则使用a+append

//如果是全新的写入到文件,则使用 w+write

$fp=fopen($file_path,"w+");

$con="\r\n你好!";

for($i=0;$i<10;$i++){

fwrite($fp,$con);

}


}else{

}

echo"添加ok";

fclose($fp);*/


//2.第二种方式写入文件

$file_path="test.txt";

$con="北京你好!\r\n";

for($i=0;$i<10;$i++){

$con.="北京你好!\r\n";

}

file_put_contents($file_path,$con,FILE_APPEND);

echo"ok";

?>


  1. 拷贝一个文件(图片)


<?php


//拷贝图片

$file_path=iconv("utf-8","gb2312","C:\\Documentsand Settings\\All Users\\Documents\\My Pictures\\示例图片\\Winter.jpg");

if(!copy($file_path,"d:\\bb.jpg")){

echo"error";

}else{

echo"ok";

}

?>


  1. 文件的下载任务...

参看我们的http课程.


补充

  1. 文件创建,删除/文件夹的创建和删除.


<?php



//文件及文件夹的创建和删除.


//1.创建文件夹d:/shunping


/* if(!is_dir("d:/shunping2")){

if(mkdir("d:/shunping2")){

echo"创建文件夹ok";

}else{

echo"创建文件夹err";

}

}else{

echo"该文件夹有了";

}*/



//2.能不能一次性多个文件(层级),创建ok

/* $path="d:/shunping3/aaa/bbb/cccc/ddd";

if(!is_dir($path)){

if(mkdir($path,0777,true)){

echo"创建文件夹ok";

}else{

echo"创建文件夹err";

}

}else{

echo"该文件夹有了";

}*/


//3.删除文件夹

//如果文件夹下有文件,或者目录,均不能删除ok

/* if(rmdir("d:/shunping2")){

echo"删除文件夹ok";

}else{

echo"err";

}*/


//4.文件的创建

//d:/shunping3目录下,创建一个文件并写入hello

/* $file_path="d:/shunping3/aa.txt";

$fp=fopen($file_path,"w+");


fwrite($fp,"hello,world");


fclose($fp);


echo"创文件ok";*/


//5.删除文件


$file_path="d:/shunping3/aa.txt";

if(is_file($file_path)){

if(unlink($file_path)){

echo"删除ok";

}else{

echo"删除error";

}

}else{

echo"文件不存在";

}


?>


  • php文件编程实际运用-文件上传


代码:

upload.php这是一个上传文件的界面.

如果要上传文件,我们需要把

<formaction=”” enctype=”multipart/form-data” method=”post”>

上传文件<inputtype=”file” name=”myfile”/>

<inputtype=”sumbit” value=”上传/>

</form>





代码:




上传文件需要考虑的细节:

(1),如何控制用户上传的文件大小<2m

(2),如何控制用户上传的文件类型

(3),如何防止用户图片覆盖问题

(4),如何防止同一个用户上传的文件名相同问题


upload.php


<!DOCTYPEhtml PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html>

<head>

<linkrel="stylesheet" href="../css/my.css"type="text/css" />

</head>

<divclass="register">

<!--文件上传要注意:enctype method post-->


<formenctype="multipart/form-data" method="post" action="uploadprocess.php" name="myform">

<table>

<tr><tdalign="center" colspan="2"><fontstyle="font-size: 40px;font-family: 华文彩云;">文件上传</font></td></tr>

<tr><td>请填写用户名:</td><td><inputtype="text" name="username" /></td></tr>

<tr><td>请简单介绍该文件</td><td><textareaname="fileintro" rows="10"cols="80"></textarea></td></tr>

<tr><td>请选择你要上传文件:</td><td><inputtype="file" name="myfile" /></td></tr>

<tr><td><inputtype="submit" value="上传文件"/></td><td></td></tr>

</table>

</form>

</div>

</html>



uploadprocess.php


<?php



//1.接收提交文件的用户

$username=$_POST['username'];

$fileintro=$_POST['fileintro'];


//echo$username.$fileintro;


//我们这里需要使用到$_FILE

/* echo"<pre>";

print_r($_FILES);

echo"</pre>";*/

//获取文件的大小

$file_size=$_FILES['myfile']['size'];


if($file_size>2*1024*1024){

echo"文件过大,不能上传大于2m文件";

exit();

}


//获取文件的类型

$file_type=$_FILES['myfile']['type'];

if($file_type!='image/jpg'&& $file_type!='image/pjpeg'){

echo"文件类型只能是jpg";

exit();

}


//判断是否上传ok

if(is_uploaded_file($_FILES['myfile']['tmp_name'])){

//把文件转存到你希望的目录

$uploaded_file=$_FILES['myfile']['tmp_name'];

//我们给每个用户动态的创建一个文件夹

$user_path=$_SERVER['DOCUMENT_ROOT']."/file/up/".$username;

//$user_path=iconv("utf-8","gb2312",$user_path);

//判断该用户是否已经有文件夹

if(!file_exists($user_path)){

mkdir($user_path);

}

//$move_to_file=$user_path."/".$_FILES['myfile']['name'];

$file_true_name=$_FILES['myfile']['name'];

$move_to_file=$user_path."/".time().rand(1,1000).substr($file_true_name,strrpos($file_true_name,"."));

if(move_uploaded_file($uploaded_file,iconv("utf-8","gb2312",$move_to_file))){

echo$_FILES['myfile']['name']."上传ok";

}else{

echo"上传失败";

}

}else{

echo"上传失败";

}


?>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值