文件系统辅助函数

文件系统辅助函数文件包含了帮助处理文件和目录的函数。

加载此辅助函数

使用以下代码加载此辅助函数:

<?php

helper('filesystem');

可用函数

以下函数可用:

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

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

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

返回:

文件数组

返回类型:

array

示例:

<?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() <https://www.php.net/manual/en/function.fopen.php>

备注

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

备注

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

备注

此函数在写入文件时对该文件进行排他锁定。

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) – 是否在数组输出中包含目录

返回:

文件名数组

返回类型:

array

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

备注

在 v4.4.4 之前,由于一个错误,这个函数并未跟随文件夹的符号链接。

示例:

<?php

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

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

返回:

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

返回类型:

array

读取指定的目录并构建一个包含文件名、文件大小、日期和权限的数组。仅当通过将第二个参数设置为 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

返回类型:

array

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

有效的 $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'