8. PHP

 

 請尊重智慧財產權,若有抄襲等事宜請當事人修文,轉載並非註明出處就了事,要獲得原作者同意,否則皆屬於違法!!

 

1. PHP Basics

PHP(PHP: Hypertext Preprocessor)是一種跨平台,嵌入式的伺服器端執行的描述語言。它支援許多資料庫,也支援各項通訊協定,更可以輕易的開發出許多客戶端的網路應用程式。例如:互動式網頁、動態網頁、留言板、討論區、電子郵件等等。

舉例來說,我們要做一個"動態"網頁,這邊所說的動態並不是指網頁上有幾個會動的圖片,或者是跑馬燈等等而已,而是指"動態的內容"。

什麼是 "動態的內容"?"靜態"與"動態"如何區分?

例如我們想要更新網頁上的公告或內容時,我們得重新編輯該網頁(.HTML...)再上傳回去,這樣的模式就是"靜態",因為網頁無法即時的更新訊息;

如果你在這網頁中加入存取"資料庫"的語法,使這個網頁能自動從資料庫中擷取最新資訊,那麼它就是一個"動態"的網頁了,所以之後想要更新訊息的話,只要從資料庫更改就可,而不需要去改這個網頁了。

整個運作的結構大致如下:

"靜態"的運作方式:當使用者向伺服器端提出需求,要瀏覽某個.HTML檔時,伺服器端會直接將其內容回傳給使用者。

"動態"的運作方式:當使用者向伺服器端提出需求,要瀏覽某個.PHP檔時,伺服器端會先將其內容轉送給PHP Engine處理, 在處理的過程中也還能搭配"Database"或"File System"來共同作業,然後再將處理完的內容回傳給伺服器端,最後再由伺服器端送給使用者。 

在這介紹一個簡單學習php語法的網站(更新) :http://www.php5.idv.tw/html.php?mod=article&do=show&shid=43

 

 

PHP能夠做些什麼?

PHP是在伺服器端執行的程式語言,所以任何其它的CGI程式所能做得到的,它都能做到。像是從表單中收集資料,或是產生動態的網頁內容,或者是傳送及接收cookies等等,PHP都能做得到!

PHP主要運用在下列這三個部份

  1. 伺服器端的程式語言:PHP大多數被使用在這個地方,要運用在這個地方你必需要有三樣東西,一個是PHP的剖析器(CGI或Server模組),一個是網站伺服器,還有一個則是網頁瀏灠器,如此才能透過伺服器來瀏灠PHP網頁。
  2. Command line scripting:你可以使PHP執行在一個沒有任何伺服器或是瀏灠器的地方,你只需要使用到一個PHP剖析器即可。這種大多是使用cron指令 (在*nix或Linux系統上),或是使用排定的工作(Windows)來定期的執行程式,這些程式能夠運用在簡單的文字處理工作。
  3. 撰寫用戶端GUI應用程式:PHP也許不是個用來撰寫視窗應用程式最好的語言,但如果你相當的瞭解PHP,你可以使用PHP最新的特色,那就是使用PHP-GTK來撰寫用戶端的應用程式,使用PHP-GTK你也可以撰寫出跨平台的應用程式。

PHP能使用在大多數的作業系統,像是Linux、HP-UX、Solaris、OpenBSD、Microsoft Windows、Mac OS X、 RISC OS等等都能使用。PHP也能在大多數的網站伺服器上執行,像是Apache、 Microsoft Internet Information Server、Personal Web Server、Netscape and iPlanet servers、Oreilly Website Pro server、Caudium、Xitami、 OmniHTTPd。在大多數的伺服器中,PHP被編譯其中的一個模組,但PHP也能編譯成CGI模式,使PHP成為一個CGI處理程序。

PHP的功用不單單只是輸出HTML文件而己,它的功能還包括了輸出圖形、PDF檔、及Flash檔。你當然也可以讓它輸出一些文字,像是XHTML及任何其它的XML檔,PHP可以產生出以上這些檔案,並且將它們儲存在伺服器上。PHP也提供了相當多的協定,像是LDAP、IMAP、SNMP、 NNTP、POP3、HTTP、COM等等,還有其它相當多的擴充模組可以使用。

 

 

