⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 folder.php

📁 Joomla!是一套获得过多个奖项的内容管理系统(Content Management System, CMS)。Joomla!采用PHP+MySQL数据库开发
💻 PHP
📖 第 1 页 / 共 2 页
字号:
<?php/** * @version		$Id: folder.php 11675 2009-03-08 20:43:54Z willebil $ * @package		Joomla.Framework * @subpackage	FileSystem * @copyright	Copyright (C) 2005 - 2008 Open Source Matters. All rights reserved. * @license		GNU/GPL, see LICENSE.php * Joomla! is free software. This version may have been modified pursuant * to the GNU General Public License, and as distributed it includes or * is derivative of works licensed under the GNU General Public License or * other free or open source software licenses. * See COPYRIGHT.php for copyright notices and details. */// Check to ensure this file is within the rest of the frameworkdefined('JPATH_BASE') or die();jimport('joomla.filesystem.path');/** * A Folder handling class * * @static * @package 	Joomla.Framework * @subpackage	FileSystem * @since		1.5 */class JFolder{	/**	 * Copy a folder.	 *	 * @param	string	The path to the source folder.	 * @param	string	The path to the destination folder.	 * @param	string	An optional base path to prefix to the file names.	 * @param	boolean	Optionally force folder/file overwrites.	 * @return	mixed	JError object on failure or boolean True on success.	 * @since	1.5	 */	function copy($src, $dest, $path = '', $force = false)	{		// Initialize variables		jimport('joomla.client.helper');		$ftpOptions = JClientHelper::getCredentials('ftp');		if ($path) {			$src = JPath::clean($path . DS . $src);			$dest = JPath::clean($path . DS . $dest);		}		// Eliminate trailing directory separators, if any		$src = rtrim($src, DS);		$dest = rtrim($dest, DS);		if (!JFolder::exists($src)) {			return JError::raiseError(-1, JText::_('Cannot find source folder'));		}		if (JFolder::exists($dest) && !$force) {			return JError::raiseError(-1, JText::_('Folder already exists'));		}		// Make sure the destination exists		if (! JFolder::create($dest)) {			return JError::raiseError(-1, JText::_('Unable to create target folder'));		}		if ($ftpOptions['enabled'] == 1)		{			// Connect the FTP client			jimport('joomla.client.ftp');			$ftp = &JFTP::getInstance(				$ftpOptions['host'], $ftpOptions['port'], null,				$ftpOptions['user'], $ftpOptions['pass']			);			if (!($dh = @opendir($src))) {				return JError::raiseError(-1, JText::_('Unable to open source folder'));			}			// Walk through the directory copying files and recursing into folders.			while (($file = readdir($dh)) !== false) {				$sfid = $src . DS . $file;				$dfid = $dest . DS . $file;				switch (filetype($sfid)) {					case 'dir':						if ($file != '.' && $file != '..') {							$ret = JFolder::copy($sfid, $dfid, null, $force);							if ($ret !== true) {								return $ret;							}						}						break;					case 'file':						// Translate path for the FTP account						$dfid = JPath::clean(str_replace(JPATH_ROOT, $ftpOptions['root'], $dfid), '/');						if (! $ftp->store($sfid, $dfid)) {							return JError::raiseError(-1, JText::_('Copy failed'));						}						break;				}			}		} else {			if (!($dh = @opendir($src))) {				return JError::raiseError(-1, JText::_('Unable to open source folder'));			}			// Walk through the directory copying files and recursing into folders.			while (($file = readdir($dh)) !== false) {				$sfid = $src . DS . $file;				$dfid = $dest . DS . $file;				switch (filetype($sfid)) {					case 'dir':						if ($file != '.' && $file != '..') {							$ret = JFolder::copy($sfid, $dfid, null, $force);							if ($ret !== true) {								return $ret;							}						}						break;					case 'file':						if (!@copy($sfid, $dfid)) {							return JError::raiseError(-1, JText::_('Copy failed'));						}						break;				}			}		}		return true;	}	/**	 * Create a folder -- and all necessary parent folders.	 *	 * @param string A path to create from the base path.	 * @param int Directory permissions to set for folders created.	 * @return boolean True if successful.	 * @since 1.5	 */	function create($path = '', $mode = 0755)	{		// Initialize variables		jimport('joomla.client.helper');		$ftpOptions = JClientHelper::getCredentials('ftp');		static $nested = 0;		// Check to make sure the path valid and clean		$path = JPath::clean($path);		// Check if parent dir exists		$parent = dirname($path);		if (!JFolder::exists($parent)) {			// Prevent infinite loops!			$nested++;			if (($nested > 20) || ($parent == $path)) {				JError::raiseWarning(					'SOME_ERROR_CODE',					'JFolder::create: ' . JText::_('Infinite loop detected')				);				$nested--;				return false;			}			// Create the parent directory			if (JFolder::create($parent, $mode) !== true) {				// JFolder::create throws an error				$nested--;				return false;			}			// OK, parent directory has been created			$nested--;		}		// Check if dir already exists		if (JFolder::exists($path)) {			return true;		}		// Check for safe mode		if ($ftpOptions['enabled'] == 1) {			// Connect the FTP client			jimport('joomla.client.ftp');			$ftp = &JFTP::getInstance(				$ftpOptions['host'], $ftpOptions['port'], null,				$ftpOptions['user'], $ftpOptions['pass']			);			// Translate path to FTP path			$path = JPath::clean(str_replace(JPATH_ROOT, $ftpOptions['root'], $path), '/');			$ret = $ftp->mkdir($path);			$ftp->chmod($path, $mode);		} else {			// We need to get and explode the open_basedir paths			$obd = ini_get('open_basedir');			// If open_basedir is set we need to get the open_basedir that the path is in			if ($obd != null)			{				if (JPATH_ISWIN) {					$obdSeparator = ";";				} else {					$obdSeparator = ":";				}				// Create the array of open_basedir paths				$obdArray = explode($obdSeparator, $obd);				$inBaseDir = false;				// Iterate through open_basedir paths looking for a match				foreach ($obdArray as $test) {					$test = JPath::clean($test);					if (strpos($path, $test) === 0) {						$obdpath = $test;						$inBaseDir = true;						break;					}				}				if ($inBaseDir == false) {					// Return false for JFolder::create because the path to be created is not in open_basedir					JError::raiseWarning(						'SOME_ERROR_CODE',						'JFolder::create: ' . JText::_('Path not in open_basedir paths')					);					return false;				}			}			// First set umask			$origmask = @umask(0);			// Create the path			if (!$ret = @mkdir($path, $mode)) {				@umask($origmask);				JError::raiseWarning(					'SOME_ERROR_CODE',					'JFolder::create: ' . JText::_('Could not create directory'),					'Path: ' . $path				);				return false;			}			// Reset umask			@umask($origmask);		}		return $ret;	}	/**	 * Delete a folder.	 *	 * @param string The path to the folder to delete.	 * @return boolean True on success.	 * @since 1.5	 */	function delete($path)	{		// Sanity check		if (!$path) {			// Bad programmer! Bad Bad programmer!			JError::raiseWarning(500, 'JFolder::delete: ' . JText::_('Attempt to delete base directory') );			return false;		}		// Initialize variables		jimport('joomla.client.helper');		$ftpOptions = JClientHelper::getCredentials('ftp');		// Check to make sure the path valid and clean		$path = JPath::clean($path);		// Is this really a folder?		if (!is_dir($path)) {			JError::raiseWarning(21, 'JFolder::delete: ' . JText::_('Path is not a folder'), 'Path: ' . $path);			return false;		}		// Remove all the files in folder if they exist		$files = JFolder::files($path, '.', false, true, array());		if (!empty($files)) {			jimport('joomla.filesystem.file');			if (JFile::delete($files) !== true) {				// JFile::delete throws an error				return false;			}		}		// Remove sub-folders of folder		$folders = JFolder::folders($path, '.', false, true, array());

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -