W3C之PHP提高篇

akbarken發表於2013-11-02

PHP 的 date() 函式用於格式化時間或日期。

語法

date(format,timestamp)

PHP 日期 - 格式化日期

date() 函式的第一個引數規定了如何格式化日期/時間。它使用字母來表示日期和時間的格式。這裡列出了一些可用的字母:

  • d - 月中的天 (01-31)
  • m - 當前月,以數字計 (01-12)
  • Y - 當前的年(四位數)
<?php
echo date("Y/m/d");
echo "<br />";
echo date("Y.m.d");
echo "<br />";
echo date("Y-m-d");
?>

以上程式碼的輸出類似這樣:

2006/07/11
2006.07.11
2006-07-11


PHP 日期 - 新增時間戳

語法

mktime(hour,minute,second,month,day,year,is_dst)
如需獲得某一天的時間戳,我們只要設定 mktime() 函式的 day 引數就可以了:
<?php
$tomorrow = mktime(0,0,0,date("m"),date("d")+1,date("Y"));
echo "明天是 ".date("Y/m/d", $tomorrow);
?>

以上程式碼的輸出類似這樣:

明天是 2006/07/12

Include檔案:

伺服器端包含 (SSI) 用於建立可在多個頁面重複使用的函式、頁首、頁尾或元素。

include 和 require 語句用於在執行流中向其他檔案插入有用的的程式碼。

include 和 require 很相似,除了在錯誤處理方面的差異:

  • require 會產生致命錯誤 (E_COMPILE_ERROR),並停止指令碼
  • include 只會產生警告 (E_WARNING),指令碼將繼續
如果您希望繼續執行,並向使用者輸出結果,即使包含檔案已丟失,那麼請使用 include。

否則,在框架、CMS 或者複雜的 PHP 應用程式程式設計中,請始終使用 require 向執行流引用關鍵檔案。這有助於提高應用程式的安全性和完整性。

基礎例項

假設您有一個標準的頁標頭檔案,名為 "header.php"。如需在頁面中引用這個頁標頭檔案,請使用 include/require:

<html>
<body>

<?php include 'header.php'; ?>
<h1>Welcome to my home page!</h1>
<p>Some text.</p>

</body>
</html>

例子 2

假設我們有一個在所有頁面中使用的標準選單檔案:

"menu.php":

echo '<a href="/default.php">Home</a>
<a href="/tutorials.php">Tutorials</a>
<a href="/references.php">References</a>
<a href="/examples.php">Examples</a>
<a href="/about.php">About Us</a>
<a href="/contact.php">Contact Us</a>';

網站中的所有頁面均應引用該選單檔案。這是具體的做法:

<html>
<body>

<div class="leftmenu">
<?php include 'menu.php'; ?>
</div>

<h1>Welcome to my home page.</h1>
<p>Some text.</p>

</body>
</html>

例子 3

假設我們有一個定義變數的包含檔案 ("vars.php"):

<?php
$color='red';
$car='BMW';
?>

這些變數可用在呼叫檔案中:

<html>
<body>

<h1>Welcome to my home page.</h1>
<?php include 'vars.php';
echo "I have a $color $car"; // I have a red BMW
?>

</body>
</html>

檔案處理

fopen() 函式用於在 PHP 中開啟檔案。

此函式的第一個引數含有要開啟的檔案的名稱,第二個引數規定了使用哪種模式來開啟檔案:

<?php
$file=fopen("welcome.txt","r");
?>
模式 描述
r 只讀。在檔案的開頭開始。
r+ 讀/寫。在檔案的開頭開始。
w 只寫。開啟並清空檔案的內容;如果檔案不存在,則建立新檔案。
w+ 讀/寫。開啟並清空檔案的內容;如果檔案不存在,則建立新檔案。
a 追加。開啟並向檔案檔案的末端進行寫操作,如果檔案不存在,則建立新檔案。
a+ 讀/追加。通過向檔案末端寫內容,來保持檔案內容。
x 只寫。建立新檔案。如果檔案已存在,則返回 FALSE。
x+

讀/寫。建立新檔案。如果檔案已存在,則返回 FALSE 和一個錯誤。

註釋:如果 fopen() 無法開啟指定檔案,則返回 0 (false)。

例子

如果 fopen() 不能開啟指定的檔案,下面的例子會生成一段訊息:

<?php
$file=fopen("welcome.txt","r") or exit("Unable to open file!");
?>

關閉檔案

