Chuong XXXVI : Làm việc với Server

Làm việc với Server

 

Chúng ta đã biết nhiều về cách thức PHP hoạt động, làm thế nào để tương tác với người sử dụng qua các form, hôm nay chúng ta sẽ để ý một chút về server, bao gồm các thông tin kĩ thuật cũng như nắm bắt những gì người sử dụng gửi cho ta

Có một việc rất may mắn cho các lập trình viên PHP là không phải chú ý đến server sẽ được sử dụng là Linux, FreeBSD hay Microsoft Windows, cũng không phải quan tâm đến sự khác biệt giữa Apache và IIS. Tuy nhiên, cũng có 1 vài điều chú ý nho nhỏ cho các bạn để chắc chắn những đoạn code viết ra phù hợp với server và hệ thống

Đường dẫn và thư mục

Có một sự khác biệt trong cách quản lý file và thư mục giữa các hệ thống Unix và Windows. Ví dụ trong 1 hệ thống Unix, thì đường dẫn đến website của bạn có thể là /home/httpd/customerwikiweb/wwwưp nhưng với hệ thống Windows thì lại là D:\WebSites\CustomerWiki\DocumentRoot. Điều này sẽ gây ra chút khó khăn khi bạn muôn viết code để xử lý dấu / hoặc \ và lo lắng về tên của ổ đĩa

May mắn thay, thông thường dữ liệu chúng ta lấy vào từ database còn các file và thư mục thì cũng không quá xa với nơi đặt file PHP. Thêm nữa, hầu hết các hàm về file và thư mục trong Windows sẽ tự hiểu /\. Chính vì vậy thay vì dùng các đường dẫn tuyệt đối, chúng ta chỉ cần sử dụng các đường dẫn tương đối và quên cấu trúc thư mục trên nó.

Các biến của server

Chìa khóa để ta hiểu thêm về server của mình là mảng “siêu” toàn cục $_SERVER đã giới thiệu từ trước. Có rất nhiều phần tử trong mảng này, ta sẽ tìm hiểu về 1 vài phần tử thường được sử dụng

PHP_SELF
Giả sử người sử dụng truy cập vào http://www.domain.com/php/test.php thì $_SERVER[“PHP_SELF”] sẽ trả về kết quả là /php/test.php
Chú ý: nếu truy xuất giá trị này từ trong đoạn mã đã được include bởi 1 đoạn mã khác thì giá trị thu được sẽ là của đoạn mã đã thực hiện include

SERVER_NAME
Phần tử này sẽ trả lại tên của server mà không có phần http:// ví dụ như www.domain.com.

SERVER_SOFTWARE
Cái tên nói lên tất cả! Khi được gọi, phần tử $_SERVER[“SERVER_SOFTWARE”] sẽ trả về tên của phần mềm mà server sử dụng. Có thế là Microsoft-IIS/5.1 hoặc Apache/1.3.33 (Unix) PHP/5.0.4 mod_ssl/2.8.22 OpenSSL/0.9.7f. Sau này sẽ có một vài hàm đặc biệt, ta sẽ phải lấy thông số này trước khi sử dụng vì nó chỉ chạy trên 1 phần mềm nhất định (ví dụ như chỉ chạy trên Apache, còn trên IIS thì báo lỗi)

PHP Code:

<?php
if (strcmp(substr($_SERVER[‘SERVER_SOFTWARE’], 0, 6),’Apache’) == 0)
{
// Cho hàm của Apache vào đây
}
?>
REQUEST_METHOD
Qua phần tử này bạn có thể biết phương thức gửi đi, có thể là POST, GET, PUT hoặc HEAD ~> bạn sẽ biết được chính xác là người dùng đang cần gì để phục vụ chu đáo

HTTP_USER_AGENT
Bạn sẽ biết được chương trình người dùng đang sử dụng để truy cập vào. Nếu người dùng sử dụng FireFox và sử dụng Windows thì bạn sẽ có được kết quả: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.5) Gecko/20041107 Firefox/1.0
Có một số trang web thường kiểm tra phần này để ngăn chặn không cho các bot tự động truy cập vào, tránh hao phí tài nguyên hệ thống

REMOTE_ADDR
Nếu bạn muốn biết IP của máy khách truy cập vào thì đây chính là phần tử bạn cần.
Có 1 điều cần chú ý là các yêu cầu của cùng người, cùng 1 session có thể đến từ nhiều IP khác nhau do có trường hợp các gói dữ liệu truyền đi từ người dùng đã qua các máy trạm khác nhau mới đến được server

Các phần tử khác
Có rất nhiều, rất nhiều các phần tử trong mảng $_SERVER, để thu được 1 danh sách đầy đủ các bạn có thể sử dụng hàm phpinfo. Thử nghiệm trên nhiều loại server khác nhau để thấy được sự khác biệt giữa chúng

Các biến môi trường

Ngoài mảng $_SERVER, PHP còn cung cấp cho chúng ta 1 mảng “siêu” toàn cục khác là $_ENV. Nó cho phép truy xuất vào các biến môi trường của hệ thống ví dụ như $_ENV[“PATH”] sẽ trả về kết quả là danh sách các thư mục mà hệ điều hành sẽ tìm kiếm các file thực thi

Nắm vững được cách lấy thông tin từ server sẽ giúp bạn hiểu thêm về môi trường mà đoạn code của bạn đang chạy và giúp nó chạy “ngọt” hơn, “êm” hơn

Have fun!

 

mr.paint(UDS)

 

 

Một ví dụ của PHP_SELF: Khi bạn muốn form sau khi submit được thực thi bằng chính các lệnh PHP trong file chứa form đó đó, bạn có thể sử dụng đoạn code sau:

PHP Code:

<form method=”GET” action=”<?php echo $_SERVER[“PHP_SELF”]; ?>”>

 

identical(UDS)

  1. Leave a comment

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: