Tạo subdomain động sử dụng PHP

Phát triển web 17/04/2002 07:00 1434
Trong bài viết này mình sẽ hướng dẫn các bạn tạo động subdomain và domain poiter trên server hosting DirectAdmin bằng DirectAdmin API.

Nếu các bạn đã từng sử dụng blog wordpress.com, hoặc dịch vụ tạo website nhanh bizweb thì một tính năng khá quan trọng đó là cho phép người dùng, khách hàng đăng ký một cái blog hoặc website mà người dùng hoặc khách hàng có thể tự định nghĩa subdomain theo ý của bạn miễn sao subdomain đó không trùng lặp với những subdomain đã đăng ký trước đó.

Thì trong bài viết này mình sẽ hướng dẫn các bạn làm được điều đó nếu hosting của bạn sử dụng phần mềm quản lý DirectAdmin(DA) thông qua API của DirectAdmin. Các bạn lưu ý rằng tính năng này chỉ áp dụng cho server hosting của bạn cài DirectAdmin thôi nhé.

1. Tạo Form HTML.

Trong bước này chúng ta sẽ xây dựng một cái form. Khi người dùng nhập vào tên của subdomain và nhấn nút Create thì hệ thống sẽ tiến hành tạo một subdomain.(Trong các ứng dụng thực tế bạn cần kiểm tra trước xem subdomain hoặc domain pointer này đã tồn tại chưa trước khi tiến hành tạo mới nó)

Trong bước này chúng ta sẽ thực hiện việc viết code. Như mình đã nói là chúng ta sẽ sử dụng DirectAdmin API. Nên việc đầu tiên bạn cần download cái API của nó về và nhúng vào Project của bạn. Download DirectAdmin API

Trong phần mềm quản lý hosting DirectAdmin thì nó dựa vào các comand để thực hiện các tác vụ quản lý, thêm mới hoặc chỉnh sửa một cái gì đó trên server hosting.

Ví dụ:

  • CMD_FTP: Quản lý FTP
  • HTM_FTP_CREATE: Tạo mới FTP
  • CMD_SUBDOMAIN: Quản lý subdomain
  • CMD_DOMAIN_POINTER: Quản lý domain pointers.

Các bạn có thể xem danh sách các command tại DirectAdmin API 

2. Viết mã PHP

DirectAdmin API nó sử dụng Socket vì thế trước khi bạn thao tác một command nào đó thì bạn phải chắc chắn rằng bạn đã connect và đăng nhập vào server hosting của bạn.

require_once('DirectAdminApi/Source/HTTPSocket.php');
/* Config */
$domain = 'yourwebsite.com';
$port = 1127; //2222
$username = '';
$password = '';
/* End config */
$socket = new HTTPSocket;
// Kết nối tới server hosting
// $domain & $port: Là domain và cổng server hosting
$socket->connect($domain,$port);
// Login
// $username & $pasword: Tài khoản đăng nhập serve hosting
$socket->set_login($username,$pasword);
$socket->set_method('POST');

2.1 Mã lệnh tạo subdomain

Để có thể tạo được subdomain thì bạn cần truyền vào các tham số theo hình dưới đây.

require_once('DirectAdminApi/Source/HTTPSocket.php');
/* Config */
$domain = 'yourwebsite.com';
$port = 1127; //2222
$username = '';
$password = '';
/* End config */
if(isset($_POST['Hid']) && $_POST['Hid']=='Hid'){
    $subdomain = trim($_POST['subdomain']);
    if($subdomain==''){
        echo 'Subdomain not empty !';
        die();
    }else{
        $socket = new HTTPSocket;
        // Kết nối tới server
        $socket->connect($domain,$port);
        // Login
        $socket->set_login($username,$password);
        // Set method
        $socket->set_method('POST');
        // Thực hiện việc tạo subdomain
        $ret  = $socket->query('/CMD_API_SUBDOMAINS',
        array(
            'domain' => $domain,
            'action' => 'create',
            'subdomain' => "$subdomain",
        ));
    }
}

2.2 Mã lện tạo Domain Pointers.

$socket  = $sock->query('/CMD_API_DOMAIN_POINTER',
array(
	'domain' => $domain,
	'action' => 'add',
	'from' => "$domainpointer.$domain",
	'alias' => 'yes'
));

Lưu ý: Để có thể xây dựng một ứng dụng multiple website thì bạn cần tạo một Zone Record A phục vụ cho tất cả các tên miền phụ của bạn.

  • Record Type: A
  • Host: *
  • Points To: IP của bạn(e.g 27.118.16.194)

 

Tổng kết.

Bạn có thể tham khảo thêm danh sách command tại DirectAdmin API để có thể biết thêm được chúng ta có thể làm được những gì thông qua DirectAdmin API. Nếu bạn có ý đinh làm một hệ thông tạo multiple website thì bạn cần tìm hiểu thêm một chút kiến thức về Htaccess.

Xem Thêm

Profile photo of adminTheHalfHeart

B.V.T

Sinh ra và lớn nên ở Bắc Giang. Hiện tại thì tôi đang là một lập trình viên tại VietISO. Tôi lập website này với mục đích là bookmark những gì tôi đã đọc qua và mong muốn chia sẻ những gì tôi biết.