Hướng dẫn dùng error gif trong PHP

 Ngày Công Bố: September/2022

Hướng dẫn dùng error gif trong PHP

Khi chúng tôi phát triển một trang web bằng PHP, chúng tôi sử dụng các hình ảnh mà chúng tôi tải lên một cách linh hoạt và nhiều lần chúng tôi cần phải thao tác để thay đổi kích thước hoặc đặt hình mờ. Sử dụng hình ảnh động rất hữu ích vì nhiều lần người dùng hoặc quản trị viên web tải lên hình ảnh từ một biểu mẫu và chúng tôi cần chúng để hiển thị giống nhau hoặc tự động thay đổi kích thước hình ảnh.

Thư viện cho GD đồ họa, là một thư viện được phát triển bằng C và cho phép thao tác hình ảnh từ PHP. Thư viện này cung cấp cho chúng tôi các chức năng để quản lý hình ảnh ở các định dạng khác nhau như JPEG, GIF, PNG, SWF, TIFF, định dạng png được sử dụng nhiều nhất vì nó cho phép độ trong suốt.

Chúng ta sẽ thấy một số ví dụ về cách thao tác hình ảnh với PHP và GD để chạy các ví dụ mà chúng ta phải có máy chủ từ xa hoặc máy chủ cục bộ hỗ trợ PHP, để cài đặt một máy cục bộ mà chúng ta có thể sử dụng Xampp như chúng ta đã thấy trong hướng dẫn Mount Xampp để biến máy tính của bạn thành máy chủ web.

Tiếp theo chúng ta sẽ xem cách thay đổi kích thước hình ảnh và lưu hình ảnh đã thay đổi kích thước trong một thư mục máy chủ.

Sau khi thực hiện kịch bản, hình ảnh sẽ như sau:

Chúng tôi kiểm tra bên dưới với hình ảnh hình chữ nhật có chiều rộng 1550 pixel cao 896 pixel.

Sau khi thực thi tập lệnh, hình ảnh sẽ tự động thay đổi kích thước:

Chúng ta có thể thấy rằng hai hình ảnh không bao giờ vượt quá kích thước được xác định tối đa rộng 200 pixel.
GD có thể được sử dụng để tham gia các hình ảnh trong suốt, chẳng hạn như chèn hình mờ hoặc nhãn trên hình ảnh.
Một trong những cách sử dụng phổ biến nhất là trong các cửa hàng ảo để đặt một poster lên hình ảnh của sản phẩm khi nó được bán hết hoặc hết hàng.

Thông qua các phiên bản mới của PHP, các chức năng mới cho thao tác hình ảnh đã được thêm vào, bạn cũng có thể cài đặt các thư viện khác như ImageMagic hoặc Gmagic cung cấp các chức năng giúp chúng ta dễ dàng quản lý hình ảnh dễ dàng hơn so với sử dụng GD.

Tiếp theo chúng ta sẽ xem làm thế nào để đặt một hộp và viết một văn bản bên trong một hình ảnh dưới dạng hình mờ hoặc để đặt một số chi tiết hoặc tiêu đề thư.

Màu sắc có thể được lấy từ trang web Mã màu và chúng tôi có thể tải xuống hàng ngàn phông chữ ttf miễn phí từ trang web của Dafont.

Phương pháp vẽ đồ thị văn bản này được captchas sử dụng rộng rãi như một phương tiện bảo mật để đăng nhập hoặc đăng ký người dùng, ví dụ như các chữ cái hoặc số ngẫu nhiên được tạo và sau đó hiển thị dưới dạng hình ảnh mà người dùng phải ghi vào hộp văn bản để xác thực.

Sau đó, chúng tôi sẽ tạo mã để đặt logo hoặc hình mờ trên ảnh, vì điều này chúng tôi sẽ phát triển mã sau đây.


