環境建置 XAMPP
如何改檔案?
Apache => config => browse php => 到上一層 xampp folder => find htdoc => 這套軟體的 php 檔案都會存放在 htdoc folder 中
現在,在 htdoc folder 中新增資料夾,在資料夾中新增 php 檔案。對新增的 a.php 檔案最編輯,然後在 http://localhost/angela/a.php
檢視相對應的內容。有出現,表示我們的 server 有正確地跑起。
預設的 XAMPP 網址路徑就會是在 htdoc 之後的檔案路徑。網址與檔案結構是對應的。請注意:其他框架、程式語言的預設可能不是長這樣,這只是這套預設,不是所有伺服器都長這樣子。
一、PHP 基礎
雖然副檔名是 php,但隨便打一些東西存檔,重新整理會發現,沒有用到 php 的情況下,打甚麼就是甚麼。
//我們可以在檢視網頁原始碼看到原本打的相關內容
aaaaaaaaaaaaa
xcvxvw
<h1>sss</h1>
echo "123";
要寫 php 程式碼,要用 php 標籤將程式碼包在裡面,區塊內的東西,才會被 php 執行與輸出。
<?php
echo '123';
?>
檢視原始碼會發現,多出 123 ,原因是他執行了 php 標籤中的代碼,並將 123 給返回。另外,盡量不要用簡寫 <? ?>
因為某些 server 不支援,會造成除錯上的困難,有些甚至連錯誤訊息都沒有。
基本語法
一、php 標籤
<?php
?>
二、每行結尾要加分號
三、輸出 => echo
輸出的內容可以是 html 代碼。檢視原始碼,輸出的內容是你寫的內容,瀏覽器呈現的樣子有 h2 的效果。
<?php
echo "<h2>我我我我</h2>";
?>
四、變數宣告/變數 => $
<?php
$a = 'aaaaa';
echo $a;
?>
五、字串拼接 => .
<?php
$a = 'i love u ';
$b = 'bazinga';
echo $a . $b;
?>
六、if/else => 同 JS
<?php
$score = 2;
if ($score >= 60 ) {
echo 'pass';
} else {
echo 'fail';
}
?>
七、迴圈
要注意,所有的變數都要錢字號開頭
換行沒用,最後通通變成空白,檢視原始碼是有換行成功,但因為輸出環境是瀏覽器,在 html 的解析底下,多個換行會解讀為空白。
<?php
for ($i=1; $i<=10; $i++) {
echo $i . "\n";
}
?>
解決方式,用 br 標籤。畫面經瀏覽器渲染後,呈現換行。
<?php
for ($i=1; $i<=10; $i++) {
echo $i . "<br>";
}
?>
八、array
<?php
$arr = array("apple", 2, 3, 4, 100); // 宣告陣列
echo $arr[0] . "<br>"; // 取到第一個元素
echo $arr[sizeof($arr) - 1] . "<br>"; // 印出最後一個元素
echo "length:" . sizeof($arr) . "<br>" //用 sizeof 取得 arr 長度
?>
Warning: Array to string conversion (echo 輸出要將 arr 轉成 string)
<?php
$arr = array("apple", 2, 3, 4, 100); // 宣告陣列
echo $arr
?>
我們可以利用這兩個 funct,兩個選一個就可以了。
var_dump 會將每個變數的型態與值給印出來 => 可以檢視複雜的資料結構
<?php
$arr = array("apple", 2, 3, 4, 100); // 宣告陣列
var_dump($arr) // array(5) { [0]=> string(5) "apple" [1]=> int(2) [2]=> int(3) [3]=> int(4) [4]=> int(100) }
?>
print_r 輸出結果較簡潔,不會顯示 type
<?php
$arr = array("apple", 2, 3, 4, 100); // 宣告陣列
print_r($arr);
?>
九、funct
<?php
function add($a, $b) {
return $a + $b;
}
echo add(1, 3);
?>
小結
- 變數前面必加 $
- 敘述句每一行結尾要加 ;
- 要印出 arr 或是非數字與字串的資料型態,請用 var_dump() 或 print_r(),才能把整個完整的資料給印出來
- 字串拼接是用 . 而不是用 +
Apache 與 PHP 原理簡介
跑一遍整個 php 的流程,從頭到尾是怎麼一回事 ?
request => php => response
但其實,不是這個樣子。
事實上,request => Apache => php => output => Apache => response
( request 送到 Apache 這個 server 去,這個 server 把東西送到 php,php 產生要輸出的 html,html 再回到 Apache,最後再變成 response 回來。)
裡面最重要的角色是 Apache,我們可以這樣想,這個 Apache 可能有一個叫做 run 的 funct,funct 裡接收 request。php 在裡面的工作,只負責把 request 幫我轉成我要輸出的形式。所以我們在跑 serve除了 php 以外還有其他檔案,例如:index.html, index.js, index.css,這些其他檔案,都是 Apache 這個 server 幫我們處理好的。
apache
function run(request) {
response = php(request)
send response
}
可以在 git bash 中輸入 php 檔名
檢視,被 php 轉換後的輸出。可以想像成 Apache 幫我run php 的指令,把 php 輸出的東西當作 response 傳回去。
request => Apache => php => output => Apache => response
如果 apache 掛掉,那我甚麼都不能做;如果 php 掛掉傳回來的都會是錯誤訊息,
跑 php / 瀏覽大部分網站發現 url 與資料夾結構是相同。這個東西是可以藉由 server 設定。換句話說,網址的規則由 server 決定,大部分 server 預設的規則以某個資料夾為基礎,裡面按照檔案目錄的結構,有種直接存取檔案的感覺。
server 其實就是一個程式,只不過他是專門處理 request and response。
function server(request) {
......
return response;
}
(註)
mySQL:資料庫有關
Apache:server 有關
proFPT:FTP 有關
小結
- apache 這個 server 做的事情是將 request 拿進來,丟到 php,然後拿回 output,然後再傳回去。
- 網址的規則由 server 決定。
- server 決定 request 丟到哪。以 xampp 而言,預設路徑為何 request 就丟去哪
二、資料庫基礎
前言
讀進來的資料可以存在變數或記憶體內,可是一旦把這些程式關掉,資料就沒了。為了解決資料可以被永久保存,可以透過存檔,把資料讀進來存到檔案裡,下次就可以再讀進來,就算重開機只要硬碟在,檔案就不會不見。
但自己處理資料,很沒效率,要自己做格式處理,找資料也要一筆一筆地找。為了克服檔案存取的限制,資料庫系統誕生了。
資料庫系統底層仍然是存在 io 硬碟,只是檔案格式不太一樣,我不需要在意底層如何存取。資料庫系統提供了友善的介面、指令、程式語言,我可以透過資料庫系統的程式語言去存撈資料,去操縱資料。
不同資料庫,底下有不同資料庫實作,不同資料庫實作底下又有不同的 engine
資料庫類型
一、關聯式資料庫(relational database)
將不相關的資料放在不同的 table,將同樣類型的資料放在同一個 table,可以藉由相同的欄位進行 pointer。也就是,可以藉由這兩個 table 的關聯,來獲得我所有需要的資料。
關聯資料庫程式語言:sql,專門用來查詢關聯式資料庫裡面的資料的語言。
關聯式資料庫是統稱,底下真正實作的資料庫有 mySQL, postgreSQL, MSSQL
小結、關聯式資料庫,透過關聯存拿資料;也透過關聯將資料切分更明確。
二、NoSQL (NOT ONLY SQL)
關聯式資料庫有一定的資料型態,例如:字串、數字。NOSQL 的資料庫中,會將資料存成物件或式 JSON 格式。比較沒有結構的概念。
NoSQL 是統稱,底下真正實作的資料庫有 mongoDB
// 類似長相
{
score: [1, 2, 3],
student : {
name: 'aaa'
}
}
使用時機:存取 LOG 。
差異
資料庫系統,是一個程式,專門處理資料的程式。
server,是一個程式,專門處理 request 跟 response 的程式。
如何管理資料庫?
一、CLI:以指令作為連結
二、GUI:phpMyAdmin(資安疑慮), Adminer, Sequel Pro
(有人寫好一整套 php 網頁,來管理資料庫。底層仍然是下指令操縱系統,只不過以圖形介面方便管理)
Table 表格基礎
Table schema 簡介
schema(結構),每一個表格都有一個結構,這個結構稱之為資料庫的 schema。
結構屬性:
- 名稱(欄位的key)
- 型態:通常較小的字,會存成 varchar
- 編碼排序:未設定好,會存成亂碼。通常是 DB 設定好,其他不動
- 空值:能否允許
- 預設值:current_times 資料庫紀錄時間
- 屬性:unsigend(不會是負數)
- 索引
- A_I:自動增加,保證遞增所以可以保證 id 值唯一,但不保證連續
資料一定要按照資料庫結構放入,才能建立。不然資料庫會以資料型態不符合將你擋住,東西會寫不進去。
細節
主鍵(PK):PK 是 Table 中最重要的欄位,不設定也可以。
(設定為主鍵的欄位,需要滿足一定條件)
- 不能為空
- 不能重複
唯一:資料庫會設定這個欄位不能重複。可以防禦他人寫入重複 data。
索引(index):可以從索引快速定位想要找的資料。當我建立索引,我會有一些額外的開銷,會需要建立的時間、耗費資料庫的空間,但換來的是查詢較快。index 可以是復合的欄位,例如:我可以將使用者名稱和密碼建在一起,每次查詢就查這兩個的組合。
更深的應用:google