web開發-PHP基礎學習

PHP是什麼

PHP 是一種創建動態交互性站點的強有力的服務器端腳本語言。
PHP 是免費的,並且使用非常廣泛。同時,對於像微軟 ASP 這樣的競爭者來說,PHP 無疑是另一種高效率的選項。

PHP開發環境集成安裝

通常,PHP集成環境包,都會將Apache、Ngnix、PHP、MySQL集成在一起,給用戶一個非常簡單的解決方案。並且大多數情況下:php版本是允許切換的。MySQL一般都是提供phpMyAdmin網頁版管理工具,如果你不喜歡,也可用第三方工具代替。

  1. Mac系統下的MAMP Pro
  2. Windows環境下,可以選擇的PHP集成環境包:WampServer、UPUPW、phpStudy和php程序員工具箱

PHP常見的輸出語句

echo print() print_r() var_dump()的區別

echo

可以輸出多個值,多個值用逗號隔開,echo是語言結構,並不是真正的函數;只能輸出 字符串,整型跟int型浮點型數據。(有無括號均可使用)

<?php
    echo 'Hello PHP';
    echo '輸出第一個值---','輸出第二個值';
print

print也是語言結構,不是嚴格意義上的函數;較於echo的區別是它只能打印一個值;print打印的值能直接複製給一個變量;而echo不可以;$a = echo ‘11111’; 會報錯

$a = print '11111';
var_dump()

var_dump() 函數顯示關於一個或多個表達式的結構信息,包括表達式的類型與值。數組將遞歸展開值,通過縮進顯示其結構。

   $arr = array("name"=>"張三","age"=>"18");
    var_dump($arr);

輸出: array(2) { [“name”]=> string(6) “張三” [“age”]=> string(2) “18” }

print_r()

可以把字符串和數字簡單地打印出來,而數組則以括起來的鍵和值得列表形式顯示,並以Array開頭。但print_r()輸出布爾值和NULL的結果沒有意義,因爲都是打印"\n"。因此用var_dump()函數更適合調試。
輸出: Array ( [name] => 張三 [age] => 18 )

PHP單雙引號

單引號不會解析變量;雙引號則可以解析變量

    $num = 2222;
    echo '$num';//$num
    echo "$num";//2222

數組

數值數組–帶有數字 ID 鍵的數組

$cars=array("Volvo","BMW","Toyota");
echo "I like " . $cars[0] . ", " . $cars[1] . " and " . $cars[2] . 

關聯數組-- 帶有指定的鍵的數組,每個鍵關聯一個值

    $arr = array("name"=>"張三","age"=>"18","sex"=>"雌雄同體");
    echo $arr["name"];

多維數組-- 包含一個或多個數組的數組

    $arr1 = array(
        "stu1"=>array("name"=>"張三","age"=>"18","sex"=>"雌雄同體"),
        "stu2"=>array("name"=>"李四","age"=>"18","sex"=>"雌雄同體"),
        "stu3"=>array("name"=>"王五","age"=>"18","sex"=>"雌雄同體")
    );

數組的遍歷

使用for循環遍歷

    $arr2 = array("hello php",1,2,"fff");
    for ($i =0;$i<count($arr2);$i++){
        var_dump($arr2[$i].'<br>');
    }

