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层操作。
检查文件夹是否存在
代码:
这个函数的实现是对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.
}
?>
|
更多建议: