Tải lên tệp php mất quá nhiều thời gian

Bạn đã bao giờ gặp khó khăn với việc tải lên tệp lớn trong PHP chưa?

Ảnh của rawpixel. com trên Unsplash

Tải lên tệp là một nhiệm vụ phổ biến mà chúng tôi thực hiện trong hầu hết các dự án web hiện đại của mình. Với tất cả các công cụ khác nhau có sẵn, không khó để triển khai tính năng tải tệp lên bằng bất kỳ ngôn ngữ nào. Tuy nhiên, khi tải lên tệp lớn, mọi thứ sẽ hơi phức tạp

Giả sử bạn đang cố tải lên một tệp khá lớn. Bạn đã đợi hơn một giờ rồi và tải lên được 90%. Rồi đột nhiên, kết nối của bạn bị ngắt hoặc trình duyệt bị lỗi. Quá trình tải lên bị hủy bỏ và bạn cần bắt đầu lại từ đầu. Bực bội, phải không?

Trong bài đăng này, chúng ta sẽ thấy một nỗ lực để giải quyết vấn đề này trong PHP bằng cách tải lên các tệp trong các khối có thể tiếp tục sử dụng giao thức tus

Tải lên tệp có thể tiếp tục trong PHP — Demo

Tus là gì?

Tus là một giao thức mở dựa trên HTTP để tải lên tệp có thể tiếp tục. Có thể tiếp tục nghĩa là chúng tôi có thể tiếp tục ở nơi chúng tôi đã dừng lại mà không cần tải lại toàn bộ dữ liệu lên trong trường hợp có bất kỳ gián đoạn nào. Sự gián đoạn có thể xảy ra một cách tự nguyện nếu người dùng muốn tạm dừng hoặc do vô tình trong trường hợp có sự cố mạng hoặc máy chủ ngừng hoạt động

Giao thức Tus đã được Vimeo thông qua vào tháng 5 năm 2017

Tại sao vậy?

Trích dẫn từ blog của Vimeo

Chúng tôi quyết định sử dụng tus trong ngăn xếp tải lên của mình vì giao thức tus chuẩn hóa quy trình tải tệp lên theo cách ngắn gọn và cởi mở. Tiêu chuẩn hóa này sẽ cho phép các nhà phát triển API tập trung nhiều hơn vào mã dành riêng cho ứng dụng của họ và ít hơn vào chính quy trình tải lên

Một lợi ích chính khác của việc tải tệp lên theo cách này là bạn có thể bắt đầu tải lên từ máy tính xách tay và thậm chí tiếp tục tải lên cùng một tệp từ điện thoại di động hoặc bất kỳ thiết bị nào khác. Đây là một cách tuyệt vời để nâng cao trải nghiệm người dùng của bạn

ảnh. Kiến trúc Tus cơ bản

Bắt đầu

Hãy bắt đầu bằng cách thêm phụ thuộc của chúng tôi

$ composer require ankitpokhrel/tus-php

tus-php là một triển khai ứng dụng khách và máy chủ PHP thuần túy theo khuôn khổ cho giao thức tải lên có thể tiếp tục tus v1. 0. 0

ankitpokhrel/tus-php

tus-php - 🚀 Máy chủ và máy khách PHP thuần túy cho giao thức tải lên có thể tiếp tục tus v1. 0. 0

github. com

Cập nhật. Vimeo hiện đang sử dụng TusPHP trong v3 của thư viện PHP chính thức của họ cho API Vimeo

Tạo một máy chủ để xử lý các yêu cầu của chúng tôi

Đây là cách một máy chủ đơn giản trông như thế nào

// server.php$server   = new \TusPhp\Tus\Server['redis'];
$response = $server->serve[];
$response->send[];exit[0]; // Exit from current PHP process.

Bạn cần định cấu hình máy chủ của mình để phản hồi một điểm cuối cụ thể. Ví dụ, trong Nginx, bạn sẽ làm một cái gì đó như thế này

# nginx.conf

location /files {
try_files $uri $uri/ /path/to/server.php?$query_string;
}

Giả sử rằng URL đến máy chủ của chúng tôi là http. //người phục vụ. tus. địa phương. Vì vậy, dựa trên cấu hình nginx ở trên, chúng ta có thể truy cập các điểm cuối tus của mình bằng cách sử dụng http. //người phục vụ. tus. Tập tin có sẵn

Bây giờ, chúng tôi có sẵn các điểm cuối RESTful sau đây để làm việc với

# Gather information about server's current configuration
OPTIONS /files
# Check if the given upload is valid
HEAD /files/{upload-key}
# Create a new upload
POST /files
# Resume upload created with POST
PATCH /files/{upload-key}
# Delete the previous upload
DELETE /files/{upload-key}

Kiểm tra chi tiết giao thức để biết thêm thông tin về các điểm cuối

Nếu bạn đang sử dụng bất kỳ khung nào như Laravel, thay vì sửa đổi cấu hình máy chủ của mình, bạn có thể xác định tuyến đường tới tất cả các điểm cuối dựa trên tus trong tệp tuyến đường khung của mình. Chúng tôi sẽ trình bày chi tiết điều này trong một hướng dẫn khác

Xử lý tải lên bằng ứng dụng khách tus-php

