25 thg 3, 2009

Sử dụng CSDL MySQL

GIỚI THIỆU

CSDL là 1 phần quan trọng không thể thể thiếu được trong các ứng dụng web chuyên nghiệp. MySQL từ lâu đã là hệ CSDL được dùng phổ biến nhất với PHP vì tính gọn nhẹ, nhanh, miễn phí và được PHP hỗ trợ sẵn. Trong bài viết này chúng ta sẽ tìm hiểu cách kết nối vào CSDL MySQL, truy cập và lưu trữ dữ liệu với PHP.

Để thực hành các ví dụ trong bài viết này, bạn cần phải cài MySQL vào máy của bạn. Bạn có thể tham khảo bài viết cài đặt MySQL Server 4.1 trên Windows ở địa chỉ này: http://www.diendantinhoc.net/?cat=database_mysql&article=41cca76d6c. Xem như bạn đã cài đặt MySQL lên cùng server với PHP và account để kết nối vào MySQL Server có username là root và mật mã (password) là rỗng.

Ngoài ra, bài viết này giới thiệu về cách làm việc với CSDL MySQL trong PHP, cho nên xem như là bạn đã có một số kiến thức căn bản về MySQL và ngôn ngữ SQL. Bạn có thể tham khảo bài viết Tự học về ngôn ngữ SQL ở địa chỉ này: http://www.diendantinhoc.net/tute/sql/tuhocsql/.

KẾT NỐI VÀO MYSQL SERVER

PHP cung cấp hàm mysql_connect để kết nối vèo MySQL server. Cú pháp của hàm này như sau:

mysql_connect($server_address, $username, $password)
$server_address là địa chỉ của MySQL server, có thể là domain name hoặc IP address, các ví dụ trong bài viết này sẽ dùng giá trị "localhost" cho $server_address.
$username là tên account dùng để login vào MySQL server, các ví dụ trong bài viết sẽ sử dụng giá trị "root" cho $username.
$password là mật mã để kết nối vào MySQL server, các ví dụ trong bài viết sẽ sử dụng chuỗi rỗng "" làm mật mã.
Hàm mysql_connect sẽ trả về 1 kết nối đến MySQL server nếu như quá trình kết nối thành công, hoặc trả về giá trị FALSE nếu như kết nối không được.

Để đóng kết nối tới MySQL server, PHP cung cấp hàm mysql_close. Đoạn mã sau ví dụ quá trình kết nối vào MySQL server và đóng kết nối.


$SERVER = "localhost";
$USERNAME = "root";
$PASSWORD = "";

$conn = mysql_connect($SERVER, $USERNAME, $PASSWORD);
if ( !$conn ) {
//Không kết nối được, thoát ra và báo lỗi
die("không nết nối được vào MySQL server");
} //end if

//đóng kết nối
mysql_close($conn);
?>

CHỌN CSDL ĐỂ LÀM VIỆC

Sau khi connet vào MySQL server, thao tác tiếp theo là chọn CSDL để làm việc. PHP cung cấp cho ta hàm mysql_select_db để làm việc này. Cú pháp của hàm này như sau:

mysql_select_db($db_name[, $conn])
Với $db_name là tên CSDL cần chọn, $conn là kết nối được thực hiện qua lệnh mysql_connect. Các ví dụ trong bài viết này sẽ sử dụng CSDL có tên là test:

$SERVER = "localhost";
$USERNAME = "root";
$PASSWORD = "";
$DBNAME = "test";

$conn = mysql_connect($SERVER, $USERNAME, $PASSWORD);
if ( !$conn ) {
//Không kết nối được, thoát ra và báo lỗi
die("không nết nối được vào MySQL server");
} //end if

//chọn CSDL để làm việc
mysql_select_db($DBNAME, $conn);

//đóng kết nối
mysql_close($conn);
?>

THỰC THI 1 CÂU LỆNH SELECT VÀ LẤY KẾT QUẢ TRẢ VỀ

PHP cung cấp cho ta 3 hàm hữu dụng để thực hiện công việc này:

  • $result = mysql_query($sql, $conn): thực hiện câu lệnh SQL được cung cấp qua tham số $sql và trả về 1 kết quả kiểu $result (hàm này trả về FALSE nếu như câu lệnh thực hiện không thành công).
  • mysql_num_rows($result): hàm này trả về số lượng row lấy được qua câu lệnh SELECT (được thực thi bởi hàm mysql_query) trước đó.
  • $row = mysql_fetch_row($result), $row = mysql_fetch_assoc($result): trả về dòng kết quả hiện thời của câu lệnh select và chuyển con trỏ tới dòng tiếp theo (như vậy lệnh gọi mysql_fetch_row hoặc mysql_fetch_assoc tiếp đó sẽ trả về dòng tiếp theo); hoặc giá trị FALSE nếu như không còn dòng nào để trả về nữa. Kết quả trả về từ 2 hàm này là 1 array.
  • mysql_error($conn): trả về thông báo lỗi của MySQL server nếu như một lệnh trước đó có lỗi.
Để hiểu rõ hơn công dụng của các hàm trên, đồng thời phân biệt sự khác nhau giữa 2 hàm mysql_fetch_row và mysql_fetch_assoc, ta cung xem xét các ví dụ sau.

Các ví dụ của ta sẽ sử dụng table có tên là member với các trường và dữ liệu như sau:

username password
abc 123
def 456

Ví dụ 1: dùng mysql_fetch_row()


$SERVER = "localhost";
$USERNAME = "root";
$PASSWORD = "";
$DBNAME = "test";

