麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

無聊的周五晚上

2019-11-14 14:42:08
字體:
來源:轉載
供稿:網友

  hi

現在是周五,的晚上,因為回寢室也似乎沒什么事情做,不如在教研室水一水。

1、php

---Cookie---

--設置Cookie:

PHP設置Cookie最常用的方法就是使用setcookie函數,setcookie具有7個可選參數,我們常用到的為前5個:

name( Cookie名)可以通過$_COOKIE['name'] 進行訪問
value(Cookie的值)
expire(過期時間)Unix時間戳格式,默認為0,表示瀏覽器關閉即失效
path(有效路徑)如果路徑設置為'/',則整個網站都有效
domain(有效域)默認整個域名都有效,如果設置了'www.imooc.com',則只在www子域中有效

PHP中還有一個設置Cookie的函數setrawcookie,setrawcookie跟setcookie基本一樣,唯一的不同就是value值不會自動的進行urlencode,因此在需要的時候要手動的進行urlencode。

因為Cookie是通過HTTP標頭進行設置的,所以也可以直接使用header方法進行設置。

<?php
$value = time();
//在這里設置一個名為test的Cookie
setcookie("test",$value);
if (isset($_COOKIE['test'])) {
echo 'success';
}

--刪除cookie

通過前面的章節,我們了解了設置cookie的函數,但是我們卻發現php中沒有刪除Cookie的函數,在PHP中刪除cookie也是采用setcookie函數來實現。

setcookie('test', '', time()-1);

可以看到將cookie的過期時間設置到當前時間之前,則該cookie會自動失效,也就達到了刪除cookie的目的。之所以這么設計是因為cookie是通過HTTP的標頭來傳遞的,客戶端根據服務端返回的Set-Cookie段來進行cookie的設置,如果刪除cookie需要使用新的Del-Cookie來實現,則HTTP頭就會變得復雜,實際上僅通過Set-Cookie就可以簡單明了的實現Cookie的設置、更新與刪除。

了解原理以后,我們也可以直接通過header來刪除cookie。

測試刪除成功后,輸出為

array(0) {
}

--cookie的有效路徑

cookie中的路徑用來控制設置的cookie在哪個路徑下有效,默認為'/',在所有路徑下都有,當設定了其他路徑之后,則只在設定的路徑以及子路徑下有效,例如:

setcookie('test', time(), 0, '/path');

上面的設置會使test在/path以及子路徑/path/abc下都有效,但是在根目錄下就讀取不到test的cookie值。

一般情況下,大多是使用所有路徑的,只有在極少數有特殊需求的時候,會設置路徑,這種情況下只在指定的路徑中才會傳遞cookie值,可以節省數據的傳輸,增強安全性以及提高性能。

當我們設置了有效路徑的時候,不在當前路徑的時候則看不到當前cookie。

<?php
//補充路徑參數,實現有效路徑的設置
setcookie('test', '1', 0,'/path');
var_dump($_COOKIE['test']);

輸出為NULL

--session(會話)和cookie

cookie將數據存儲在客戶端,建立起用戶與服務器之間的聯系,通??梢越鉀Q很多問題,但是cookie仍然具有一些局限:

cookie相對不是太安全,容易被盜用導致cookie欺騙
單個cookie的值最大只能存儲4k
每次請求都要進行網絡傳輸,占用帶寬

session是將用戶的會話數據存儲在服務端,沒有大小限制,通過一個session_id進行用戶識別,PHP默認情況下session id是通過cookie來保存的,因此從某種程度上來說,seesion依賴于cookie。但這不是絕對的,session id也可以通過參數來實現,只要能將session id傳遞到服務端進行識別的機制都可以使用session。

--使用session

在PHP中使用session非常簡單,先執行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文件,這樣會導致當前用戶的其他并發訪問無法執行而等待??梢圆捎镁彺婊蛘?a href="http://www.companysz.com/sql.asp">數據庫的形式存儲來解決這個問題,這個我們會在一些高級的課程中講到。

注意:session_start是個函數

--刪除與銷毀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值。