count是數組的長度
使用foreach遍歷上面的多維數組

    foreach ($arr1 as $stu => $msg){
    foreach ($msg as $key => $value){
        echo "$key".":"."$value";
    }
    echo "<br>";

超全局變量

PHP中預定義了幾個超級全局變量(superglobals) ,這意味着它們在一個腳本的全部作用域中都可用。 你不需要特別說明,就可以在函數及類中使用

$GLOBALS

$GLOBALS 是PHP的一個超級全局變量組,在一個PHP腳本的全部作用域中都可以訪問。

<?php
$x = 1;
$y = 2;
function addition() {
    $GLOBALS['z'] = $GLOBALS['x'] + $GLOBALS['y'];
}
addition();
echo $GLOBALS['z'];

用全局變量定義,也要用全局變量獲取

$num = 1111;
function number(){
    global $num;
    echo $num;
}
number();

請求

$_GET 用於接收 URL 地址中的提交數據(一般是 GET 參數)
$_POST 用於接收 請求體 中提交的數據(一般是 POST 提交的數據)
$_REQUEST = $_GET + $_POST

$_SERVER

$_SERVER 是一個包含了諸如頭信息(header)、路徑(path)、以及腳本位置(script locations)等等信息的數組。這個數組中的項目由 Web 服務器創建。

echo $_SERVER['PHP_SELF'];//當前執行腳本的文件名
echo $_SERVER['REQUEST_METHOD']//請求方式

$_FILES

通過使用 PHP 的全局數組 $_FILES,你可以從客戶計算機向遠程服務器上傳文件。

$_FILES["file"]["name"] - 上傳文件的名稱
$_FILES["file"]["type"] - 上傳文件的類型
$_FILES["file"]["size"] - 上傳文件的大小,以字節計
$_FILES["file"]["tmp_name"] - 存儲在服務器的文件的臨時副本的名稱
$_FILES["file"]["error"] - 由文件上傳導致的錯誤代碼

$_ENV

$_ENV是一個包含服務器端環境變量的數組。

$_COOKIE$_SESSION

Cookie:在客戶端訪問某個地址時,會將請求交到服務器進行處理,在發送請求的時候,瀏覽器會將頁面的頭部信息一併的交到服務器端進行處理。在處理的過程中,Cookie 在服務器端生成 ,在此同時,可以將一些需要保存的信息,存放到此 Cookie 中。生成 Cookie 對象時,需要確定具體的名稱及具體的值,可以設置當前 Cookie 的過期時間,設置過期時間後,就相當於持久化了 Cookie 中的數據,此時的 Cookie 會以之前的 Cookie 名稱,保存在客戶端。
如果不設置過期時間,則當前 Cookie 的生命期是瀏覽器會話期間,一旦關閉了該瀏覽器,當前的Cookie 就會不存在了,此時的 Cookie 信息是保存在內存中。在服務器端,處理完後,會將生成的 Cookie ,隨着 Http 響應,會在 Http 響應頭中,加上Cookie 信息,瀏覽器接受到響應後,會按照 Http 響應頭裏的 Cookie ,在客戶端建立 Cookie 。在下次客戶進行請求的時候,Http 會附帶着已經存儲過的 Cookie,一併發送到服務器。一個域,在客戶端建立的所以 Cookie 都是可以共享的,只要 Cookie 沒有過期。

Session:Session 是在服務器端生成的,存儲在服務器端,即存在內存中。可以對生成的 Session 設置過期時間,如果不設置過期時間,默認的 Session 過期時間是30 分鐘(在不同的服務器中,它的過期時間略有不同,本文是以 Tomcat 來說的) 但是,Sesssion 的生成的同時,會生成一個與之相關聯的的 SessionID ,此 SessionID的存儲是需要 Cookie 來完成的。 SessionID 是以名稱爲 JSESSIONID,其值應該是一個既不會重複,又不容易被找到規律以仿造的字符串。SessionID會隨着此次 Http 響應,一併返回到客戶端,並保存在客戶端中。到當前請求再次發出後,該 SessionID會隨着 Http 頭部,傳到服務器中,服務器依據當前 SessionID 得到與之對應的 Session.

時間

time()

time() 函數返回自 Unix 紀元(January 1 1970 00:00:00 GMT)起的當前時間的秒數。獲取到的是 秒數爲單位的時間戳

Date()

使用Date()格式化日期:第一個參數是一個時間格式;第二個參數是一個時間戳

echo date('Y-m-d H-i-s',time());

我們看到結果與當前時間不符合,是因爲默認時間戳獲取的就是格林威治時間。兩種解決方案:通過配置文件設置時區date.timezone = PRC;通過代碼在時間戳前設置時區date_default_timezone_set('PRC');

strtotime()

可以用來將一個有格式的時間字符串 轉換爲一個 時間戳

$now = '2019-04-11 16:45:00';
$timestamp = strtotime($now);
echo $timestamp;

require、require_once、include

共同點:三者都是導入文件,可以用於在當前腳本中載入一個別的腳本文件並且執行他
require:一旦被載入的文件不存在就會報一個致命錯誤,當前文件不再往下執行;
require_once 如果之前載入過,不再執行(只執行一次),一般用來加載定義常量 定義函數(define)這種文件
include 載入文件不存在不會報錯誤(會有警告,警告不用管),當前文件繼續執行

表單

表單:收集指定的用戶信息。有一點很重要的事情值得注意,當處理 HTML 表單時,PHP 能把來自 HTML 頁面中的表單元素自動變成可供 PHP 腳本使用。PHP 中的 $_GET 和 $_POST 變量用於檢索表單中的信息,比如用戶輸入。

一般爲了便於維護,我們將表單提交給當前頁面本身

  1. 建議使用 $_SERVER[‘PHP_SELF’] 動態獲取當前頁面訪問路徑,這樣就不用因爲文件重命名或者網站目錄結構調整而修改代碼了
  2. 由於文件重命名會導致代碼修改,魯棒性不強.(魯棒性:指的是我們的程序應對變化的能力)
<?php
    if($_SERVER['REQUEST_METHOD']==='POST'){
        var_dump($_POST);
    }
?>
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
    <div>
        <label for="username">用戶名</label>
        <input type="text" id="username" name="username">
    </div>
    <div>
        <label for="password">密碼</label>
        <input type="password" id="password" name="password">
    </div>
    <button type="submit">登錄</button>
</form>
</body>
</html>

使用radio:當表單中一定要爲相同 name 的 radio 設置不同的 value,讓服務端可以辨別

    <label><input type="radio" name="gender" value="male"></label>
    <label><input type="radio" name="gender" value="female"></label>

使用checkbox:需要給其加上[],選中多個會存入數組;否則只能接受一個值;

    <label><input type="checkbox" name="funs[]" value="football"> 足球</label>
    <label><input type="checkbox" name="funs[]" value="basketball"> 籃球</label>
    <label><input type="checkbox" name="funs[]" value="earth"> 地球</label>

表單文件上傳

  1. enctype 屬性規定在發送到服務器之前應該如何對錶單數據進行編碼。
  2. 默認地,表單數據會編碼爲 “application/x-www-form-urlencoded”。
  3. 在使用包含文件上傳控件的表單時,enctype 屬性必須使用multipart/form-data。不對字符編碼。
  4. 上傳多個要使用multiple屬性,和[]
<form action="" enctype="multipart/form-data" method="post" action="<?php echo $_SERVER['PHP_SELF'] ?>">
    <input type="file" name="image[]" multiple>
    <button>上傳</button>
</form>
  1. 使用$_FILES打印詳細信息
var_dump($_FILES);
  1. 使用move_uploaded_file移動文件
        $image = $_FILES['image'];
        $source = $image['tmp_name'];
        $target = $image['name'];
        var_dump($source[0]);
        var_dump($target[0]);
        $moved = move_uploaded_file($source[0],'./'.$target[0]);
  1. 我們移動文件需要根據$_FILES打印出來的具體信息進行操作

header函數

header() 函數向客戶端發送原始的 HTTP 報頭。PHP 中 header 函數專門用於設置響應頭

header('Content-Type: text/html; charset=GBK');

使用location重定向,切記不能循環重定向

header('Location:https://www.csdn.net/')

通過 HTTP 響應頭告訴客戶端我們指定內容

header('Content-Type: application/javascript');

參考文檔

$_COOKIE和$_SESSION的作用和實現

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章