官方系列教材 - G计划

Joomla开发手册

Joomla的文件系统提供了对常规文件操作的封装,主要由4个类 JFile,JFolder,JPath,JArchive来实现。本文主要讲解JFolder类的一些常用文件夹操作 

复制文件夹


代码:

JFolder::copy($src, $dest, $path, $force);

这个函数会将$src指定的文件夹及其所有内容(包括子目录)复制到$dest指定的位置。它会检查原地址和目标地址是否存在且权限是否允许。这个方法支持FTP层操作

  • 如果目标路径不存在,则会尝试创建。
  • $path指定相对路径
  • $firce是否覆盖目标文件夹。如果目标路径存在,且$force为false的时候,会提示错误。

创建文件夹


代码:

JFolder::create($path, $mode);

 这个方法是对PHP的mkdir()方法进行封装,在此基础上增加了权限检查和路径可用性检查。这个方法支持FTP层操作。

  • $mode参数可以指定创建文件夹的权限。默认情况下成功创建文件夹后权限会设置为0755
  • 如果父路径不存在,则会尝试创建。如果目录已经存在,则会返回false

移动文件夹


代码:

JFolder::move($src, $dest);

这个方法是对PHP的rename()方法进行封装,在此基础上增加了权限检查和路径可用性检查。这个方法支持FTP层操作。

检查文件夹是否存在


代码:

JFolder::exists($path);

这个函数的实现是对PHP 的is_dir() 函数的封装,如果存在返回true

清理文件夹路径


代码:

JFolder::makeSafe($path);

这个函数会过滤掉文件名中不合法的字符(odd characters),返回一个安全的文件夹名

读取文件夹中的所有文件


代码:

JFolder::files($path, $filter = '.', $recurse, $fullpath , $exclude);

这个函数读取指定文件夹中的所有文件。

  • $path 指定需要读取文件夹的路径
  • $filter 过滤器
  • $recurse 是否递归
  • $fullpath 是否返回全路径
  • $exclude  数组 需要排除的文件扩展名。实际使用中感觉这个参数无效

读取文件夹中的所有文件夹


代码:

JFolder::folders($path, $filter = '.', $recurse, $fullpath , $exclude);

这个函数读取指定文件夹中的所有文件夹。使用方法和JFolder::files一样

得到文件夹数结构


JFolder::listFolderTree($path, $filter, $maxLevel = 3, $level = 0, $parent = 0);

它将读取在$path指定的文件夹,并将结果以数组的方法返回,适合于树形显示。您可以指定级别数。文件夹数组如下所示

Array
(
    [0] => Array
        (
            [id] => 1
            [parent] => 0
            [name] => administrator
            [fullname] => g:/joomla_1012/administrator
            [relname] => g:/joomla_1012/administrator
        )

    [1] => Array
        (
            [id] => 2
            [parent] => 1
            [name] => backups
            [fullname] => g:/joomla_1012/administrator/backups
            [relname] => g:/joomla_1012/administrator/backups
        )

    [2] => Array
        (
            [id] => 3
            [parent] => 1
            [name] => components
            [fullname] => g:/joomla_1012/administrator/components
            [relname] => g:/joomla_1012/administrator/components
        )
)

示范代码


本代码演示了如何使用文件系统来做复制移动操作

目标:

读取根目录下images文件夹的内容。创建一个名为jpg的子文件夹,然后images中所有jpg文件移至jpg子文件夹。

实现代码:

<?php
// First we set up parameters.
$searchpath = JPATH_COMPONENT . '/images';

// Import the folder system library.
jimport('joomla.filesystem.folder');

// Then we create the subfolder called jpg.
if (!JFolder::create($searchpath . "/jpg"))
{
   // Throw error message and stop script.
}

// Now we read all jpg files and put them in an array.
$jpgFiles = JFolder::files($searchpath, '.jpg');

// Now we need some stuff from the ''JFile:: class'' to move all the files into the new folder.
foreach ($jpgFiles as $file)
{
   JFile::move($searchpath . '/' . $file, $searchpath . '/' . 'jpg' . $file);
}

// Last we move the complete subdir to the root of the component.
if (JFolder::move($searchpath . '/'. 'jpg', JPATH_COMPONENT))
{
   // Redirect with perhaps a happy message.
}
else
{
   // Throw an error.
}
?>

 

 

作者: 樱木花道

Joomla程序员,从J1.5到J4.x始终都在做Joomla相关开发定制工作,有超过10年行业经验,国内Joomla扩展开发商ZMAX团队的核心成员

作者网站:ZMAX程序人

评论 (0)

  • 最新在前
  • 最佳在前

第3章 处理URL请求参数

第5章 日志

第6章 错误和调试

第10章 缓存

第14章 路由系统