THIET KE WEBSITE GIA RE

THIET KE WEBSITE GIA RE

  • RSS Thế Giới BlackBerry

    • Mẹo vặt về sử dụng blackberry
      Cùng học cách áp dụng các mẹo vặt và phím tắt cho chiếc smartphone BlackBerry (lưu ý: có một số ứng dụng không hỗ trợ cho các dòng BB cổ) của bạn. Hãy bắt đầu bằng cách chọn các ứng dụng dưới đây: • Tìm kiếm • Đính kèm • Trình duyệt • Camera • [...]
    • Game Linh Vương trên blackberry
      Download game linh vuong Chúc bạn thành công – www.ticsoft.com (Nguồn: Sưu tầm) Filed under: Games blackberry Tagged: blackberry, game, linh vuong
    • Assasin’s Creed 81xx,83xx,87xx và 88xx
      Download Chúc bạn thành công – www.ticsoft.com (Nguồn: Sưu tầm) Filed under: Games blackberry Tagged: 81xx, 83xx, 87xx, 88xx, Assasin's Creed, blackberry
    • Game Prince of Persia- Hoàng tử Ba Tư
      Prince of Persia – Hoàng Tử Ba Tư, series game đình đám của “ông lớn” Ubisoft đã làm ngây ngất bao trái tim của các game thủ trên các hệ máy chơi game, đã được làm lại trên các hệ điện thoại khác nhau (Chủ yếu cho Nokia S60- cái này em search trên 4rum [...]
    • Diamond Twister-Game xếp kim cương cho mọi người
      Đúng với tên gọi, Diamond Twister có gameplay tương tự game xếp kim cương trên máy tính đã làm điêu đứng chị em văn phòng 1 thời.Nay với Diamond Twister trên Blackberry thì chị em Tinh tế lại có thời gian bên em BB yêu quí.Với màu sắc bắt mắt và cốt truyện hay, Diamond [...]
    • The Sims 3 cho 83xx
      Download The Sim Chúc bạn thành công – www.ticsoft.com (Nguồn: Sưu tầm) Filed under: Games blackberry Tagged: 83xx, blackberry, the sim
    • Konami Pes 2010 cho các dòng blackberry
      Konami Pes 2010 cho các dòng blackberry
    • Lưu trữ tin nhắn SMS trên Blackberry
      Lưu trữ tin nhắn SMS trên Blackberry Nếu vô tình xóa đi các tin nhắn quan trọng trên điện thoại thì Dexrex SMS Backup sẽ là vị cứu tinh cho bạn. Cách thức lưu trữ và sắp xếp tất cả tin nhắn gửi/nhận SMS từ BlackBerry cũng tương tự như các trình tin nhắn và [...]
    • Game xếp gạch cho blackberry
      Game xếp gạch cho blackberry, hãy nhìn vào hình vẽ để biết phím đánh game này nha Download game xếp gạch Chúc bạn thành công – www.ticsoft.com – thiết kế website Posted in Games blackberry Tagged: blackberry, game, xếp gạch
    • Yamee – Phần mềm chat yahoo tốn ít kb nhất
      Các bạn tải file zip về , giải nén thành file Yamee.jar , copy vô thẻ nhớ của BB , xong vào Media trên BB , mở Menu–>Explore–> Media Card –> nhấn vào Yamee.jar –> download (nghĩa là tải từ file java vô máy chứ ko connect với mạng đâu, yên tâm , không tốn [...]

Archive for Tháng Năm 15th, 2009

Các thao tác kết nối tới MySQL và lựa chọn CSDL bằng PHP

Posted by thietkewebsitegiare on 15/05/2009

Bài viết này sẽ tập trung vào việc khai thác hệ quản trị CSDL miễn phí MySQL.

Các bước xây dựng chương trình có kết nối tới CSDL My SQL:

Thông thường, trong một ứng dụng có giao tiếp với CSDL, ta phải làm theo bốn trình tự sau:
Bước 1: Thiết lập kết nối tới CSDL.
Bước 2: Lựa chọn CSDL.
Bước 3: Tiến hành các truy vấn SQL, xử lý các kết quả trả về nếu có
Bước 4: Đóng kết nối tới CSDL.

Nếu như trong lập trình thông thường trên Windows sử dụng các chương trình điều khiển trung gian (ADO, ODBC…) để thực hiện kết nối và truy vấn, thì trong PHP, khi lập trình tương tác với CSDL, chúng ta thường sử dụng thông qua các hàm.

Chú ý: Trước khi sử dụng PHP để lập trình với MySQL, hãy sử dụng chương trình quản lý phpMyAdmin để tạo trước một CSDL, vài bảng cũng như người dùng… để tiện thực hành. Bài hướng dẫn sử dụng phpMyAdmin sẽ được trình bày sau.

Trong bài viết này, tôi sử dụng MySQL chạy trên nền máy chủ localhost, người sử dụng của CSDL này có username là mysql_user, mật khẩu là mysql_password

Thiết lập kêt nối tới MySQL.

Để kết nối tới MySQL, ta sử dụng hàm mysql_connect()
Cú pháp:
mysql_connect(host,tên_truy_cập,mật_khẩu);
trong đó:
host là chuỗi chứa tên (hoặc địa chỉ IP) của máy chủ cài đặt MySQL.
tên_truy_cập là chuỗi chứa tên truy cập hợp lệ của CSDL cần kết nối
mật_khẩu là chuỗi chứa mật khẩu tương ứng với tên truy cập
Ví dụ:
<?
mysql_connect (“localhost”, “thu_mot_ti”,”thu_hai_ti”);
?>
Khi kết nối tới MySQL thành công, hàm sẽ trả về giá trị là một số nguyên định danh của liên kết, ngược lại, hàm trả về giá trị false.
Ta có thể dùng hàm if để kiểm tra xem có kết nối được tới MySQL hay không:

<?php
$link = mysql_connect(“localhost”, “mysql_user”, “mysql_password”);
if (!$link)
{
echo “Không thể kết nối được tới CSDL MySQL”;
}
?>

Lựa chọn CSDL

Để lựa chọn một CSDL nào đó mà người sử dụng có tên là tên_truy_cập” có quyền sử dụng, ta dùng hàm mysql_select_db:
mysql_select_db (tên_CSDL);
Hàm này thường được dùng sau khi thiết lập kết nối bằng hàm mysql_connect. Hàm này trả về true nếu thành công, false nếu thất bại.
VD:
<?php
$link = mysql_connect(“localhost”, “mysql_user”, “mysql_password”);
if (!$link)
{
echo “Không thể kết nối được tới MySQL”;
}
if (!mysql_select_db (“Forums”))
{
echo “Không thể lựa chọn được CSDL Forums”;
}
?>

Đóng kết nối tới CSDL:
Để đóng kết nối tới CSDL, ta dùng hàm mysql_close.
Hàm này có nhiệm vụ đóng kết nối tới CSDL có mã định danh được tạo ra bởi hàm mysql_connect().
Cú pháp: mysql_close(mã_định_danh_kết_nối).

Ví dụ:
<?php
$link = mysql_connect(“localhost”, “mysql_user”, “mysql_password”);
if (!$link)
{
echo “Không thể kết nối được tới MySQL”;
}
mysql_close($link);
?>

Chúc bạn thành công – www.ticsoft.com (Nguồn: sưu tầm)

Đăng trong Học PHP | Tagged: , , , | Leave a Comment »

Hằng và biến trong php

Posted by thietkewebsitegiare on 15/05/2009

Nếu các bạn chưa từng học lập trình, chắc các bạn đang còn xa lạ với hằng và biến.

1. Hằng và biến
Nếu các bạn chưa từng học lập trình, chắc các bạn đang còn xa lạ với hằng và biến.
- Giống như trong toán học, một hằng số xác định một giá trị duy nhất thông qua tên của hằng số, trong Tin học cũng vậy. Môt hằng số xác định một giá trị duy nhất trong toàn bộ chương trình. Người ta có thể sử dụng giá trị này thông qua tên của hằng số đó trong chương trình
- Tương tự đối với biến. Một biến trong lập trình được sử dụng để lưu trữ một giá trị nào đó thông qua tên biến. Sở dĩ người ta gọi nó là biến, vì không như hằng số (giữ nguyên giá trị trong toàn bộ quá trình chạy chương trình), người ta có thể thay đổi giá trị của biến số thông qua các phép gán.

Để tạo điều kiện dễ dàng trong quá trình phân tích dữ liệu, PHP quy định bất kỳ từ nào có dấu $ ở trước đều là tên của biến. Ví dụ:
$ten xác định một biến có tên là ten
$custome_name: xác định một biến có tên là $custome_name

Bạn cần biết rằng tên biến là một chuỗi các ký tự chỉ bao gồm các chữ số, chữ cái (a..z) và dấu gạch dưới ( _ ). Và PHP quy định phân biệt các biến chữ hoa và chữ thường là khác nhau. CHẳng hạn $ab và $Ab là 2 biến hoàn toàn khác nhau. Một điểm cần lưu ý khác là không được đặt tên biến bắt đầu bằng các chữ số (0.. 9)

Do quy định các chuỗi ký tự có chứa dấu $ ở trước là một tên biến, nên PHP tự động khởi gán giá trị của các biến này là rỗng (đối với kiểu dữ liệu văn bản) hoặc 0 đối với kiểu dữ liệu số. Bạn sẽ được biết đến các kiểu dữ liệu sau này.

Để gán giá trị cho các biến, bạn sử dụng câu lệnh gán như sau:
$tên_biến = giá trị cần gán;

Ví dụ:
$nam_sinh=1980;
$ho_ten=”CMXQ”;

Các bạn chú ý đến 2 ví dụ tôi nhập dữ liệu: một cái thì nằm trong cặp dấu ngoặc kép chỉ thị biến đó chứa dữ liệu theo kiểu xâu, còn một cái thì không nằm trong cặp dấu ngoặc kép chỉ thị biến đó chứa dữ liệu kiểu số. Bạn sẽ biết chi tiết hơn ở ngay sau đây:

2. Các kiểu dữ liệu trong PHP

PHP có 3 kiểu dữ liệu cơ bản: Integer, double và string. Ngoài ra còn một số kiểu dữ liệu khác, đượ xây dựng dựa trên các kiểu dữ liệu cơ bản trên, như mảng, object, mà chúng ta sẽ đề cập đến sau. Tất cả các biến đều được chỉ định kiểu dữ liệu, và như chúng ta đã nói ở trên, giá trị của chúng có thể bị thay đổi trong quá trình sử dụng.

Kiểu giá trị Integer sử dụng 4 byte của bộ nhớ. Đây là kiểu giá trị nguyên (không phải là số thực) và có giá trị nằm trong khoảng từ -2 tỷ đến 2 tỷ. Kiểu dữ liệu double là kiểu dữ liệu số thực, cho phép chứa các số thưc. Kiểu String được sử dụng để chứa các dữ liệu như là các ký tự văn bản, ký tự đặc biệt và các chữ số. Dữ liệu kiểu string được đặt trong cặp dấu ngoặc kép (“”) chỉ định một xâu (hay còn gọi là chuỗi ký tự).

Ví dụ:
2: Kiểu integer;
2.0: kiểu double
“2″: Kiểu xâu
“2 gio”: Kiểu xâu

3.Định nghĩa hằng

Hàm define() được sử dụng để tạo một hằng số:
Hàm này có cấu trúc sau:
define (“tên_hằng”,”giá trị của hằng”);
Ví dụ:
define (“COMPANY”,”NS Co.Ltd”);// Định nghĩa hằng COMPANY với giá trị là “NS Co Ltd”
define (“diem_so”,4.5);// định nghĩa hằng diem_so với giá trị là 4.5 (hic… thi lại );

Sau khi một hằng số được tạo ra, ta có thể sử dụng chúng thay cho giá trị của chúng:
echo (“Tên công ty: “.COMPANY);
Điều này tương đương với echo (“Tên công ty: NS Co Ltd”);

4. Một số hằng xây dựng sẵn (built in constant)

PHP có chứa một số hằng được xây dựng sẵn. TRUE và FALSE là 2 hằng đã được dựng sẵn với chỉ định true (1) và false (=0 hoặc một xâu rỗng)

Hằng số PHP_VERSION chỉ định phiên bản của bộ phân tích PHP mà bạn đang dùng hiện tại. Hằng PHP_OS chỉ định hệ điều hành server mà trình phân tích PHP đang chạy.

echo (PHP_OS); // in ra màn hình “Linux” (ví dụ)

_FILE_and_LINE_ trả về tên của đoạn script (đoạn mã nhúng) đang được phân tích tại dòng hiện thời trong đoạn mã script.

PHP còn cung cấp một số hàm để thông báo lỗi như E_ERROR, E_WARNING, E_PARSE và E_NOTICE.

Ngoài ra, PHP còn cung cấp một số biến cung cấp thông tin về môi trường PHP đang sử dụng. Để xem các thông tin này,bạn có thể dùng hàm phpinfo() như sau:

<HTML>
<!– phpinfo.php–>
<BODY>
<?php
phpinfo();
?>
</BODY>
</HTML
5. Lừa kiểu và ép kiểu dữ liệu

Như chúng ta đã biết, tất cả các biến PHP đều có kiểu dữ liệu riêng. Kiểu dữ liệu của biến sẽ được tự động xác định bởi giá trị đặt vào biến

$a=1 // $a là kiểu integer
$a=1.2 // Bây giờ, nó là kiểu double
$a=”1″ // Và bây giờ nó là kiểu string

a) Chuyển kiểu chuỗi và lừa kiểu dữ liệu

Nếu bạn làm các thao tác tính toán số trên một chuỗi, PHP sẽ tính toán chuỗi như là một số. Điều này được biết đến với cái tên gọi là “chuyển kiểu chuối (String conversion), mặc dù giá trị chuỗi của nó có thể không cần phải thay đổi. Trong đoạn ví dụ sau, biến $str được xác định là một chuỗi:
$str=”756300 không có”;
Nếu chúng ta cố cộng thêm một giá trị nguyên là 3 vào biến $str, biến $str sẽ tự động tính với số nguyên 756300:
$x=4+$str;//$x =756304

Nhưng bản thân giá trị của biến $str không thay đổi

echo ($str); // In ra màn hình chuỗi “756300 không có”

Chuyển kiểu chuỗi phải tuân theo 2 nguyên tắc sau:
- Chỉ những chuỗi bắt đầ là một xâu các chữ số. Nếu chuỗi bắt đầu bằng một giá trị số hợp lệ, chuỗi này sẽ được xác định như giá trị của nó, trong trường hợp khác, nó sẽ trả về 0. VD: chuỗi “35 tuổi” sẽ được ước lượng là 35, nhưng chuỗi “tuổi 35″ sẽ chỉ xác định giá trị 0.

- Một chuỗi sẽ chỉ được xác định như là một giá trị kiểu double nếu giá trị kiểu double được miêu tả bao gồm toàn bộ chuỗi. Chuỗi “3.4″, “-4.2″ sẽ được ước lượng như giá trị thực 3.4 và -4.2. Nếu một ký tự không phải là ký tự kiểu số thực được đưa vào chuỗi, giá trị của chuỗi đó sẽ được ước lượng như là một số nguyên. Chuỗi “3.4 dollar” sẽ thành số nguyên 3.

Trong việc cộng với chuỗi chuyển kiểu, PHP sẽ thực hiện “lừa kiểu” giữa 2 kiểu số. Nếu bạn thực hiện một phép toán số học giữa kiểu thực và kiểu nguyên, giá trị sẽ là số thực

$a=1 //$ a là một số nguyên
$b= 1.0 //$b là số thực
$c=$a+$b //$c là kiểu số thực , = 2.0
$d = $c+”6th” //$d là kiểu số thực = 8.0

Ép kiểu dữ liệu

Ép kiểu dữ liệu cho phép bạn thay đổi kiểu dữ liệu của biến

$a=11.2// $a là kiểu thực
$a=(int)$a// Bây giờ, $ a là kiểu nguyên, giá trị = 11
$a= (double) $a// Bây giờ $a lại trở về kiểu thực = 11.0
$b= (string)$a// $b là giá trị kiểu chuỗi =”11″

Ngoài ra, chúng ta còn được phép ép kiểu (array) và (object)

(integer) tương đương với (int); (fload) và (real) tương đương với (double)

6. Một số hàm tiện ích khác

PHP có một số hàm hỗ trợ làm việc với các biến

- Hàm gettype($ten_bien) xác định kiểu của biến. Nó sẽ trả về một trong các giá trị: “integer”, “double”, “string”, “array”, “object”, “class”, “unknown type” (Chúng ta sẽ tìm hiểu kỹ hơn vể mảng (array) và kiểu đối tượng (object) ở các bài sau.
Ví dụ:
echo(gettype($name));

- Hàm settype($ten_bien,”kieu_du_lieu”) sẽ đặt kiểu dữ liệu cho biến $ten_bien. Kiểu dữ liệu được viết dưới dạng một chuỗi, và có thể có một trong các kiểu sau: “integer”, “double”, “string”, “array”, “object”. Nếu kiểu dữ liệu không được đặt, giá trị false sẽ được trả về, còn nếu thành công, nó sẽ trả về giá trị true.

VD:
$a=7.5; //$a là kiểu thực
settype($a,”integer”); // bây giờ nó là một số nguyên có giá trị 7

- Hàm isset($ten_bien) được sử dụng để xác định xem biến $ten_bien đã đặt một giá trị nào đó hay chưa. Nếu biến đó đã có giá trị, hàm trả về true. Trong truờng hợp ngược lại, hàm trả về giá trị false;
- Hàm unset($ten_bien) được sử dụng để huỷ bỏ biến $ten_bien, giải phóng bộ nhớ bị chiếm dụng của biến đó.

Chúc bạn thành công – www.ticsoft.com (Nguồn: sưu tầm)

Đăng trong Học PHP | Tagged: , , | Leave a Comment »

Tạo một chương trình download manager với PHP

Posted by thietkewebsitegiare on 15/05/2009

Có lẽ cũng không cần giới thiệu nhiều về nhu cầu “giấu diếm” này vì hiện nay có khá nhiều site sử dụng cách quản lý download như vậy và cũng có số lượng cũng nhiều không kém các site mới muốn tìm hiểu và sử dụng nó.

Tuy nhiên, có lẽ không thừa nếu như chúng ta tìm hiểu kỹ hơn một chút về lý do sử dụng một chương trình download manager trên website để giấu đường dẫn thực sự đến các file download.

Quản lý băng thông và “tài sản” là 2 lý do chính để sử dụng 1 chương trình quản lý download trên website. Bạn thử tưởng tượng có 1 website cho download nhạc hoặc ebook với 1 mức phí nho nhỏ, nếu mà link để download trực tiếp các file bị lộ tùm lum thì thứ nhất là “lỗ vốn”, thứ hai là bandwidth sẽ hết sạch nhanh đến nỗi trước khi bạn kịp hiểu chuyện gì đã xảy ra.
Một số lý do khác cũng “chính đáng” không kém ví dụ như bạn muốn đếm số lần download file; hoặc website của bạn tự upload file của mình lên và các file này lại nằm trong database hoặc được để trong 1 thư mục mà từ ngoài web không đọc được. Trong những trường hợp như vậy, sử dụng 1 chương trình quản lý download trên website sẽ khá tiện lợi.

Tuy nhiên, cũng có vài điều cần chú ý trước khi bạn quyết định sử dụng 1 chương trình quản lý download trên website của mình:

Tốc độ download sẽ chậm hơn rất nhiều so với download file trực tiếp.
Server sẽ phải xử lý nhiều công việc hơn so với khi cho phép download file trực tiếp.
Nếu file được lưu trữ trong database, bạn nên chú ý rằng số lượng kết nối đồng thời vào database là có hạn, trong khi với 1 file có dung lượng lớn, có thể phải mất tới nửa tiếng hoặc hơn để download.

CHƯƠNG TRÌNH ĐẦU TIÊN

Giả sử bạn có 1 file document.zip trong cùng thư mục với file download.php. Nhưng chỉ mình bạn biết là file document.zip này nằm ở đâu, người khác muốn download thì phải truy cập vào file download.php của bạn. Mã nguồn của file download.php sẽ như sau:

//file download.php<?php$filename = “document.zip”;$fp = fopen($filename, “rb”); header(“Content-type: application/octet-stream”);header(“Content-length: ” . filesize($filename)); fpassthru($fp);fclose($fp);?>
Ủa, chỉ có nhiêu đó thôi à? Đúng vậy, chỉ có vỏn vẹn 10 dòng là có được 1 chương trình download manager đơn giản (dĩ nhiên là chương trình này chỉ cho phép download được mỗi 1 file document.zip, ta còn phải làm việc nhiều để cho chương trình hoàn thiện hơn!).

Đầu tiên, ta mở file document.zip để đọc ở chế độ nhị phân (binary):
$fp = fopen($filename, “rb”);.

Tiếp theo ta báo cho browser biết data trả về từ server là dữ liệu nhị phân chứ không phải là văn bản HTMl như thông thường:
header(“Content-type: application/octet-stream”);.

Đồng thời ta cũng báo cho browser biết dung lượng của file sẽ được tải xuống:
header(“Content-length: ” . filesize($filename));.

Và cuối cùng là đọc nội dung file và echo lại cho browser download:
fpassthru($fp);.

Lệnh fpassthru($fp); tương đương với 2 lệnh:
$content = fread($handle, filesize($filename));
echo $content;
Như vậy chương trình này cũng không có gì khác với các chương trình PHP thông thường ngoài 2 lệnh header(). Trong đó lệnh header(“Content-length: ” . filesize($filename)); cũng không có gì là khó hiểu, lệnh này báo cho browser biết dung lượng của file chuẩn bị download (thực ra không có lệnh này thì quá trình download vẫn diễn ra như bình thường). Vấn đề mấu chốt nằm ở lệnh header(“Content-type: application/octet-stream”);.
Lệnh header(“Content-type: application/octet-stream”); sẽ báo cho browser biết là dữ liệu chuẩn bị load xuống là dữ liệu nhị phân. Vì là dữ liệu nhị phân nên browser sẽ thực hiện quá trình download và save file thay vì hiển thị lên browser như là 1 trang HTML thông thường.

Thử chạy ví dụ trên vài lần, thay thế file document.zip bằng một số file khác nhau (ví dụ file Word, PDF, Excel…) và thử trên vài browser khác nhau, bạn sẽ nhận thấy có vài chỗ hơi khó chịu:

Browser sẽ mặc định lưu file lên đĩa với tên là download.php. Bạn phải đổi tên file lại cho đúng trước khi mở file ra đọc.
Trong một số trường hợp, thay vì hỏi save file lên đĩa, browser sẽ mở luôn file (ví dụ chạy Word hoặc Acrobat mở luôn file vừa được download).
Để giải quyết 2 vấn đề khó chịu trên cũng không có gì khó khăn lắm, ta chỉ cần thêm 1 lệnh header() nữa:
header(‘Content-disposition: attachment; filename=”‘.$filename.’”‘);
Tham số “attachment” của header “Content-disposition” sẽ báo cho browser biết là nên download và save file thay vì open. Tham số “filename=” sẽ báo cho browser biết tên của file đang được download.

CẢI TIẾN CHƯƠNG TRÌNH

Cho tới bây giờ chương trình của chúng ta vẫn còn thô sơ, chúng ta vẫn cần them vào chức năng nữa để chương trình hoàn thiện hơn.

Cho phép người dùng chọn file để download. Hiện tại chương trình của chúng ta chỉ mới cho phép download 1 file duy nhất.
Kiểm tra dữ liệu nhập từ người dùng. Đây là một việc luôn nên làm. Chương trình cho phép nguời dùng chọn file để download thì cũng cần nên kiểm tra kỹ kẻo chính file config, file source hoặc file password của bạn bị download thì phiền.
Cho phép người dùng chọn file để download: Thao tác này có lẽ khá đơn giản đối với bạn. Chương trình sẽ nhận vào tham số file từ URL (ví dụ: download.php?file=document.zip). Đoạn code xử lý như sau:

$filename = isset($_GET['file'])?$_GET['file']:”;
Kiểm tra dữ liệu nhập: Ta cần kiểm tra các điều kiện sau:

File có tồn tại và được phép đọc hay không? PHP cung cấp sẵn cho ta 2 hàm ls is_file() và is_readable() để làm việc này:
if ( $filename == “” || !is_file($filename) || !is_readable($filename) ) {    echo “Error: …”;    exit(-1);}
Đoạn mã trên sẽ kiểm tra nếu như tên file là rỗng, hoặc file không tồn tại hoặc không đọc được thì sẽ báo lỗi và thoát.
Tên file có chứa các ký tự đặt biệc hay không? Thường các file upload sẽ được để trong 1 thư mục riêng. Như vậy tên file chỉ có thể chứa các ký tự a-z, 0-9, gạch ngang (-), gạch dưới (_), khoảng trắng và dấu chấm (.). Ta có thể xem như các kỹ tự khác trong tên file là không hợp lệ. Đoạn mã kiểm tra như sau:
if ( !preg_match(‘/^[a-z0-9\_\-\. ]*$/i’, $filename) ) {    echo “Error: …”;    exit(-1);}
Đoạn mã trên sẽ kiểm tra nếu như trong file có chứa ký tự lạ (không phải là 0-9, a-z, gach dưới, gạch ngang, khoảng trắng, dấu chấm, khoảng trắng thì sẽ báo lỗi) và thoát chương trình. Ngoài ra, có một số file cấu hình đặt biệc của server được bắt đầu bằng dấu chấm (ví dụ .htaccess, .htpasswd), ta cũng phải kiểm tra xem ksy tự đầu tiên của tên file có phải là dấu chấm hay không, nói cách khác, ký tự đầu tiên của tên file phải là 1 chữ cái (a-z) hoặc chữ số (0-9) hoặc kỹ tự gạch ngang hoặc gạch dưới. Lệnh if trên được cài tiến lại như sau:
if ( !preg_match(‘/^[a-z0-9\_\-][a-z0-9\_\-\. ]*$/i’, $filename) ) {    echo “Error: …”;    exit(-1);}
Giép lại ta có chương trình được cải tiến như sau:

<?php//các file upload được để trong 1 thư mục riêng$upload_dir = “../upload/”; //lấy tên file cần download từ URL$filename = isset($_GET['file'])?$_GET['file']:”; //thực hiện quá trình kiểm traif ( !preg_match(‘/^[a-z0-9\_\-][a-z0-9\_\-\. ]*$/i’, $filename) )        || !is_file($upload_dir.$filename) || !is_readable($upload_dir.$filename) ) {    echo “Loi: Ten file khong hop le hoac file khong ton tai!”;    exit(-1);} //end if //mở file để đọc với chế độ nhị phân (binary)$fp = fopen($upload_dir.$filename, “rb”); //gởi header đến cho browserheader(‘Content-type: application/octet-stream’);header(‘Content-disposition: attachment; filename=”‘.$filename.’”‘);header(‘Content-length: ‘ . filesize($upload_dir.$filename)); //đọc file và trả dữ liệu về cho browserfpassthru($fp);fclose($fp);
Lưu ý rằng ta không cần kiểm tra tên file rỗng nữa vì ở trên ta đã kiểm tra ký tự đầu tiên của tên file, nên nếu tên file lã rỗng thì sẽ không có ký tự đầu tiên, do vậy điều kiện kiểm tra của hàm pregg_match sẽ bị sai rồi.

THẮC MẮC NHỎ CUỐI CÙNG

Tới đây xem như chương trình của chúng ta xem như là đã hoàn chỉnh. Tuy nhiên, có thể bạn sẽ còn một thắc mắc nho nhỏ: ngoài kiểu dữ liệu application/octet-stream thì còn kiểu dữ liệu nào khác không? và mặc định thì PHP sẽ dùng kiểu dữ liệu gì để trả về cho browser?

Mặc định PHP sẽ trả về dữ liệu kiểu text/html cho browser. Một số kiểu dữ liệu tương ứng với các kiểu file thông dụng:
.GIF: image/gif
.JPG: image/jpeg
.PNG: image/png
.WAV: audio/wav
.MP3: audio/mpeg3
.DOC: application/msword
.PDF: application/pdf

Tuỳ vào kiểu của dữ liệu trả về mà browser có thể sẽ có những cách ứng khác nhau. Ví dụ nếu dữ liệu trả về là file ảnh thì browser sẽ hiển thị luôn, nếu là file nhạc thì browser sẽ gọi WMP lên để play, nếu là file PDF thì chương trình Acrobat sẽ được gọi…
Kiểu application/octet-stream để chỉ dữ liệu nhị phân (binary) chung chung. Nếu bạn chỉ muốn browser download và save file thì bạn chỉ cần trả về kiểu dữ liệu application/octet-stream là đủ.

VÀI LỜI NGỎ TRƯỚC KHI KẾT THÚC

Sau khi đọc hết bài viết, chắc bạn cũng thấy rằng việc viết 1 chương trình quản lý download file cho website cũng không phải là quá phức tạp. Cũng như tiêu đề của bài viết đã nói “Việt một chương trình download manager đơn giản”, chương trình của chúng ta khá đơn giản nhưng cũng có đủ các chức năng cơ bản cần thiết. Các chức năng “tiền download” hoặc “hậu download” bạn có thể dễ dàng tự phát triển thêm tuỳ vào nhu cầu của bạn, ví dụ như tăng biến đếm số lần download của file, kiểm tra login trước khi cho download. Bạn chỉ cần chú ý một số điểm sau khi viết 1 chương trình download manager:

Để các file upload lên trong 1 thư mục riêng để dễ bề quản lý. Tốt nhất là để trong 1 thư mục không thể truy cập trực tiếp được từ Web mà chỉ có thể đọc bởi chương trình PHP của bạn.
Kiểm tra kỹ tên file được người dùng nhập vào.
Mở file để đọc ở chế độ nhị phân (binary). Bạn tham khảo thêm các tham số của hàm fread trong PHP.
Trả về kiểu dữ liệu của file và các thông số cần thiết khác qua lệnh header().
Nếu không thật sự cần thiết thì nên để đường dẫn download trực tiếp thay vì dùng download manager, vì như vậy sẽ download nhanh hơn và server ít phải xử lý thêm nhiều công việc.

Chúc bạn thành công – www.ticsoft.com (Nguồn: sưu tầm)

Đăng trong Học PHP | Tagged: , | Leave a Comment »

Lệnh điều khiển vòng lặp trong PHP

Posted by thietkewebsitegiare on 15/05/2009

Điều khiển vòng lặp, tức là bạn điều khiển chương trình của bạn tự động thực hiện một đoạn mã lệnh nào đó lặp đi lặp lại nhiều lần (lặp một số lượng lần nào đó, hoặc lặp cho đến khi thoả mãn một điều kin nào đó).

PHP cung cấp cho chúng ta hai kiểu vòng lặp: vòng lặp while (lặp kiểm tra điều kiện, cho đến khi điều kiện được thoả mãn) và vòng lặp for (xác định số lần lặp lại)

a) Vòng lặp while

Vòng lặp while là một dạng vòng lặp đơn giản nhất, cấu trúc của nó gần giống như lệnh if:

while (điều kiện)
{
//Khoi cau lenh can lap
}

Vòng lặp while sẽ ước lượng một biểu thức giá trị kiểu boolean (đúng hoặc sai).Nếu giá trị của biểu thức là false, đoạn mã trong cặp dấu ngoặc (đoạn mã cần lặp) sẽ được bỏ qua và nhảy đến đoạn mã sau vòng lặp. Nếu giá trị của nó là true, đoạn mã trong cặp dấu ngoặc sẽ được thực thi. Khi bắt gặp dấu ngoặc ôm (“}”) , điều kiện kiểm tra sẽ được tính toán lại, và nếu giá trị vẫn là true, đoạn mã trong ngoặc lại tiếp tục được thực thi. Chú ý rằng điều kiện lặp chỉ được tính toán tại thời điểm bắt đầu lặp. Vì vậy, dù điều kiện lặp có bị thay đổi trong quá trình thực thi đoạn lệnh trong cặp dấu {} thì đoạn lệnh đó vẫn được tiếp tục thực hiện cho đến hết. Muốn dừng lại ở một vị trí xác định nào đó trong khối câu lệnh, chúng ta sử dụng lệnh break:
Ví dụ1: Tính tổng từ 1 đến 5:

<?php
$i=0;
$tong=0;
while ($i<=5)
{
$tong=$tong+$i;
$i+=1;
}
?>

Ví dụ 2: Đoạn mã sau sẽ hiển thị trên trình duyệt 3 ô textbox (Với điều kiện bạn phải save nó dưới một file *.php :

<HTML>
<TABLE>
<BODY>
<?php
$i=1;
while ($i<=3)
{
?>
<TR><TD> <INPUT type=”text”> </TD></TR>
<?php
$i+=1;
}
?>
</table>
</body>
</html>

b. Vòng lặp do…while

Vòng lặp này giống như vòng lặp while, nhưng thay vì kiểm tra điều kiện vào lúc đầu của đoạn lệnh cần lặp, thì nó lại kiểm tra giá trị điều kiện vào cuối vòng lặp. Điều này có nghĩa là nó luôn luôn thực hiện đoạn lệnh cần lặp ít nhất một lần.

Cấu trúc của nó như sau:

do
{ Đoạn (khối) câu lệnh cần lặp
} while (điều kiện);

Ví dụ:
<HTML>
<TABLE>
<BODY>
<?php
$i=1;
do
{
?>
<TR><TD> <INPUT type=”text”> </TD></TR>
<?php
$i+=1;
}while ($i<=3);
?>
</table>
</body>
</html>

Để xác định lại sự khác nhau của 2 câu lệnh trên, đơn giản bạn chỉ việc thay điều kiện $i<=3 thành $i<1, bạn sẽ thấy hai kết quả khác nhau liền . Phần này dành cho bạn tự ngồi nghĩ. OK???

Quên mất, lúc nãy tôi đề cập đến lệnh break, nhưng chưa cho ví dụ, bây giờ chúng ta hãy xem xét ví dụ sau:

Các bạn biết rằng giai thừa là một con số lớn kinh khủng, và chương trình của chúng ta sẽ tính toán n giai thừa, với số n được gửi đến theo địa chỉ url: http://dia_chi_trang_web_cua_ban/giaithua.php?n=xx (ở đó x là một số do người dùng tự nhập)

Do giai thừa là một con số cực kỳ lớn, nên chúng ta chỉ cho phép người dùng tính đến tối đa là 8 giai thừa chẳng hạn. Nếu họ nhập lớn hơn 8 thì sao? Hãy xem đây:

<HTML>
<?php
// Ghi lai voi ten file la giaithua.php
$giaithua=1;
$i=1;
while ( $i<=$n)
{
$giaithua*=$i;
$i+=1;
if ($i>8 )
{
echo (“Chi tinh den 8! <BR>”);
break;
}
}
echo (“Ket qua la: “.$giaithua);
?>
</HTML>

Đoạn mã trên chỉ cho phép tính đến 8 giai thừa, nếu người dùng nhập một con số lớn hơn 8 thì máy sẽ hiển thị 8 giai thừa, còn nếu nhỏ hơn thì vẫn chạy tốt.

c) Vòng lặp for.

