PHP學習基礎第四節(jié)

一、會話控制(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(" ", '&nbsp ', $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";

}

}

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,724評論 19 139
  • 從三月份找實習到現(xiàn)在,面了一些公司,掛了不少,但最終還是拿到小米、百度、阿里、京東、新浪、CVTE、樂視家的研發(fā)崗...
    時芥藍閱讀 42,901評論 11 349
  • 一、php可以做什么 php是一種可以在服務器端運行的編程語言,可以運行在Web服務器端。 php是一門后臺編程語...
    空谷悠閱讀 3,283評論 4 97
  • 個人學習批處理的初衷來源于實際工作;在某個迭代版本有個BS(安卓手游模擬器)大需求,從而在測試過程中就重復涉及到...
    Luckykailiu閱讀 5,003評論 0 11
  • 一、會話控制 1、cookie 簡介:Cookie是存儲在客戶端瀏覽器中的數據,我們通過Cookie來跟蹤與存儲用...
    yzw12138閱讀 353評論 0 0

友情鏈接更多精彩內容