$conn = mysql_connect($SERVER, $USERNAME, $PASSWORD);
if ( !$conn ) {
//Không kết nối được, thoát ra và báo lỗi
die("không nết nối được vào MySQL server: ".mysql_error($conn));
} //end if

//chọn CSDL để làm việc
mysql_select_db($DBNAME, $conn)
or die("Không thể chọn được CSDL: ".mysql_error($conn));

$sql = "SELECT * FROM member";
$result = mysql_query($sql, $conn);
if ( !$result )
die("Không thể thực hiện được câu lệnh SQL: ".mysql_error($conn));

echo "Số lượng row tìm được: ".mysql_num_rows($result)."
\n"
;

while ( $row = mysql_fetch_row($result) ) {
echo "Username = ".$row[0]."
\n"
;
echo "Password = ".$row[1]."
\n"
;
} //end while
//nên luôn giải phóng bộ nhớ sau khi lấy hết các row trả về từ câu lệnh SELECT
mysql_free_result($result);

//đóng kết nối
mysql_close($conn);

?>
Hàm mysql_fetch_row() sẽ trả về 1 array mà phần tử thứ [0] sẽ tương ứng với cột đầu tiên của table, phần tử thứ [1] sẽ tương ứng với cột thứ hai của table...Chương trình trên sẽ in ra ra 4 dòng:
Username = abc
Password = 123
Username = def
Password = 456

Ví dụ 2: dùng mysql_fetch_assoc()


$SERVER = "localhost";
$USERNAME = "root";
$PASSWORD = "";
$DBNAME = "test";

$conn = mysql_connect($SERVER, $USERNAME, $PASSWORD);
if ( !$conn ) {
//Không kết nối được, thoát ra và báo lỗi
die("không nết nối được vào MySQL server: ".mysql_error($conn));
} //end if

//chọn CSDL để làm việc
mysql_select_db($DBNAME, $conn)
or die("Không thể chọn được CSDL: ".mysql_error($conn));

$sql = "SELECT * FROM member";
$result = mysql_query($sql, $conn);
if ( !$result )
die("Không thể thực hiện được câu lệnh SQL: ".mysql_error($conn));

echo "Số lượng row tìm được: ".mysql_num_rows($result)."
\n"
;

while ( $row = mysql_fetch_assoc($result) ) {
echo "Username = ".$row['username']."
\n"
;
echo "Password = ".$row['password']."
\n"
;
} //end while
//nên luôn giải phóng bộ nhớ sau khi lấy hết các row trả về từ câu lệnh SELECT
mysql_free_result($result);

//đóng kết nối
mysql_close($conn);

?>
Hàm mysql_fetch_assoc() sẽ trả về 1 array mà các phần tử sẽ được truy cập qua tên, với tên được lấy từ tên các cột của table. Chương trình ví dụ 2 cũng sẽ in ra ra 4 dòng:
Username = abc
Password = 123
Username = def
Password = 456

THỰC THI 1 CÂU LỆNH UPDATE, INSERT hoặc DELETE

Hàm mysql_query cũng được dùng để thực thi các câu lệnh DELETE, INSERT hoặc UPDATE, nhưng lúc này hàm sẽ trả về TRUE nếu câu lệnh thực hiện thành công và FALSE trong trường hợp ngược lại. Để lấy số lượng các row được chèn với lệnh INSERT hoặc bị thay đổi bởi lệnh UPDATE, PHP cung cấp cho ta hàm mysql_affected_rows. Ta hãy xem ví dụ sau:


$SERVER = "localhost";
$USERNAME = "root";
$PASSWORD = "";
$DBNAME = "test";

$conn = mysql_connect($SERVER, $USERNAME, $PASSWORD);
if ( !$conn ) {
//Không kết nối được, thoát ra và báo lỗi
die("không nết nối được vào MySQL server: ".mysql_error($conn));
} //end if

//chọn CSDL để làm việc
mysql_select_db($DBNAME, $conn)
or die("Không thể chọn được CSDL: ".mysql_error($conn));

$sql = "INSERT INTO member (username, password) VALUES ('xyz', '000')";
$result = mysql_query($sql, $conn); //chèn thêm 1 dòng vào table
if ( !$result )
die("Không thể thực hiện được câu lệnh SQL: ".mysql_error($conn));

echo "Số lượng row được chèn: ".mysql_affected_rows($conn)."
\n"
;
//ta chỉ chèn 1 dòng nên hàm mysql_affected_rows sẽ trả về 1

$sql = "UPDATE member SET password='111' WHERE username='xyz'";
$result = mysql_query($sql, $conn); //đổi password của accoutn xyz
if ( !$result )
die("Không thể thực hiện được câu lệnh SQL: ".mysql_error($conn));

echo "Số lượng row được thay đổi: ".mysql_affected_rows($conn)."
\n"
;
//ta thay đổi 1 dòng nên hàm mysql_affected_rows sẽ trả về 1

$sql = "DELETE FROM member";
$result = mysql_query($sql, $conn); //xoá hết tất cả các account
if ( !$result )
die("Không thể thực hiện được câu lệnh SQL: ".mysql_error($conn));

echo "Số lượng row được xoá: ".mysql_affected_rows($conn)."
\n"
;
//ta xoá tất cả 3 dòng nên hàm mysql_affected_rows sẽ trả về 3

//đóng kết nối
mysql_close($conn);
?>

LƯU Ý VẤN ĐỀ BẢO MẬT VỚI LỖI SQL INJECTION