Vòng lặp for, với ý nghĩa đầu tiên là lặp với số lần định trước, có cấu trúc như sau:

for ( $biến = giá_trị_đầu; $biến < (hay <=) giá_trị_kết_thúc; tăng_biến_đếm)
{
// Khối câu lệnh
}

Biểu thức $biến=giá_trị_đầu, đảm bảo biến được gán một giá trị khởi đầu (1)
Biểu thức $biến< (hay <=) giá_trị_kết_thúc, sẽ xác định xem biến đã đạt đến giá trị kết thúc (tức là điều kiện lặp không còn đúng nữa) chưa (2)
Biểu thức tính toán tăng_biến_đếm đảm bảo để sau một số lần lặp nào đó thì biểu thức xác định điều kiện (2) sẽ dẫn đến kết quả sai (để thoát khỏi vòng lặp).

Ví dụ:
for ( $i = 1; $i <10; ++$i)
{
echo (“Giá trị của biến \$i là: “.$i);
}

Một biến dạng khác của vòng lặp for, gần giống như lệnh rẽ nhánh if và while:

for (bieu_thuc_1; bieu_thuc_2; bieu_thuc_3):
// Khối câu lệnh
endfor;

Ví dụ:

<?php
for ($i=1; $i<=10;++$i)

?>
<TR><TD> <INPUT type=”text”> </TD></TR>
<?php
endfor
?>

OK, Như vậy các bạn đã học qua các lệnh cơ bản nhất của php, và cũng là các lệnh cơ bản của tất cả các ngôn ngữ lập trình (gán, rẽ nhánh và lặp). Sau này nếu phải triển khai trên các ngôn ngữ lập trình khác, cách viết các lệnh này có thể khác nhau, nhưng bản chất của chúng thì mãi mãi không bao giờ thay đổi.

Đăng trong Học PHP | Tagged: , | Leave a Comment »

Tạo code đếm ngược thời gian bằng PHP

Posted by thietkewebsitegiare on 15/05/2009

Code đếm ngược thời gian trong PHP (Date countdown code in php)

<?

function countdown($event,$month,$day,$year) {
// subtract desired date from current date and give an answer in terms of days
$remain = ceil((mktime(0,0,0,$month,$day,$year) – time()) / 86400);
// show the number of days left
if ($remain > 0) {
print “<p><strong>$remain</strong> more sleeps until $event</p>”;
}
// if the event has arrived, say so!
else {
print “<p>$event has arrived!</p>”;
}
}

// call the function
countdown(“Christmas Day”, 12, 25, 2009);
?>

Chúc bạn thành công – www.ticsoft.com (Nguồn: sưu tầm)

Đăng trong Học PHP | Tagged: , , , | Leave a Comment »

