+2

Bí quyết làm việc với file trong Laravel 4

Trong mỗi dự án web thì việc upload file lên host, server là điều không thể thiếu. Đối với framework laravel thì điều này thật sự đơn giản. Trong bài hướng dẫn này, mình sẽ không hướng dẫn chi tiết các bạn cách upload một file lên server cụ thể. Mình sẽ tổng hợp các cách xử lý khi gặp sự cố khi upload 1 file lên server.

  • **Kiểm tra một file có tồn tại hay không? **
    • Vấn đề: Bạn muốn biết một file có tồn tại hay không. Bạn biết rõ trong php có hàm file_exists() để thao tác việc bạn đang mong muốn. Nhưng trong laravel thì thực hiện ra sao?
    • Giải pháp: Sử dụng phương thức File::exists()
    • Ví dụ
    if (File::exists($myfile))
    {
        echo "Yup. It exists.";
    }
  • Lấy nội dung của một file
    • Vấn đề: Bạn muốn lấy nội dung của 1 file trong laravel
    • Giải pháp: Sử dụng phương thức File::get()
    $contents = File::get($filename);
- Chú ý:
    - _$filename_ là tên file cần lấy nội dung
    - Để tránh những ngoại lễ trả về gây lỗi cho việc lấy nội dung. Bạn nên thực hiện phương thức trên trong một khối try/catch
        try
        {
            $contents = File::get($filename);
        }
        catch (Illuminate\Filesystem\FileNotFoundException $exception)
        {
            die("The file doesn't exist");
        }
  • Lấy nội dung từ Remote File
    • Giải pháp: Sử dụng phương thức File::getRemote()
    $contents = File::getRemote($url);
- Chú ý:
    - $url là đường dẫn tới file cần lấy nội dung
    - Nếu không lấy được nội dung của file, giá trị trả về là _false_
    $contents = File::getRemote($url);
    if ($contents === false)
    {
        die("Couldn't fetch the file.");
    }
  • Lấy giá trị trả về của một file
    • Bạn muốn nhận được các giá trị trả về của một file. Bạn có một file PHP trả về giá trị, và muốn thực thi tập tên và lấy các giá trị trả về.
    • Sử dụng phương thức File::getRequire()
    <?php
    // file1.php - returns an array
    return array(
        'key1' => 'value1',
        'key2' => 'value2',
    );
    ?>
    // Fetching the array of the file above
    $value = File::getRequire('file1.php');
- Chú ý: Nếu tập tin không tìm thấy ngoại lệ trả về thì tương tự như phần trên, chúng ta cũng cần đặt hàm này trong một khối try/ catch
  • Khi cần dùng một tập tin
    • Khi code của bạn cần dùng một file khác, bạn sẽ nghĩ đến hàm require_once trong php.
    • Để dùng trong laravel, sử dụng phương thức File::require_once()
    File::requireOnce($some_php_file);
  • Viết nội dung cho file
    • Bạn muốn tạo mới hoặc thay đổi nội dung một file
    • Sử dụng phương thức File::put()
    $bytes_written = File::put($file, $contents);
    if ($bytes_written === false)
    {
        die("Error writing to file");
    }
-  Đây là hàm tổng quát của phương thức file_put_contents trong PHP
  • Thêm vào đầu một file
    • Sử dụng phương thức File::prepend()
$bytesWritten = File::prepend($filename, $content);
if ($bytesWritten === false)
{
    die("Couldn't write to the file.");
}
- Nếu có lỗi xảy ra trong quá trình ghi file. Giá trị trả về là false.
  • Thêm vào cuối file
    • Sử dụng phương thức File::append()
    $bytesWritten = File::append($filename, $content);
    if ($bytesWritten === false)
    {
        die("Couldn't write to the file.");
    }
-  Thêm nội dung vào cuối file. Nếu file đã tồn tại. Nếu file chưa tồn tại thì nội dung của file sẽ là $content
-Nếu có lỗi trong quá trình ghi thì giá trị trả về là false.
  • Xóa một file
    • Bạn muốn xóa 1 file ra khỏi hệ thống. Trong PHP có hàm unlink() để thực hiện điều này.
    • Để thực hiện trong Laravel, sử dụng phương thức File::delete()
    // Delete a single file
    File::delete($filename);
    // Delete multiple files
    File::delete($file1, $file2, $file3);
    // Delete an array of files
    $files = array($file1, $file2);
    File::delete($files);