[color = # a9a9a9] Mã để đặt logo hoặc hình mờ trên ảnh [/ color]

Đặt hình mờ cho phép chúng tôi tránh liên kết nóng hoặc đánh cắp hình ảnh khi người dùng khác sao chép hình ảnh của chúng tôi.

Chúng ta phải luôn nhớ tạo một bản sao của hình ảnh gốc trước khi áp dụng bất kỳ chuyển đổi nào, điều rất quan trọng là lưu url của hình ảnh nguồn trong một biến và, nếu có thể, hãy lưu hình ảnh đã sửa đổi trong một thư mục khác.

Chúng ta có thể tự thực hiện các chức năng của mình để xử lý hình ảnh một cách linh hoạt bằng cách gửi một vài tham số như hình ảnh gốc, kích thước, chiều rộng và chiều cao, nếu chúng ta cần một văn bản hoặc logo để có được hình ảnh thu nhỏ hoặc hình ảnh thủy ấn. Luôn luôn ở cuối quá trình, hãy nhớ rằng chúng ta phải giải phóng bộ nhớ ram gọi hàm và chỉ ra hình ảnh sẽ được phát hành.

 imagedestroy (hình ảnh $); 
Tải xuống Plugin Papepiling$config[ads_text5] not found plugin-papepiling.zip 12.53K 186 Tải xuống
  • 0

Thứ ba, 05/05/2020 | 00:00 GMT+7

BLOB là kiểu dữ liệu MySQL có thể lưu trữ dữ liệu binary như hình ảnh, file đa phương tiện và file PDF.


Khi tạo các ứng dụng yêu cầu database kết hợp chặt chẽ, trong đó hình ảnh phải được đồng bộ với dữ liệu liên quan (ví dụ: cổng thông tin nhân viên, database sinh viên hoặc ứng dụng tài chính), bạn có thể thấy thuận tiện khi lưu trữ hình ảnh như hộ chiếu của sinh viên ảnh và chữ ký trong database MySQL cùng với các thông tin liên quan khác.

Đây là nơi xuất hiện kiểu dữ liệu MySQL BLOB . Phương pháp lập trình này loại bỏ nhu cầu tạo một hệ thống file riêng để lưu trữ hình ảnh. Lược đồ cũng tập trung hóa database , làm cho nó dễ di động và an toàn hơn vì dữ liệu được tách biệt khỏi hệ thống file . Tạo bản backup cũng liền mạch hơn vì bạn có thể tạo một file kết xuất MySQL duy nhất chứa tất cả dữ liệu .

Truy xuất dữ liệu nhanh hơn và khi tạo bản ghi, bạn có thể chắc chắn rằng các-luật xác thực dữ liệu và tính toàn vẹn tham chiếu được duy trì, đặc biệt khi sử dụng các giao dịch MySQL .

Trong hướng dẫn này, bạn sẽ sử dụng kiểu dữ liệu MySQL BLOB để lưu trữ hình ảnh bằng PHP trên Ubuntu 18.04.

Yêu cầu

Để làm theo hướng dẫn này, bạn cần các thành phần sau:

  • Server Ubuntu 18.04 được cấu hình bằng Cài đặt server ban đầu với Ubuntu 18.04 và user không phải root có quyền sudo .
  • Apache, MySQL và PHP được cài đặt theo hướng dẫn về Cách cài đặt Linux, Apache, MySQL, PHP (LAMP) trên Ubuntu 18.04 . Đối với hướng dẫn này, không cần thiết phải tạo VirtualHost, vì vậy bạn có thể bỏ qua Bước 4.

Bước 1 - Tạo database

Bạn sẽ bắt đầu bằng cách tạo một database mẫu cho dự án của bạn . Để thực hiện việc này, hãy SSH vào server và sau đó chạy lệnh sau để đăng nhập vào server MySQL của bạn với quyền root :

  • sudo mysql -u root -p

Nhập password root của database MySQL của bạn và nhấn ENTER để tiếp tục.

Sau đó, chạy lệnh sau để tạo database . Trong hướng dẫn này, ta sẽ đặt tên là test_company :

  • CREATE DATABASE test_company;

Khi database được tạo, bạn sẽ thấy kết quả sau:

Output

Query OK, 1 row affected (0.01 sec) 

Tiếp theo, tạo account test_user trên server MySQL và nhớ thay thế PASSWORD bằng một password mạnh:

  • CREATE USER 'test_user'@'localhost' IDENTIFIED BY 'PASSWORD';

Bạn sẽ thấy kết quả sau:

Output

Query OK, 0 rows affected (0.01 sec) 

Để cấp cho test_user đầy đủ các quyền trên database test_company , hãy chạy:

  • GRANT ALL PRIVILEGES ON test_company.* TO 'test_user'@'localhost';

Đảm bảo bạn nhận được kết quả sau:

Output

Query OK, 0 rows affected (0.01 sec) 

Cuối cùng, xóa bảng quyền để MySQL reload các quyền:

  • FLUSH PRIVILEGES;

Đảm bảo bạn thấy kết quả sau:

Output

Query OK, 0 rows affected (0.01 sec) 

Bây giờ database test_companytest_user đã sẵn sàng, bạn sẽ chuyển sang tạo bảng products để lưu trữ các sản phẩm mẫu. Bạn sẽ sử dụng bảng này sau đó để chèn và truy xuất các bản ghi để chứng minh cách MySQL BLOB hoạt động.

Đăng xuất khỏi server MySQL:

  • QUIT;

Sau đó, đăng nhập lại bằng thông tin đăng nhập của test_user mà bạn đã tạo:

  • mysql -u test_user -p

Khi được yêu cầu , hãy nhập password cho test_user và nhấn ENTER để tiếp tục. Tiếp theo, chuyển sang database test_company bằng lệnh như sau:

  • USE test_company;

Khi database test_company được chọn, MySQL sẽ hiển thị:

Output

Database changed 

Tiếp theo, tạo bảng products bằng lệnh:

  • CREATE TABLE `products` (product_id BIGINT PRIMARY KEY AUTO_INCREMENT, product_name VARCHAR(50), price DOUBLE, product_image BLOB) ENGINE = InnoDB;

Lệnh này tạo một bảng có tên là products . Bảng có bốn cột:

  • product_id : Cột này sử dụng kiểu dữ liệu BIGINT để chứa một danh sách lớn các sản phẩm lên đến tối đa 2⁶³-1 mục. Bạn đã đánh dấu cột là PRIMARY KEY để xác định duy nhất các sản phẩm. Để MySQL xử lý việc tạo số nhận dạng mới cho các cột được chèn, bạn đã sử dụng từ khóa AUTO_INCREMENT .

  • product_name : Cột này chứa tên của các sản phẩm. Bạn đã sử dụng kiểu dữ liệu VARCHAR vì trường này thường sẽ xử lý chữ và số lên đến tối đa 50 ký tự — giới hạn 50 chỉ là giá trị giả định được sử dụng cho mục đích của hướng dẫn này.

  • price : Đối với mục đích demo , bảng products của bạn chứa cột price để lưu trữ giá bán lẻ của sản phẩm. Vì một số sản phẩm có thể có giá trị động (ví dụ: 23,69, 45,36, 102,99), bạn đã sử dụng kiểu dữ liệu DOUBLE .

  • product_image : Cột này sử dụng kiểu dữ liệu BLOB để lưu trữ dữ liệu binary thực của hình ảnh sản phẩm.

Bạn đã sử dụng InnoDB lưu trữ ENGINE cho bảng để hỗ trợ một loạt các tính năng bao gồm các giao dịch MySQL . Sau khi thực hiện điều này để tạo bảng products , bạn sẽ thấy kết quả sau:

Output

Query OK, 0 rows affected (0.03 sec) 

Đăng xuất khỏi server MySQL của bạn:

  • QUIT;

Bạn sẽ nhận được kết quả sau

Output

Bye 

Bảng products hiện đã sẵn sàng để lưu trữ một số bản ghi bao gồm hình ảnh của sản phẩm và bạn sẽ điền vào bảng này với một số sản phẩm trong bước tiếp theo.

Bước 2 - Tạo tập lệnh PHP để kết nối database

Trong bước này, bạn sẽ tạo một tập lệnh PHP sẽ kết nối với database MySQL mà bạn đã tạo ở Bước 1. Tập lệnh sẽ chuẩn bị ba sản phẩm mẫu và chèn chúng vào bảng products .

Để tạo mã PHP, hãy mở một file mới bằng editor:

  • sudo nano /var/www/html/config.php

Sau đó, nhập thông tin sau vào file và thay thế PASSWORD bằng password test_user mà bạn đã tạo ở Bước 1:

/var/www/html/config.php

test_company'); define('DB_USER', 'test_user'); define('DB_PASSWORD', 'PASSWORD'); define('DB_HOST', 'localhost');  $pdo = new PDO("mysql:host=" . DB_HOST . "; dbname=" . DB_NAME, DB_USER, DB_PASSWORD); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);  

Lưu file .

Trong file này, bạn đã sử dụng bốn hằng số PHP để kết nối với database MySQL mà bạn đã tạo ở Bước 1:

  • DB_NAME : Hằng số này giữ tên của database test_company .

  • DB_USER : Biến này chứa tên user test_user .

  • DB_PASSWORD : Hằng số này lưu trữ PASSWORD MySQL của account test_user .

  • DB_HOST :  server nơi chứa database . Trong trường hợp này, bạn đang sử dụng server localhost .

Dòng sau trong file khởi tạo Đối tượng dữ liệu PHP (PDO) và kết nối với database MySQL:

... $pdo = new PDO("mysql:host=" . DB_HOST . "; dbname=" . DB_NAME, DB_USER, DB_PASSWORD); ... 

Ở cuối file , bạn đã đặt một số thuộc tính PDO:

  • ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION : Thuộc tính này hướng dẫn PDO xuất một ngoại lệ có thể được ghi lại cho mục đích gỡ lỗi.
  • ATTR_EMULATE_PREPARES, false : Tùy chọn này tăng tính bảo mật bằng cách yêu cầu công cụ database MySQL thực hiện chuẩn bị thay vì PDO.

Sẽ bao gồm file /var/www/html/config.php trong hai tập lệnh PHP mà bạn sẽ tạo tiếp theo để chèn và truy xuất các bản ghi tương ứng.

Đầu tiên, hãy tạo tập lệnh PHP /var/www/html/insert_products.php để chèn các bản ghi vào bảng sản phẩm:

  • sudo nano /var/www/html/insert_products.php

Sau đó, thêm thông tin sau vào file /var/www/html/insert_products.php :

/var/www/html/insert_products.php

 'VIRTUAL SERVERS',               'price' => 5,               'product_image' => file_get_contents("https://i.imgur.com/VEIKbp0.png")               ];  $products[] = [               'product_name' => 'MANAGED KUBERNETES',               'price' => 30,               'product_image' => file_get_contents("https://i.imgur.com/cCc9Gw9.png")               ];  $products[] = [               'product_name' => 'MySQL DATABASES',               'price' => 15,               'product_image' => file_get_contents("https://i.imgur.com/UYcHkKD.png" )               ];  $sql = "INSERT INTO products(product_name, price, product_image) VALUES (:product_name, :price, :product_image)";  foreach ($products as $product) {     $stmt = $pdo->prepare($sql);     $stmt->execute($product); }  echo "Records inserted successfully"; 