Đếm số người đang online bằng PHP

Posted by thietkewebsitegiare on 15/05/2009

Bài này sẽ hướng dẫn các bạn cách đếm số người online trên website của bạn từ những IP khác nhau. ( Chỉ những IP khác nhau thì số người online mới tăng lên).

CODE như sau :

#function Online counter
function counter()
{
$rip = $_SERVER['REMOTE_ADDR'];
$sd = time();
$count = 1;
$maxu = 1;

$file1 = “ip.txt”;
$lines = file($file1);
$line2 = “”;

foreach ($lines as $line_num => $line)
{
if($line_num == 0)
{
$maxu = $line;
}
else
{
//echo $line.”<br>”;
$fp = strpos($line,’****’);
$nam = substr($line,0,$fp);
$sp = strpos($line,’++++’);
$val = substr($line,$fp+4,$sp-($fp+4));
$diff = $sd-$val;

if($diff < 300 && $nam != $rip)
{
$count = $count+1;
$line2 = $line2.$line;
//echo $line2;
}
}
}

$my = $rip.”****”.$sd.”++++\n”;
if($count > $maxu)
$maxu = $count;

$open1 = fopen($file1, “w”);
fwrite($open1,”$maxu\n”);
fwrite($open1,”$line2″);
fwrite($open1,”$my”);
fclose($open1);
//tang count va maxu len cho nhieu
$count=$count+5;
$maxu=$maxu+107;

return $count; ( 1 )
}

