文件系统助手

文件系统助手文件包含用于处理文件和目录的函数。

加载此助手

此助手使用以下代码加载

<?php

helper('filesystem');

可用函数

以下函数可用

directory_map($sourceDir[, $directoryDepth = 0[, $hidden = false]])
参数:
  • $sourceDir (string) – 源目录的路径

  • $directoryDepth (int) – 要遍历的目录深度 (0 = 全递归,1 = 当前目录,等等)

  • $hidden (bool) – 是否包含隐藏路径

返回值:

文件数组

返回类型:

数组

示例

<?php

$map = directory_map('./mydirectory/');

注意

路径几乎总是相对于您的主 index.php 文件。

目录中包含的子文件夹也将被映射。如果您希望控制递归深度,可以使用第二个参数(整数)。深度为 1 将只映射顶层目录

<?php

$map = directory_map('./mydirectory/', 1);

默认情况下,隐藏文件将不会包含在返回的数组中,隐藏目录将被跳过。要覆盖此行为,您可以将第三个参数设置为 true(布尔值)

<?php

$map = directory_map('./mydirectory/', 0, true);

每个文件夹名称将是一个数组索引,而其包含的文件将按数字索引。以下是一个典型数组的示例

Array (
    [libraries] => Array
        (
            [0] => benchmark.html
            [1] => config.html
            ["database/"] => Array
                (
                    [0] => query_builder.html
                    [1] => binds.html
                    [2] => configuration.html
                    [3] => connecting.html
                    [4] => examples.html
                    [5] => fields.html
                    [6] => index.html
                    [7] => queries.html
                )
            [2] => email.html
            [3] => file_uploading.html
            [4] => image_lib.html
            [5] => input.html
            [6] => language.html
            [7] => loader.html
            [8] => pagination.html
            [9] => uri.html
        )
)

如果未找到结果,则将返回一个空数组。

directory_mirror($original, $target[, $overwrite = true])
参数:
  • $original (string) – 原始源目录

  • $target (string) – 目标目标目录

  • $overwrite (bool) – 是否在发生冲突时覆盖单个文件

递归地将源目录的文件和目录复制到目标目录中,即“镜像”其内容。

示例

<?php

try {
    directory_mirror($uploadedImages, FCPATH . 'images/');
} catch (\Throwable $e) {
    echo 'Failed to export uploads!';
}

您可以选择通过第三个参数更改覆盖行为。

write_file($path, $data[, $mode = 'wb'])
参数:
  • $path (string) – 文件路径

  • $data (string) – 要写入文件的数据

  • $mode (string) – fopen() 模式

返回值:

true 如果写入成功,false 如果发生错误

返回类型:

bool

将数据写入路径中指定的文件。如果文件不存在,则该函数将创建它。

示例

<?php

$data = 'Some file data';

if (! write_file('./path/to/file.php', $data)) {
    echo 'Unable to write the file';
} else {
    echo 'File written!';
}

您可以选择通过第三个参数设置写入模式

<?php

write_file('./path/to/file.php', $data, 'r+');

默认模式为 'wb'。有关模式选项,请参阅 PHP 手册中的 fopen()

注意

为了使此函数能够将数据写入文件,必须设置其权限,使其可写。如果文件尚不存在,则包含它的目录必须可写。

注意

该路径相对于您的主站点 index.php 文件,而不是您的控制器或视图文件。CodeIgniter 使用前端控制器,因此路径始终相对于主站点索引。

注意

此函数在写入文件时会获取该文件的独占锁。

delete_files($path[, $delDir = false[, $htdocs = false[, $hidden = false]]])
参数:
  • $path (string) – 目录路径

  • $delDir (bool) – 是否也删除目录

  • $htdocs (bool) – 是否跳过删除 .htaccess 和索引页面文件

  • $hidden (bool) – 是否也删除隐藏文件(以句点开头的文件)

返回值:

true 如果成功,false 如果发生错误

返回类型:

bool

删除提供的路径中包含的所有文件。

示例

<?php

delete_files('./path/to/directory/');

如果第二个参数设置为 true,则提供的根路径中包含的任何目录也将被删除。

示例

<?php

delete_files('./path/to/directory/', true);

注意

