一、會話控制(session與cookie)
1.cookie簡介
Cookie是存儲在客戶端瀏覽器中的數據,我們通過Cookie來跟蹤與存儲用戶數據。一般情況下,Cookie通過HTTP
headers從服務端返回到客戶端。多數web程序都支持Cookie的操作,因為Cookie是存在于HTTP的標頭之中,所以必須在其他信息輸出以前進行設置,類似于header函數的使用限制。
PHP通過setcookie函數進行Cookie的設置,任何從瀏覽器發(fā)回的Cookie,PHP都會自動的將他存儲在$_COOKIE的全局變量之中,因此我們可以通過$_COOKIE['key']的形式來讀取某個Cookie值。
PHP中的Cookie具有非常廣泛的使用,經常用來存儲用戶的登錄信息,購物車等,且在使用會話Session時通常使用Cookie來存儲會話id來識別用戶,Cookie具備有效期,當有效期結束之后,Cookie會自動的從客戶端刪除。同時為了進行安全控制,Cookie還可以設置域跟路徑。
setcookie('test', time());
ob_start();
print_r($_COOKIE);?
$content = ob_get_contents();
$content = str_replace(" ", '  ', $content);
ob_clean();
header("content-type:text/html; charset=utf-8");
echo '當前的Cookie為:<br/>';
echo nl2br($content);
2.設置cookie
PHP設置Cookie最常用的方法就是使用setcookie函數,setcookie具有7個可選參數,我們常用到的為前5個:
name(?Cookie名)可以通過$_COOKIE['name'] 進行訪問
value(Cookie的值)
expire(過期時間)Unix時間戳格式,默認為0,表示瀏覽器關閉即失效
path(有效路徑)如果路徑設置為'/',則整個網站都有效
domain(有效域)默認整個域名都有效,如果設置了'www.imooc.com',則只在www子域中有效
$value = 'test';
setcookie("TestCookie", $value);
setcookie("TestCookie", $value, time()+3600);? //有效期一小時
setcookie("TestCookie", $value, time()+3600, "/path/", "imooc.com"); //設置路徑與域
PHP中還有一個設置Cookie的函數setrawcookie,setrawcookie跟setcookie基本一樣,唯一的不同就是value值不會自動的進行urlencode,因此在需要的時候要手動的進行urlencode。
setrawcookie('cookie_name', rawurlencode($value), time()+60*60*24*365);
因為Cookie是通過HTTP標頭進行設置的,所以也可以直接使用header方法進行設置。
header("Set-Cookie:cookie_name=value");
3.cookie的刪除與過期時間
通過前面的章節(jié),我們了解了設置cookie的函數,但是我們卻發(fā)現(xiàn)php中沒有刪除Cookie的函數,在PHP中刪除cookie也是采用setcookie函數來實現(xiàn)。
setcookie('test', '', time()-1);
可以看到將cookie的過期時間設置到當前時間之前,則該cookie會自動失效,也就達到了刪除cookie的目的。之所以這么設計是因為cookie是通過HTTP的標頭來傳遞的,客戶端根據服務端返回的Set-Cookie段來進行cookie的設置,如果刪除cookie需要使用新的Del-Cookie來實現(xiàn),則HTTP頭就會變得復雜,實際上僅通過Set-Cookie就可以簡單明了的實現(xiàn)Cookie的設置、更新與刪除。
了解原理以后,我們也可以直接通過header來刪除cookie。
header("Set-Cookie:test=1393832059; expires=".gmdate('D, d M Y H:i:s \G\M\T', time()-1));
這里用到了gmdate,用來生成格林威治標準時間,以便排除時差的影響。
4.cookie的有效路徑
cookie中的路徑用來控制設置的cookie在哪個路徑下有效,默認為'/',在所有路徑下都有,當設定了其他路徑之后,則只在設定的路徑以及子路徑下有效,例如:
setcookie('test', time(), 0, '/path');
上面的設置會使test在/path以及子路徑/path/abc下都有效,但是在根目錄下就讀取不到test的cookie值。
一般情況下,大多是使用所有路徑的,只有在極少數有特殊需求的時候,會設置路徑,這種情況下只在指定的路徑中才會傳遞cookie值,可以節(jié)省數據的傳輸,增強安全性以及提高性能。
當我們設置了有效路徑的時候,不在當前路徑的時候則看不到當前cookie。
setcookie('test', '1',0, '/path');
var_dump($_COOKIE['test']);
5.session與cookie的異同
cookie將數據存儲在客戶端,建立起用戶與服務器之間的聯(lián)系,通??梢越鉀Q很多問題,但是cookie仍然具有一些局限:
cookie相對不是太安全,容易被盜用導致cookie欺騙
單個cookie的值最大只能存儲4k
每次請求都要進行網絡傳輸,占用帶寬
session是將用戶的會話數據存儲在服務端,沒有大小限制,通過一個session_id進行用戶識別,PHP默認情況下session
id是通過cookie來保存的,因此從某種程度上來說,seesion依賴于cookie。但這不是絕對的,session
id也可以通過參數來實現(xiàn),只要能將session id傳遞到服務端進行識別的機制都可以使用session。
6.使用session
在PHP中使用session非常簡單,先執(zhí)行session_start方法開啟session,然后通過全局變量$_SESSION進行session的讀寫。
session_start();
$_SESSION['test'] = time();
var_dump($_SESSION);
session會自動的對要設置的值進行encode與decode,因此session可以支持任意數據類型,包括數據與對象等。
session_start();
$_SESSION['ary'] = array('name' => 'jobs');
$_SESSION['obj'] = new stdClass();
var_dump($_SESSION);
默認情況下,session是以文件形式存儲在服務器上的,因此當一個頁面開啟了session之后,會獨占這個session文件,這樣會導致當前用戶的其他并發(fā)訪問無法執(zhí)行而等待??梢圆捎镁彺婊蛘邤祿斓男问酱鎯斫鉀Q這個問題,這個我們會在一些高級的課程中講到。
7.刪除與銷毀session
刪除某個session值可以使用PHP的unset函數,刪除后就會從全局變量$_SESSION中去除,無法訪問。
session_start();
$_SESSION['name'] = 'jobs';
unset($_SESSION['name']);
echo $_SESSION['name']; //提示name不存在
如果要刪除所有的session,可以使用session_destroy函數銷毀當前session,session_destroy會刪除所有數據,但是session_id仍然存在。
session_start();
$_SESSION['name'] = 'jobs';
$_SESSION['time'] = time();
session_destroy();
值得注意的是,session_destroy并不會立即的銷毀全局變量$_SESSION中的值,只有當下次再訪問的時候,$_SESSION才為空,因此如果需要立即銷毀$_SESSION,可以使用unset函數。
session_start();
$_SESSION['name'] = 'jobs';
$_SESSION['time'] = time();
unset($_SESSION);
session_destroy();
var_dump($_SESSION); //此時已為空
如果需要同時銷毀cookie中的session_id,通常在用戶退出的時候可能會用到,則還需要顯式的調用setcookie方法刪除session_id的cookie值。
8.使用session來存儲用戶的登錄信息
session可以用來存儲多種類型的數據,因此具有很多的用途,常用來存儲用戶的登錄信息,購物車數據,或者一些臨時使用的暫存數據等。
用戶在登錄成功以后,通??梢詫⒂脩舻男畔⒋鎯υ趕ession中,一般的會單獨的將一些重要的字段單獨存儲,然后所有的用戶信息獨立存儲。
$_SESSION['uid'] = $userinfo['uid'];
$_SESSION['userinfo'] = $userinfo;
一般來說,登錄信息既可以存儲在sessioin中,也可以存儲在cookie中,他們之間的差別在于session可以方便的存取多種數據類型,而cookie只支持字符串類型,同時對于一些安全性比較高的數據,cookie需要進行格式化與加密存儲,而session存儲在服務端則安全性較高。
二、文件操作
文件操作:1、文件的操作;2、文件夾(目錄)的操作。
文件的打開模式:

