Làm việc với FTP qua Laravel

Chắc hẳn ai làm việc với web đều nghe đến việc đưa source web lên host thông qua FTP. Ai cũng nghĩ FTP là phương thức để up web lên host. Nay bài viết này tôi sẽ gửi đến các bạn 1 cái nhìn khác về sử dụng FTP. Bài viết thuộc bản quyền của Viblo.

Làm quen với FTP

FTP là chữ viết tắt của File Transfer Protocol (Giao thức chuyển nhượng tập tin), đây là một giao thức giúp bạn dễ dàng trao đổi các dữ liệu giữa máy tính của bạn với host và ngược lại. Thông qua FTP, chúng ta dễ dàng thực việc việc trao đổi file giữa local với máy chủ. FTP có thể làm việc với các file trên host những không làm việc được với Database. Port mặc định ban đầu là 21. Để dễ dàng thực hiện các thao tác liên quan đến FTP, các bạn có cài môi trường FTP trên local. Với win bạn có thể cài xampp sau đó sử dụng FileZilla FTP Service của Xampp. Còn nếu bạn dùng Ubuntu bạn có thể cài vsftpd lên bằng cách tham khảo tại đây.

Sử dụng Storage với FTP

Laravel có thể làm việc với FTP thông qua Storage. Thực ra không hẳn là Storage chỉ làm việc với FTP mà còn có các phương thức khác như local, s3ftp.

Thông số kết nối FTP

Như ta biết để lam việc với FTP ta cần các thông tin như Ip, user, password, port. Thì để sử dụng FTP trong việc lưu trữ file thì ta cần config vào filesystem.php trong folder config với các thông số sau:

<?php