fclose() 函式用於關閉開啟的檔案。

<?php
$file = fopen("test.txt","r");

//some code to be executed

fclose($file);
?>

檢測 End-of-file

feof() 函式檢測是否已達到檔案的末端 (EOF)。

if (feof($file)) echo "End of file";

逐行讀取檔案

fgets() 函式用於從檔案中逐行讀取檔案。

註釋:在呼叫該函式之後,檔案指標會移動到下一行。

例子

下面的例子逐行讀取檔案,直到檔案末端為止:

<?php
$file = fopen("welcome.txt", "r") or exit("Unable to open file!");
//Output a line of the file until the end is reached
while(!feof($file))
  {
  echo fgets($file). "<br />";
  }
fclose($file);
?>

逐字元讀取檔案

fgetc() 函式用於從檔案逐字元地讀取檔案

註釋:在呼叫該函式之後,檔案指標會移動到下一個字元。

例子

下面的例子逐字元地讀取檔案,直到檔案末端為止:

<?php
$file=fopen("welcome.txt","r") or exit("Unable to open file!");
while (!feof($file)) 
  { 
  echo fgetc($file); 
  }
fclose($file);
?>

通過 PHP,可以把檔案上傳到伺服器。

這個供上傳檔案的 HTML 表單:

<html>
<body>

<form action="upload_file.php" method="post"
enctype="multipart/form-data">
<label for="file">Filename:</label>
<input type="file" name="file" id="file" /> 
<br />
<input type="submit" name="submit" value="Submit" />
</form>

</body>
</html>

建立上傳指令碼

"upload_file.php" 檔案含有供上傳檔案的程式碼:

<?php
if ($_FILES["file"]["error"] > 0)
  {
  echo "Error: " . $_FILES["file"]["error"] . "<br />";
  }
else
  {
  echo "Upload: " . $_FILES["file"]["name"] . "<br />";
  echo "Type: " . $_FILES["file"]["type"] . "<br />";
  echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
  echo "Stored in: " . $_FILES["file"]["tmp_name"];
  }
?>

通過使用 PHP 的全域性陣列 $_FILES,你可以從客戶計算機向遠端伺服器上傳檔案。

第一個引數是表單的 input name,第二個下標可以是 "name", "type", "size", "tmp_name" 或 "error"。就像這樣:

  • $_FILES["file"]["name"] - 被上傳檔案的名稱
  • $_FILES["file"]["type"] - 被上傳檔案的型別
  • $_FILES["file"]["size"] - 被上傳檔案的大小,以位元組計
  • $_FILES["file"]["tmp_name"] - 儲存在伺服器的檔案的臨時副本的名稱
  • $_FILES["file"]["error"] - 由檔案上傳導致的錯誤程式碼

這是一種非常簡單檔案上傳方式。基於安全方面的考慮,您應當增加有關什麼使用者有權上傳檔案的限制。

儲存被上傳的檔案

上面的例子在伺服器的 PHP 臨時資料夾建立了一個被上傳檔案的臨時副本。

這個臨時的複製檔案會在指令碼結束時消失。要儲存被上傳的檔案,我們需要把它拷貝到另外的位置:

<?php
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 20000))
  {
  if ($_FILES["file"]["error"] > 0)
    {
    echo "Return Code: " . $_FILES["file"]["error"] . "<br />";
    }
  else
    {
    echo "Upload: " . $_FILES["file"]["name"] . "<br />";
    echo "Type: " . $_FILES["file"]["type"] . "<br />";
    echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
    echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />";

    if (file_exists("upload/" . $_FILES["file"]["name"]))
      {
      echo $_FILES["file"]["name"] . " already exists. ";
      }
    else
      {
      move_uploaded_file($_FILES["file"]["tmp_name"],
      "upload/" . $_FILES["file"]["name"]);
      echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
      }
    }
  }
else
  {
  echo "Invalid file";
  }
?>

上面的指令碼檢測了是否已存在此檔案,如果不存在,則把檔案拷貝到指定的資料夾。

cookie 常用於識別使用者。

cookie 常用於識別使用者。cookie 是伺服器留在使用者計算機中的小檔案。每當相同的計算機通過瀏覽器請求頁面時,它同時會傳送 cookie。通過 PHP,您能夠建立並取回 cookie 的值。

建立 cookie

setcookie() 函式用於設定 cookie。

註釋:setcookie() 函式必須位於 <html> 標籤之前

例子