Nếu bạn cần cung cấp 1 tham số cho câu lệnh SQL, nhất là các tham số từ trình duyệt do người dùng nhập vào, bạn hãy lưu ý đề phòng lỗi bảo mật SQL Injection. Giả sử bạn muốn thay đổi mật mã của account xyz, mật mã mới được người dùng nhập vào và lưu vào trong biến $newPwd, đoạn mã đổi password có thể tương tự như sau:


//...
$sql = "UPDATE member SET password='$newPwd' WHERE username='xyz'";
mysql_query($sql, $conn);
//...
?>

Giả sử người dùng nhập vào mật mã mới là zzz, câu lệnh SQL sẽ trở thành
UPDATE member SET password='zzz' WHERE username='xyz'
Hoàn toàn hợp lệ và đúng đắn, không có gì phải thắc mắc hết.

Nhưng giả sử người dùng nhập vào mật mã mới là zzz'#, câu lệnh SQL sẽ trở thành
UPDATE member SET password='zzz'#' WHERE username='xyz'
Nhưng gì phía sau ký tự # sẽ được MySQL xem là chú thích và sẽ bỏ qua, như vậy câu lệnh SQL của chúng ta trên thực tế sẽ tương đương với:
UPDATE member SET password='zzz'
Vậy là xong! Sau khi chạy câu lệnh này, password của tất cả các account đều là zzz hết, tất hiên là account admin cũng sẽ bị đổi password thành zzz và lúc này hậu quả tiếp theo ra sao chắc bạn cũng đã rõ!

Để tránh bị SQL injection, khi đưa các tham số vào câu lệnh SQL, bạn nên luôn nhớ và áp dụng 2 điều sau:

  • Nếu tham số là số (số nguyên hoặc số thực), cộng thêm 0 vào tham số trước khi đưa vào câu lệnh SQL. Tức là:
    $thamso+=0;
    $sql = "...$thamso...";
  • Nếu tham số là chuỗi, sử dụng hàm mysql_real_escape_string trước khi đưa tham số vào câu lệnh SQL. Tức là:
    $thamso = mysql_real_escape_string($thamso, $conn);
    $sql = "...'$thamso'...";

TRƯỚC KHI KẾT THÚC

Đến đây, bạn đã nắm được các bước cơ bản để làm việc với CSDL MySQL Server:
- Kết nối vào MySQL Server với server address, username và password
- Chọn CSDL để làm việc
- Thao tác với CSDL, Thực thi các lệnh SQL...
- Đóng kết nối khi kết thúc

Trong thực tế, đôi lúc chương trình của bạn cần thực hiện thêm nhiều thao tác nâng cao hơn thế, lúc này bạn đừng quên tham khảo MySQL Manual mục các hàm về MySQL.

CÁC HÀM PHP ĐƯỢC DÙNG TRONG VÍ DỤ

  • die: in ra câu thông báo và kết thúc chương trình.
  • mysql_connect: kết nối vào CSDL MySQL Server.
  • mysql_close: đóng kết nối đã được thiết lập trước đó.
  • mysql_error: lấy câu thông báo lỗi (nếu có) trả về từ MySQL Server.
  • mysql_fetch_row: lấy 1 row kết quả từ câu lệnh SELECT.
  • mysql_fetch_assoc: lấy 1 row kết quả từ câu lệnh SELECT.
  • mysql_free_result: giải phóng bộ nhớ sau khi lấy kết quả trả về từ câu lệnh SELECT.
  • mysql_query: thực thi 1 câu lệnh SQL.
  • mysql_select_db: chọn CSDL để làm việc.
  • mysql_real_escape_string: escale 1 chuỗi trước khi chèn vào câu lệnh SQL.
Sưu Tầm

Gởi email text, HTML và tiếng Việt Unicode

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 Name 1 , User Name 2 '
    'User Name 1 , user2@domain.com, User Name 3 '
  • 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

$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.comfrom@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 FromReply-to. Lý do thì có nhiều, một trong số các lý do phải cung cấp header FromReply-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

$from = 'from@domain.com';
$to = 'to@domain.com';
$subject = 'Example 2: Try a simple HTML email';
$message = 'A HTML email: bold, italic, underline.';
$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: bold, italic, underline.
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

$from = 'from@domain.com';
$to = 'to@domain.com';
$subject = 'Example 3: Send HTML email';
$message = 'A HTML email: bold, italic, underline.';
$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

$from = 'from@domain.com';
$to = 'to@domain.com';
$subject = 'Example 4: Send Unicode email';
$message = 'Email tiếng Việt Unicode: in đậm, in nghiêng, gạch chân.';
$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:
    in đậm
    Nhưng chẳng may bạn ghi sai thành
    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);
Sưu Tầm

24 thg 3, 2009

12 Lỗi win thông dụng

Cho dù có muốn hay không muốn thì các lỗi máy tính vẫn xuất hiện và cản trở công việc của bạn.

Một số lỗi không nghiêm trọng và không ảnh hýởng nhiều tới quá trình sử dụng; nhýng cũng có rất nhiều lỗi "khó chịu" và trong nhiều trýờng hợp chúng làm hệ ðiều hành bị trục trặc, không thể sử dụng ðýợc nữa. Nắm ðýợc các lỗi này và biết cách khắc phục chúng là các kiến thức và ngýời dùng máy tính nên có.

1. "Lỗi không xác định"