Lưu file .

Trong file , bạn đã bao gồm file config.php ở trên cùng. Đây là file đầu tiên bạn tạo để xác định các biến database và kết nối với database . Tệp cũng khởi tạo một đối tượng PDO và lưu trữ nó trong một biến $pdo .

Tiếp theo, bạn đã tạo một mảng dữ liệu của các sản phẩm để chèn vào database . Ngoài product_nameprice , được chuẩn bị dưới dạng chuỗi và giá trị số tương ứng, tập lệnh sử dụng hàm file_get_contents được tích hợp sẵn của PHP để đọc hình ảnh từ nguồn bên ngoài và chuyển chúng dưới dạng chuỗi vào cột product_image .

Tiếp theo, bạn đã chuẩn bị một câu lệnh SQL và sử dụng câu lệnh PHP foreach{...} để chèn từng sản phẩm vào database .

Để thực thi file /var/www/html/insert_products.php , hãy chạy nó trong cửa sổ trình duyệt của bạn bằng cách sử dụng URL sau. Hãy nhớ thay thế your-server-IP công cộng của server:

http://your-server-IP/insert_products.php 

Sau khi thực thi file , bạn sẽ thấy thông báo thành công trong trình duyệt xác nhận các bản ghi đã được chèn vào database .

Bạn đã chèn thành công ba bản ghi có chứa hình ảnh sản phẩm vào bảng products . Trong bước tiếp theo, bạn sẽ tạo một tập lệnh PHP để lấy các bản ghi này và hiển thị chúng trong trình duyệt của bạn.

