Laravel實作了MVC架構,容易理解且功能強大,是現階段最多人使用的PHP framework,根據2019 Google 搜尋排行,Laravel使用率皆已大幅領先其他PHP Framework。

用戶插入圖片
PHP framework使用率(2019)                      

Laravel 安裝流程
1. 首先php版本不能低於5.3.2,這是Composer所支援的php最低版本,開啟php的openSSL,在php.ini裡
找到;extension=php_openssl.dll,移除前面分號,重新啟動php server。

2. 先安裝PHP管理套件工具Composer,安裝時會告知是否有dll未載入,若有未載入dll,再回去php.ini將其開啟,另外應指向正確的php目錄。安裝後記得要將composer/verdor/bin路徑加入系統變數Path裡,這樣才能在命令列中使用composer。

3. 參考下表,依你的php版本,對應至所支援的Laravel版本:
Laravel 4.2 : PHP >= 5.4
Laravel 5 : PHP >= 5.4, PHP < 7
Laravel 5.1 : PHP >= 5.5.9
Laravel 5.2 : PHP >= 5.5.9, PHP < 7.1.*
Laravel 5.3 : PHP >= 5.6.4, PHP < 7.1.*
Laravel 5.4 : PHP >= 5.6.4
Laravel 5.5 : PHP >= 7.0.0
Laravel 5.6 : PHP >= 7.1.3
Laravel 5.7 : PHP >= 7.1.3
Laravel 5.8 : PHP >= 7.1.3
Laravel 6.x : PHP >= 7.2.0
Laravel 7.x : PHP >= 7.2.5

在命令列中,以Composer安裝指定Laravel版本,指令如下:(project_name請自行指定)
composer create-project laravel/laravel project_name 5.4 --prefer-dist
我設定專案資料夾名為laravel,則應輸入:
composer create-project laravel/laravel laravel 5.4 --prefer-dist

4. 安裝完畢後,在命令列中輸入 php artisan serve,會開啟測試網址
http://127.0.0.1:8000
確認是否安裝成功

5. 安裝成功後,為了能夠正常使用,應立即修正時區,在laravel/config/app.php中
找到 'timezone' => 'UTC',
改為 'timezone' => 'Asia/Taipei', (或你在的時區)

相關連結:https://laravel.com/
     https://www.excellentwebworld.com/best-php-frameworks/
2020/07/13 00:19 2020/07/13 00:19
2020/07/13 00:19 

一般的表單在使用 javascript:history.go(-1); 回上一頁的話,表單是可以記住前一頁資料的,但啟用 Session 時表單欄位則會在回上一頁時被清空。

0007

在你的網頁中加上下列資訊可以避免你的表單被 Session 清空:

──────────────────────────────────────────────────────────
方法1:

form.php
<?php
session_start();
header("Cache-control:private");
?>

<form name="form1" method="post" action="test1.php">
<input type="text" name="t1">
<input type="submit" name="submit" value="Next">
</form>

back.php
<?php
echo $_POST['t1'];
?>
<a href="javascript:history.go(-1);">Back</a>

──────────────────────────────────────────────────────────
方法2:

form.php
<?php
session_cache_limiter('private');
session_start();
?>

<form name="form1" method="post" action="test1.php">
<input type="text" name="t1">
<input type="submit" name="submit" value="Next">
</form>

back.php
<?php
echo $_POST['t1'];
?>
<a href="javascript:history.go(-1);">Back</a>

──────────────────────────────────────────────────────────
方法3:(只適用於 IE)

form.php
<?php
session_start();
?>

<meta name="save" content="history">
<form name="form1" method="post" action="test1.php">
<input type="text" name="t1" style="behavior:url(#default#savehistory)">
<input type="submit" name="submit" value="Next">
</form>

back.php
<?php
echo $_POST['t1'];
?>
<a href="javascript:history.go(-1);">Back</a>
2008/07/04 11:19 2008/07/04 11:19
2008/07/04 11:19 

雖然檔案上傳已經不是新鮮事了,但是總覺得自己寫的應該比較容易看得懂,遇到問題要討論也比較方便一些。

