cb.adminfilesystem.php
上传用户:stephen_wu
上传日期:2008-07-05
资源大小:1757k
文件大小:10k
源码类别:

网络

开发平台:

Unix_Linux

  1. <?php
  2. /**
  3. * Joomla Community Builder : Plugin Handler
  4. * @version $Id: library/cb/cb.adminfilesystem.php 610 2006-12-13 17:33:44Z beat $
  5. * @package Community Builder
  6. * @subpackage cb.adminfilesystem.php
  7. * @author Beat
  8. * @copyright (C) Beat, www.joomlapolis.com
  9. * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU/GPL version 2
  10. */
  11. // ensure this file is being included by a parent file
  12. if ( ! ( defined( '_VALID_CB' ) || defined( '_JEXEC' ) || defined( '_VALID_MOS' ) ) ) { die( 'Direct Access to this location is not allowed.' ); }
  13. class cbAdminFileSystem {
  14. var $functions = array();
  15. /**
  16.  * Constructor
  17.  *
  18.  * @param  array  $functions   array of functions
  19.  * @return cbAdminFileSystem
  20.  */
  21. function cbAdminFileSystem( &$functions ) {
  22. if ( isset( $functions['_constructor'] ) ) {
  23. call_user_func_array( $functions['_constructor'], array( &$functions ) );
  24. }
  25. $this->functions =& $functions;
  26. }
  27. /**
  28.  * Gets a single instance of the cbpaidMoney class
  29.  *
  30.  * @param  boolean $purePHP  TRUE: uses only PHP functions
  31.  * @return cbpaidMoney
  32.  */
  33. function & getInstance( $purePHP = false ) {
  34. static $singleInstance = array( false => null, true => null );
  35. static $emptyArray = array();
  36. if ( ( ! isset( $singleInstance[$purePHP] ) ) || ( $singleInstance[$purePHP] === null ) ) {
  37. if ( $purePHP === true ) {
  38. $singleInstance[$purePHP] = new cbAdminFileSystem( $emptyArray );
  39. } elseif ( is_array( $purePHP ) ) {
  40. $singleInstance[$purePHP] = new cbAdminFileSystem( $purePHP );
  41. } else {
  42. global $CB_AdminFileFunctions;
  43. $singleInstance[$purePHP] = new cbAdminFileSystem( $CB_AdminFileFunctions );
  44. }
  45. }
  46. return $singleInstance[$purePHP];
  47. }
  48. function isUsingStandardPHP( ) {
  49. return ( count( $this->functions ) == 0 );
  50. }
  51. /**
  52.  * DIRECTORY METHODS:
  53.  */
  54. /**
  55.  * creates a directory
  56.  *
  57.  * @param  string   $pathname    The directory path
  58.  * @param  int      $mode        Default is 0777 like PHP function's default relying on Umask
  59.  * @param  boolean  $recursive   PHP 5.0.0+
  60.  * @param  resource $context     PHP 5.0.0+: see streams
  61.  * @return boolean               Returns TRUE on success or FALSE on failure
  62.  */
  63. function mkdir( $pathname, $mode = 0777, $recursive = null, $context = null ) {
  64. if ( isset( $this->functions['mkdir'] ) ) {
  65. return call_user_func_array( $this->functions['mkdir'], array( $pathname, $mode, $recursive, $context ) );
  66. } else {
  67. if ( version_compare( phpversion(), '5.0.0', '>=' ) ) {
  68. return ( is_null( $context ) ? mkdir( $pathname, $mode, $recursive ) : mkdir( $pathname, $mode, $recursive, $context ) );
  69. } else {
  70. if ( $recursive ) {
  71. $parts = explode( '/', $pathname );
  72. $n = count( $parts );
  73. if ( $n < 1 ) {
  74. if ( substr( $base, -1, 1 ) == '/' ) {
  75. $base = substr( $base, 0, -1 );
  76. }
  77. return mkdir( $base, $mode );
  78. } else {
  79. $path = $base;
  80. for ( $i = 0; $i < $n; $i++ ) {
  81. $path .= $parts[$i] . '/';
  82. if ( ! file_exists( $path ) ) {
  83. if ( ! mkdir( substr( $path, 0, -1 ), $mode ) ) {
  84. return false;
  85. }
  86. }
  87. }
  88. return true;
  89. }
  90. } else {
  91. return mkdir( $pathname, $mode );
  92. }
  93. }
  94. }
  95. }
  96. function rmdir( $dirname, $context = null ) {
  97. if ( isset( $this->functions['rmdir'] ) ) {
  98. return call_user_func_array( $this->functions['rmdir'], array( $dirname, $context ) );
  99. } else {
  100. return ( is_null( $context ) ? rmdir( $dirname ) : rmdir( $dirname, $context ) );
  101. }
  102. }
  103. function is_dir( $filename ) {
  104. if ( isset( $this->functions['is_dir'] ) ) {
  105. return call_user_func_array( $this->functions['is_dir'], array( $filename ) );
  106. } else {
  107. return is_dir( $filename );
  108. }
  109. }
  110. /**
  111.  * DIRECTORY LISTING METHODS:
  112.  */
  113. function opendir( $path, $context = null ) {
  114. if ( isset( $this->functions['opendir'] ) ) {
  115. return call_user_func_array( $this->functions['opendir'], array( $path, $context ) );
  116. } else {
  117. return ( is_null( $context ) ? opendir( $path ) : opendir( $path, $context ) );
  118. }
  119. }
  120. function readdir( $dir_handle ) {
  121. if ( isset( $this->functions['readdir'] ) ) {
  122. return call_user_func_array( $this->functions['readdir'], array( $dir_handle ) );
  123. } else {
  124. return readdir( $dir_handle );
  125. }
  126. }
  127. function closedir( $dir_handle ) {
  128. if ( isset( $this->functions['closedir'] ) ) {
  129. call_user_func_array( $this->functions['closedir'], array( $dir_handle ) );
  130. } else {
  131. closedir( $dir_handle );
  132. }
  133. }
  134. /**
  135.  * FILES/DIRECTORY METHODS:
  136.  */
  137. function rename( $old_name, $new_name, $context = null ) {
  138. if ( isset( $this->functions['rename'] ) ) {
  139. return call_user_func_array( $this->functions['rename'], array( $old_name, $new_name, $context ) );
  140. } else {
  141. return ( is_null( $context ) ? rename( $old_name, $new_name ) : rename( $old_name, $new_name, $context ) );
  142. }
  143. }
  144. function file_exists( $filename ) {
  145. if ( isset( $this->functions['file_exists'] ) ) {
  146. return call_user_func_array( $this->functions['file_exists'], array( $filename ) );
  147. } else {
  148. return file_exists( $filename );
  149. }
  150. }
  151. /**
  152.  * FILES METHODS:
  153.  */
  154. function is_writable( $filename ) {
  155. if ( isset( $this->functions['is_writable'] ) ) {
  156. return call_user_func_array( $this->functions['is_writable'], array( $filename ) );
  157. } else {
  158. return is_writable( $filename );
  159. }
  160. }
  161. function is_file( $filename ) {
  162. if ( isset( $this->functions['is_file'] ) ) {
  163. return call_user_func_array( $this->functions['is_file'], array( $filename ) );
  164. } else {
  165. return is_file( $filename );
  166. }
  167. }
  168. function chmod( $pathname, $mode ) {
  169. if ( isset( $this->functions['chmod'] ) ) {
  170. return call_user_func_array( $this->functions['chmod'], array( $pathname, $mode ) );
  171. } else {
  172. return chmod( $pathname, $mode );
  173. }
  174. }
  175. function copy( $source, $dest, $context = null ) {
  176. if ( isset( $this->functions['copy'] ) ) {
  177. return call_user_func_array( $this->functions['copy'], array( $source, $dest, $context ) );
  178. } else {
  179. return ( is_null( $context ) ? copy( $source, $dest ) : copy( $source, $dest, $context ) );
  180. }
  181. }
  182. function unlink( $filename, $context = null ) {
  183. if ( isset( $this->functions['unlink'] ) ) {
  184. return call_user_func_array( $this->functions['unlink'], array( $filename, $context ) );
  185. } else {
  186. return ( is_null( $context ) ? unlink( $filename ) : unlink( $filename, $context ) );
  187. }
  188. }
  189. function file_put_contents( $file, $data, $flags = null, $context = null ) {
  190. if ( isset( $this->functions['file_put_contents'] ) ) {
  191. return call_user_func_array( $this->functions['file_put_contents'], array( $file, $data, $flags, $context ) );
  192. } elseif( is_callable( 'file_put_contents' ) ) {
  193. return ( is_null( $context ) ? file_put_contents( $file, $data, $flags ) : file_put_contents( $file, $data, $flags, $context ) );
  194. } else {
  195. // php 4 emulation:
  196. // define('FILE_APPEND', 1);
  197. $mode = ( ( $flags == 1 ) || ( strtoupper( $flags ) == 'FILE_APPEND' ) ) ? 'a' : 'w';
  198. $f = @fopen( $file, $mode );
  199. if ( $f !== false) {
  200. if ( is_array( $data ) ) {
  201. $data = implode( '', $data );
  202. }
  203. $bytes_written = fwrite( $f, $data );
  204. fclose( $f );
  205. if ( ( $bytes_written === false ) && ( $mode == 'w' ) ) {
  206. @unlink( $file );
  207. }
  208. return $bytes_written;
  209. } else {
  210. return false;
  211. }
  212. }
  213. }
  214. function move_uploaded_file( $path, $new_path ) {
  215. if ( isset( $this->functions['move_uploaded_file'] ) ) {
  216. if ( is_uploaded_file( $path ) ) {
  217. return call_user_func_array( $this->functions['move_uploaded_file'], array( $path, $new_path ) );
  218. } else {
  219. return false;
  220. }
  221. } else {
  222. return move_uploaded_file( $path, $new_path );
  223. }
  224. }
  225. /**
  226.  * UTILITY METHODS:
  227.  */
  228. function deldir( $dir ) {
  229. $current_dir = $this->opendir( $dir );
  230. if ( $current_dir !== false ) {
  231. while ( false !== ( $entryname = $this->readdir( $current_dir ) ) ) {
  232. if ( $entryname != '.' and $entryname != '..' ) {
  233. if ( is_dir( $dir . $entryname ) ) {
  234. $this->deldir( _cbPathName( $dir . $entryname ) );
  235. } else {
  236. $this->unlink( $dir . $entryname );
  237. }
  238. }
  239. }
  240. $this->closedir( $current_dir );
  241. }
  242. return $this->rmdir( $dir );
  243. }
  244. }
  245. if (is_callable("jimport")) {
  246. function _CBconstructFSJJ( &$functions ) {
  247. jimport('joomla.filesystem.file');
  248. jimport('joomla.filesystem.folder');
  249. jimport('joomla.filesystem.archive');
  250. jimport('joomla.filesystem.path');
  251. }
  252. function _CBrenameFileDirJJ( $old_name, $new_name ) {
  253. if ( is_file( $old_name ) ) {
  254. return JFile::move( $old_name, $new_name );
  255. } elseif ( is_dir( $old_name ) ) {
  256. return JFolder::move( $old_name, $new_name );
  257. } else {
  258. return false;
  259. }
  260. }
  261. function _CBchmodJJ( $pathname, $mode ) {
  262. jimport( 'joomla.client.helper' );
  263. $FTPOptions = JClientHelper::getCredentials( 'ftp' );
  264. if ( $FTPOptions['enabled'] == 1 ) {
  265. jimport( 'joomla.client.ftp' );
  266. $ftp =& JFTP::getInstance($FTPOptions['host'], $FTPOptions['port'], null, $FTPOptions['user'], $FTPOptions['pass']);
  267. //Translate path to FTP account:
  268. $dest = JPath::clean(str_replace( JPATH_ROOT, $FTPOptions['root'], $pathname), '/' );
  269. return $ftp->chmod( $pathname, $mode );
  270. } else {
  271. return @chmod( $pathname, $mode );
  272. }
  273. }
  274. global $CB_AdminFileFunctions;
  275. $CB_AdminFileFunctions = array( '_constructor' => '_CBconstructFSJJ',
  276. 'mkdir' => array( 'JFolder', 'create' ),
  277. 'rmdir' => array( 'JFolder', 'delete' ),
  278. 'is_dir' => null,
  279. 'opendir' => null,
  280. 'readdir' => null,
  281. 'closedir' => null,
  282. 'rename' => '_CBrenameFileDirJJ',
  283. 'file_exists' => null,
  284. 'is_writable' => null,
  285. 'is_file' => null,
  286. 'chmod' => '_CBchmodJJ',
  287. 'copy' => array( 'JFile', 'copy' ),
  288. 'unlink' => array( 'JFile', 'delete' ),
  289. 'file_put_contents' => array( 'JFile', 'write' ),
  290. 'move_uploaded_file'=> array( 'JFile', 'upload' ),
  291.  );
  292. }
  293. ?>