Cách dùng framework Kaisan media.domain.com hoặc domain.com cho server centos và nginx

Đối với việc sử dụng framework kaisan cho website trên server server openlitespeed thì có thể dùng code gốc. Nhưng nếu áp dụng cho server centos nginx thì cần 1 số điều chỉnh như sau:

Vì nginx không dùng htaccess mà dùng config domain để cấu hình đường dẫn do vậy mà cần vào nơi chứa file config của domain cấu hình như sau:

1. Vào /etc/nginx/sites-available/domain.com.conf thêm thông tin như sau:

File domain.com.conf


		server {
				listen 80;
				server_name photo.domain.com www.photo.domain.com;
				if ($http_x_forwarded_proto = 'http') {
					return 301 https://$host$request_uri;
				}		
				
				access_log  /var/log/nginx/photo.domain.com-access.log  main;
				error_log   /var/log/nginx/photo.domain.com-error.log info;

				root         /data/vhosts/photo.domain.com;
				index index.php index.html index.htm;
				client_max_body_size 100M;	
				location / { 
					try_files $uri $uri/ @rewrite;
				}
				
				location @rewrite {
					rewrite ^(.*)$ /index.php?a=$1&$args;
				}
				
			location /_mydb {
					alias /usr/share/nginx/html/_myadmin/;

					location ~ \.php$ {
					fastcgi_pass unix:/var/run/php5-fpm.sock;
					include fastcgi_params;                       
					fastcgi_param SCRIPT_FILENAME $request_filename;
					}
				}

				# execute all .php files via php-fpm
				location ~ .php$ {
					# connect to a unix domain-socket:
					fastcgi_pass   unix:/var/run/php5-fpm.sock;

					fastcgi_param   SCRIPT_FILENAME    $document_root$fastcgi_script_name;
					fastcgi_param   SCRIPT_NAME        $fastcgi_script_name;

					fastcgi_buffer_size 128k;
					fastcgi_buffers 256 16k;
					fastcgi_busy_buffers_size 256k;
					fastcgi_temp_file_write_size 256k;

					# This file is present on Debian systems..
					include fastcgi_params;
				}

				error_page 404 /404.html;
					location = /40x.html {
				}

				error_page 500 502 503 504 /50x.html;
					location = /50x.html {
				}

		}

Sau Khi cấu hình domain cần restart nginx để cấu hình mới được áp dụng bằng lệnh:

sudo systemctl restart nginx

2. Mở file App.class.php tại đường dẫn  domain.com/includes/app.php

Tìm hàm public function run() và thay đổi như sau:

FILE App.class.php GỐC:


		if(isset($_GET["a"]) && !empty($_GET["a"])){			
				$var=explode("/", $_GET["a"]);	
				if(count($var) > 4) return $this->_404();
				$this->action = Main::clean($var[0],4,TRUE);						
				if(isset($var[1]) && !empty($var[1])) $this->do = Main::clean($var[1],4, TRUE);
				if(isset($var[2]) && !empty($var[2])) $this->id = Main::clean($var[2],4, TRUE);
				if(isset($var[3]) && !empty($var[3])) $this->po = Main::clean($var[3],4, TRUE);
			
				if(in_array($var[0],$this->actions)){
					return $this->{$var[0]}();
				}

			return $this->_404();
		}

FILE App.class.php ĐÃ THAY ĐỔI


		if(isset($_GET["a"]) && !empty($_GET["a"])){	
		
				/*******Thay đổi cho nginx******/
				$a = ltrim($_GET['a'], '/');
				$var=explode("/", $a);	
				/*******End Thay đổi******/
				
				if(count($var) > 4) return $this->_404();
				$this->action = Main::clean($var[0],4,TRUE);						
				if(isset($var[1]) && !empty($var[1])) $this->do = Main::clean($var[1],4, TRUE);
				if(isset($var[2]) && !empty($var[2])) $this->id = Main::clean($var[2],4, TRUE);
				if(isset($var[3]) && !empty($var[3])) $this->po = Main::clean($var[3],4, TRUE);
			
				if(in_array($var[0],$this->actions)){
					return $this->{$var[0]}();
				}

			return $this->_404();
		}