文件指針:指向文件的開頭或者是末尾。如果指針指向文件的開頭,添加的內容就會覆蓋原來的內容,也就是原來的內容不在存在。如果指針指向文件的末尾,就是在原有內容的基礎上添加新的內容,新添加的內容和原來的內容同時存在。
截斷:如果文件已經存在,將文件指針指向文件頭并將文件大小截為0.
創(chuàng)建:刪除原來的文件,新建一個文件,和截斷的效果是一樣的。
1、文件操作之文件讀取
文件讀取有四種方式:
方式一:
fopen()函數將resource綁定到一個流或句柄。綁定之后,腳本就可以通過句柄與此資源交互;
//獲取到文件的資源:fopen()
$handle=fopen("041.txt","r");//只讀方式打開一個位于本地服務器的文本文件
//獲取文件內容的長度:filesize()
$length=filesize("041.txt");
//fread()函數從handle指定的資源中讀取length個字符,當到達EOF或讀取到length個字符時
讀取將停止。如果要讀取整個文件,使用filesize()函數確定應該讀取的字符數;
//獲取資源里的數據:fread(),兩個參數,第一個參數是文件資源,第二個參數是讀取文件長度
$res=fread($handle,$length);
//輸出讀取的文件
echo ?$res;
//fclose( resource handle )將handle指向的文件關閉 。如果成功則返回TRUE,失敗則返回FALSE;文件指針必須有效,并且是通過 fopen() 或 fsockopen() 成功打開的;雖然每個請求最后都會自動關閉文件,但明確的關閉打開的所有文件是一個好的習慣;
//關閉資源:fclose()
fclose($handle);
以只讀方式打開一個遠程文件
$fh = fopen("http://www.baidu.com", "r");
方式二:
fgets()函數從handle指定的資源中讀取一行字符。碰到換行符(包括在返回值中)、EOF 或者已經讀取了 length - 1 字節(jié)后停止(看先碰到那一種情況);如果沒有指定 length,則默認為 1K,或者說 1024 字節(jié)。忽略掉 length將繼續(xù)從流中讀取數據直到行結束。
//fgets()一次只能讀取一行,可以通過循環(huán)讀取全部內容。
//feof()判斷文件是否讀取完畢
$handle=fopen("041.txt","r");
//通過循環(huán)讀取全部內容
while(!feof($handle)){?
? ? ?echo ? fgets($handle);
}
方式三:
file()函數將文件讀取到數組中,各元素由換行符分隔。
//file( ),直接獲取,用數組的方式呈現(xiàn),每一行就是一個元素
$res=file("041.txt");
var_dump($res);
方式四:
file_get_contents()函數將文件內容讀到字符串中;
//file_get_contents,可以獲取文件,也可以爬網頁
$res=file_get_contents("041.txt"); ? ? //獲取文件
echo $res;
//獲取網頁
$res=file_get_contents("http://www.imooc.com/search/?words=php");
echo $res;
2.文件操作之文件寫入
文件寫入之前要改目標文件的共享與權限,都改成讀與寫。
文件寫入有兩種方式。
方式一:
fwrite ( resource handle, string string [, int length] )
fwrite()函數將string的內容寫入到由handle指定的資源中。如果指定length參數,將在寫入Length個字符時停止。
//fwrite("讀取的目標文件",“寫入的內容”);
$handle=fopen("041.txt","a+");
$res=fwrite($handle,"5201314");
if($res){
echo ?"寫入成功";
}else{
echo? "寫入失敗";
}
//關閉資源
fclose($handle);
方式二:
//file_put_contents($filename,$data),$filename的文件如果存在會覆蓋之前的,如果沒有會新建一個,一般和file_get_contents一起用
$res=file_put_contents("043.txt","wakakaka");//新建一個043.txt
//判斷是否寫入成功
if($res){
? ? echo ? "寫入成功";
}else{
? ? echo ? "寫入失敗";
}
//讀取一個網站,然后新建一個html,把獲取的網站放進去
$res=file_get_contents("http://www.imooc.com/search/?words=php");//讀取一個網站
$result=file_put_contents("044.html",$res);//新建一個html,把讀取的網站放進去
//判斷是否寫入成功
if($result){
? ? ?echo ?"寫入成功";
}else{
? ? ?echo? "寫入失敗";?
}
3.文件操作之文件復制
文件復制有兩種操作方式。
方式一:
function ?myCopy($path,$dest){
//讀取
$res=file_get_contents($path);
//新建, 復制
$result=file_put_contents($dest,$res);
//判斷是否復制成功
if($result){
? ? echo ?"復制成功";
}else{
? ? ?echo? "復制失敗";
}
}
//調用函數
myCopy("http://www.imooc.com/search/?words=php","046.html");
方式二:
//直接使用復制文件的函數:copy()
$res=copy("046.html","047.html");
//判斷是否復制成功
if($res){
? ? ? ? echo"復制成功";
}else{
? ? ? ? ?echo"復制失敗";
}
4.文件操作之文件刪除
刪除文件:unlink(),如果刪除成功返回true, 否則返回false;
$res=unlink("1.html");
if($res){
? ? echo"刪除成功";
}else{
? ? ?echo"刪除失敗";
}
5.文件操作之修改文件名
修改文件名稱rename(原來的名字,新的名字),如果成功則返回TRUE,失敗則返回FALSE。
$res=rename("000.php","0000.php");
if($res){
? ? echo"修改成功";
}else{
? ? ? echo"修改失敗";
}
6.文件操作之判斷文件是否是文件
//用is_file,判斷是否是文件
$res=is_file("044.html");
var_dump($res);
7.目錄(文件夾)操作之創(chuàng)建目錄(文件夾)
創(chuàng)建目錄:mkdir()
$res=mkdir("test");
//判斷是否創(chuàng)建成功
if($res){
echo "創(chuàng)建成功";
}else{
echo "創(chuàng)建失敗";
}
8.文件夾操作之判斷是否是文件夾
判斷是否是文件夾:is_dir,注意:路徑要自己規(guī)劃額
$res=is_dir("./");
var_dump($res);
9.文件夾操作之判斷文件夾是否存在
file_exists() 檢查文件或目錄是否存在,如果存在返回true, 否則返回false;
$res=file_exists("test");
var_dump($res);
//創(chuàng)建一個新的目錄,創(chuàng)建目錄之前先判斷這個目錄是不是已經存在,如果存在就不創(chuàng)建了
if(!file_exists("test1")) {//判斷目錄是否存在
//如果不存在就創(chuàng)建
$res=mkdir("test1");
if($res) {//判斷目錄是否創(chuàng)建成功
echo"創(chuàng)建成功";
}else{
echo"創(chuàng)建失敗";
}
}else{
//如果目錄存在就輸出目錄已經存在
echo"目錄已經存在";
}
10.文件夾操作之讀取文件夾
讀取文件夾的方式有兩種
方式一:
//opendir() 打開目錄句柄
$handle=opendir("tuGou");
//readdir()讀取目錄,一次只能讀取一個,如果想要讀取所有,要通過循環(huán),(只能讀取同級的)
while($res=readdir($handle)) {
//創(chuàng)建一個路徑,在判斷是否是目錄的時候使用
$url="tuGou/". $res;
//判斷是否是目錄
if(is_dir($url)) {//如果是目錄就改變顏色,輸出
echo ? ? ?"<font color='red'>{$res}</font>";
echo ? ? ?"<br/>";
}else{
//如果不是目錄,直接輸出
echo ? $res;
echo "<br/>";
}
}
方式二:
scandir()讀取文件夾,呈現(xiàn)結果是一個數組
$res=scandir("tuGou");
print_r($res);
foreach($res ? as ? ?$k => $v) {
$url="tuGou/". $v;
if(is_dir($url)) {
echo ? "<br/>";
echo ? ?"<font color='red'>{$v}</font>";
}else{
echo ? "<br/>";
echo ? ? $v;
}
}
11.目錄操作之修改目錄名稱
修改目錄rename
$res=rename("tuGou","TuGou");
//判斷是否修改成功
if($res){
echo"修改成功";
}else{
echo"修改失敗";
}
12.目錄操作之目錄的刪除
rmdir(),只能刪除空的文件夾
$res=rmdir("test");
if($res) {
echo"刪除成功";
}else{
echo"刪除失敗";
}
//寫一個函數,循環(huán)刪除所有文件夾里的內容
function ? ? ? ?removeDir($path) {
//掃描獲取文件
$arr=scandir($path);
//var_dump($arr);
//通過for循環(huán)獲取的是第一層,前三個是系統(tǒng)自帶的,不需要處理
for($i=3; $i<count($arr);Si++){
//echo $arr[$i];
$url=$path."/".$arr[$i];//獲取當前文件的路徑
if(is_dir($url)){
//如果是目錄,遞歸,循環(huán)執(zhí)行
removeDir($url);
}else{
//如果是文件,就刪掉
unlink($url);
}
}
////刪除最外層的文件夾
$res=rmdir($path);
//判斷是否刪除成功
if($res){
echo"刪除成功";
}else{
echo"刪除失敗";
}
}
removeDir("tuGou1");
?>
13.filectime()以unix時間戳方式返回
filectime()函數返回filename最后改變的時間,這里的最后改變是指指定文件 filename 的 inode 最后改變時間,其中inode (索引節(jié)點)用來存放檔案及目錄的基本信息包含時間、檔名、使用者及群組等,采用UNIX時間戳格式,有錯誤時返回FALSE。
//文件創(chuàng)建時間
//如果獲取不到,原因一:服務器時間設置有問題,原因二:時區(qū)設置不對
ini_set('date.timezone','Asia/Shanghai');//設置時區(qū)
$res=filectime("041.txt");
echo ?$res;
echo date("Y-m-d H:i:s",$res);
echo date("y-m-d h:i:s",$res);
//獲取當前的時間的時間戳
echo time();
// 獲取當前時間
echo date("Y-m-d H:i:s",time());
echo date("Y-m-d",time());
echo date("Y/m/d H:i:s",time());
14.fileatime()函數返回filename最后訪問的時間
這里的最后訪問是指每當一個文件的數據塊被讀取,采用UNIX時間戳格式,有錯誤時返回FALSE。
$res=fileatime("041.txt");//獲取時間的總的秒
//echo $res;
//echo "<br/>";
echo date("Y/m/d? H:i:s",$res); //將秒轉換成時間
15.filemtime()函數返回filename最后修改的時間
最后修改指的是文件的內容改變,采用UNIX時間戳格式,有錯誤時返回FALSE。
$res=filemtime("041.txt");//獲取時間的總的秒
//echo $res;
//echo "<br/>";
echo date("Y/m/d ? H:i:s",$res);//將秒轉換成時間
16.判斷文件是否可讀:is_readable()
is_readable()判斷文件是否可讀,返回布爾值,如果文件存在并且可讀,則返回true;
$res=is_readable("041.txt");
var_dump($res);
17.判斷文件是否可寫:is_writable()
is_writable()判斷文件是否可寫,返回布爾值,如果文件存在并且可寫,則返回true
$res=is_writable("041.txt");
var_dump($res);
18.修改文件模式:chmod($filename, $mode)
chmod($filename,$mode)函數改變文件模式。如果成功則返回true,否則返回false。
mode參數由四個數字組成,第一個位的數字永遠是0:八進制。第二位:管理員權限。第三位:本機的權限。第四位:所有人。
可能的值:1:可執(zhí)行權限。2:可寫權限。4:可讀權限。(如果設置多個權限,請對數字進行總計)
注意:修改文件的權限,必須是用代碼創(chuàng)建的文件,如果是用電腦新建創(chuàng)建的文件是不能改的。
//創(chuàng)建一個文件
$res=file_put_contents("001.txt","你好的撒健康金黃色的和hdjsdhasjdc");
if($res){
//如果文件創(chuàng)建成功,對文件模式進行修改
$result=chmod("001.txt",0755);
//判斷是否修改成功
if($result){
echo"權限修改成功";
}else{
echo"權限修改失敗";
}
}
19.解析目錄路徑函數
basename()返回路徑中的文件名部份,當指定了可選參數suffix會將這部分內容去掉
dirname()返回路徑中的目錄部份;
pathinfo() 函數以數組或字符串的形式返回關于文件路徑的信息。
返回的數組元素如下:[dirname]:返回文件路徑中的目錄部分,[basename]:返回文件路徑中文件名的部分,[extension]:返回文件路徑中文件的類型的部分。
語法:pathinfo(path,options)
path必需。規(guī)定要檢查的路徑。
options可選。規(guī)定要返回的數組元素。默認是 all。
可能的值:
PATHINFO_DIRNAME - 只返回 dirname
PATHINFO_BASENAME - 只返回 basename
PATHINFO_EXTENSION - 只返回 extension
//獲取文件名部分
$path="tuGou1/css";
$res=basename($path);?
echo? ? $res;? ? //css
//獲取到路徑中的目錄名稱
$path="tuGou1/css";
$res=dirname($path);
echo? ? $res;? ? //tuGou?
//獲取到路徑中的詳細信息
$path="tuGou1/css";
$res=pathinfo($path);
print_r($res);? //Array([dirname] => tuGou1 ?[basename] => css ? ?[filename] => css)
<?php
var_dump(pathinfo("/testweb/test.txt",PATHINFO_DIRNAME));
var_dump(pathinfo("/testweb/test.txt",PATHINFO_BASENAME));
var_dump(pathinfo("/testweb/test.txt",PATHINFO_EXTENSION));
?>
三、表單數據處理
1.表單簡介
GET所有表單輸入的數據被加載到請求的URL地址后面;
如:test.php?username=free&password=123&content=dfdsfsfd;
GET方式提交數據只能傳遞文本,能夠提交的數據量大小有限,安全性差;
POST提交數據的方式把表單的數據打包放入http請求中;
POST能夠提交更多的數據;
表單提交的數據會自動封裝為數組;
用$_GET, $_POST,或$_REQUEST獲得表單提交的數據;
多值表單控件(如復選框和多選框),大大提高了基于web的數據收集能力;因為這些組件是多值的,所以表單處理函數必須能夠識別一個表單變量中可能有多個值;為了讓php識別一個表單變量的多個值(即考慮為數組),需要對表單名(元素的name屬性值)增加一對中括號,如:<input ? type="checkbox" ? name="love[ ]"/>,value值要設置對應的值。
對于單選框radio,要設置相同的name,然后設置對應的value值。
//接收post過來的數據,數據格式是數組。如果想用文件來儲存,就要把數據轉換成字符串,文件是不能直接接收數組的。這里需要編碼,把數組或者對象轉換成json數據,需要用到json_encode()函數:
$res=json_encode($_POST);//將數據編碼成字符串
$result=file_put_contents("001.txt",$res);//將數據到保存文件
//判斷是否保存成功
if($result){
//echo "儲存成功";
//儲存成功之后跳轉到想要跳轉的頁面
header("Location:001.php");? //這里需要用到header("Location:目標文件")函數
}else{
echo ?儲存失敗";
}
//如果說想要讀取剛剛儲存的數據,就要進行讀取、解碼的步驟
$res=file_get_contents("001.txt"); ? ?//讀取數據
//讀取的數據是json串,所以需要將讀取到的數據轉換成數組或者對象,就是解碼。需要用到json_decode()函數,這個函數有兩個參數,第一個參數是要轉換的json串,第二個參數是是否轉換為數組,是個布爾值,如果是true就是轉換成數組,false轉換成對象,默認轉換成對象。
//將讀取的數據解碼
$arr=json_decode($res,true);//得到一個數組,用的時候可以通過foreach循環(huán),也可以根據需要直接調用
2.文件上傳的相關配置
表單設置:要進行文件的上傳,需要對form表單進行特殊設置。設定表單數據的提交方式為POST。設定enctype屬性值為:multipart/form-data。為了避免用戶等待許久之后才發(fā)現(xiàn)上傳文件太大,可以在表單中添加MAX_FILE_SIZE隱藏域,通過設置其value值可以限制上傳文件的大小。
PHP設置:file_uploads是否允許通過HTTP上傳文件,默認為ON。upload_max_filesize允許上傳文件大小的最大值,默認為2M,此指令必須小于post_max_size;
3.數據接收
接收post過來的數據;數據格式是數組。
print_r($_POST);
一般用文件來儲存數據,如果用文件來儲存數據,就要把數據數組或者對象轉換成json字符串。
將數組或者對象轉換成json數據:json_encode(),編碼:
$res=json_encode($_POST);
echo $res;
echo gettype($res);
保存文件
$result=file_put_contents("059.txt", $res);
//判斷是否儲存成功
if($result){
echo ? ? ? "儲存成功";
}else{
echo ? ? ? "儲存失敗";
}
可以將json串轉換成數組或者對象(解碼):json_decode(),有兩個參數,第一個參數要轉換的json串,第二個參數是否轉換為數組,如果是true就是轉換成數組,false轉換成對象,默認轉換成對象
$result=json_decode($res);
var_dump($result);
取對象里面的一項
print_r($result->username);
讀取儲存的數據
$str=file_get_contents("059.txt");
把讀取的數據解碼
$arr=json_decode($str,true);
print_r($arr);
4.文件接收(圖片接收)
文件接收分兩步:1、接收post數據;2、接收文件
接收數據
$str=json_encode($_POST);//將數據轉換成字符串
file_put_contents("063.data.txt", $str);//將數據儲存
接收文件用$_FILES,也是一個數組
print_r($_FILES);
創(chuàng)建一個存放文件的文件夾
if(!file_exists("upload")){
mkdir("upload");
}
將臨時文件轉存到指定文件目錄里面
方法一:復制
$path=$_FILES["img"]["tmp_name"];//尋找文件的臨時存放的路徑
$name=$_FILES["img"]["name"];//上傳文件的原有名稱
$res=copy( $path, "upload/".$name);
if($res){
echo "ok";
}else{
echo "no";
}
方式二:
1.判斷有沒有文件上傳:is_uploaded_file()函數確定參數filename指定的文件是否使用HTTP POST上傳;
2.move_uploaded_file()作用是將上傳文件從臨時目錄移動到目標目錄; 雖然copy()也可以實現(xiàn)同樣功能,但move_uploaded_file()還提供了一種額外的功能,它將檢查由filename輸入參數指定的文件確實是通過http post 上傳機制上傳的。如果所指定的文件并非上傳文件,則移動失敗,返回false;
$path=$_FILES["img"]["tmp_name"];
if(is_uploaded_file($path)){
//轉存文件
$res=move_uploaded_file($path,"upload/1.jpg" );
if($res){
echo "ok";
}else{
echo "no";
}
想要隨機文件的名稱:
1.獲取文件的格式:
$name=$_FILES["img"]["name"];
//strrchr:查找字符串最后一次出現(xiàn)的位置,截取
$type=strrchr($name,".");
2.隨機生成字符串
function ? ? randStr($max){
$newstr="";
$str="123456789abcdefghijklmnopqrstuvwxyz";
for($i=0; $i<$max ; $i++) {
$newstr.=$str[mt_rand(0,(strlen($str)-1))];
}
return ? ? ? ?$newstr;
}
//用一下隨機路徑
$path=$_FILES["img"]["tmp_name"];
if(is_uploaded_file($path)){
//轉存文件
$res=move_uploaded_file($path,"upload/".randStr(10).$type);
if($res){
echo"ok";
}else{
echo"no";
}
}