Sau khi máy chủ được đặt đúng chỗ, máy khách có thể được sử dụng để tải tệp lên theo khối. Hãy để chúng tôi bắt đầu bằng cách tạo một biểu mẫu HTML đơn giản để nhận đầu vào từ người dùng




Sau khi một biểu mẫu được gửi, chúng tôi cần làm theo một số bước để xử lý việc tải lên

  1. Tạo một đối tượng máy khách tus-php
// Tus client$client = new \TusPhp\Tus\Client['//server.tus.local'];

Tham số đầu tiên trong đoạn mã trên là điểm cuối máy chủ tus của bạn

2. Khởi tạo ứng dụng khách với siêu dữ liệu tệp

Để giữ cho một lần tải lên là duy nhất, chúng tôi cần sử dụng một số mã định danh để nhận dạng tải lên trong các yêu cầu sắp tới. Đối với điều này, chúng tôi sẽ phải tạo một khóa tải lên duy nhất có thể được sử dụng để tiếp tục tải lên sau này. Bạn có thể cung cấp khóa tải lên một cách rõ ràng hoặc để hệ thống tự tạo khóa

// Set upload key and file meta$client->setKey[$uploadKey]
->file[$_FILES['tus_file']['tmp_name'], 'your file name'];

Nếu bạn không cung cấp khóa tải lên một cách rõ ràng, bước trên sẽ giống như thế này

$client->file[$_FILES['tus_file']['tmp_name'], 'your file name'];$uploadKey = $client->getKey[]; // Unique upload key

3. Tải lên một đoạn

________số 8

Lần tới, khi bạn muốn tải lên một đoạn khác, bạn có thể sử dụng cùng một khóa tải lên để tiếp tục

// To resume upload in next request$bytesUploaded = $client->setKey[$uploadKey]->upload[$chunkSize];

Khi quá trình tải lên hoàn tất, máy chủ sẽ xác minh tải lên dựa trên tổng kiểm tra để đảm bảo tệp đã tải lên không bị hỏng. Theo mặc định, máy chủ sẽ sử dụng thuật toán

// server.php$server   = new \TusPhp\Tus\Server['redis'];
$response = $server->serve[];
$response->send[];exit[0]; // Exit from current PHP process.
1 để xác minh tải lên

Việc triển khai đầy đủ video demo ở trên có thể được tìm thấy tại đây

Xử lý tải lên bằng tus-js-client

Uppy là một plugin tải lên tệp kiểu mô-đun, kiểu dáng đẹp được phát triển bởi cùng những người đứng sau giao thức tus. Bạn có thể sử dụng uppy để tích hợp liền mạch tus-js-client chính thức với máy chủ tus-php. Điều đó có nghĩa là chúng tôi đang sử dụng triển khai php của máy chủ và triển khai js của máy khách

// server.php$server   = new \TusPhp\Tus\Server['redis'];
$response = $server->serve[];
$response->send[];exit[0]; // Exit from current PHP process.
0

Kiểm tra thêm chi tiết trong tài liệu uppy và triển khai ví dụ tại đây

Tải lên một phần

Máy chủ tus-php hỗ trợ tiện ích mở rộng ghép nối và có khả năng ghép nối nhiều tệp tải lên thành một tệp duy nhất cho phép khách hàng thực hiện tải lên song song và tải lên các đoạn không liền kề

Tải lên một phần tệp bằng tus-php

Ví dụ đầy đủ về tải lên một phần có thể được tìm thấy ở đây

Từ cuối cùng

Bản thân dự án tus-php vẫn đang trong giai đoạn đầu. Một số phần có thể thay đổi trong tương lai. Có thể tìm thấy ba ví dụ triển khai khác nhau trong thư mục ví dụ. Vui lòng thử và báo cáo bất kỳ vấn đề nào được tìm thấy. Yêu cầu kéo và đề xuất dự án được chào đón nhiều hơn

Làm cách nào để xử lý tải lên tệp lớn trong PHP?

Để tải lên các tệp lớn trong PHP, bạn cần phải tăng giá trị của biến post_max_size trong php. ini hoặc tải lên các tệp có tổng kích thước tệp nhỏ hơn giá trị post_max_size . Ngoài ra, giá trị post_max_size phải lớn hơn giá trị upload_max_filesize.

Giới hạn tải lên tệp tối đa trong PHP là bao nhiêu?

Các giá trị mặc định cho PHP sẽ hạn chế bạn ở kích thước tệp tải lên tối đa 2 MB .

Cách nhanh nhất để tải lên một tập tin là gì?

Cách gửi tệp lớn .
Tải tệp của bạn lên bộ nhớ đám mây. Tải tệp lên bộ nhớ đám mây là một cách tuyệt vời để chuyển các tệp lớn như ảnh và video. .
Nén tập tin. Một phương pháp truyền tệp khác đã được thử nghiệm và thử nghiệm là nén chúng. .
Sử dụng VPN. .
ổ đĩa flash USB. .
FTP. .
SFTP. .
FTPS. .
Jumpshare

Chúng tôi có thể tải tệp có kích thước bất kỳ lên ứng dụng PHP Có kể từ PHP 7 không?

Theo mặc định, PHP cho phép tải lên tệp tối đa là 2MB

Chủ Đề