- Trước khi xóa một file, cần check file có tồn tại không. Sử dụng hàm File::exists()
  • Di chuyển một file tới thư mục mới Sử dụng File::move()
    if ( ! File::move($oldfile, $newfile))
    {
        die("Couldn't rename file");
    }
- Sử dụng để chuyển file đến các thư mục khác nhau, các tệp tin khác nhau, hoặc dùng để đổi tên file
  • Copy 1 file đến thư mục mới
    • Sử dụng phương thức File::copy()
    if ( ! File::copy($file, $dest))
    {
        die("Couldn't copy file");
    }
- Mở rộng của hàm copy() trong PHP
  • Lấy Extension của một file
    • Sử dụng hàm File::extension()
    $extension = File::extension($filename);
- Nếu file không có extension, kết quả trả về là một xâu rỗng.
  • Lấy kiểu của file
    • Sử dụng phương thức File::type()
    echo File::type($filename);
- $filename là tên của file cần lấy kiểu
  • Lấy size của file
    • Sử dụng phương thức File::size()
    $bytes = File::size($filename);
- Cần kiểm tra sự tồn tại của file trước khi lấy size, $filename là tên file cần lấy
  • Lấy thời gian chỉnh sửa file gần nhất
    • Sử dụng phương thức File::lastModified()
    $timestamp = File::lastModified($filename);
    if ($timestamp === false)
    {
        die("Failure getting the time");
    }
- Giá trị trả về là thời gian theo Unix
- Kiểm tra sự tồn tại của file trước khi lấy thời gian chỉnh sửa
  • **Kiểm tra nếu path là đường dẫn **
    • Kiểm tra filepath có phải là đường dẫn hay không.
    • Sử dụng File::isDirectory()
    if (File::isDirectory($filename))
    {
        echo "Yes. It's a directory.";
    }
- Giá trị trả về là true nếu đúng, false khi ngược lại.
  • Kiểm tra nếu path là một file
    • Sử dụng phương thức File::isFile()
    if (File::isFile($filename))
    {
        echo "Yep. It's a file.";
    }
- Trả về true nếu đúng, ngược lại là false.
  • Tìm file theo một mẫu có sẵn
    • Sử dụng File::glob()
    $dir_list = File::glob('/test/*', GLOB_ONLYDIR);
    if ($dir_files === false)
    {
        die("An error occurred.");
    }
- Các giá trị kiểm tra là:
    - GLOB_MARK - Adds a slash to each directory returned
    - GLOB_NOSORT - Return files as they appear in the directory (no sorting)
    - GLOB_NOCHECK - Return the search pattern if no files matching it were found
    - GLOB_NOESCAPE - Backslashes do not quote meta-characters
    - GLOB_BRACE - Expands {a,b,c} to match 'a', 'b', or 'c'
    - GLOB_ONLYDIR - Return only directory entries which match the pattern
    - GLOB_ERR - Stop on read errors (like unreadable directories), by default errors are ignored.
  • Lấy về danh sách tất cả các file trong một đường dẫn.
    • Sử dụng File::files()
    $files = File::files();
- Giá trị trả về là một mảng
- Mảng chỉ chứa các tệp tin
- Nếu không có tệp tin trong thư mục hay thư mục không tồn tại, giá trị trả về là một mảng rỗng
  • Mở một form HTML mới
    • Sử dụng phương thức Form::open()
    • Sử dụng phương thức mặc định
    {{ Form::open() }}
- Với câu lệnh trên, thẻ HTML sinh ra có cấu trúc như sau:
    <form method="POST" action="http://currenturl" accept-charset="UTF-8">
    <input name="_token" type="hidden" value="somelongrandom string">
Bắt đầu 1 form với phương thức là POST, URL hiện tại và accept-charset="UTF-8"
- Để thay đổi địa chỉ URL, thực hiện như sau:
    {{ Form::open(array('url' => 'http://full.url/here')) }}
- HTML sinh ra như sau:
    <form method="POST" action="http://full.url/here" accept-charset="UTF-8">
    <input name="_token" type="hidden" value="somelongrandom string">
- URL đến một controller
        {{ Form::open(array('action' => '[email protected]')) }}
- Để upload file trong laravel, khi tạo form bạn cần thêm thuộc tính 'files' => true khi tạo form mới
    {{ Form::open(array('files' => true)) }}

Trên đây là một số phương thức giúp các bạn làm việc với file hiệu quả hơn. Chúc mọi người thành công. ^^


All Rights Reserved

Viblo
Let's register a Viblo Account to get more interesting posts.