在下面的例子中,我們將建立名為 "user" 的 cookie,把為它賦值 "Alex Porter"。我們也規定了此 cookie 在一小時後過期:

<?php 
setcookie("user", "Alex Porter", time()+3600);
?>

<html>
<body>

</body>
</html>
註釋:在傳送 cookie 時,cookie 的值會自動進行 URL 編碼,在取回時進行自動解碼(為防止 URL 編碼,請使用 setrawcookie() 取而代之)。

取回 Cookie 的值

PHP 的 $_COOKIE 變數用於取回 cookie 的值。

在下面的例子中,我們取回了名為 "user" 的 cookie 的值,並把它顯示在了頁面上:

<?php
// Print a cookie
echo $_COOKIE["user"];

// A way to view all cookies
print_r($_COOKIE);
?>

在下面的例子中,我們使用 isset() 函式來確認是否已設定了 cookie:

<html>
<body>

<?php
if (isset($_COOKIE["user"]))
  echo "Welcome " . $_COOKIE["user"] . "!<br />";
else
  echo "Welcome guest!<br />";
?>

</body>
</html>

刪除 cookie

當刪除 cookie 時,您應當使過期日期變更為過去的時間點

刪除的例子:

<?php 
// set the expiration date to one hour ago
setcookie("user", "", time()-3600);
?>
PHP session 變數用於儲存有關使用者會話的資訊,或更改使用者會話的設定。Session 變數儲存的資訊是單一使用者的,並且可供應用程式中的所有頁面使用。

通過在伺服器上儲存使用者資訊以便隨後使用,PHP session 解決了這個問題(比如使用者名稱稱、購買商品等)。不過,會話資訊是臨時的,在使用者離開網站後將被刪除。如果您需要永久儲存資訊,可以把資料儲存在資料庫中。

Session 的工作機制是:為每個訪問者建立一個唯一的 id (UID),並基於這個 UID 來儲存變數。UID 儲存在 cookie 中,亦或通過 URL 進行傳導。

開始 PHP Session

在您把使用者資訊儲存到 PHP session 中之前,首先必須啟動會話。

註釋:session_start() 函式必須位於 <html> 標籤之前:

<?php session_start(); ?>

<html>
<body>

</body>
</html>
上面的程式碼會向伺服器註冊使用者的會話,以便您可以開始儲存使用者資訊,同時會為使用者會話分配一個 UID

輸出:

Pageviews=1

在下面的例子中,我們建立了一個簡單的 page-view 計數器。isset() 函式檢測是否已設定 "views" 變數。如果已設定 "views" 變數,我們累加計數器。如果 "views" 不存在,則我們建立 "views" 變數,並把它設定為 1:

<?php
session_start();

if(isset($_SESSION['views']))
  $_SESSION['views']=$_SESSION['views']+1;

else
  $_SESSION['views']=1;
echo "Views=". $_SESSION['views'];
?>

終結 Session

如果您希望刪除某些 session 資料,可以使用 unset() 或 session_destroy() 函式。

unset() 函式用於釋放指定的 session 變數:

<?php
unset($_SESSION['views']);
?>

您也可以通過 session_destroy() 函式徹底終結 session:

<?php
session_destroy();
?>

註釋:session_destroy() 將重置 session,您將失去所有已儲存的 session 資料。

PHP mail() 函式

PHP mail() 函式用於從指令碼中傳送電子郵件。

語法

mail(to,subject,message,headers,parameters)
引數 描述
to 必需。規定 email 接收者。
subject 必需。規定 email 的主題。註釋:該引數不能包含任何新行字元。
message 必需。定義要傳送的訊息。應使用 LF (\n) 來分隔各行。
headers

可選。規定附加的標題,比如 From、Cc 以及 Bcc。

應當使用 CRLF (\r\n) 分隔附加的標題。

parameters 可選。對郵件傳送程式規定額外的引數。

PHP 安全的E-mail(略)


PHP 錯誤處理

三種不同的錯誤處理方法:

  • 簡單的 "die()" 語句
  • 自定義錯誤和錯誤觸發器
  • 錯誤報告

基本的錯誤處理:使用 die() 函式

為了避免使用者獲得類似檔案未找到的錯誤訊息,我們在訪問檔案之前檢測該檔案是否存在:

<?php
if(!file_exists("welcome.txt"))
 {
 die("File not found");
 }
else
 {
 $file=fopen("welcome.txt","r");
 }
?>

建立自定義錯誤處理器

待。。。。


























相關文章