Giải thích:

Hàm trả về số người đang online nếu bạn để return $count Nếu không để return $count thì khi gọi hàm sẽ lấy được hai giá trị: $maxu ( Số người truy cập nhiều nhất cùng lúc) và $count ( Số người đang online).

Ở trên mình cho $count=$count +5 và $maxu=$maxu+107 tức là lúc nào cũng có tối thiểu 5 người đang online và lúc nhiều nhất là 107 người.Cái này bạn có thể thay đổi tùy ý.

Chúc bạn thành công – www.ticsoft.com (Nguồn: sưu tầm)

Đăng trong Học PHP | Tagged: , , | Leave a Comment »

Hướng dẫn gửi email text, HTML và tiếng Việt Unicode với PHP

Posted by thietkewebsitegiare on 15/05/2009

Send email trong PHP rất đơn giản, ta chỉ cần dùng duy nhất 1 hàm mail() được PHP cung cấp sẵn là đủ. Cú pháp của hàm mail() như sau:

HÀM MAIL() CỦA PHP

Send email trong PHP rất đơn giản, ta chỉ cần dùng duy nhất 1 hàm mail() được PHP cung cấp sẵn là đủ. Cú pháp của hàm mail() như sau:

bool mail(string to, string subject, string message[, string additional_headers])

Các tham số của hàm mail() có ý nghĩa như sau:

* to – địa chỉ người nhận email, là 1 string. Các giá trị hợp lệ của tham số to có dạng như sau:
‘user@domain.com’
‘user1@domain.com, user2@domain.com’
‘User Name <user@example.com>’
‘User Name 1 <user1@example.com>, User Name 2 <user2@example.com>’
‘User Name 1 <user@example.com>, user2@domain.com, User Name 3 <user3@example.com>’
* subject – tiêu đề của email, là 1 string. Tiêu đề của email không được chứa ký tự xuống dòng (\r hoặc \n).
* message – nội dung email, là 1 string. Nội dung email có thể do nhiều dòng ghép lại với nhau, mỗi dòng được phân cách bằng ký tự \n.
* additional_headers – (tuỳ chọn) dùng để chèn thêm các header vào email. Các header này không nằm trong phần nội dung của email mà dùng để quản lý việc gởi email (ví dụ chèn thêm các trường CC, BCC khi gởi email). Nhiều header có thể cùng ghép lại thành 1 string trong additional_headers, các header được phân cách nhau bằng chuỗi \r\n.

Hàm mail() sẽ trả về giá trị TRUE nếu như email được chấp nhận gởi đi và FALSE trong trường hợp ngược lại.

Lưu ý: Hàm mail() trả về giá trị TRUE không có nghĩa là email sẽ được gởi đến nơi nhận thành công. Giá trị TRUE được trả về chỉ có ý nghĩa là email được server chấp nhận gởi đi, còn khi nào thì email thực sự được gởi, gởi có tới nơi hay không thì chương trình không biết được (như vậy nếu bạn nhập sau địa chỉ người nhận ở tham số To thì sẽ không có cách nào chương trình biết được địa chỉ To có đúng hoặc tồn tại hay không!).

