Professional Documents
Culture Documents
Phiên bản đầu tiên của PHP được phát triển năm 1994,
bao gồm các macro cho trang Web cá nhân (Personal
Home Page)
Sau đó, PHP được phát triển thêm một số chức năng mới
gọi là Form Interpreter (PHP/FI) và có được sự quan tâm
lớn từ phía cộng đồng
Phiên bản tiếp theo, PHP3, được viết lại bởi một nhóm các
lập trình viên (Zeev Suraski, Andi Gutmans). PHP3 được
bổ sung thêm một số tính năng và các cú pháp ngôn ngữ
khác, đã trở thành ngôn ngữ kịch bản phía máy chủ được
ưa chuộng nhất
I.3. Lý do chọn PHP
Tốc độ
– Nhờ vào sức mạnh của Zend Engine, khi so sánh
PHP với ASP, có thể thấy PHP vượt hơn ở một số
test, vượt trội ở tốc độ biên dịch.
Tính khả chuyển
– PHP được thiết kế để chạy trên nhiều nền tảng
khác nhau, có thể làm việc với nhiều phần mềm
máy chủ, cơ sở dữ liệu (ví dụ: bạn có thể phát
triển dự án trên UNIX, sau đó chuyển sang NT mà
không gặp phải bất cứ vấn đề gì)
I.4. Zend Engine
<html>
<head>
<title>Chuong trinh PHP dau tien</title>
</head>
<body>
<b>
<?php
// Day la chuong trinh PHP dau tien
echo("Hello world");
/* Comment the nay cung duoc */
# Ma the nay cung chang sao
?>
</b>
</body>
</html>
I.7. Các IDE cho PHP
II.1.1. Biến
II.1.1.1. Tên biến
II.1.1.2. Tham chiếu
II.1.1.3. Biến động
II.1.1.4. Phạm vi (scope) của biến
II.1.2. Kiểu
II.1.3. Hằng
II.1.1.1. Tên biến
<?php
$var = "Bob";
$Var = "Joe";
echo "$var, $Var"; // outputs "Bob, Joe"
Giống ngôn ngữ C, trong PHP bạn có thể sử dụng tham chiếu
<?php
$quang = "adfsdfasdfa";
echo("<p>$quang</p>");
$q = &$quang;
$q = "quangnp";
echo("<p>$quang</p>");
?>
<?php
$foo = 25;
$bar = &$foo; // This is a valid assignment.
$bar = &(24 * 7);// Invalid references an unnamed expression.
function test() {
return 25;
}
$bar = &test(); // Invalid.
?>
II.1.1.3. Biến động (Dynamic Variable)
Vì PHP là ngôn ngữ thông dịch nên bạn có thể sử dụng các biến
có tên chưa biết trước (tên biến thay đổi)
<?php
$a = "quang"; // gia tri cua bien a la 'quang'
$$a = "np"; // bien dong $quang co gia tri la 'np'
echo("$a<br>"); // In ra gia tri cua bien a
echo("$quang<br>"); // In ra gia tri cua bien quang
${"quang"} = 13432; // Gian truc tiep bien dong
echo("$quang<br>");
$c = "quang";
${$c} = 1000;
// Mot cach khac de truy cap den bien dong quang
echo("${$c}<br>");
?>
II.1.1.4. Phạm vi của biến
<?php
$a = 1;
include "b.inc";
?>
Phạm vi của biến [a] có tác dụng trong cả b.inc
<?php
$a = 1; // global scope
function Test() {
echo $a; // reference to local scope variable
}
Test();
?>
Biến [a] ở ngoài và trong hàm Test khác nhau
II.1.1.4. Phạm vi của biến (2)
<?php <?php
function Test () function Test ()
{ {
$a = 0; static $a = 0;
echo $a; echo $a;
$a++; $a++;
} }
Test(); Test();
Test(); Test();
?> ?>
II.1.1.4. Phạm vi của biến (4)
<?php
$foo = 25;
$bar = &$foo; // This is a valid assignment.
function test()
{
global $foo;
return $foo;
}
$bar = &test(); // Invalid.
echo($bar);
?>
II.1.2. Kiểu
<?php
$a=10000000;
var_dump($a); echo("<br>");
$a=100000000;
var_dump($a); echo("<br>");
$a=1000000000;
var_dump($a); echo("<br>");
$a=10000000000;
var_dump($a); echo("<br>");
?>
II.1.2.3. Kiểu float
<?php
$a = 1.234;
$b = 1.2e3;
$c = 7E-10;
?>
<?php
$foo = 1 + "10.5"; // $foo is float (11.5)
$foo = 1 + "-1.3e3"; // $foo is float (-1299)
$foo = 1 + "bob-1.3e3"; // $foo is integer (1)
$foo = 1 + "bob3"; // $foo is integer (1)
$foo = 1 + "10 Small Pigs"; // $foo is integer (11)
$foo = 4 + "10.2 Little Piggies"; // $foo is float (14.2)
$foo = "10.0 pigs " + 1; // $foo is float (11)
$foo = "10.0 pigs " + 1.0; // $foo is float (11)
?>
II.1.2.4. Kiểu string
String trong PHP là một chuỗi các ký tự 1 byte. PHP không hỗ
trợ Unicode, để làm việc với Unicode bạn phải sử dụng UTF8
với các hàm utf8_encode() – utf8_decode()
String của PHP hỗ trợ chiều dài rất lớn (?)
Trong PHP, string được xác định theo 3 cách
– Dấu nháy đơn (single quote)
– Dấu nháy kép (double quote)
– Heredoc
Truyền biến trong string
– Truyền kiểu đơn giản
– Truyền kiểu phức
Truy cập đến từng ký tự trong string
Các toán tử trên string
II.1.2.4. Kiểu String (2)
Kiểu Heredoc
<?php
$str = <<<EOA
Example of string <br>
spanning multiple lines<br>
using heredoc syntax.<br>
EOA;
echo($str);
$name = "quang";
$d = date("d/m/y");
$str = <<<EOQ
This is a lecture of $name.<br>
Ngay $d<br>
EOQ;
echo($str);
?>
II.1.2.4. Kiểu String (5)
Sử dụng array
<?php
$arr = array(5 => 1, 12 => 2);
$arr[] = 56; // This is the same as $arr[13] = 56;
// at this point of the script
$arr["x"] = 42; // This adds a new element to
// the array with key "x"
unset($arr[5]); // This removes the element from the array
unset($arr); // This deletes the whole array
?>
<?php
$handle = opendir(".");
var_dump($handle);
while($file=readdir($handle)) {
$files[] = $file;
}
var_dump($files);
?>
II.1.2.6. Kiểu Object
<?php
class Xeco {
var $sobanh;
function BaoNhieuBanh() {
echo($this->sobanh);
}
};
<?php
$b = @file("a adf a") or
die("Khong the mo file");
?>
II.2.7. Toán tử thực thi
Toán tử thực thi (``) cho phép bạn gọi các lệnh
trên console, (các thông tin tin này có thể viết
ra output hoặc gán vào các biến)
<?php
$output = `dir c:\\`;
echo "$output";
?>
II.2.8. Toán tử tăng, giảm
<?php
$a = 5;
echo "Should be 5: " . $a++ . "<br />\n";
echo "Should be 6: " . $a . "<br />\n";
$a = 5;
echo "Should be 6: " . ++$a . "<br />\n";
echo "Should be 6: " . $a . "<br />\n";
$a = 5;
echo "Should be 5: " . $a-- . "<br />\n";
echo "Should be 4: " . $a . "<br />\n";
$a = 5;
echo "Should be 4: " . --$a . "<br />\n";
echo "Should be 4: " . $a . "<br />\n";
?>
II.2.9. Các toán tử logic
<?php
$a = "Hello ";
$b = $a . "World!"; // now $b contains "Hello World!"
$a = "Hello ";
$a .= "World!"; // now $a contains "Hello World!“
?>
II.2.11. Toán tử trên mảng
<?php $i = 0;
$i = 1; do {
while ($i <= 10) {
print $i++; print $i;
} } while ($i > 0);
$i = 1; ?>
while ($i <= 10):
print $i;
$i++;
endwhile;
II.3.3. Cấu trúc for / for...each
<?php
$arr = array ('one','two','three','four','stop','five');
while (list (, $val) = each ($arr)) {
if ($val == 'stop')
break; // Viết “break 1;” cũng được
echo "$val<br>\n";
}
$i = 0;
while ($i++ < 5) {
echo "Outer<br>\n";
while (1) {
echo " Middle<br>\n";
while (1) {
echo " Inner<br>\n";
continue 3;
}
echo "This never gets output.<br>\n";
}
echo "Neither does this.<br>\n";
}
?>
II.3.5. Cấu trúc switch
<?php
if ($i == 0) {
print "i equals 0";
} elseif ($i == 1) {
print "i equals 1";
} elseif ($i == 2) {
print "i equals 2";
}
switch ($i) {
case 0:
print "i equals 0";
break;
case 1:
print "i equals 1";
break;
case 2:
print "i equals 2";
break;
}
?>
II.4. Hàm
<?php
function foo ($arg_1, $arg_2, ..., $arg_n) {
echo "Example function.\n";
return $retval;
}
?>
<?php
function foo() {
function bar() {
echo "I don't exist until foo() is called.\n";
}
}
// Không thể gọi bar() vì nó chưa được đình nghĩa
foo();
// Bây giờ thì có thể gọi bar()
bar();
?>
II.4.2. Truyền tham số
PHP hỗ trợ truyền tham số vào hàm, truyền tham số dưới dạng
tham chiếu (reference), truyền tham số với giá trị mặc định
<?php
function takes_array($input) {
echo "$input[0] + $input[1] = ", $input[0]+$input[1];
}
function add_some_extra(&$string) {
$string .= 'and something extra.';
}
$str = 'This is a string, ';
add_some_extra($str);
echo $str;// outputs 'This is a string, and something extra.
?>
II.4.2. Truyền tham số (2)
function makecoffee ($type = "cappuccino") {
return "Making a cup of $type.\n";
}
echo makecoffee ();
echo makecoffee ("espresso");
function makeyogurt ($type = "acidophilus", $flavour) {
return "Making a bowl of $type $flavour.\n";
}
Bạn có thể truyền tham số với số lượng không xác định. Khi đó sẽ sử
dụng các hàm sau
func_num_args(): Số lượng tham số
func_get_args(): Lấy danh sách các tham số
<?php
function mwrite() {
$arg = func_get_args();
foreach($arg as $value) echo "$value\n";
}
mwrite("Khoa CNTT", "Truong DHXD", "Lop 46PM1");
?>
II.4.3. Giá trị trả về
Để trả về giá trị của hàm, sử dụng lệnh return. Có thể sử dụng bất
cứ kiểu nào trong giá trị trả về của hàm (kể cả mảng và đối tượng)
<?php
function square ($num) {
return $num * $num;
}
echo square (4); // outputs '16'.
function small_numbers() {
return array (0, 1, 2);
}
list ($zero, $one, $two) = small_numbers();
function &returns_reference() {
return $someref;
}
$newref =& returns_reference();
?>
II.4.4. Biến hàm
Bạn có thể sử dụng các biến hàm (tức là bạn có thể gọi hàm dưới dạng
ten_bien() ).
Biến hàm thường được sử dụng cho các hàm callback
<?php
function foo() {
echo "In foo()<br>\n";
}
function bar($arg = '') {
echo "In bar(); argument was '$arg'.<br>\n";
}
// This is a wrapper function around echo
function echoit($string) {
echo $string;
}
$func = 'foo';
$func(); // This calls foo()
$func = 'bar';
$func('test'); // This calls bar()
$func = 'echoit';
$func('test'); // This calls echoit()
?>
II.4.4. Biến hàm (2)
<?php
class Foo {
function Var() {
$name = 'Bar';
$this->$name(); // This calls the Bar() method
}
function Bar() {
echo "This is Bar";
}
}
Hàm serialize() dùng để lưu trữ đối tượng, hàm trả về một chuỗi các byte để lưu
thông tin của đối tượng
Hàm unserialize() dùng để khôi phục đối tượng được lưu giữ bởi hàm serialize()
<?php
class AClass {
var $a;
function AClass() {
}
};
$ob1 = new AClass();
$ob1->a = 10;
$ob1->b = 100;
$ob1->c = "Nguyen Phu Quang";
$luu = serialize($ob1);
echo "$luu\n";
$ob2 = unserialize($luu);
var_dump($ob2);
?>
II.5.2. Tham chiếu bên trong constructor
<?php
class AClass {
var $m_name;
function AClass($name) { $a = new AClass("a");
global $global_ref; $b =& new AClass("b");
$global_ref[] = &$this; $a->setName("quang1");
$this->setName($name); $global_ref[0]->echoName();
} $b->setName("quang2");
function setName($name) {
$global_ref[1]->echoName();
$this->m_name = $name;
} ?>
function echoName() {
echo "$this->m_name\n";
}
};
II.5.3. So sánh đối tượng trong PHP4
Trong PHP4, phép so sánh các đối tượng thực hiện theo quy tắc đơn giản
sau: Hai đối tượng là bằng nhau nếu chúng có các thuộc tính bằng nhau và
cùng thuộc 1 lớp. Quy tắc so sánh này cùng được áp dụng với phép ===
Tham chiếu cho phép bạn sử dụng 1 biến với nhiều tên khác nhau
Đối với đối tượng, nên sử dụng phép gán tham chiếu khi dùng toán tử new để tránh phép
gán tạo ra thêm 1 phiên bản của đối tượng
Để thay đổi giá trị của tham số truyền vào trong hàm, bạn có thể sử dụng tham chiếu
<?php
$a = &$b;
$b = 100;
var_dump($a);
class AClass {};
$c = new AClass();
$d =& new AClass();
function increment(&$num) {
$num++;
}
$a = 10;
increment($a);
var_dump($a);
?>
II.6.2. Các trường hợp ko sử dụng
tham chiếu
Tham chiếu gần giống con trỏ nhưng bản chất không phải là
con trỏ
Trong trường hợp tại ví dụ dưới đây, $var trong hàm foo đầu
tiên được tham chiếu đến biến $var (global). Tuy nhiên sau đó
$var lại được tham chiếu điến biến $quang (global)
<?php
function foo(&$var)
{
$var =& $GLOBALS["quang"];
var_dump($var);
}
$quang = "Nguyen Phu Quang";
$var = 100;
foo($var);
var_dump($var);
?>
II.6.3. Truyền tham chiếu
Bạn có thể truyền các dạng tham chiếu sau:
– Biến foo($a)
– Lệnh new foo(new AClass());
– Tham chiếu trả về từ hàm
<?php
function foo(&$num) {
$num++;
}
function &bar() {
global $a;
return $a;
}
$a=10;
foo($a); var_dump($a);
foo(bar()); var_dump($a);
foo($a = 5); var_dump($a);
foo(5);
?>
II.6.4. Trả về tham chiếu
Hàm có thể trả về tham chiếu, khi đó bạn đặt toán tử tham chiếu
đứng trước tên hàm
Nếu hàm trả về tham chiếu, để nhân được tham chiếu bạn phải
dùng toán tử gán với tham chiếu đến hàm (xem ví dụ)
<?php
function &bar() {
global $a;
return $a;
}
$a = 10;
$c = bar();
$c++;
var_dump($a);
var_dump($c);
$b =& bar();
$b++;
var_dump($a);
var_dump($b);
?>
II.6.5. Unset tham chiếu
Bạn có thể sử dụng lệnh unset() để loại bỏ một biến khỏi bộ
nhớ
Nếu unset được sử dụng với 1 biến tham chiếu, PHP sẽ kiểm
tra xem còn biến nào cùng tham chiếu đến vùng nhớ hay
không rồi mới loại bỏ biến khỏi bộ nhớ
<?php
$a = &$b;
$b = 100;
unset($a);
var_dump($a);
var_dump($b);
unset($b);
var_dump($a);
var_dump($b);
?>
III. Làm việc với Form
Array Description
$_COOKIE Contains keys and values set as browser cookies
$_ENV Contains keys and values set by the script's shell context
$_FILES Contains information about uploaded files
$_GET Contains keys and values submitted to the script using the HTTP get method
$_POST Contains keys and values submitted to the script using the HTTP post
method
$_REQUEST A combined array containing values from the $_GET, $_POST, and $_COOKIES
superglobal arrays
$_SERVER Variables made available by the server
$GLOBALS Contains all global variables associated with the current script
III.2. Biến $_SERVER
Variable Contains Example
$_SERVER['PHP_SELF'] The current script. /phpbook/source/listing10.1.php
Suitable for use in
links and form element
action arguments.
$_SERVER['HTTP_USER_AGENT'] The name and version Mozilla/4.6 –(X11; I;Linux2.2. 6-
of the client. 15apmac ppc)
$_SERVER['REMOTE_ADDR'] The IP address of the 158.152.55.35
client.
$_SERVER['REQUEST_METHOD'] Whether the request POST
was GET or POST.
$_SERVER['QUERY_STRING'] For GET requests, the name=matt&address=unknown
encoded data sent
appended to the URL.
$_SERVER['REQUEST_URL'] The full address of the /phpbook/source/listing10.1.php?
request, including name=matt
query string.
$_SERVER['HTTP_REFERER'] The address of the http://p24.corrosive
page from which the
request was made.
III.2. Biến $_SERVER (2)
Đoạn lệnh sau liệt kê tất cả các thông tin của biến
$_SERVER
<?php
foreach ($_SERVER as $key=>$value) {
echo "[$key]=$value\n";
}
?>
III.3. Lấy thông tin từ form
Dữ liệu từ form được submit lên server thông qua các phương thức: get,
post
Để lấy được thông tin từ form, bạn có thể sử dụng các mảng superglobal
tương ứng $_POST[tên_control], $_GET[tên_control],
$_REQUEST[tên_control] (REQUEST có thể sử dụng cho cả POST và GET)
<?php
var_dump($_POST["Submit"]);
var_dump($_GET["Submit"]);
var_dump($_REQUEST["Submit"]);
if ($_POST["Submit"]=="Submit") {
echo $_POST["UserInput1"];
}
?>
<FORM method="POST" name="myForm">
<INPUT TYPE="TEXT" name="UserInput1">
<INPUT TYPE="SUBMIT" value="Submit" name="Submit"></FORM>
III.3.2. Import thông tin của form vào
các biến global
Để thuận tiện cho người lập trình, PHP cung cấp hàm
import_request_variables() cho phép đưa các tham số GET, POST và
COOKIE vào thành các biến global
Cú pháp
bool import_request_variables(string types, [string prefix])
types: Chỉ ra loại thông tin nào được import, có thể kết hợp giữa các giá trị
g, p, c (get, post, cookie)
prefix: tiền tố cho tên biến
<?php
import_request_variables("gpc", "ui_");
echo "$ui_Submit\n";
if ($ui_Submit=="Submit") {
echo "$ui_UserInput1\n";
}
?>
<FORM method="POST" name="myForm"><INPUT TYPE="TEXT"
name="UserInput1">
<INPUT TYPE="SUBMIT" value="Submit" name="Submit"></FORM>
III.3.3. Lấy thông tin của form bằng
mảng do người dùng định nghĩa
<?php
var_dump($_REQUEST["product"]);
?>
<FORM method="POST" name="AForm">
<INPUT TYPE="CHECKBOX" name="product[]“
value="Sony Ericson">Sony Ericson<br>
<INPUT TYPE="CHECKBOX" name="product[]“
value="Motorola">Motorola<br>
<INPUT TYPE="CHECKBOX" name="product[]“
value="Samsung">Samsung<br>
<INPUT TYPE="CHECKBOX" name="product[]“
value="Hang tau">Hang tau<br>
<INPUT TYPE="SUBMIT" name="Submit“
value="Submit"><br>
</FORM>
III.4. Kết hợp mã HTML và PHP trong 1
trang
Đối với các trang PHP nhỏ, bạn thường muốn kết
hợp form gửi thông tin với các đoạn script PHP
xử lý thông tin. Điều này có thể dễ dàng thực
hiện bằng cách để các kết hợp các cấu trúc điều
khiển rẽ nhánh với các đoạn mã HTML.
Để đặt đoạn mã HTML vào trong cấu trúc rẽ
nhánh, sử dụng kết hợp các khối lệnh PHP (xem
ví dụ)
III.4. Kết hợp mã HTML và PHP trong 1
trang (2)
<?php
if ( is_array($_REQUEST["product"]) &&
!array_search("Motorola", $_REQUEST["product"] )) {
?>
<h1>Cam on ban da su dung san pham Motorola</h1>
<?php
} else {
?>
<FORM method="POST" name="AForm">
<INPUT TYPE="CHECKBOX" name="product[]“
value="Sony Ericson">Sony Ericson<br>
<INPUT TYPE="CHECKBOX" name="product[]“
value="Motorola">Motorola<br>
<INPUT TYPE="CHECKBOX" name="product[]“
value="Samsung">Samsung<br>
<INPUT TYPE="CHECKBOX" name="product[]“
value="Hang tau">Hang tau<br>
<INPUT TYPE="SUBMIT" name="Submit" value="Submit"><br>
</FORM>
<?php
}
?>
III.5. Sử dụng Hidden field để lưu trạng
thái
Để lưu thông tin chung của các form giữa các lần submit (ví dụ: Số lần
submit), cách đơn giản nhất là sử dụng trường ẩn (hidden field) trong form
<?php
$g_nSubmit = $_REQUEST["nSubmit"];
if ($g_nSubmit==null) $g_nSubmit=0; else $g_nSubmit++;
if ($g_nSubmit>3) echo "Submit gi ma nhieu the?<br>";
echo "$g_nSubmit<br>";
?>
<FORM method="POST" name="AForm">
<input type="hidden" name="nSubmit" value="<?echo
$g_nSubmit;?>">
<INPUT TYPE="SUBMIT" name="Submit" value="Submit"><br>
</FORM>
III.6. Redirect
Rõ ràng là việc hardcode HTML cùng với sử dụng nhiều khối
PHP xen lẫn HTML là không tốt. Một cách đơn giản và hiệu
quả hơn là sử dụng Redirect để dẫn hướng người dùng đến
các trang thích hợp (ví dụ: Trang đăng nhập nếu người dùng
chưa đăng nhập, trang chúc mừng nếu người dùng đăng nhập
thành công)
Để làm được việc này, trước hết ta tìm hiểu cơ chế làm việc
giữa PHP script và client. Đầu tiên, để giao tiếp với client, PHP
tự động gửi các thông tin header cho client. Tuy nhiên, bạn vẫn
có thể tự gửi header.
Để dẫn hướng client đến trang khác, bạn chỉ cần đơn giản đổi
header bằng hàm header(). Để sử dụng hàm header() bạn phải
đảm bảo rằng cho có dữ liệu nào đã được gửi cho client (sử
dụng hàm header_sent() để kiểm tra)
III.6. Redirect (2)
<?php
$g_nSubmit = $_REQUEST["nSubmit"];
if ($g_nSubmit==null) $g_nSubmit=0; else $g_nSubmit++;
if ($g_nSubmit>5) {
header("Location:ham.html");
exit;
} else
if ($g_nSubmit>3) echo "Submit gi ma nhieu the?<br>";
echo "$g_nSubmit<br>";
?>
<FORM method="POST" name="AForm">
<input type="hidden" name="nSubmit" value="<?
=$g_nSubmit;?>">
<input type=“submit" name="Submit" value="Submit"><br>
</FORM>
III.7. Form Upload file
Người dùng có thể gửi các file (upload) lên server là một chức năng không thể
thiếu đối với các ứng dụng Web-based
Để form có thể upload file, bạn phải xác định form enctype:
ENCTYPE="multipart/form-data”
Với PHP, bạn có thể xác định kích thước lớn nhất của file upload bằng cách
đặt thêm 1 hidden field có tên MAX_FILE_SIZE trước control file
<form enctype="multipart/form-data"
action="<?=$_SERVER['PHP_SELF']?>" method="post">
<p>
<input type="hidden" name="MAX_FILE_SIZE" value="102400"/>
<input type="file" name="fupload" /><br/>
<input type="submit" value="upload!" />
</p>
</form>
III.7. Form Upload file (2)
Mảng $_FILE
Trong quá trình làm việc, bạn hẳn có nhiều hàm được
dùng chung giữa nhiều file trong 1 project, giữa nhiều
project. Để sử dụng các hàm này, bạn có thể áp dụng
các cách sau:
– include file theo đường dẫn tuyệt đối: Cách này dở vì khi cài
đặt trên máy khác sẽ không tìm thấy file được include
– include file theo đường dẫn tương đối: Cách này tốt hơn,
nhưng mỗi khi đổi vị trí của file được include thì phải sửa lại
tại tất cả các file thực hiện lời gọi include
– Cách tốt nhất là sử dụng include_path (thiết lập trong file
PHP.INI) đối với những file thư viện dùng chung được sử
dụng nhiều (giống như đối với ngôn ngữ C)
IV.2. Sử dụng include_once() và
include_path cho các dự án lớn (3)
fwrite($handle, $string);
fread($handle, $length);
fgets($handle);
sprintf($format);
fscanf($handle, $format);
fseek($handle, $offset);
fclose($handle);
file_get_contents($filename);
IV.4. Đọc, ghi file (2)
<?php
$var1 = 10;
$var2 = "This is a String";
$var3 = true;
$f = fopen("test.txt", "wt");
fwrite($f, "$var1 $var2 $var3\n");
fwrite($f, "$var1\n$var2\n$var3\n");
fclose($f);
<?php
require("DB.php");
$db = DB::connect("mysql://root:root@localhost/dhxd");
$table = $db->query("select * from sv");
$row = $table->fetchRow();
var_dump($row);
$row = $table->fetchRow(DB_FETCHMODE_ASSOC);
var_dump($row);
$row = $table->fetchRow(DB_FETCHMODE_OBJECT);
var_dump($row);
echo "Hoten: {$row->hodem} {$row->ten}, Ngay sinh:
{$row->ngaysinh}";
?>
V.2.6. Giải phóng bộ nhớ
<?php
require("DB.php");
$db = DB::connect("mysql://root:root@localhost/dhxd");
$table = $db->query("select * from sv");
$row = $table->fetchRow();
unset($row);
$table->free();
$db->disconnect();
?>
V.3. Các chức năng nâng cao với
PEAR DB
Bạn có thể lấy thông tin về các dòng, cột kết quả trả về từ câu lệnh SQL qua
các hàm numRows(), numCols(), tableInfo(), affectedRows()
<?php
require("DB.php");
$db = DB::connect("mysql://root:root@localhost/dhxd");
$table = $db->query("SELECT * FROM sv");
var_dump($table->numRows());
var_dump($table->numCols());
var_dump($table->tableInfo());
$result = $db->query(
"INSERT INTO sv (hodem, ten) VALUES (?,?)",
array("Nguyen Phu", "Quang"));
var_dump($result);
var_dump($db->affectedRows());
?>
V.3.5. Metadata
Hàm getListOf() sử dụng để lấy thông tin về users, databases, tables, views,
functions (phụ thuộc vào sự hỗ trợ của CSDL mà bạn đang sử dụng)
<?php
require_once("DB.php");
$db = DB::connect("mysql://root:root@localhost/dhxd");
$result = $db->getListOf("users");
var_dump($result);
$result = $db->getListOf("databases");
var_dump($result);
$result = $db->getListOf("tables");
var_dump($result);
?>
V.3.6. Transaction
<?php
require_once("DB.php");
$db = DB::connect("mysql://root:root@localhost/dhxd");
$db->autocommit = false;
$result = $db->query("DELETE FROM sv;");
$db->rollback();
$db->autocommit = true;
?>
VI. Tổ chức ứng dụng PHP
Value Meaning
E_ERROR Runtime errors
E_WARNING Runtime warnings
E_PARSE Compile-time parse errors
E_NOTICE Runtime notices
E_CORE_ERROR Errors generated internally by PHP
E_CORE_WARNING Warnings generated internally by PHP
E_COMPILE_ERROR Errors generated internally by the Zend scripting engine
E_COMPILE_WARNING Warnings generated internally by the Zend scripting engine
E_USER_ERROR Runtime errors generated by a call to trigger_error( )
E_USER_WARNING Runtime warnings generated by a call to trigger_error( )
E_USER_NOTICE Runtime warnings generated by a call to trigger_error( )
E_ALL All of the above options
VI.4.2. Giấu lỗi
Sử dụng toán tử @ để ngăn không cho output lỗi ra browser
Thiết lập track_errors trong php.ini để bắt được các thông báo lỗi qua biến
$php_errormsg
Để ngăn không cho tất cả các thông báo lỗi trên browser, sử dụng hàm
error_reporting(0)
<?php
ini_set("track_errors", "1");
$value = 2/0;
$value = @(2/0);
echo "$php_errormsg";
ini_restore("track_errors");
?>
<?php
error_reporting(0);
ini_set("track_errors", "1");
$value = 2/0;
echo "$php_errormsg";
ini_restore("track_errors");
?>
VI.4.3. Phát sinh lỗi
Bạn có thể làm phát sinh lỗi người dùng bằng hàm
trigger_error
trigger_error(message [, type]);
type: E_USER_ERROR, E_USER_WARNING,
E_USER_NOTICE (default)
<?php
function divider($a, $b) {
if($b == 0) {
trigger_error('$b cannot be 0', _USER_ERROR);
}
return($a / $b);
}
?>
VI.4.4. Hàm xử lý lỗi
Giấu tất cả các lỗi không phải là một phương án hay, để quản
lý lỗi tốt hơn, bạn nên dùng hàm xử lý lỗi (error handler)
Error handler được thiết lập bằng hàm set_error_handler(),
khôi phục lại bằng hàm restore_error_handler()
<?php
function my_handler($error, $errorstring,
$filename, $line, $symbol)
{
echo "$error|$errorstring|$filename|$line\n";
}
set_error_handler('my_handler');
echo 4/0;
$f = file("linhtinh");
?>
VI.4.5. Log lỗi
VI.5. Tối ưu hóa
VII. Hình ảnh
<?php
$im = imagecreate(100,100);
$white = imagecolorallocate($im, 0xff, 0xff, 0xff);
$red = imagecolorallocate($im, 0xff, 0x00, 0x00);
$blue = imagecolorallocate($im, 0x00, 0x00, 0xff);
imagettftext($im, 8, 30, 10, 100, $red,
"Times", "HUCE - 46pm1");
imagettftext($im, 10, -30, 10, 10,$blue,
"Arialni","HUCE- 46pm1");
imagegif($im);
?>
VII.4. Co dãn ảnh
<?php
$im = imagecreate(100,100);
$white = imagecolorallocate($im, 0xff, 0xff, 0xff);
$red = imagecolorallocate($im, 0xff, 0x00, 0x00);
$blue = imagecolorallocate($im, 0x00, 0x00, 0xff);
imagettftext($im, 8, 30, 10, 100, $red, "Times", "HUCE - 46pm1");
imagettftext($im, 10, -30, 10, 10, $blue, "Arialni", "HUCE - 46pm1");
$im2 = imagecreate(200, 200);
//imagecopyresized($im2, $im, 0, 0, 0, 0, 200, 200, 100, 100);
imagecopyresampled($im2, $im, 0, 0, 0, 0, 200, 200, 100, 100);
imagegif($im2);
?>
VII.5. Màu sắc