PHP自學之路------PHP檔案程式設計
阿新 • • 發佈:2019-01-07
檔案程式設計
⦁檔案程式設計的必要性
⦁在網站開發中,我們要使用到檔案的上傳和下載,就是經典的檔案程式設計的使用
⦁檔案的基本概念
檔案就是儲存資料(二進位制素具,文字資料),在程式設計師看來,檔案就是資料的來源。
⦁檔案流
在對檔案進行操作的過程中,我們以流的概念來操作
從該圖中我們可以看出,如果你的資料是從程式(記憶體)向檔案(磁碟)流動,則我們成為輸出流,反之輸入流。
⦁檔案-操作的方式
本地操作和遠端操作(通過網路)
⦁常用的檔案操作函式
⦁獲取檔案資訊函式
<?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 和unlink
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'];
//我們這邊需要使用到$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>";
}
?>