使用文件
CodeIgniter 提供了一个 File 类,它包装了 SplFileInfo 类,并提供了一些额外的便利方法。此类是 上传文件 和 图像 的基类。
获取 File 实例
您可以通过在构造函数中传入文件的路径来创建一个新的 File 实例。默认情况下,文件不需要存在。但是,您可以传递一个额外的参数“true”来检查文件是否存在,如果不存在则抛出 FileNotFoundException()
。
<?php
$file = new \CodeIgniter\Files\File($path);
利用 Spl
一旦您拥有一个实例,您就可以随时使用 SplFileInfo 类的全部功能,包括
<?php
// Get the file's basename
echo $file->getBasename();
// Get last modified time
echo $file->getMTime();
// Get the true real path
echo $file->getRealPath();
// Get the file permissions
echo $file->getPerms();
// Write CSV rows to it.
if ($file->isWritable()) {
$csv = $file->openFile('w');
foreach ($rows as $row) {
$csv->fputcsv($row);
}
}
新功能
除了 SplFileInfo 类中的所有方法外,您还获得了一些新工具。
getRandomName()
您可以使用 getRandomName()
方法生成一个加密安全的随机文件名,并在前面加上当前时间戳。这在移动文件时重命名文件特别有用,这样文件名就无法猜测。
<?php
// Generates something like: 1465965676_385e33f741.jpg
$newName = $file->getRandomName();
getSize()
返回上传文件的字节大小。
<?php
$size = $file->getSize(); // 256901
getSizeByUnit()
返回上传文件的默认字节大小。您可以将 'kb' 或 'mb' 作为第一个参数传递,分别以 KB 或 MB 为单位获取结果。
<?php
$bytes = $file->getSizeByUnit(); // 256901
$kilobytes = $file->getSizeByUnit('kb'); // 250.880
$megabytes = $file->getSizeByUnit('mb'); // 0.245
getMimeType()
检索文件的媒体类型(MIME 类型)。使用被认为尽可能安全的方法来确定文件类型。
<?php
$type = $file->getMimeType();
echo $type; // image/png
guessExtension()
尝试根据可信的 getMimeType()
方法确定文件扩展名。如果 MIME 类型未知,将返回 null。这通常比简单地使用文件名提供的扩展名更可靠。使用 **app/Config/Mimes.php** 中的值来确定扩展名。
<?php
// Returns 'jpg' (WITHOUT the period)
$ext = $file->guessExtension();
移动文件
每个文件都可以使用名为 move()
的方法移动到其新位置。这将要移动文件的目录作为第一个参数。
<?php
$file->move(WRITEPATH . 'uploads');
默认情况下,使用原始文件名。您可以通过将其作为第二个参数传递来指定新文件名。
<?php
$newName = $file->getRandomName();
$file->move(WRITEPATH . 'uploads', $newName);
move() 方法返回一个新的 File 实例,用于重新定位的文件,因此您必须捕获结果,如果需要结果位置。
<?php
$file = $file->move(WRITEPATH . 'uploads');