MỘT VÍ DỤ GỞI EMAIL VỚI HÀM MAIL()

Ta hãy tạo 1 chương trình PHP nhỏ đẻ gởi email như sau:

//nội dung file example1.php
<?php
$from = ‘from@domain.com’;
$to = ‘to@domain.com’;
$subject = ‘Example 1: Send simple text email’;
$message = ‘A plain text email.’;
$header = “From: $from\r\nReply-to: $from”;

if ( mail($to, $subject, $message, $header) ) {
echo “Email sent to $to!”;
} else {
echo “Error occured while sending email to $to!”;
} //end if
?>

Lưu chương trình vào file example1.php và chạy thử. Nếu quá trình gởi email thành công, bạn sẽ nhận được câu thông báo “Email sent to to@domain.com!”, nếu có lỗi bạn sẽ nhận được câu thông báo “Error occured while sending email to to@domain.com!”

Lưu ý:

* Nhớ thay to@domain.com và from@domain.com thành địa chỉ email của bạn trước khi chạy thử chương trình!
* Có thể phải mất tới 5-10 phút email mới tới nơi, và bạn nhớ kiểm tra thư mục Bulk email vì nhiều khi email gởi tới bị để trong mục Bulk.

Trong cú pháp của hàm mail(), tham số additional_headers là tuỳ chọn, tức là bỏ qua cũng được. Tuy nhiên, trên thực tế bạn nên cung cấp tham số additional_headers cho hàm mail() với ít nhất 2 header From và Reply-to. Lý do thì có nhiều, một trong số các lý do phải cung cấp header From và Reply-to là vì nếu phần địa chỉ người gởi (From) là rỗng, các chương trình lọc email có thể cho rằng đây là emai spam và thế là email được tự động chuyển sang “Thùng rác”!.

GỞI HTML EMAIL VỚI HÀM MAIL()

Chúng ta đã gởi được email text với hàm mail(), nhưng nhiều lúc ta cần “trang điểm” màu mè cho nội dung email được bắt mắt hơn. Thử viết 1 chương trình nhỏ gởi email HTML:

//nội dung file example2.php
<?php
$from = ‘from@domain.com’;
$to = ‘to@domain.com’;
$subject = ‘Example 2: Try a simple HTML email’;
$message = ‘A HTML email: <b>bold</b>, <i>italic</i>, <u>underline</u>.’;
$header = “From: $from\r\nReply-to: $from”;

if ( mail($to, $subject, $message, $header) ) {
echo “Email sent to $to!”;
} else {
echo “Error occured while sending email to $to!”;
} //end if
?>

Lưu chương trình vào file example2.php và chạy thử. Email gởi thành công, tới nơi an toàn, nhưng khi mở ra xem thì nội dung email lại như vầy:
A HTML email: <b>bold</b>, <i>italic</i>, <u>underline</u>.
Thế có tức không?

Thực ra bạn chỉ cần sửa lại chương trình “1 chút xíu” là đâu vào đấy ngay:

//nội dung file example3.php
<?php
$from = ‘from@domain.com’;
$to = ‘to@domain.com’;
$subject = ‘Example 3: Send HTML email’;
$message = ‘A HTML email: <b>bold</b>, <i>italic</i>, <u>underline</u>.’;
$header = “Content-type: text/html\r\nFrom: $from\r\nReply-to: $from”;

if ( mail($to, $subject, $message, $header) ) {
echo “Email sent to $to!”;
} else {
echo “Error occured while sending email to $to!”;
} //end if
?>

Lưu chương trình vào file example3.php và chạy thử. Lần này thì nội dung email nhận được như mong muốn:
A HTML email: bold, italic, underline..

Như vậy bạn sẽ nhận thấy rằng gởi HTML email cũng đơn giản không khác gì gởi text email thông thường. Chỉ cần thêm 1 header Content-type: text/html là nội dung email sẽ được hiểu là HTML ngay.

Lưu ý: Riêng phần tiêu đề (subject) của email vẫn phải là text thông thường! Bạn không thể sử dụng mã HTML trong phần tiêu đề (subject) của email được. Vì thực chất phần tiêu đề của email cũng là 1 header đặt biệc chứ không nằm trong phần nội dung chính của email.

GỞI EMAIL VỚI TIẾNG VIỆT UNICODE

Gởi email tiếng Việt Unicode cũng y chang như gởi email HTML vì bản thân HTML đã hỗ trợ Unicode rồi, ta chỉ cần chú ý đặt charset của email cho đúng là được:

//nội dung file example3.php
<?php
$from = ‘from@domain.com’;
$to = ‘to@domain.com’;
$subject = ‘Example 4: Send Unicode email’;
$message = ‘Email tiếng Việt Unicode: <b>in đậm</b>, <i>in nghiêng</i>, <u>gạch chân</u>.’;
$header = “Content-type: text/html; charset=utf-8\r\nFrom: $from\r\nReply-to: $from”;

if ( mail($to, $subject, $message, $header) ) {
echo “Email sent to $to!”;
} else {
echo “Error occured while sending email to $to!”;
} //end if
?>

Lưu chương trình vào file example4.php và chạy thử: email gởi thành công, tới nơi an toàn và khi đọc thì hiển thị…tiếng Ả-rập!!! Có gì sai ở đây chăng?

Thực ra không có gì phải lo lắng cả. Khi gởi email tiếng Việt Unicode bạn cần chú ý một số điểm sau:

* Đặt charset cho email. Charset này phải nên trùng với charset của file mã nguồn PHP và website của bạn. Trong ví dụ ở trên, ta đặt charset cho email là utf-8 thì bạn cũng phải lưu file example4.php lên đĩa với charset là utf-8. Bạn xem mục “LƯU FILE VỚI TIẾNG VIỆT UNICODE” ở bài viết Giới thiệu – Các bước chuẩn bị cần thiết để tìm hiểu thêm về lưu file mã nguồn PHP lên đĩa với charset utf-8.
* Cho dù bạn đã đặt charset đúng rồi, vẫn có thể email không hiển thị đúng tiếng Việt khi đọc! Vì quyền hiển thị email như thế nào là do chương trình email client quyết định. Nếu bạn đọc email bằng Outlook chẳng hạn, thì Outlook sẽ tự động nhận biết charset của email và hiển thị đúng tiếng Việt. Nếu bạn đọc email trên web (như Yahoo, Hotmail…) thì có thể bạn phải tự tay chọn lại Encoding là utf-8 trên trình duyệt vì các web email như Yahoo, Hotmail sẽ dùng charset mặc định của mình và bỏ qua charset được thiết lập trong email.

Và tương tự như khi gởi HTML email, bạn đừng nên ghi tiếng Việt vào phần tiêu đề (subject) của email! Vì như đã nói ở phần trước, tiêu đề (subject) của email cũng là 1 header đặt biệc chứ không nằm trong phần nội dung chính của email.

MỘT SỐ LỖI HAY GẶP VỚI HÀM MAIL()

Email gởi không tới nơi
Hàm mail() trả về giá trị TRUE, địa chỉ đúng, nội dung đúng, nói chung mọi thứ đều đúng nhưng email chờ hoài không thấy tới! Kiểm tra Bulk email cũng không thấy luôn! Lỗi ở đâu hè? Nguyên nhân có thể xảy ra ở 3 chỗ:

* mail server – server của bạn không cho phép account của bạn gởi email, hoặc giới hạn chỉ cho phép gởi số lượng giới hạn email trong 1 khoảng thời gian nào đó. Bạn cần hỏi người quản lý server của bạn về quyền gởi email với PHP trên server.
Nếu vấn đề không phải nằm ở chỗ server không cho phép bạn gởi email, hoặc chính bạn là người quản lý server thì bạn kiểm tra tiếp 1 trong 2 nguyên nhân sau:
* *NIX server (server chạy các hệ điều hành UNIX hoặc Linux) – PHP mặc định sẽ sử dụng lệnh sendmail có sẵn trên hệ thống để gởi email (với tham số -t -i). Mặc định lệnh sendmail sẽ nằm trong /usr/sbin/sendmail hoặc trong 1 thư mục nào đó trong PATH của hệ thống. Nếu trên server của bạn lệnh sendmail nằm ở chỗ khác với thư mục mặc định (ví dụ trên server của bạn sendmail nằm ở /usr/local/secretbin/sendmail) thì bạn có thể làm như sau:
- Tìm và mở file php.ini ra.
- Tìm chuỗi “sendmail”, bạn sẽ thấy 2 dòng tương tự như sau:
; For Unix only. You may supply arguments as well (default: “sendmail -t -i”).
;sendmail_path =
- Bạn sửa lại 2 dòng đó như sau:
; For Unix only. You may supply arguments as well (default: “sendmail -t -i”).
sendmail_path = /usr/local/secretbin/sendmail -t -i
Nhớ bỏ ký tự chấm phảy ( ở đầu dòng sendmail_path =!
Lưu ý: Cấu hình của PHP tới đây đã đúng và đủ để gởi email trên server *NIX. Tuy nhiên vẫn có thể server không gởi email được! Lỗi lúc này là do bản thân cấu hình của server hoặc quá trình cài đặt và cấu hình chương trình sendmail bị lỗi. Cách kiểm tra nguyên nhân và sửa lỗi nằm ngoài phạm vi của PHP, bạn có thể đặt câu hỏi lên diễn đàn CLB người sử dụng Linux để được giúp đỡ!
* Windows server – Trên Windows, PHP cần phải dùng 1 SMTP server để gởi email. Bạn tìm và mở file php.ini ra, tìm chuỗi sendmail, gần đó bạn sẽ thấy vài dòng như sau:
[mail function]
; For Win32 only.
SMTP = localhost
smtp_port = 25;
Các dòng trên cho ta biết PHP sẽ dùng SMTP server localhost trên port 25 để gởi email. Rất có thể bạn chưa cài đặt và cấu hình đúng 1 SMTP trên localhost để PHP có thể sử dụng và gởi email. Bạn hãy tham khảo bài viết này để cài đặt 1 SMTP server trên localhost và dùng nó để gởi email với PHP.

Nội dung email bị đứt đoạn: Nếu bạn nhận được email nhưng nội dung bị đứt đoạn không đầy đủ thì có thể do 2 nguyên nhân sau:

* Mã HTML trong email bị sai – Nếu bạn gởi email HTML thì bạn nên chú ý kiểm tra cú pháp HTML của nội dung email. Giả sử bạn định gởi email với nội dung:
<b>in đậm</b>
Nhưng chẳng may bạn ghi sai thành <b in đậm</b>
thì khi đọc, email sẽ hiển thị bị sai (có thể là mất chữ, đứt đoạn, v.v…).
* Có 1 dòng chứa 1 dấu chấm (.) ở đầu – Khi bạn gởi email trên Windows dùng SMTP server, nếu nội dung email có 1 dòng nào đó chứa 1 dấu chấm (ký tự .) ở đầu dòng thì ký tự đó sẽ bị bỏ qua, dòng đó sẽ bị bỏ qua, hoặc toàn bộ nội dung email từ dòng đó trở đi sẽ bị bỏ qua. Lý do là vì dòng chứa 1 dấu chấm ở đầu chính là dấu hiệu báo cho SMTP server biết đã kết thúc nội dung của email. Để khắc phục, trước khi gởi email, ta thay thế dấu chấm ở đầu dòng bằng 2 dấu chấm:
$message = str_replace(“\n.”, “\n..”, $message);

Chúc bạn thành công – www.ticsoft.com (Nguồn: sưu tầm)

Đăng trong Học PHP | Tagged: , , , , | Leave a Comment »

Hướng dẫn làm trang liên hệ – contact bằng PHP

Posted by thietkewebsitegiare on 15/05/2009

Bạn làm một File: contact.php với nội dung như sau:

CODE
<form action=”addmail.inc.php” method=”post”>
<table>
<tr>
<td>Ho & Ten&nbsp;:&nbsp;</td>
<td><input name=”name” type=”text” /></td>
<td>&nbsp;*</td>
</tr>
<tr>
<td>Email&nbsp;:&nbsp;</td>
<td><input name=”email” type=”text” value=”Nhap Mail cua ban” /></td>
<td>&nbsp;*</td>
</tr>
<tr>
<td>Message&nbsp;:&nbsp;</td>
<td><textarea cols=”20″ name=”message” rows=”5″><?php print(“Ban nhap noi dung tai day\n\n”); /* your name */ ?></textarea></td>
<td>&nbsp;*</td>
</tr>
<tr>
<td></td>
<td><input type=”submit” value=”Send” /><input type=”reset” value=”Reset” /></td>
<td></td>
</tr>
<tr>
<td colspan=”3″>&nbsp;</td>
</tr>
<tr>
<td colspan=”3″>Ban phai dien day du cac muc*</td>
</tr>
</table>
</form>

Và một File addmail.inc.php với nội dung sau:
CODE
<?php
$email = $_POST["email"];
$headers = “From: ” . $_POST["email"];
$ip = $_SERVER["REMOTE_ADDR"];
$host = gethostbyaddr($ip);
$message = $_POST["message"];
$name = $_POST["name"];
$subject = “Mail from BanmeOnline.org”; // your webpage
$time = date(“l d F Y @ H:i”);
$to = “nhat@banmeonline.org”; // your email
$message2 = “Email: ” . $email . “\nHost: ” . $host . “\nIP: ” . $ip . “\nMessage: ” . $message . “\nName: ” . $name . “\nTime: ” . $time;

if ($email && $message && $name) {
if (mail($to, $subject, $message2, $headers)) {
print(“Mail cua ban da duoc gui”);
}

else {
print(“The server encountered an unexpected condition which prevented it from fulfilling the request.”);
}
}

else {
print(“Xin ban hay dien day du cac muc co dau *”);
}
?>

//>>

Bạn nên nhớ sửa lại các info cho phù hợp.

Chúc bạn thành công – www.ticsoft.com (Nguồn: sưu tầm)

Đăng trong Học PHP | Tagged: , , , | Leave a Comment »

 
Follow

Get every new post delivered to your Inbox.