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. } ?>
评论 (0)