要删除文件,文件必须可写或由系统拥有。

get_filenames($sourceDir[, $includePath = false[, $hidden = false[, $includeDir = true]]])
参数:
  • $sourceDir (string) – 目录路径

  • $includePath (bool|null) – 是否将路径作为文件名的一部分包含在内;false 表示不包含路径,null 表示相对于 $sourceDir 的路径,true 表示完整路径

  • $hidden (bool) – 是否包含隐藏文件(以句点开头的文件)

  • $includeDir (bool) – 是否将目录包含在数组输出中

返回值:

一个包含文件名数组

返回类型:

数组

以服务器路径作为输入,并返回一个包含其中所有文件名的数组。可以通过将第二个参数设置为 'relative'(表示相对路径)或任何其他非空值(表示完整文件路径)来选择性地将文件路径添加到文件名中。

注意

在 v4.4.4 之前,由于一个 bug,此函数不会跟踪符号链接文件夹。

示例

<?php

$controllers = get_filenames(APPPATH . 'Controllers/');
get_dir_file_info($sourceDir[, $topLevelOnly = true])
参数:
  • $sourceDir (string) – 目录路径

  • $topLevelOnly (bool) – 是否只查看指定的目录(不包括子目录)

返回值:

一个包含有关提供的目录内容信息的数组

返回类型:

数组

读取指定的目录并构建一个包含文件名、文件大小、日期和权限的数组。只有在将第二个参数强制设置为 false 时,才会读取指定路径中包含的子文件夹,因为这可能是一个密集的操作。

示例

<?php

$models_info = get_dir_file_info(APPPATH . 'Models/');
get_file_info($file[, $returnedValues = ['name', 'server_path', 'size', 'date']])
参数:
  • $file (string) – 文件路径

  • $returnedValues (array|string) – 要返回的类型信息,作为数组或逗号分隔字符串传递

返回值:

包含有关指定文件的信息的数组,或在失败时返回 false

返回类型:

数组

给定一个文件和路径,返回(可选)文件的名称路径大小修改日期信息属性。第二个参数允许您明确声明要返回的信息。

有效的 $returnedValues 选项是:namesizedatereadablewriteableexecutablefileperms

symbolic_permissions($perms)
参数:
  • $perms (int) – 权限

返回值:

符号权限字符串

返回类型:

string

接受数字权限(例如由 fileperms() 返回)并返回文件权限的标准符号表示法。

<?php

echo symbolic_permissions(fileperms('./index.php'));  // -rw-r--r--
octal_permissions($perms)
参数:
  • $perms (int) – 权限

返回值:

八进制权限字符串

返回类型:

string

接受数字权限(例如由 fileperms() 返回)并返回文件权限的三字符八进制表示法。

<?php

echo octal_permissions(fileperms('./index.php')); // 644
same_file($file1, $file2)
参数:
  • $file1 (string) – 第一个文件的路径

  • $file2 (string) – 第二个文件的路径

返回值:

两个文件是否存在且哈希值相同

返回类型:

boolean

比较两个文件,查看它们是否相同(基于它们的 MD5 哈希值)。

<?php

echo same_file($newFile, $oldFile) ? 'Same!' : 'Different!';
set_realpath($path[, $checkExistence = false])
参数:
  • $path (string) – 路径

  • $checkExistence (bool) – 是否检查路径是否存在

返回值:

绝对路径

返回类型:

string

此函数将返回服务器路径,不包含符号链接或相对目录结构。可选的第二个参数将导致在无法解析路径时触发错误。

示例

<?php

$file = '/etc/php5/apache2/php.ini';
echo set_realpath($file); // Prints '/etc/php5/apache2/php.ini'

$non_existent_file = '/path/to/non-exist-file.txt';
echo set_realpath($non_existent_file, true);    // Shows an error, as the path cannot be resolved
echo set_realpath($non_existent_file, false);   // Prints '/path/to/non-exist-file.txt'

$directory = '/etc/php5';
echo set_realpath($directory);  // Prints '/etc/php5/'

$non_existent_directory = '/path/to/nowhere';
echo set_realpath($non_existent_directory, true);   // Shows an error, as the path cannot be resolved
echo set_realpath($non_existent_directory, false);  // Prints '/path/to/nowhere'