Bước 3 - Hiển thị thông tin sản phẩm từ database MySQL

Với thông tin và hình ảnh của sản phẩm trong database , bây giờ bạn sẽ viết mã một tập lệnh PHP khác để truy vấn và hiển thị thông tin của sản phẩm trong bảng HTML trên trình duyệt của bạn.

Để tạo file , hãy nhập như sau:

  • sudo nano /var/www/html/display_products.php

Sau đó, nhập thông tin sau vào file :

/var/www/html/display_products.php

   Using BLOB and MySQL       prepare($sql);   $stmt->execute();   ?>        fetch(PDO::FETCH_ASSOC)) {       echo '';       echo '';       echo '';       echo '';       echo '';       echo '';   }   ?>    
Products Database
Product Id Product Name Price Product Image
' . $row['product_id'] . '' . $row['product_name'] . '' . $row['price'] . '' . '' . '

Lưu các thay đổi vào file và đóng nó.

Ở đây, bạn đã bao gồm file config.php để kết nối với database . Sau đó, bạn đã chuẩn bị và thực hiện một câu lệnh SQL bằng cách sử dụng PDO để truy xuất tất cả các mục từ bảng products bằng SELECT * FROM products .

Tiếp theo, bạn đã tạo một bảng HTML và điền nó với dữ liệu của các sản phẩm bằng cách sử dụng câu lệnh while() {...} PHP. Dòng $row = $stmt->fetch(PDO::FETCH_ASSOC) truy vấn database và lưu trữ kết quả trong biến $row dưới dạng một mảng đa chiều, sau đó bạn đã hiển thị trong cột bảng HTML bằng cách sử dụng $row['column_name'] cú pháp $row['column_name'] .