Ðây là loại thông báo về các lỗi kỹ thuật và thýờng kèm sau ðó là các hýớng dẫn khá hữu ích ðể bạn có thể sửa chữa chúng. Lỗi này không ðòi hỏi bạn phải tiến hành các tác vụ chuẩn ðoán mà lỗi ðõn thuần chỉ là một dạng ðánh giá tình trạng máy tính ở thời ðiểm ðó. Lỗi không xác ðịnh phát sinh từ những vấn ðề phổ biến, trong ðó có cả việc nâng cấp DirectX thất bại cho Microsoft Producer và một lỗi phổ biến trong SQL Server 7.0 của Microsoft.

Giải pháp tốt nhất ðể xử lý lỗi này là ðóng tất cả những ứng dụng ðang mở và khởi ðộng lại máy. Nếu lỗi vẫn tiếp tục xảy ra, tải và cài ðặt bản nâng cấp mới nhất cho chýõng trình liên quan. Bạn cũng nên chạy một ứng dụng diệt phân mềm gián ðiệp (spyware), chẳng hạn nhý Ad-ware...

2. "The system is either busy or has become unstable. You can wait and see if it becomes available again, or you can restart your computer. Press any key to return to windows and wait. Press CTRL + ALT + DEL again to restart your computer. You will lose unsaved information in any programs that are running. Press any key to continue."

- "Hệ thống ðang bận hoặc không ổn ðịnh. Bạn có thể chờ ðợi hoặc khởi ðộng lại máy tính. Nhấn bất cứ phím nào ðể quay trở lại môi trýờng Windows và chờ trong giây lát. Nhấn CTRL + ALT + DEL một lần nữa ðể khởi ðộng máy tính. Bạn sẽ mất những thông tin chýa lýu lại trong bất cứ chýõng trình nào ðang chạy. Nhấn bất cứ phím nào ðể tiếp tục."