一、前置作業

PHP 檔案上傳運作原理
PHP 上傳檔案時會先將檔案移到暫存目錄,上傳成功後再將檔案送往上傳目錄並自動清除暫存檔

php.ini 檔案上傳相關設定
; Whether to allow HTTP file uploads. 檔案上傳,預設為開啟
file_uploads = On

; Temporary directory for HTTP uploaded files (will use system default if not
; specified). PHP 暫存目錄設定,預設為系統暫存目錄,若需設定請將前置分號移除
;upload_tmp_dir =

; Maximum allowed size for uploaded files. PHP 預設上傳限制為 2M
upload_max_filesize = 2M

二、檔案上傳示範 (big5)

file.htm
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=big5">
<title>檔案上傳</title>
</head>
<body>
<form action="file_ok.php" method="post" enctype="multipart/form-data">
<input type="hidden" name="max_file_size" value="1024000">
<input type="file" name="myfile">
<input type="submit" value="上傳">
</form>
</body>
</html>
1. 範例檔案為 big5 編碼,因 utf-8 編碼有中文檔案名上傳問題,之後再討論。
2. 上傳檔案時,form 的 enctype 屬性要設定為 multipart/form-data
3. <input type="hidden" name="max_file_size" value="1024">
可限定上傳檔案大小(1k = 1024),要寫在 <input type="file" ... > 之前

file_ok.php
<?php
$uploaddir = '';
$uploadfile = $uploaddir.basename($_FILES['myfile']['name']);

echo "<pre>";
if (move_uploaded_file($_FILES['myfile']['tmp_name'], $uploadfile)) {
echo "Upload OK \n";
} else {
echo "Upload failed \n";
}
print_r($_FILES);
echo "</pre>";
?>
1. PHP 4.1 之前版本,要用 $HTTP_POST_FILES 取代 $_FILES
2. $uploaddir 為上傳目錄設定。
3. 移除檔案可使用 unlink() 函數,例 unlink($uploaddir.$uploadfile);

三、注意事項

UTF-8 的中文檔案名上傳問題
utf-8 編碼網頁無法在 big5 系統正確處理中文檔名,原因在於 move_uploaded_file() 不能處理 utf-8 中文編碼,需利用 iconv() 函數作轉碼,解決方法如下:

請將
move_uploaded_file($_FILES['myfile']['tmp_name'], $uploadfile)

改為
move_uploaded_file($_FILES['myfile']['tmp_name'], iconv("utf-8", "big5", $uploadfile))


四、檔案上傳示範 (utf-8)

file.htm

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>檔案上傳</title>
</head>
<body>
<form action="file_ok.php" method="post" enctype="multipart/form-data">
<input type="hidden" name="max_file_size" value="102400000">
<input type="file" name="myfile">
<input type="submit" value="上傳">
</form>
</body>
</html>

file_ok.php
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<?php
$uploaddir = '';
$uploadfile = $uploaddir.basename($_FILES['myfile']['name']);

echo "<pre>";
if (move_uploaded_file($_FILES['myfile']['tmp_name'], iconv("utf-8", "big5", $uploadfile))) {
echo "Upload OK \n";
} else {
echo "Upload failed \n";
}
print_r($_FILES);
echo "</pre>";
?>

2008/05/07 11:57 2008/05/07 11:57
2008/05/07 11:57 

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at .... )

發生原因

session_start() 之前不能有任何字元輸出,UTF-8 編碼裡的 BOM 也會被認為是 headers,有上述狀況 Session 將無法順利傳遞,並會顯示錯誤訊息。

解決方法1
1. 確定 <?php 和 session_start() 之間沒有其他字元,空格也要移除。
2. 若是 UTF-8 編碼,請用編輯器(例 UltraEdit、Notepad++...)將檔案裡的 BOM 移除。

解決方法2
以 ob_start() 開啟緩衝區將輸出資訊寫入緩衝區,可避免 headers 先於 session_start() 輸出,寫入緩衝區的內容可由 flush() 或 ob_end_flush() 輸出至瀏覽器,以下範例不會顯示錯誤訊息:
<?php
ob_start();
echo "test";
session_start();
ob_end_flush();
?>