Như vậy là hoàn tất cho framework Kaisan chung cho các dự án có thể phát triển lên từ code này.

3. Đối với framework Kaisan cho mã nguồn Media

Đây là code chuyên quản lý upload lưu trữ ảnh thì khi dùng centos nginx cần chú ý:

Có thể sẽ có lỗi xảy ra khi upload ảnh, chúng ta cần chú ý đến thư mục uploads và các file: upload_sql.php và upload.php

Trong đó file upload_sql.php có chứa các hàm quan trọng và có thể gây ra lỗi nếu server không được cài đặt đầy đủ các thư viện liên quan đến hình ảnh.

  • move_uploaded_file(
  • getimagesize(
  • imagecreatefromjpeg(
  • Các hàm trong file class resize.php

Cách kiểm tra lỗi

Chèn đoạn code hiển thị lỗi này vào file upload.php để xem lỗi thế nào


// Thiết lập cấp độ báo cáo lỗi và cách xử lý lỗi
error_reporting(E_ALL); // Hiển thị tất cả các loại lỗi
ini_set('display_errors', 1); // Hiển thị lỗi trực tiếp trên màn hình

// Đoạn mã PHP của bạn
// ...

Để chạy được upload.php các bạn sửa file index.php__ thành index.php để chạy được url domain.com/uploads/ khi upload file thử các bạn mở tab debug chrome với tab network và check file upload.php sẽ thấy các thông báo lỗi có thể sẽ liên quan đến các hàm thư viện.

Các hàm trên có thể liên quan đến các thứ viện hình ảnh, để kiểm tra xem các extension PHP như gdimagick đã được cài đặt và kích hoạt trên máy chủ của bạn hay chưa, bạn có thể làm như sau:

Kiểm tra cài đặt extension GD

Tạo một file PHP mới, ví dụ check_gd.php, với nội dung sau:


// Kiểm tra xem extension GD đã được load hay chưa
if (extension_loaded('gd')) {
    echo 'GD extension is enabled';
} else {
    echo 'GD extension is not enabled';
}

// Kiểm tra các phiên bản của GD library
echo '<br>';
if (function_exists('gd_info')) {
    $gd_info = gd_info();
    echo 'GD Version: ' . $gd_info['GD Version'];
} else {
    echo 'gd_info function does not exist';
}

Kiểm tra cài đặt extension Imagick

Tạo một file PHP mới, ví dụ check_imagick.php, với nội dung sau:


// Kiểm tra xem extension Imagick đã được load hay chưa
if (extension_loaded('imagick')) {
    echo 'Imagick extension is enabled';
} else {
    echo 'Imagick extension is not enabled';
}

// Kiểm tra các phiên bản của Imagick
echo '
';
if (class_exists('Imagick')) {
    $imagick = new Imagick();
    echo 'Imagick Version: ' . $imagick->getVersion()['versionString'];
} else {
    echo 'Imagick class does not exist';
}


Nếu cả 2 thư viện trên chưa được cài, các bạn cài như sau;

sudo yum install php-imagick
sudo yum install php-gd

Ngoài ra bạn cần chắc chắn file cấu hình hệ thống php.ini đã có dòng thư viện được kích hoạt sau:

Trên CentOS, file php.ini thường được đặt ở một trong những địa điểm sau:

  1. /etc/php.ini: Đây là nơi chính để tìm file php.ini trên CentOS khi bạn cài đặt PHP thông qua gói mặc định từ kho lưu trữ của hệ điều hành.
  2. /etc/php.d/*.ini: Đây là thư mục chứa các file cấu hình PHP mở rộng riêng lẻ. Mỗi extension thường có một file cấu hình riêng trong đây.
  3. /usr/local/lib/php.ini: Đôi khi, file php.ini cũng có thể được đặt tại địa chỉ này, tùy thuộc vào cách cài đặt PHP cụ thể.

Để tìm file php.ini, bạn có thể sử dụng lệnh php --ini trong terminal để xem vị trí cụ thể của nó:

Nếu file chưa có extension=imagick.so thì thêm vào.

Sau khi cài xong thì chạy lệnh:

sudo systemctl restart php-fpm và sudo systemctl restart nginx

Như vậy là hoàn tất.