--使用session來存儲用戶的登錄信息

session可以用來存儲多種類型的數據,因此具有很多的用途,常用來存儲用戶的登錄信息,購物車數據,或者一些臨時使用的暫存數據等。

用戶在登錄成功以后,通??梢詫⒂脩舻男畔⒋鎯υ趕ession中,一般的會單獨的將一些重要的字段單獨存儲,然后所有的用戶信息獨立存儲。

$_SESSION['uid'] = $userinfo['uid'];$_SESSION['userinfo'] = $userinfo;

一般來說,登錄信息既可以存儲在sessioin中,也可以存儲在cookie中,他們之間的差別在于session可以方便的存取多種數據類型,而cookie只支持字符串類型,同時對于一些安全性比較高的數據,cookie需要進行格式化與加密存儲,而session存儲在服務端則安全性較高。

 

<?php
session_start();
//假設用戶登錄成功獲得了以下用戶數據
$userinfo = array(
'uid' => 10000,
'name' => 'spark',
'email' => '[email protected]',
'sex' => 'man',
'age' => '18'
);
header("content-type:text/html; charset=utf-8");

/* 將用戶信息保存到session中 */
$_SESSION['uid'] = $userinfo['uid'];
$_SESSION['name'] = $userinfo['name'];
$_SESSION['userinfo'] = $userinfo;
echo "welcome ".$_SESSION['name'] . '<br>';

//* 將用戶數據保存到cookie中的一個簡單方法 */
$secureKey = 'imooc'; //加密密鑰
$str = serialize($userinfo); //將用戶信息序列化
echo "用戶信息加密前:".$str;
$str = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $secureKey, $str, MCRYPT_MODE_ECB));
echo "用戶信息加密后:".$str;
//將加密后的用戶數據存儲到cookie中
setcookie('userinfo', $str);

//當需要使用時進行解密
$str = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $secureKey, base64_decode($str), MCRYPT_MODE_ECB);
$uinfo = unserialize($str);
echo "解密后的用戶信息:<br>";
var_dump($uinfo);

--總結

setcookie(),setsession(),unset()

 

----文件系統----

--讀取文件內容

PHP具有豐富的文件操作函數,最簡單的讀取文件的函數為file_get_contents,可以將整個文件全部讀取到一個字符串中。

$content = file_get_contents('./test.txt');

file_get_contents也可以通過參數控制讀取內容的開始點以及長度。

$content = file_get_contents('./test.txt', null, null, 100, 500);

PHP也提供類似于C語言操作文件的方法,使用fopen,fgets,fread等方法,fgets可以從文件指針中讀取一行,freads可以讀取指定長度的字符串。