3. Form Processing and Business Logic
與XHTML互動,必須要先連結 EX: <form method = "post" action = "form.php">
XHTML裡面 <input type = "text" name = "email"/>
PHP寫法extract($_POST)
print(<td>$email<t/d>) //執行時就會去呼叫extract 的 function取得email的值

$_GET變數: 是一陣列用來收集GET方法得到的值(有最大直限制,不能超過100 characters)

<form action="welcome.php" method="get">Name: <input type="text" name="name" />Age: <input type="text" name="age" /><input type="submit" /></form>
當使用者按下按鈕,傳出的網址會是http://www.w3schools.com/welcome.php?name=Peter&age=37
 此時welcome.php檔會使用GET method 來得到welcome.php裡的資料,ID 就是name和age
 Welcome <?php echo $_GET["name"]; ?>.<br />You are <?php echo $_GET["age"]; ?> years old!
$_POST變數: 是一陣列用來蒐集POST方法的值(沒有資料限制)
<form action="welcome.php" method="post">Enter your name: <input type="text" name="name" />Enter your age: <input type="text" name="age" /><input type="submit" /></form> 
 當使用者按下按鈕,傳出的網址會是http://www.w3schools.com/welcome.php
 此時會從welcome.php POST 值
Welcome <?php echo $_POST["name"]; ?>.<br />You are <?php echo $_POST["age"]; ?> years old! 
$_REQUEST變數: 包含$GET、$POST、$COOKIE的內容 。
Welcome <?php echo $_POST["name"]; ?>.<br />You are <?php echo $_POST["age"]; ?> years old! 
 4. Connection to DB 

假設XHTML的下拉式選單的類別是select
先用$query = "SELECT".$select." FROM books"; 把資料從SQL取出來
用if(!($database = mysql_connect("localhost","帳號","密碼")))判斷使用者取權限
在用if(!mysql_select_db("product",$database))
和if(!($result = mysql_query($query,$database)))
取出
要顯示錯誤請用mysql_error()
取完記得用mysql_close($database)關起來

印出表格範例
for($counter = 0; $row = mysql_fetch_row($result);counter++)
{
print("<tr>");
foreach($row as $key => $value)
print("<td>$value</td>");
print("</tr>");
}
最後可以用$counter顯示共有幾筆資料

5. Session and Cookie
假如XHTML的textfield的name是Name的設cookie方式
setcookie("Name",$Name,time() + 60 * 60 * 24 * 5);
cookie會存在C:\Doument and Settings\name\cookies資料夾下
用IE的話會存為index.dat
用Firefox會存為 name@localhost.txt