相關連結:PHP,Output Control Functions - Manual
(感謝 YOGO 熱心提供)
2008/04/18 02:36 2008/04/18 02:36
2008/04/18 02:36 

說到 PHP 一般的印象就是網頁程式,不過以下要教你以 PHP 製作尾牙最常玩的賓果遊戲喔!

1. 用以下語法 Run 出兩張賓果表格,其中的亂數由 0~99 不重複
bingo1.php
<?php
for($j=0;$j<2;$j++){
 $nums=range(0,99);
 shuffle($nums);
 echo "<table border=\"1\" style=\"font-family:Arial;font-size:30px;\" cellpadding=\"10\" align=\"center\">";
 echo "<tr><td colspan=\"5\" align=\"center\">★ ★ Bingo! ★ ★</td></tr><tr>";
 for($i=0;$i<25;$i++){
   echo "<td align=\"center\">".$nums[$i]."</td>";
  if ($i%5 == 4){if ($i != 24){echo "</tr><tr>";}}
 }
 echo "</tr></table>";
 if ($j == 0){
  echo "<br><br><br><br><br><br><br><br><br>";
 }
}
?>
有看到藍字嗎? 只要改成 range(1,25),就是數字 1~25 的正常賓果遊戲了

2. 把網頁列印出來,印成 A4 就會像這樣
用戶插入圖片

3. 將紙拆成兩張,視需要份數來決定印多少張,兩個人的話進行到這裡就可以玩了!
用戶插入圖片

4. 製作 0~99 的籤,這部份還是用 PHP 解決
bingo2.php
<?php
$nums = 99;
echo "<table border=\"0\" style=\"text-decoration:underline;font-family:Arial;font-size:95px;\" cellpadding=\"10\" align=\"center\"><tr>";
for($i=0;$i<=$nums;$i++){
  echo "<td align=\"center\">".$i."</td>";
 if ($i%5 == 4){if ($i != $num){echo "</tr><tr>";}}
}
echo "</tr></table>";
?>
數字達三位數以上的話,就要把字體改小囉 (font-size)

5. 預覽列印就像這樣,實際上會印出三張 A4
用戶插入圖片

6. 把印出來的紙依號碼裁一裁折一折,再準備個籤筒丟進去

Have fun!

2008/1/18 忘了 IE7 的列印有自動縮小功能,為了支援其他瀏覽器,已將尺寸向 1:1 修正
2008/1/25 在籤上數字加底線以免 6 9 分不出來
2008/01/17 09:39 2008/01/17 09:39
2008/01/17 09:39 

最近對傳遞變數作了一個簡單的實驗,沒使用 urlencode() 函數時,只要遇到「 & 」等 HTML 特殊字元都難逃字串被截斷的命運:
test1.php
<?php
$txt = "A&B&C";
echo "<a href=\"test2.php?txt=".$txt."\">GO</a>";
?>

test2.php
<?php
echo $_GET['txt'];
?>

Demo
A


test1.php
<?php
$txt = "A&B&C";
echo "<a href=\"test2.php?txt=".urlencode($txt)."\">GO</a>";
?>

test2.php
<?php
echo $_GET['txt'];
?>

Demo
A&B&C

所以用 GET 方式傳變數,最好都先加上 urlencode(),尤其傳的內容是網址的話,& 出現機會大增,特別容易被截斷。接收變數時,PHP 會自動解碼,不需再加上 urldecode()。值得注意的是,字串被截斷的現象只發生在 $_GET,$_POST 傳遞的變數則沒有類似的問題。

(P.S. 以上現象發生於 HTML 特殊字元上:例 &、<、>... 等字元)
2008/01/08 00:02 2008/01/08 00:02
2008/01/08 00:02 

PHP 支援的標記法一共有四種:( ... 代表 PHP 程式)

1. <?php ... ?>

2. <? ... ?>

3. <script language="php"> ... </script>

4. <% ... %>

最正確的標記法是第一種 <?php ... ?> ,因為只有它能在 XHTML 或 XML 的代碼中使用 PHP。