return [
    'default' => 'ftp',
    'disks' => [
        'ftp' => [
            'driver'   => 'ftp',
            'host'     => 'ftp.example.com',
            'username' => 'your-username',
            'password' => 'your-password',
            //Các thông số mở rộng
            // 'port'     => 21,
            // 'root'     => '',
            // 'passive'  => true,
            // 'ssl'      => true,
            // 'timeout'  => 30,
        ],
    ];

Sau khi khai báo các thông số trên ta có thể bắt tay vào làm việc với FTP thông qua Storage.

Các lệnh làm việc với FTP

Upload 1 file lên FTP

Để upload 1 file lên server FTP ta dùng Storage::put Cách dùng

Storage::put('tên file', 'nội dung file');

Nếu dùng như ở trên thì Storage sẽ lấy giá trị default khai báo trong file config. Nếu như ta sử dụng nhiều phương thức lưu khác nhau thì để upload file lên ta dùng như sau:

Storage::disk('tên config')->put('tên file', 'nội dung file');

Như vậy ta có thể hiểu việc khai báo config ta có thể kết nối nhiều server với nhau. Ngoài lệnh up lên ta có thể có copy hay di chuyển file bằng các hàm copy hay move.

Lấy 1 file về và xóa file

Để nhận nội dung 1 file trên server về ta dùng

Storage::get('tên file');

Cũng như các upfile lên ta có thể sử dụng Storage::disk() để lựa chọn phương thức phù hợp. Ngoài ra Storage cũng cung cấp 1 hàm nữa là has giúp ta kiểm tra sự tồn tại của file đó hay cũng như vài thông tin liên quan như kích thước của file qua hàm size hay lần sửa gần đây nhất lastModified. Để xóa file ta dùng lệnh delete như sau

Storage::delete('tên file');
Làm việc với folder

Ngoài làm việc trực tiếp với file thì Storage của Laravel cũng cung cấp các lệnh làm việc với folder như tạo folder, xóa folder.

\\Tạo folder
Storage::makeDirectory('Tên folder');
\\Xóa folder
Storage::deleteDirectory('Tên folder');

Thêm vào nữa nếu muốn kiểm tra tất cả những file có trong folder thì dùng files, nhưng nếu muốn lấy cả folder con nữa thì ta dùng hàm allFiles, còn nếu chỉ lấy các folder con thôi thì ta dùng allDirectories.

Làm việc với bên thứ 3

Ngoài cách sử dụng Storage trong việc sử dụng dữ liệu với FTP thì trong bài viết này tôi xin giới thiệu thêm 1 bên thứ ba phục vụ cho việc này đó chính là anchu ftp. Đây là bộ thư viện sử dụng phương thức kết nối đến FTP và làm việc với nó. Vì đã đưa lên package của composer nên việc cài đặt lên Laravel khá là đơn giản.

Cài đặt

Đầu tiên ta cần thêm thư viện này vào file composer.json

    "require": {
        "anchu/ftp": "~2.0"
    }

Sau đó chạy lệnh composer update. Khi chạy lệnh này sẽ lấy toàn bộ source về và đưa vào folder vendor. Tiếp đến ta sửa file config app.php như sau

    'providers' => [
        'Anchu\Ftp\FtpServiceProvider',
    ],

sau đó để sinh ra file config ta chạy php artisan vendor:publish. Sau khi chạy lệnh này thì sẽ sinh ra 1 file

'connections' => [
    'default' => [
        'host'   => 127.0.0.1',
        'port'  => 21,
        'username' => 'username',
        'password'   => 'password',
        'passive'   => false,
    ],
],

Tại đây ta có thể thiết lập kiểu connection khác nhau.

Kết nối đến server

Để kết nối đến Server FTP ta dùng như sau:

use Anchu\Ftp\Facades\Ftp;
function connect()
{
    if (FTP::connection('default')) {
        //kết nối thành công
    }
}

Các lệnh làm việc lên server

Lấy tất cả file trong folder

Để lấy các file trong folder ta dùng lệnh

getDirListing($directory, $parameters );

Chạy hàm này sẽ trả về danh sách tên các file và folder có trong $directory. $paramegers là các lựa chọn thêm như -la là trả về các thuộc tính khác của file hoặc folder.

Tạo và xóa folder

Để tạo folder ta dùng lệnh makeDir('Tên folder'); Để xóa folder thì ta dùng lệnh removeDir($tenFolder, $xoaToanBo); với $tenFolder là tên folder cần xóa nhưng với điều kiện là folder này là folder trống, tức là không có folder con hay file trong đó. Nếu như có thì $xoaToanBo set bằng true thì sẽ xóa tất cả phần tử con.

Upload file

Để upload file lên server ta dùng lệnh

uploadFile($fileFrom, $fileTo, $mode)

Trong đó: $fileFrom: Đường dẫn file ở local. $fileTo: Đường dẫn ở server $mode: Chuyển định dạng kiểu file. Nó chỉ là 1 trong 2 giá trị là FTP_ASCII hay FTP_BINARY và nếu giá trị này không thiết lâp thì sẽ tự động lấy giá trị mặc định của file.

Tải file về

Để tải 1 file từ server ta dùng lệnh sau

downloadFile($fileFrom, $fileTo, $mode)

Downloads a file from the FTP server

$fileFrom: Đường dẫn file trên server. $fileTo: Đường dẫn trên local, và nếu có file tồn tại thì ghi đè lên. $mode: Chuyển định dạng kiểu file. Nó chỉ là 1 trong 2 giá trị là FTP_ASCII hay FTP_BINARY và nếu giá trị này không thiết lâp thì sẽ tự động lấy giá trị mặc định của file.

Xóa 1 file

Để xóa 1 file ta dùng

delete($path);

Ngoài ra còn có nhiều lệnh khác làm việc lên server.

Kết luận

Qua đây ta thấy ngoài việc sử dụng FTP như 1 cách up source web thì ta có thể sử dụng FTP như 1 phương thức lưu trữ file lên 1 server khác. Ở đây chúng ta tìm hiểu đến cả 2 phương pháp Storage và Anchu FTP. Về mặt ưu điểm của Storage thì là có sẵn của Laravel nên không cần thiết phải cài đặt thêm gì. Nhưng Anchu FTP thì có những hàm đặc trưng hơn như cho ta biết thông tin rõ hơn về file cũng như thông tin của Folder. Tại sao ta cần quan tâm lưu file thông qua FTP. Nếu như ở 1 web đơn giản muốn giảm thiểu chi phí như việc đăng ký host dung lượng thấp sau đó mua thêm 1 host lưu trữ như vậy chi phí tiết kiệm hơn hay như các host giới hạn băng thông thì việc lưu sang server khác là 1 phuong án tốt. Rất cám ơn bạn đã đọc bài của tôi tại Viblo. Chúc các bạn code vui vẻ.

All Rights Reserved