$fp = fopen('./text.txt', 'rb');while(!feof($fp)) { echo fgets($fp); //讀取一行}fclose($fp);

 

$fp = fopen('./text.txt', 'rb');$contents = '';while(!feof($fp)) { $contents .= fread($fp, 4096); //一次讀取4096個字符}fclose($fp);

使用fopen打開的文件,最好使用fclose關閉文件指針,以避免文件句柄被占用。

--判斷文件是否存在、可讀、可寫

一般情況下在對文件進行操作的時候需要先判斷文件是否存在,PHP中常用來判斷文件存在的函數有兩個is_file與file_exists.

$filename = './test.txt';if (file_exists($filename)) { echo file_get_contents($filename);}

如果只是判斷文件存在,使用file_exists就行,file_exists不僅可以判斷文件是否存在,同時也可以判斷目錄是否存在,從函數名可以看出,is_file是確切的判斷給定的路徑是否是一個文件。

$filename = './test.txt';if (is_file($filename)) { echo file_get_contents($filename);}

更加精確的可以使用is_readable與is_writeable在文件是否存在的基礎上,判斷文件是否可讀與可寫。

$filename = './test.txt';if (is_writeable($filename)) { file_put_contents($filename, 'test');}if (is_readable($filename)) { echo file_get_contents($filename);}
--寫入內容

與讀取文件對應,PHP寫文件也具有兩種方式,最簡單的方式是采用file_put_contents。

$filename = './test.txt';$data = 'test';file_put_contents($filename, $data);

上例中,$data參數可以是一個一維數組,當$data是數組的時候,會自動的將數組連接起來,相當于$data=implode('', $data);

同樣的,PHP也支持類似C語言風格的操作方式,采用fwrite進行文件寫入。

$fp = fopen('./test.txt', 'w');

fwrite($fp, 'hello');

fwrite($fp, 'world');fclose($fp);

--取得文件的修改時間

文件有很多元屬性,包括:文件的所有者、創建時間、修改時間、最后的訪問時間等。

fileowner:獲得文件的所有者filectime:獲取文件的創建時間filemtime:獲取文件的修改時間fileatime:獲取文件的訪問時間

其中最常用的是文件的修改時間,通過文件的修改時間,可以判斷文件的時效性,經常用在靜態文件或者緩存數據的更新。

$mtime = filemtime($filename);echo '修改時間:'.date('Y-m-d H:i:s', filemtime($filename));

<?php
$filename = '/data/webroot/usercode/code/resource/test.txt';
echo '所有者:'.fileowner($filename).'<br>';
echo '創建時間:'.filectime($filename).'<br>';
echo '修改時間:'.filemtime($filename).'<br>';
echo '最后訪問時間:'.fileatime($filename).'<br>';

//給$mtime賦值為文件的修改時間
$mtime = filemtime($filename);
//通過計算時間差 來判斷文件內容是否有效
if (time() - $mtime > 3600) {
echo '<br>緩存已過期';
} else {
echo file_get_contents($filename);
}

--取得文件的大小

通過filesize函數可以取得文件的大小,文件大小是以字節數表示的。

$filename = '/data/webroot/usercode/code/resource/test.txt';$size = filesize($filename);

如果要轉換文件大小的單位,可以自己定義函數來實現。

function getsize($size, $format = 'kb') {    $p = 0;    if ($format == 'kb') {        $p = 1;    } elseif ($format == 'mb') {        $p = 2;    } elseif ($format == 'gb') {        $p = 3;    }    $size /= pow(1024, $p);    return number_format($size, 3);}$filename = '/data/webroot/usercode/code/resource/test.txt';$size = filesize($filename);$size = getsize($size, 'kb'); //進行單位轉換echo $size.'kb';

值得注意的是,沒法通過簡單的函數來取得目錄的大小,目錄的大小是該目錄下所有子目錄以及文件大小的總和,因此需要通過遞歸的方法來循環計算目錄的大小。

--刪除文件

跟Unix系統命令類似,PHP使用unlink函數進行文件刪除。

unlink($filename);

刪除文件夾使用rmdir函數,文件夾必須為空,如果不為空或者沒有權限則會提示失敗。

rmdir($dir);

如果文件夾中存在文件,可以先循環刪除目錄中的所有文件,然后再刪除該目錄,循環刪除可以使用glob函數遍歷所有文件。

foreach (glob("*") as $filename) {   unlink($filename);}

--總結

file_get_contents(),file_exists(),is_file(),is_writeable(),is_readable()

file_put_contents(),filemtime(),filesize(),unlink()

---日期和時間---

--取得當前的Unix時間戳

UNIX 時間戳(英文叫做:timestamp)是 PHP 中關于時間與日期的一個很重要的概念,它表示從 1970年1月1日 00:00:00 到當前時間的秒數之和。

PHP提供了內置函數 time() 來取得服務器當前時間的時間戳。那么獲取當前的UNIX時間戳就很簡單了。

$time = time();echo $time;//1396193923,這個數字表示從1970年1月1日 00:00:00 到我輸出這個腳本時經歷了1396193923秒

時間戳,表示時間點

--

取得當前的日期

php內置了date()函數,來取得當前的日期。

函數說明:date(時間戳的格式, 規定時間戳【默認是當前的日期和時間,可選】)

返回值:函數日期和時間

例子://date函數,第二個參數取默認值的情況

echo date("Y-m-d");//2014-03-30 //date函數,第二個參數有值的情況 echo date("Y-m-d",'1396193923');//2014-03-30,1396193923表示2014-03-30的unix時間戳--


--

取得日期的Unix時間戳

UNIX 時間戳(英文叫做:timestamp)是 PHP 中關于時間與日期的一個很重要的概念,它表示從 1970年1月1日 00:00:00 到當前時間的秒數之和。

PHP提供了內置函數strtotime實現功能:獲取某個日期的時間戳,或獲取某個時間的時間戳。例如:

echo strtotime('2014-04-29');//1398700800,這個數字表示從1970年1月1日 00:00:00 到2014年4月29號經歷了1398700800秒echo strtotime('2014-04-29 00:00:01');//1398700801,這個數字表示從1970年1月1日 00:00:00 到2014-04-29 00:00:01時經歷了1398700801秒大家發現上面的規律了嗎,其實strtotime('2014-04-29')相當于strtotime('2014-04-29 00:00:00')
--

將格式化的日期字符串轉換為Unix時間戳

strtotime函數預期接受一個包含美國英語日期格式的字符串并嘗試將其解析為 Unix 時間戳。

函數說明:strtotime(要解析的時間字符串, 計算返回值的時間戳【默認是當前的時間,可選】)
返回值:成功則返回時間戳,否則返回 FALSE

比如

echo strtotime("now");//相當于將英文單詞now直接等于現在的日期和時間,并把這個日期時間轉化為unix時間戳。這個效果跟echo time();一樣。echo strtotime("+1 seconds");//相當于將現在的日期和時間加上了1秒,并把這個日期時間轉化為unix時間戳。這個效果跟echo time()+1;一樣。echo strtotime("+1 day");//相當于將現在的日期和時間加上了1天。echo strtotime("+1 week");//相當于將現在的日期和時間加上了1周。echo strtotime("+1 week 3 days 7 hours 5 seconds");//相當于將現在的日期和時間加上了1周3天7小時5秒。
--

格式化格林威治(GMT)標準時間

gmdate 函數能格式化一個GMT的日期和時間,返回的是格林威治標準時(GMT)。

舉個例子,我們現在所在的中國時區是東八區,領先格林威治時間8個小時,有時候也叫GMT+8,那么服務器運行以下腳本返回的時間應該是這樣的:當前時間假定是2014-05-01 15:15:22echo date('Y-m-d H:i:s', time()); //輸出為:2014-05-01 15:15:22 echo gmdate('Y-m-d H:i:s', time()); //輸出為:2014-05-01 07:15:22 因為格林威治時間是現在中國時區的時間減去8個小時,所以相對于現在時間要少8個小時



----圖形圖像操作----
--GD庫
Graphic Device,PHP的GD庫是用來處理圖形的拓展庫;常用來處理加水印和生成驗證碼的操作
PHP默認安裝了GD庫,安裝的時候需要開啟
--

繪制線條

要對圖形進行操作,首先要新建一個畫布,通過imagecreatetruecolor函數可以創建一個真彩色的空白圖片:

$img = imagecreatetruecolor(100, 100);

GD庫中對于畫筆所用的顏色,需要通過imagecolorallocate函數進行分配,通過參數設定RGB的顏色值來確定畫筆的顏色:

$red = imagecolorallocate($img, 0xFF, 0x00, 0x00);

然后我們通過調用繪制線段函數imageline進行線條的繪制,通過指定起點跟終點來最終得到線條。

imageline($img, 0, 0, 100, 100, $red);

線條繪制好以后,通過header與imagepng進行圖像的輸出。

header("content-type: image/png");imagepng($img);

最后可以調用imagedestroy釋放該圖片占用的內存。

imagedestroy($img);

通過上面的步驟,可以發現PHP繪制圖形非常的簡單,但很多時候我們不只是需要輸出圖片,可能我們還需要得到一個圖片文件,可以通過imagepng函數指定文件名將繪制后的圖像保存到文件中。

imagepng($img, 'img.png');

<?php
$img = imagecreatetruecolor(100, 100);
$red = imagecolorallocate($img, 0xFF, 0x00, 0x00);
//在這里使用imageline繪制線條
imageline($img,0,10,90,80,$red);
header("content-type: image/png");
imagepng($img);
imagedestroy($img);

--

在圖像中繪制文字

GD庫可以進行多種圖形的基本操作,常用的有繪制線條,背景填充,畫矩形,繪制文字等。

跟繪制線條類似,首先需要新建一個圖片與初始化顏色。

$img = imagecreatetruecolor(100, 100);$red = imagecolorallocate($img, 0xFF, 0x00, 0x00);

然后使用imagestring函數來進行文字的繪制,這個函數的參數很多:imagestring ( resource $image , int $font , int $x , int $y , string $s , int $col ),可以通過$font來設置字體的大小,x,y設置文字顯示的位置,$s是要繪制的文字,$col是文字的顏色。

imagestring($img, 5, 0, 0, "Hello world", $red);header("content-type: image/png");imagepng($img);imagedestroy($img);
--

輸出圖像文件

前面我們已經了解到,通過imagepng可以直接輸出圖像到瀏覽器,但是很多時候,我們希望將處理好的圖像保存到文件,以便可以多次使用。通過指定路徑參數將圖像保存到文件中。

$filename = 'img.png';imagepng($img, $filename);

使用imagepng可以將圖像保存成png格式,如果要保存成其他格式需要使用不同的函數,使用imagejpeg將圖片保存成jpeg格式,imagegif將圖片保存成gif格式,需要說明的是,imagejpeg會對圖片進行壓縮,因此還可以設置一個質量參數。

$filename = 'img.jpg';?imagejpeg($img, $filename, 80);

--

生成圖像驗證碼

簡單的驗證碼其實就是在圖片中輸出了幾個字符,通過我們前面章節講到的imagestring函數就能實現。

但是在處理上,為了使驗證碼更加的安全,防止其他程序自動識別,因此常常需要對驗證碼進行一些干擾處理,通常會采用繪制一些噪點,干擾線段,對輸出的字符進行傾斜、扭曲等操作。

可以使用imagesetpixel繪制點來實現噪點干擾,但是只繪制一個點的作用不大,因此這里常常會使用循環進行隨機繪制。

<?php
$img = imagecreatetruecolor(100, 40);
$black = imagecolorallocate($img, 0x00, 0x00, 0x00);
$green = imagecolorallocate($img, 0x00, 0xFF, 0x00);
$white = imagecolorallocate($img, 0xFF, 0xFF, 0xFF);
imagefill($img,0,0,$white);
//生成隨機的驗證碼
$code = '';
for($i = 0; $i < 4; $i++) {
$code .= rand(0, 9);
}
imagestring($img, 5, 10, 10, $code, $black);
//加入噪點干擾
for($i=0;$i<50;$i++) {
imagesetpixel($img, rand(0, 100) , rand(0, 100) , $black);
imagesetpixel($img, rand(0, 100) , rand(0, 100) , $green);
}
//輸出驗證碼
header("content-type: image/png");
imagepng($img);
imagedestroy($img);

--

給圖片添加水印

給圖片添加水印的方法一般有兩種,一種是在圖片上面加上一個字符串,另一種是在圖片上加上一個logo或者其他的圖片。

因為這里處理的是已經存在的圖片,所以可以直接從已存在的圖片建立畫布,通過imagecreatefromjpeg可以直接從圖片文件創建圖像。

$im = imagecreatefromjpeg($filename);

創建圖像對象以后,我們就可以通過前面的GD函數,繪制字符串到圖像上。如果要加的水印是一個logo圖片,那么就需要再建立一個圖像對象,然后通過GD函數imagecopy將logo的圖像復制到源圖像中。

$logo = imagecreatefrompng($filename);imagecopy($im, $logo, 15, 15, 0, 0, $width, $height);

當將logo圖片復制到原圖片上以后,將加水印后的圖片輸出保存就完成了加水印處理。

imagejpeg($im, $filename);

<?php
//這里僅僅是為了案例需要準備一些素材圖片
$url = 'http://www.iyi8.com/uploadfile/2014/0521/20140521105216901.jpg';
$content = file_get_contents($url);
$filename = 'tmp.jpg';
file_put_contents($filename, $content);
$url = 'http://wiki.Ubuntu.org.cn/images/3/3b/Qref_Edubuntu_Logo.png';
file_put_contents('logo.png', file_get_contents($url));
//開始添加水印操作
$im = imagecreatefromjpeg($filename);
$logo = imagecreatefrompng('logo.png');
$size = getimagesize('logo.png');
imagecopy($im, $logo, 15, 15, 0, 0, $size[0], $size[1]);

header("content-type: image/jpeg");
imagejpeg($im);

-----異常處理-----

--

拋出一個異常

從PHP5開始,PHP支持異常處理,異常處理是面向對象一個重要特性,PHP代碼中的異常通過throw拋出,異常拋出之后,后面的代碼將不會再被執行。

既然拋出異常會中斷程序執行,那么為什么還需要使用異常處理?

異常拋出被用于在遇到未知錯誤,或者不符合預先設定的條件時,通知客戶程序,以便進行其他相關處理,不至于使程序直接報錯中斷。

當代碼中使用了try catch的時候,拋出的異常會在catch中捕獲,否則會直接中斷。

 

1、基本語法
        try{
            //可能出現錯誤或異常的代碼
            //catch表示捕獲,Exception是php已定義好的異常類
        } catch(Exception $e){
            //對異常處理,方法:
                //1、自己處理
                //2、不處理,將其再次拋出
        }
2、處理處理程序應當包括:
Try - 使用異常的函數應該位于 "try"  代碼塊內。如果沒有觸發異常,則代碼將照常繼續執行。但是如果異常被觸發,會拋出一個異常。
Throw - 這里規定如何觸發異常。注意:每一個 "throw" 必須對應至少一個 "catch",當然可以對應多個"catch"
Catch - "catch" 代碼塊會捕獲異常,并創建一個包含異常信息的對象。

//創建可拋出一個異常的函數function checkNum($number){     if($number>1){         throw new Exception("異常提示-數字必須小于等于1");     }     return true; } //在 "try" 代碼塊中觸發異常 try{     checkNum(2);     //如果異常被拋出,那么下面一行代碼將不會被輸出     echo '如果能看到這個提示,說明你的數字小于等于1'; }catch(Exception $e){     //捕獲異常     echo '捕獲異常: ' .$e->getMessage(); }

上面代碼將獲得類似這樣一個錯誤:

捕獲異常:: 異常提示-數字必須小于等于1

例子解釋:

上面的代碼拋出了一個異常,并捕獲了它:

創建 checkNum() 函數。它檢測數字是否大于 1。如果是,則拋出一個異常。
在 "try" 代碼塊中調用 checkNum() 函數。
checkNum() 函數中的異常被拋出
"catch" 代碼塊接收到該異常,并創建一個包含異常信息的對象 ($e)。
通過從這個 exception 對象調用 $e->getMessage(),輸出來自該異常的錯誤消息

<?php
$filename = 'test.txt';
try {
if (!file_exists($filename)) {
throw new Exception('文件不存在');
}
} catch(Exception $e) {
echo $e->getMessage();
}

--異常處理類

PHP具有很多異常處理類,其中Exception是所有異常處理的基類。

Exception具有幾個基本屬性與方法,其中包括了:

message 異常消息內容
code 異常代碼
file 拋出異常的文件名
line 拋出異常在該文件的行數

其中常用的方法有:

getTrace 獲取異常追蹤信息
getTraceAsString 獲取異常追蹤信息的字符串
getMessage 獲取出錯信息

如果必要的話,可以通過繼承Exception類來建立自定義的異常處理類。

//自定義的異常類,繼承了PHP的異常基類Exceptionclass MyException extends Exception {    function getInfo() {        return '自定義錯誤信息';    }}try {    //使用異常的函數應該位于 "try"  代碼塊內。如果沒有觸發異常,則代碼將照常繼續執行。但是如果異常被觸發,會拋出一個異常。    throw new MyException('error');//這里規定如何觸發異常。注意:每一個 "throw" 必須對應至少一個 "catch",當然可以對應多個"catch"} catch(Exception $e) {//"catch" 代碼塊會捕獲異常,并創建一個包含異常信息的對象    echo $e->getInfo();//獲取自定義的異常信息    echo $e->getMessage();//獲取繼承自基類的getMessage信息}

<?php
class MyException extends Exception {
function getInfo() {
return '自定義錯誤信息';
}
}

try {
throw new MyException('error');
} catch(Exception $e) {
echo $e->getInfo();
}

--

捕獲異常信息

在了解了異常處理的基本原理之后,我們可以通過try catch來捕獲異常,我們將執行的代碼放在try代碼塊中,一旦其中的代碼拋出異常,就能在catch中捕獲。

這里我們只是通過案例來了解try catch的機制以及異常捕獲的方法,在實際應用中,不會輕易的拋出異常,只有在極端情況或者非常重要的情況下,才會拋出異常,拋出異常,可以保障程序的正確性與安全,避免導致不可預知的bug。

一般的異常處理流程代碼為:

try {    throw new Exception('wrong');} catch(Exception $ex) {    echo 'Error:'.$ex->getMessage().'<br>';    echo $ex->getTraceAsString().'<br>';}echo '異常處理后,繼續執行其他代碼';

<?php
try {
throw new Exception('wrong');
} catch(Exception $ex) {
echo 'Error:'.$ex->getMessage().'<br>';
echo $ex->getTraceAsString().'<br>';
}
echo '異常處理后,繼續執行其他代碼';

--

獲取錯誤發生的所在行

在異常被捕獲之后,我們可以通過異常處理對象獲取其中的異常信息,前面我們已經了解捕獲方式,以及獲取基本的錯誤信息。

在實際應用中,我們通常會獲取足夠多的異常信息,然后寫入到錯誤日志中。

通過我們需要將報錯的文件名、行號、錯誤信息、異常追蹤信息等記錄到日志中,以便調試與修復問題。

<?php
try {
throw new Exception('wrong');
} catch(Exception $ex) {
$msg = 'Error:'.$ex->getMessage()."/n";
$msg.= $ex->getTraceAsString()."/n";
$msg.= '異常行號:'.$ex->getLine()."/n";
$msg.= '所在文件:'.$ex->getFile()."/n";
//將異常信息記錄到日志中
file_put_contents('error.log', $msg);
}

 

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 久久久成人动漫 | 4p一女两男做爰在线观看 | 精品在线视频播放 | 爱操成人网 | 国产一区国产二区在线观看 | 北京一级毛片 | 黄视频网站免费观看 | 男女隐私免费视频 | 国产二区三区在线播放 | 日韩视频一二三 | 国产va在线观看免费 | 国产一级毛片高清 | 人成免费a级毛片 | 成人午夜免费av | 神马久久蜜桃 | 高潮娇喘嗯啊~文字 | 色综合久久久久久 | 久久亚洲精品久久国产一区二区 | 国产午夜免费福利 | 免费久久久久 | 欧美大电影免费观看 | av成人在线观看 | 欧美日本亚洲视频 | 国产午夜精品久久久久婷 | 国产午夜精品一区二区三区在线观看 | 成人在线观看免费观看 | 午夜精品久久久久久久96蜜桃 | 久久精品艹 | 99精品国产小情侣高潮露脸在线 | 好吊色欧美一区二区三区四区 | 亚洲成人黄色片 | 久久久久国产一区二区三区不卡 | 欧美一区二区三区中文字幕 | 午夜精品久久久久久久久久久久久蜜桃 | 高潮娇喘嗯啊~文字 | 国产1级视频 | 69性欧美高清影院 | 国产午夜精品久久久久 | 国产一区二区三区在线视频 | 国产成人精品一区二区视频免费 | 国产男女 爽爽爽爽视频 |