第二種為短標記,必須在 php.ini 確認 short_open_tag = On 才可以使用 (預設為 On )。
第四種為 ASP 標記,同樣必須在 php.ini 確認 asp_tags = On 才可以使用 (預設為 Off )。

為了確認你寫的 PHP 能在任何 PHP 環境下執行,這裡還是建議你使用最正確的 PHP 標記法:
<?php ... ?>
2006/02/08 13:42 2006/02/08 13:42
2006/02/08 13:42 

如何將 2006-01-16 14:30:00 (MySQL 日期格式) 轉換為 2006/01/16 呢?

語法:
echo date("Y/m/d",strtotime("2006-01-16 14:30:00"));
若以 $date1 和 $date2 表示兩者:
$date1 = date("Y/m/d",strtotime($date2));
將此格式套用到現在時間:
echo date("Y/m/d");

以下列出 PHP 字母表示的日期格式:
a am 或 pm
A  AM 或 PM
d 日,二位數,不足二位數補零; 如 01至 31
D 星期,三個英文字; 如 Fri
F 月份,全名; 如 January
g 小時,12 小時制; 如: 1 至 12
G 小時,24 小時制; 如: 0 至 23
h 小時,12 小時制,不足二位數補零; 如 01 至 12
H 小時,24 小時制,不足二位數補零; 如 00 至 23
i 分; 如: 00 至 59
j 日; 如: 1 至 31
l 星期,全名; 如: Friday
m 月,二位數,不足二位數補零; 如 01 至 12
M 月,三個英文字; 如: Jan
n 月; 如: 1 至 12
O 和格林威治標準時間的小時差異數
s 秒; 如: 00 至 59
S 日之後加的序數; 如: th、nd
t 月的總天數; 如: 28 至 31
T 本機的時區
U 自 1970/1/1 00:00:00 以來的秒數
w 星期,個位數字; 如 0 至 6
Y 年,四位數; 如: 1999
y 年,二位數; 如: 99
z 一年的第幾天; 如: 0 至 365

不在上列的字元將直接顯示。

相關連結:PHP,date()
2006/01/16 14:45 2006/01/16 14:45
2006/01/16 14:45 

這裡簡單介紹 PHP + MySQL 的資料刪除語法:

delete.php
<?php
$link = mysql_connect("你的主機名稱"、"你的名稱"、"你的密碼") or die ("無法連接".mysql_error());

mysql_select_db("你的資料庫名稱"、$link) or die ("無法選擇資料庫".mysql_error());

$sql = "DELETE from 你的資料表名稱 where id = '1'"; //假設要刪編號1的資料

mysql_query($sql、$link) or die ("無法刪除".mysql_error());
mysql_close($link);
?>
DELETE 也要指定刪除哪一筆,沒指定的話就是全砍別忘了....
2006/01/13 16:37 2006/01/13 16:37
2006/01/13 16:37 

這裡簡單介紹 PHP + MySQL 的資料修改語法:

data.php
<html>
<head>
<title>Data</title>
</head>
<body>
<form name="form1" method="post" action="modify.php">
Data1:<input type="text" name="data1">
Data2:<input type="text" name="data2">
<input type="hidden" name="id" value="1"> <!-- 假設要改編號1的資料 //-->
<input type="submit" name="Submit" value="送出">
</form>
</body>
</html>

modify.php
<?php
$link = mysql_connect("你的主機名稱", "你的名稱", "你的密碼") or die ("無法連接".mysql_error());

mysql_select_db("你的資料庫名稱", $link) or die ("無法選擇資料庫".mysql_error());

$sql = "UPDATE 你的資料表名稱 set data1= '$_POST[data1]',data2= '$_POST[data2]' where id = '$_POST[id]'";

mysql_query($sql, $link) or die ("無法修改".mysql_error());
mysql_close($link);
?>
UPDATE 要指定修改哪一筆資料,不指定的話就全部改光光了,這裡指定修改編號1的資料。
2006/01/13 14:17 2006/01/13 14:17
2006/01/13 14:17