Ðôi khi Windows bị "ðõ" và không phải ứng với bất cứ tác vụ nào mà bạn thực hiện. Trong những trýờng hợp ðó, việc nhấn tổ hợp phím CTRL-ALT-DELETE có thể làm hiển thị thông báo trên trên nền màn hình xanh (còn ðýợc ví là "Màn hình của sự chết chóc" - Blue Screen Death"). Những thông báo này không giúp ích gì nhiều trong việc sửa chữa lỗi, và cũng không ðýa ra lý do tại sao mà hệ thống lại trở nên nhý vậy. Cách giải quyết tốt nhất là bạn nhấn tổ hợp phím CTRL-ALT-DELETE ðể khởi ðộng lại.

Thông ðiệp lỗi này thýờng phát sinh từ những sai sót trong quá trình truy cập bộ nhớ. Bạn hãy ghi nhớ những hoàn cảnh nào làm phát sinh lỗi này; những thông tin về kết quả sẽ có thể giúp bạn xác ðịnh nguyên nhân. Bạn cũng có thể giải quyết tình trạng này bằng cách cài ðặt lại những ứng dụng có vấn ðề; tải bản nâng cấp liên quan; tháo gỡ những chýõng trình không cần thiết; vô hiệu hoá screen saver, và nâng cấp driver. Nếu sự cố vẫn cứ tiếp diễn, bạn nên nghĩ tới giải pháp cài ðặt lại hệ ðiều hành Windows và tiến hành sao lýu dữ liệu ðể chuẩn bị.

3. "This programs has performed an illegal operation and will be shutdown. If the problem persists, contact the program vendor".

Lỗi "illegal operation" (sử dụng bất hợp pháp) không liên quan tới việc bạn truy nhập Internet, tải file, hoặc cách thức sử dụng PC, mà thực tế ðó chỉ là cách phản ánh những hành vi chýõng trình không hợp lệ, thýờng là những cố gắng thực thi một dòng mã không hợp lệ, hoặc truy nhập và một phần bộ nhớ ðã bị hạn chế. Bạn cũng ðừng cố gắng tìm kiếm thông tin từ bảng thông báo này, nó chỉ gồm những "module" khó hiểu và hoàn toàn không dành cho những ngýời không là chuyên viên lập trình.

Giải quyết vấn ðề này bằng cách ðóng tất cả những ứng dụng ðang mở và khởi ðộng lại máy tính. Nếu bạn tiếp tục nhìn thấy thông báo lỗi týõng tự, hãy sử dụng trình "clean boot troubleshooting" ðể xác ðịnh chýõng trình gây lỗi và tháo cài ðặt chúng. Ðể thực hiện quá trình "khởi ðộng sạch", từ Start, chọn Run, rồi gõ dòng lệnh "msconfig", nhấn OK. Từ trình System Configuration Utility, chọn Selective Startup và bỏ lựa chọn tất cả những hộp ðánh dâu trong danh sách thả xuống. Nhấn OK và khởi ðộng lại máy. Bạn lặp lại quá trình này, mỗi lần chọn một ô ðánh dấu khác nhau dýới phần Selective Start-up cho tới khi xác ðịnh ðýợc hộp "checkbox" nào gây ra lỗi.

Býớc tiếp theo là chọn một thẻ (tab) trong "System Configuration Utility" liên quan tới hộp "checkbox" có vấn ðề, và bỏ lựa chọn tất cả (ngoại trừ dòng lệnh trong tab). Khởi ðộng lại máy tính, và nếu trong quá trình khởi ðộng không có vấn ðề gì phát sinh, bạn hãy quay trở lại phần "System Configuration Utility" ðể chọn một dòng lệnh khác. Lặp lại quá trình này cho tới khi bạn cô lập ðýợc dòng lệnh gây ra sự cố; bạn cũng cần liên lạc với các nhà phát triển phần mềm liên quan hoặc nhà sản xuất phần cứng ðể tìm sự hỗ trợ cụ thể.

4. Lỗi "Runtime error <###>"

Lỗi Runtime ðể mô tả một chýõng trình không ðýợc nhận dạng có những dòng lệnh bị phá huỷ hoặc bị trục trặc. Thông báo cũng này cũng có thể kèm theo một dòng lệnh lỗi, chẳng hạn nhý "424" hoặc "216", hay ðôi khi là những thông tin "mù mờ" về một ðối týợng cần thiết nào ðó (required object). Những thông báo kiểu này thýờng không cung cấp thông tin hữu ích nào về nguyên nhân xảy ra sự cố cũng nhý cách thức giải quyết. Liệu lỗi có phải do virus, không ðủ bộ nhớ, hoặc chýõng trình không thýõng thích ? Chẳng ai biết rõ ðýợc ðiều này!

Khi lỗi runtime xảy ra, bạn không khởi ðộng lại máy tính vì nếu làm nhý thế, có thể virus lại gây ra hiện týợng lỗi týõng tự, hoặc vô tình kích hoạt ðoạn mã nguy hiểm của virus. Thay vào ðó, bạn cần quét virus ngay lập tức, tiếp theo hãy liên lạc với nhà phát triển phần mềm ðã gây ra lỗi runtime và hỏi họ cách khắc phục. Bạn cũng có thể giải quyết vấn ðề bằng cách tải bản nâng cấp hoặc cấu hình lại phần mềm.

5. Lỗi "STOP: 0x########"

Trong khi lỗi runtime liên quan tới một chýõng trình cụ thể, thì lỗi STOP thýờng chỉ ra vấn ðề liên quan tới một thiết bị cụ thể - nhýng thật không may hiếm khi thông báo lỗi chỉ ra thiết bị cụ thể nào. Thay vào ðó, thông báo chỉ hiển thị dòng mã hex khó hiểu, chẳng hạn nhý 0x0000001E, trong các dòng mô tả. Thay vì suy ðoán, bạn nên thực hiện một số tác vụ giải quyết cõ bản sau.

Ðầu tiên là quét virus. Tiếp tới, cài ðặt lại những phần cứng ðã ðýợc cài ðặt vào thời ðiểm trýớc ðó ít lâu; và cần xác ðịnh chắc chắn là những thiết bị ðã ðýợc kết nối ðúng. Trong trýờng hợp này, việc nâng cấp driver cho tất cả những phần cứng hiện có hoặc nâng cấp BIOS cũng là một ý kiến hay. Hãy liên lạc với nhà sản xuất máy tính ðể nhờ giúp ðỡ.

6. Lỗi "A fatal exception error <##> has occurred at <####:########"

Thông báo lỗi ngoại trừ (exception) nghiêm trọng (fatal) nghe có vẻ rất nghiêm trọng nhýng cách hýớng dẫn giải quyết lại chẳng có gì cả. Ðây là một dạng thông báo về lỗi bộ nhớ thýờng là những truy vấn bộ nhớ không hợp lệ hoặc lỗi trong dòng mã lệnh, và thýờng xảy ra khi khởi ðộng ứng dụng hoặc tắt Windows. Lỗi "fatal exception" có thể rất nghiêm trọng, ðó cũng là nguy nhân giải thích tại sao chúng ta lại hay thấy nó trên "màn hình xanh", khiến Windows bị hỏng.

Lỗi "exception" có thể xảy ra trong rất nhiều trýờng hợp. Các nhanh nhất ðể loại bỏ chúng là khởi ðộng lại máy tính. Nếu lỗi vẫn tiếp tục xảy ra, bạn nên khởi ðộng máy tính ở chế ðộ "khởi ðộng sạch" (clean boot).

7. Lỗi " caused a general protection failt in module at ####:########".

Ðây là loại lỗi GPF (Generel Protection Fault - lỗi bảo vệ tổng quát) gây phá huỷ hệ ðiều hành, thuộc một trong những lỗi nghiêm trọng gây ra hiện týợng màn hình xanh. Bạn có thể thấy lỗi GPF nếu một chýõng trình ðang cố gắng ghi dữ liệu vào một khu vực lýu trữ hạn chế, hoặc hệ thống tính sai dung lýợng bộ nhớ cần thiết ðể thực thi một hàm nào ðó.

Giải pháp của lỗi GPF là khởi ðộng lại máy tính. Do nguyên nhân của hiện týợng này rất nhiều nên khó có thể xác ðịnh chính xác nguồn gốc gây ra lỗi. Cách giải quyết cõ bản nhất là tháo cài ðặt tất cả những phần mềm, phần cứng trong thời gian gần nhất, thực hiện tác vụ bảo trì hệ thống tổng quát, và thực hiện phýõng thức "khởi ðộng sạch".

8. Lỗi "Runll: error loading. The specified modle could not be found".


Thông báo lỗi "Runll" xuất hiện khi Windows không thể xác ðịnh ðýợc vị trí một file mà nó cần tải. Lỗi có thể liên quan tới những phần mềm chýa ðýợc tháo gỡ hết, hoặc lỗi driver, virus, hay phần mềm gián ðiệp.

Giải pháp mà bạn cần thực hiện là chạy ứng dụng diệt spyware (nhý Ad-ware hoặc Spybot Search & Destroy) và sau ðó là quét virus toàn hệ thống. Nếu lỗi liên quan tới một phần mềm mới cài ðặt thì hãy gỡ bỏ phần mềm ðó ra. Cuối cùng, bạn cần khởi ðộng máy tính ở chế ðộ sạch ðể có thể xác ðịnh ðýợc những dòng lệnh gây ra lỗi.

9. Lỗi "Cannot find the file (or one of its components). Make sure the path and filename are correct and that all required libraries are available".

Cũng giống một cõn ðau ðầu, thông ðiệp lỗi này có thể là triệu chứng của một sự kiện nhỏ nào ðó, chẳng hạn nhý xoá nhầm file; hoặc là một sự kiện lớn nào ðó, chẳng hạn nhý virus ðã lây lan khắp hệ thống. Ðiều bạn cần làm là quét virus và cài ðặt lại chýõng trình có liên quan tới tệp tin (file) bị thất lạc. Nếu lỗi vẫn xảy ra, sử dụng My Computer hoặc Windows Explorer ðể xác ðịnh chính xác tên và vị trí của file.

Lỗi này chỉ có thể xảy ra khi bạn nhấn ðúp vào shortcut trên Desktop. Nếu ðúng là trýờng hợp ðó, thì chỉ việc nhấn chuột vào shortcut, chọn Properties, rồi gõ chính xác tên và ðýờng dẫn vào trýờng Target.

10. "An error has occurred in the script on this page. Line <##> Char: <##> Error: Code: <##> Location: Do you want to continue running scripts on this page?"

Thông ðiệp lỗi rắc rối này ngụ ý rằng trình duyệt Internet Explorer (IE) ðang gặp vấn ðể khó khãn trong việc giải mã một tập lệnh gắn kèm trong trang Web mà bạn ðang truy cập. Ðây là thông ðiệp lỗi cố làm cho tình huống trở nên cãng thẳng hõn là bản thân chúng là nhý vậy.

Bạn có thể tắt thông báo lỗi này ði; và nếu vẫn tiếp tục nhận ðýợc chúng, hãy cố quét virus, khởi ðộng lại máy tính, và nâng cấp lên phiên bản IE mới nhất. Bạn cũng có thể mở phần menu Tools của trình duyệt và chọn Internet Options ðể xoá thý mục Temporary Internet Files (nhấn vào nút Delete Files trên thẻ General) và cấu hình phần Security và mức mặc ðịnh (default level). Cuối cùng có thể lỗi này ðõn giản là do mã nguồn trang Web có vấn ðề, và trong trýờng hợp ðó, bạn chỉ có thể thông báo cho ngýời quản trị trang web ðó ðể sửa lỗi.

11. "Windows Update has encountered an error and cannot display the requested page".

Một lỗ thông dụng liên quan tới việc cài ðặt những bản nâng cấp mới nhất dành cho Windows. Lỗi này ngãn không cho bạn truy cập vào trang Web nâng cấp Windows Update (windowsupdate.microsoft.com). Vậy làm thế nào ðể sửa lỗi này?

Trong hầu hết trýờng hợp, bạn có thể sửa lỗi bằng cách cài phiên bản IE mới nhất. Ngoài ra, ngýời dùng Windows XP và Windows 2000 cần cài ðặt các bản service pack mới nhất cho hệ ðiều hành. Trong Windows XP, bạn cần kích hoạt chế ðộ tự ðộng nâng cấp Automated Updates (mở Control Pannel, chọn Performance And Mantenance, System, chọn thẻ Automatic Updates; rồi lựa chọn phần Automatic).

12. "Windows encountered an error accessing the system Registry. Windows will restart and repair the system Registry for you".

Registry là cõ sở dữ liệu lýu trữ cấu hình hệ thống và các tham chiếu ngýời dùng, chúng rất nhạy cảm và với bất cứ thao tác nguy hiểm nào cũng khiến cho Windows bị "ðổ vỡ". Chúng ta có thể dùng giải pháp khắc phục sau...

Tạo một không gian trống trên ổ cài ðặt Windows (tối thiểu là 10%). Xoá những file cũ không còn dùng tới. Tiếp theo ngýời dùng Windows Me và Windows XP cần khôi phục máy tính và trạng thái ban ðầu khi chýa xảy ra sự cố. Mở thanh menu Start à (All) Programs à Accessories à System Tools à System Restore. Khi mở tiện ích System Restore, bạn chọn Restore My Computer To An Early Times, nhấn vào Next, và chọn một thời ðiểm cần khôi phục (ngày trước khi xảy ra thông báo lỗi); sau ðó tuân theo các hướng dẫn.

Sưu Tầm

23 thg 3, 2009

Giúp Windows XP tắt nhanh hơn

Một trong những điều gây bực mình nhất trong Windows XP là việc đợi rất lâu trong quá trình tắt máy, chính vì vậy chúng tôi giới thiệu cho các bạn một số điều chỉnh trong registry làm cho Windows tắt máy được nhanh hơn thường lệ.

Thông thường những gì đang xảy ra là một hoặc nhiều ứng dụng đang treo đến 20s (trong Registry tất cả các giá trị đều được thiết lập là ms) khi chờ hệ điều hành tắt máy. Trước khi thực hiện bất cứ một thay đổi nào đối với Registry, các bạn nên tạo một backup cho mục đích an toàn.

Thứ đầu tiên mà bạn cần phải thực hiện là truy cập vào Registry bằng cách vào Start \ Run và đánh “regedit” (không có dấu “”) sau đó kích OK.

Khi mở được Registry Editor, thay đổi đầu tiên mà chúng ta thực hiện nằm trong HKEY_CURRENT_USER \ Control Panel \ Desktop, tìm thành phần HungAppTimeout và thay đổi giá trị mặc định 5000 thành 1000 sau đó kích OK.

Sau đó cuốn thanh cuộn đến phần WaitToKillAppTimeout và thay đổi giá trị 20000 thành 1000, sau đó kích OK. Giữ cho Registry Editor luôn mở vì chúng ta phải thay đổi hơn 3 giá trị trong hai phần khác nhau.

Tiếp đến, chúng ta hãy vào HKEY_LOCAL_MACHINE \ System \ CurrentControlSet \ Control và kích đúp vào WaitToKillServiceTimeout, đặt giá trị là 1000, sau đó kích OK.


Cuối cùng chúng ta cần điều hướng đến HKEY_USERS \ DEFAULT \ Control Panel \ Desktop và đặt giá trị HungAppTimeout là 1000, sau đó kích OK.


Tiếp đó, kéo thanh cuộn xuống và tìm WaitToKillAppTimeout, đặt giá trị là 1000 và kích OK.

Sưu Tầm

22 thg 3, 2009

76 mẹo vặt trong Windows: Làm cho Windows trông mới hơn (Phần X)

72. Xây dựng một thanh tác vụ lớn hơn:

TTO - Nếu bạn có quá nhiều biểu tượng trong thanh tác vụ và khay hệ thống, nhấp chuột phải trên thanh tác vụ và đảm bảo rằng Lock the Taskbar không được đánh dấu. Bây giờ bạn có thể kéo đỉnh của thanh tác vụ lên cho kích thước của nó tăng gấp đôi. Di chuyển nó đến một cạnh của màn hình và thay đổi kích thước cho nó để tiết kiệm không gian.

73. Ẩn thanh tác vụ:

Nếu bạn thích dành nhiều không gian hơn cho các cửa sổ hiển thị, nhấn chuột phải trên thanh tác vụ và chọn Properties. Chọn Auto Hide hoặc Auto-hide the taskbar, nhấn OK. Thanh tác vụ sẽ được ẩn đi, nhưng nó sẽ hiển thị trở lại tại chổ đó khi bạn di chuyển con trỏ chuột đến cạnh của màn hình ngay vị trí của nó.

74. Bỏ các biểu tượng trình đơn lớn:


Ở chế độ mặc định Windows sử dụng các biểu tượng lớn trong Start menu, nhưng các biểu tượng nhỏ được sử dụng trong các trình đơn con của nó. Để loại bỏ các biểu tượng ảnh có kích thước quá lớn, nhấp chuột phải trên nút Start (trong XP) hoặc trên thanh tác vụ (trong tất cả các phiên bản của Windows), sau đó chọn Properties. Trong XP, nhấn nút Customize thích hợp để chọn Small icons (nếu bạn dùng Start menu trong XP) hoặc Show Small Icons in Start menu trong danh sách Advanced Start menu options (nếu bạn dùng Start menu kiểu củ). Trong các phiên bản khác của Windows chọn Show small icons in Start menu trong mục xuất hiện đầu tiên.

75. (98) Dọn dẹp màn hình desktop, phần 1:

Bạn có mệt mỏi với tình trạng lộn xộn của các biểu tượng trên màn hình desktop? Để ẩn chúng trong Windows 98, nhấp chuột phải trên màn hình desktop, chọn Properties. Nhấn chọn thẻ Effects và đánh dấu chọn lên Hide icons when the desktop is viewed as a Web page. Nhấn OK. Bây giờ bất cứ khi nào bạn muốn thấy màn hình desktop gọn hơn, tất cả các công việc bạn phải làm là chỉ cần nhấp chuột phải lên desktop và chọn Active Desktop, View As Web Page để đưa các biểu tượng của bạn vào trong chế độ ẩn.

76. (2K, ME, XP) Dọn dẹp màn hình desktop, phần 2:

Các biểu tượng trên desktop có thể chiểm nhiều không gian trong các phiên bản khác của Windows. Để ẩn chúng trong 2000 và Me, nhấp chuột phải trên màn hình desktop, chọn Active Desktop, và chắc chắn rằng mục Show Web Content được đánh dấu. Nhấp chuột phải lên desktop lần nữa (nếu cần) và chọn Active Desktop, Show Desktop Icons để mang các biểu tượng của bạn trở lại màn hình. Để ẩn chúng trong Windows XP, nhấp chuột phải trên desktop và chọn Arrange Icons By, Show Desktop Icons (để bỏ đánh dấu nó). Sau đó lặp lại các bước này nếu muốn hiển thị chúng trở lại màn hình.

Sưu Tầm

76 mẹo vặt trong Windows: Hiệu chỉnh tốc độ (Phần IX)

65. (XP) Giảm cảm giác khó chịu khi chạy ứng dụng, phần 1:

Nếu các ứng dụng trong máy tính của bạn mở quá chậm, bạn có thể cải thiện bằng cách tắt một số hiệu ứng hình ảnh của Windows. Nhấn chuột phải trên My Computer, và chọn Properties. Lựa thẻ Advanced, và dưới Performance, nhấn nút Settings. Bên dưới thẻ Visual Effect, chọn Adjust for best performance hoặc Custom, sau đó tắt tất cả các hiệu ứng không cần thiết.

66. (98, 2K, ME) Giảm cảm giác khó chịu khi chạy ứng dụng, phần 2:

Để thực hiện vấn đề này trong Windows 98, 2000 hoặc Me, nhấp chuột phải trên desktop và chọn Properties. Nhấn chọn thẻ Effects, bỏ đánh dấu các mục trong Visual Effect cho đến khi bạn thấy tốc độ của nó tốt hơn. Trong Windows 98, tắt Animate windows, menus and lists, và trong cả 3 phiên bản bạn có thể bỏ chọn Show window contents while dragging.

67. (XP) Thiết lập các quyền ưu tiên:

Hộp thoại Performance Options trong Windows XP cho phép bạn điều khiển giới hạn việc sử dụng bộ nhớ của Windows và quyền ưu tiên của các nhiệm vụ cho bộ xử lý trong máy tính. Để kiểm tra các cài đặt, mở hộp thoại Performance Options được trình bày trong phần 65, chọn Advanced. Dưới Processor Scheduling, giữ nguyên Programs được chọn để cho các ứng dụng thông thường của bạn chạy với quyền ưu tiên cao hơn so với các ứng dụng chạy nền bên dưới. Tuy nhiên, nếu bạn thường làm việc với một ứng dụng trong khi các ứng dụng khác thì đang sắp xếp trên cơ sở dữ liệu, in các hình đồ họa lớn, hay thực hiện một nhiệm vụ khác cần dùng nhiều bộ xử lý ngầm bên dưới, thì bạn nên lựa Background services để thời gian chia sẻ bộ xử lý cho tất cả các tác vụ đều bằng nhau thay vì ưu tiên cho các ứng dụng thông thường. Bạn nên sử dụng cài đặt mặc định Programs của Memory usage. Chọn System cache chỉ khi bạn muốn sử dụng máy tính như một máy chủ thay vì máy trạm.

68. Kiểm tra tính tương thích với hibernate:

Nếu bạn muốn Windows khởi động trong vài giây tất cả các ứng dụng và tài liệu được mở giống như trước khi bạn tắt máy, thử dùng chế độ hibernate. Trong thanh Address của cửa sổ Explorer hay Internet Explorer, nhập Control PanelPower Options. Nếu trong hộp thoại Power Options Properties không có thẻ Hibernate, thì máy bạn không có chế độ này. Ngược lại nếu có chức năng này, chọn nó và kiểm tra xem máy tính của bạn có đáp ứng các yêu cầu về không gian đĩa cho chế độ Hibernate hay không.

69. Cài đặt chế độ Hibernate, phần 1:

Nếu hệ thống của bạn có hỗ trợ chế độ hibernate, bật nó bằng cách chọn thẻ Hibernate của hộp thoại Power Options Properties (xem trong phần 68) và chọn Enable hibernation.

70. Cài đặt chế độ Hibernate, phần 2:

Ngay khi chế độ hibernate được bật, chọn Start, Shut Down hoặc Start, Turn Off Your Computer để tắt máy. Nếu bạn chọn Shut Down, lựa Hibernate và nhấn OK. Còn nếu chọn Turn Off Your Computer, thì bạn nhấn giữ phím Shift để chọn biểu tượng Standby cho chể độ hibernate, sau đó nhấn chuột chọn nó.

71. Đường biên lớn:


Làm cho đường biên của các cửa sổ dễ dàng để chọn hơn. Bạn có từng phải cố gắng để chọn vị trí đặt chuột trên đường biên cửa sổ để làm thay đổi kích thước của cửa sổ chưa? Nó thật đáng sợ, để thay đổi kích thước cửa sổ dễ dàng hơn, đầu tiên nhấn chuột phải trên desktop, chọn Properties, sau đó nhấn trên thẻ Appearance (chọn thẻ Advanced cho Windows XP). Từ danh sách Item, chọn Active Window Border, và tăng kích thước của đường biên bằng cách tăng giá trị trong ô Size.

Sưu Tầm

76 mẹo vặt trong Windows: Xem DVD (Phần VIII)

61. Bật các điều khiển trong Player:

Nếu bạn mở một đĩa CD hay DVD bằng Windows Media Player nhưng các nút điều khiển của nó bị vô hiệu hóa, bạn phải hiển thị thanh thực đơn của player (bạn có thể phải nhấn vào nút ở góc trên bên trái nếu đang ở chể độ toàn màn hình). Chọn Play, DVD, VCD or CD Audio (từ hiển thị có thể khác).

62. Phóng to thu nhỏ màn hình khi xem DVD:

Nếu bạn dùng Windows Media Player 9 để mở DVD, sử dụng biểu tượng full-screen ở góc dưới bên phải của chương trình để phóng to thu nhỏ, hay nhấn Alt-Enter để chuyển qua lại giữa chể độ toàn màn hình hay bình thường. Di chuyển con trỏ chuột ra phía xa của góc màn hình (sau đó giữ chuột đứng yên) để làm ẩn đi hộp điều khiển và hiển thị hình ảnh trên toàn bộ màn hình. Để hiển thị lại hộp điều khiển di chuyển chuột vào trong vùng hiển thị của màn hình.

63. Điều khiển tốc độ DVD:


Khi mở DVD bằng Windows Media Player 9, nhấn chuột hay kéo thanh trượt để di chuyển tới hay lui trở lại. Nhấn Ctrl-Shift-F để xem nhanh các hình ảnh, Ctrl-Shift-G để tăng tốc độ xem, Ctrl-Shift-S để xem chậm lại. Ctrl-Shift-N để chạy lại với tốc độ bình thường.

64. Điều khiển DVD bằng bàn phím:

Một số phím điều khiển được dùng khi xem DVD là Ctrl-P để tạm dừng hoặc chạy lại, F10 dùng để tăng và F9 dùng để giảm âm lượng, F8 để tắt tiếng.
Sưu Tầm