Hình ảnh từ cột product_image được đặt bên trong . Bạn đã sử dụng thuộc tính widthheight để thay đổi kích thước hình ảnh thành kích thước nhỏ hơn có thể vừa với cột bảng HTML.

Để chuyển đổi dữ liệu được lưu giữ bởi kiểu dữ liệu BLOB trở lại hình ảnh, bạn đã sử dụng hàm base64_encode PHP và cú pháp sau cho lược đồ URI dữ liệu :

data:media_type;base64, base_64_encoded_data 

Trong trường hợp này, image/pngmedia_type và chuỗi được mã hóa Base64 từ cột product_imagebase_64_encoded_data .

Tiếp theo, thực thi file display_products.php trong trình duyệt web bằng lệnh địa chỉ sau:

http://your-server-IP/display_products.php 

Sau khi chạy file display_products.php trong trình duyệt, bạn sẽ thấy một bảng HTML với danh sách các sản phẩm và hình ảnh liên quan.

Điều này xác nhận tập lệnh PHP để lấy hình ảnh từ MySQL đang hoạt động như mong đợi.

Kết luận

Trong hướng dẫn này, bạn đã sử dụng kiểu dữ liệu MySQL BLOB để lưu trữ và hiển thị hình ảnh bằng PHP trên Ubuntu 18.04. Bạn cũng đã thấy những ưu điểm cơ bản của việc lưu trữ hình ảnh trong database thay vì lưu trữ chúng trong hệ thống file . Chúng bao gồm tính di động, bảo mật và dễ dàng backup . Nếu bạn đang xây dựng một ứng dụng như cổng thông tin sinh viên hoặc database của nhân viên yêu cầu thông tin và hình ảnh liên quan được lưu trữ cùng nhau, thì công nghệ này có thể hữu ích cho bạn.

Để biết thêm thông tin về các kiểu dữ liệu được hỗ trợ trong MySQL, hãy làm theo hướng dẫn Kiểu dữ liệu MySQL . Nếu bạn quan tâm đến nội dung khác liên quan đến MySQL và PHP, hãy xem các hướng dẫn sau:

  • Cách triển khai phân trang trong MySQL với PHP trên Ubuntu 18.04
  • Cách sử dụng phần mở rộng PDO PHP để thực hiện các giao dịch MySQL bằng PHP trên Ubuntu 18.04

Tags:


Các tin liên quan

Cách đặt lại mật khẩu gốc MySQL hoặc MariaDB của bạn
2020-05-05
Cách cài đặt MySQL trên Ubuntu 18.04
2020-04-21
Cách cài đặt MySQL trên CentOS 8
2020-03-18
Cách triển khai phân trang trong MySQL với PHP trên Ubuntu 18.04
2020-01-29
Cách tối ưu hóa truy vấn MySQL với bộ đệm ProxySQL trên Ubuntu 16.04
2019-12-30
Cách cấu hình Cụm Galera với MySQL trên server Ubuntu 18.04
2019-12-16
Cách quản lý và sử dụng trình kích hoạt database MySQL trên Ubuntu 18.04
2019-12-10
Cách tạo một ứng dụng trích dẫn đầy cảm hứng bằng AdonisJs và MySQL
2019-11-22
Cách cài đặt MySQL mới nhất trên Debian 10
2019-07-25
Cách triển khai ứng dụng cốt lõi ASP.NET với server MySQL bằng Nginx trên Ubuntu 18.04
2019-07-23