讀取存好的cookie
foreach($_COOKIE as $key => $value)
print("<tr><tr>$key</td>
<td>$value</td><tr>");

6. Dynamic Content
使用if(!iserror)來確保正確才執行
使用$variable稱為variable variable可以讀取等於該變數值的變數名稱
使得能夠動態的reference到想要的變數名稱
使用quotemeta($變數)來讓變數的特殊符號只當成字串處理

新增筆記(496511700)   8.PHP 與其他script語法的比較 

 

 

  程式    PHP    ASP   JSP
  系統平台    跨平台    Win32    跨平台 
  Web Server    Apache、IIS、....   IIS   Apache、IIS、...
  執行速度/效率  快 快  超快 
  穩定性  尚可 佳 
  開發時間  很快  很快 快 
  學習速度/困難度   快/容易   快/容易   還好/有點難

 

其實做這個並沒有很深入
是告訴你如何使用PHP語法

 

像我們常看到的一些基本的 
PHP 的標準資料型態
integer 123 整數
double 3.1416159 浮點的數字
string "hello WEB" 文字字串
boolean true/false bloolean函數,true 跟 false
object    物件
array  陣列

 

以及
資料型態的函式
doubleval() - 讓他傳回 double 的型態。
intval() - 讓他傳回 int 的型態。
var_dump() - 顯現出變數的型態和資料。
settype() - 改變變數的type。
strval() - 接受數值並回傳 string 的型態。

特殊的資料型態
Resource - 使用外來的資料
NULL - 未定義的變數

轉換變數
跟 settype() 不同因為轉換 (casting) 會複製變數,但不會改變原來的變數。

code:
<?php
$undecided = 1.234;
$holder = (double) $undecided;
這時候PHP會自動作轉換

 

code:
<?php
$hw = "9cm";  // 如果在這裡你只想要顯示出9的話
$hw = (integer) $hw;
echo "寬度是 $hw 公分";
常數
define() - 定義出一個常數。
code:
<?php
define("CONSTANT", "WEB");
如果提供第三個 boolean 的參數
可決定大小寫是否相同。

現在讓我們比較一下寫CGI跟PHP 其實很多都能撰寫CGI但PHP只是其中一種而已

不過PHP就是執行效率快 穩定度高 學習門檻較低 較多網站使用PHP撰寫

當然在眾多寫CGI的程式中 雖然使用NSAPI 及 ISAPI 會花費不少時間在開發過程之中,不過在穩定上線後,這兩種界面反倒是效率最佳的方法

但是,在 Web 的後端 CGI 程序,就像魚與熊掌一般不能兼得,沒有高效率又開發方便的選擇。不過目前這樣看來 PHP 是處於開發容易、效率也不差的平衡點上。

 

 

--f20 web fundamental ---

編輯者 : 林采昕 408262143 / 張字青 408262349 / 陳嬿婷 408262416 / 許瀚丰 408262208/ 龔子昀 408261060

 

Web Tech Layers

  • client layer : Ajax, HTML/CSS, Flash/RIA, JS, Widgets, DOM
  • protocol layer : SOAP, XML-PRC, REST, HTTP/HTTPS
  • structure layer:JSON, XML, RSS/ATOM, Text, JS-Objects, Custom
  • server layer:SOA/WOA, SaaS, Tradition, Web Services, Open-API, Custom API

Why Learn PHP

  • Q:Why not ASP/JSP?

  • A:Open,Free!

  • But…

  • Q:Why not RoR/Django?

  • A:It’s not familiar for everyone

LAMP(for linus) and WAMP(for windows)

Introduction

  • PHP, or PHP: Hypertext Preprocessor,has become one of the most popularserver-side scripting languages forcreating dynamic web pages.
  • PHP is open source and platformindependent—implementations exist forall major UNIX, Linux, Mac andWindows operating systems. PHP alsosupports a large number of database

XAMPP

  • Download xampp (Linux, Windows, Mac)
  • On Linux
    • http://blog.elementwave.com/post/64945733670/xampp-on-ubuntu-tutorial
    • Open terminal window (ctrl+alt+t) and switch to downloads folder
    • sudo chmod 755 xampp-linux-x64-1.8.3-1-installer.run
    • sudo ./xampp-linux-x64-1.8.3-1-installer.run
    • Test: http://localhost
    • Start MySQL: sudo /opt/lampp/lampp start
    • Install and Run Control Panel
      sudo apt-get install python-glade2
      sudo /opt/lampp/share/xampp-control-panel/xampp-control-panel
    • 127.0.0.1 Local loopback

PHP Basics

(前端不只JS)

  • The power of the web resides not only in serving content to users, but also in responding to requests from users and generating web pages with dynamic content.
  • PHP code is embedded directly into XHTML documents, though these script segments are interpreted by a server before being delivered to the client.
  • PHP script file names end with .php.
  • Although PHP can be used from the command line, a web server is necessary to take full advantage of the scripting language.
  • In PHP, code is inserted between the scripting delimiters <?php and ?>. PHP code can be placed anywhere in XHTML markup, as long as the code is enclosed in these delimiters.(<?php ..內容..?>)
  • Variables are preceded by a $(變數前面要加’S’) and are created the first time they are encounter.
  • PHP statements terminate with a semicolon ;
    (每個statements後面要加’;’)
  • Single-line comments: two forward slashes (//) or a pound sign (#).
    (comments一行可以用’//‘或’#’)
  • Multiline comments: begin with delimiter /* and end with delimiter*/.
    (comments段落from ‘/’ to '/’)
  • When a variable is encountered inside a double-quoted("") string, PHP interpolates the variable. In other words,PHP inserts the variable’s value where the variable name appears in the string.
    (若在" "中,若出現了設定過變數的名稱,會輸出此變數的內容)
  • Type conversions can be performed using function settype. This function takes two arguments—a variable whose type is to be changed and the variable’s new type.
    (可以用function 「settype($test,“double”)」 來改變變數的型態,例如將test改為double)
  • All operations requiring PHP interpolation execute on the server before the XHTML document is sent to the client.
  • PHP variables are loosely typed — they can contain different types of data at different times.
    (php的變數是弱型態的變數(變數的型態可更變,像Python一樣))
  • Variables are automatically converted to the type of the value they are assigned.
    (php的變數會依據設定的內容自動更變型態)
  • Function gettype returns the current type of its argument.
    (function 「gettype($test)」會回傳現在test變數的型態)
  • Calling function settype can result in loss of data. For example, doubles are truncated when they are converted to integers.
    (呼叫settype 會失去型態不同的東西,例如原本是浮點數,改為整數後小數點後的數字就會不見)
  • When converting from a string to a number, PHP uses the value of the number that appears at the beginning of the string. If no number appears at the beginning, the string evaluates to 0.
    (將字串改成整數後,會將字串開頭開始的數字到不為數字那隔存到變數中,之後會省略,string開頭不是整數,則會變成0)
  • Another option for conversion between types is casting (or type casting). Casting does not change a variable’s content—it creates a temporary copy of a variable’s value in memory.
    (可用casting的方式改變變數的型態,但變數本身的型態不變)
  • The concatenation operator (.) combines multiple strings.
    (可以用’.'來連接字串)
  • A print statement split over multiple lines prints all the data that is enclosed in its parentheses.
    (在一個print中,可以有很多段內容,只要在(“something”."something "…)中都可以)
  • Function define creates a named constant. It takes two arguments—the name and value of the constant. An optional third argument accepts a boolean value that specifies whether the constant is case insensitive — constants are case sensitive by default.
    (宣告變數有兩個argument,包括名稱與值,也可以多一個argument代表boolean value)
  • Uninitialized variables have the value undef(= NULL), which has different values, depending on its context. In a numeric context, it evaluates to 0. In a string context, it evaluates to an empty string ("").
    (未宣告值的變數會將其value設為NULL)
  • Keywords may not be used as identifiers.
    (變數名稱不能是keywords )

Example1

Type

Type Description
int, integer Whole numbers (i.e., numbers without a decimal point).
float, double,real Real numbers (i.e., numbers containing a decimal point).
string Text enclosed in either single (’’) or double ("") quotes.
[Note: Using double quotes allows PHP to recognize more escape sequences.]
bool, boolean True or false.
array Group of elements.
object Group of associated data and methods.
resource An external source—usually information from a database.
NULL No value.

Example2




 

<?php $test1 = 3; //integer $test2 = 72.2; //double $test3 = "1.1 sec"; //string print("type of test3 is a ".gettype($test3)."\n"); //type of test3 is a string print("$test3"."\n"); //1.1 sec settype($test3,"double");//將test設定為double print("$test3"); //輸出1.1(DOUBLE型態) settype($test3,"string") //將1.1改為"1.1" ?>

Example3



PHP keywords

PHP Operator Precedence



array宣告


 

<?php $a=array(0,1,2,3,4,5,6); print($a[4]); ?> //output:4


 

<?php $country=array(1=>"台灣",5=>"美國",8=>"日本",99=>"中國"); print($country[1]) ?> //output::台灣


 

<?php $a[]="星期日"; $a[]="星期一"; $a[]="星期二"; $a[]="星期三"; $a[]="星期四"; $a[]="星期五"; $a[]="星期六"; print($a[1]) ?> //output:星期一


 

<?php $student=array( "甲" =>array(1=>"張小新","王小明","陳小華","李小倩"), "乙" =>array(1=>"林阿富","莊阿喜","董阿華","劉阿致"), "丙" =>array(1=>"吳大頭","嚴大志","沈大明","郭大師") ); print($student["甲"][3]) ?> //output:陳小華

loop(四種)


 

<?php $x=array("one","two","three","four","five"); foreach($x as $value){ print($value."\n"); } ?>


 

<?php $i = 0; while ( $i < 10 ) {  echo $i . '-';  $i++l; } ?>


 

<?php for ( $i=0 ; $i<10 ; $i++ ) {  echo $i. '-' ; } ?>