XOOPS 2.5.6  Final
 All Classes Namespaces Files Functions Variables Pages
file.php
Go to the documentation of this file.
1 <?php
20 defined('XOOPS_ROOT_PATH') or die('Restricted access');
21 
54 {
61  var $folder = null;
62 
69  var $name = null;
70 
77  var $info = array();
78 
85  var $handle = null;
86 
93  var $lock = null;
94 
103  function __construct($path, $create = false, $mode = 0755)
104  {
105  XoopsLoad::load('XoopsFile');
106  $this->folder = XoopsFile::getHandler('folder', dirname($path), $create, $mode);
107  if (!is_dir($path)) {
108  $this->name = basename($path);
109  }
110  if (!$this->exists()) {
111  if ($create === true) {
112  if ($this->safe($path) && $this->create() === false) {
113  return false;
114  }
115  } else {
116  return false;
117  }
118  }
119  }
120 
128  function XoopsFileHandler($path, $create = false, $mode = 0755)
129  {
130  $this->__construct($path, $create, $mode);
131  }
132 
138  function __destruct()
139  {
140  $this->close();
141  }
142 
149  function create()
150  {
151  $dir = $this->folder->pwd();
152  if (is_dir($dir) && is_writable($dir) && ! $this->exists()) {
153  if (touch($this->pwd())) {
154  return true;
155  }
156  }
157  return false;
158  }
159 
168  function open($mode = 'r', $force = false)
169  {
170  if (!$force && is_resource($this->handle)) {
171  return true;
172  }
173  if ($this->exists() === false) {
174  if ($this->create() === false) {
175  return false;
176  }
177  }
178  $this->handle = fopen($this->pwd(), $mode);
179  if (is_resource($this->handle)) {
180  return true;
181  }
182  return false;
183  }
184 
194  function read($bytes = false, $mode = 'rb', $force = false)
195  {
196  $success = false;
197  if ($this->lock !== null) {
198  if (flock($this->handle, LOCK_SH) === false) {
199  return false;
200  }
201  }
202  if ($bytes === false) {
203  $success = file_get_contents($this->pwd());
204  } else if ($this->open($mode, $force) === true) {
205  if (is_int($bytes)) {
206  $success = fread($this->handle, $bytes);
207  } else {
208  $data = '';
209  while (! feof($this->handle)) {
210  $data .= fgets($this->handle, 4096);
211  }
212  $success = trim($data);
213  }
214  }
215  if ($this->lock !== null) {
216  flock($this->handle, LOCK_UN);
217  }
218  return $success;
219  }
220 
229  function offset($offset = false, $seek = SEEK_SET)
230  {
231  if ($offset === false) {
232  if (is_resource($this->handle)) {
233  return ftell($this->handle);
234  }
235  } else if ($this->open() === true) {
236  return fseek($this->handle, $offset, $seek) === 0;
237  }
238  return false;
239  }
240 
249  function prepare($data)
250  {
251  $lineBreak = "\n";
252  if (substr(PHP_OS, 0, 3) == 'WIN') {
253  $lineBreak = "\r\n";
254  }
255  return strtr($data, array(
256  "\r\n" => $lineBreak ,
257  "\n" => $lineBreak ,
258  "\r" => $lineBreak));
259  }
260 
270  function write($data, $mode = 'w', $force = false)
271  {
272  $success = false;
273  if ($this->open($mode, $force) === true) {
274  if ($this->lock !== null) {
275  if (flock($this->handle, LOCK_EX) === false) {
276  return false;
277  }
278  }
279  if (fwrite($this->handle, $data) !== false) {
280  $success = true;
281  }
282  if ($this->lock !== null) {
283  flock($this->handle, LOCK_UN);
284  }
285  }
286  return $success;
287  }
288 
297  function append($data, $force = false)
298  {
299  return $this->write($data, 'a', $force);
300  }
301 
308  function close()
309  {
310  if (!is_resource($this->handle)) {
311  return true;
312  }
313  return fclose($this->handle);
314  }
315 
322  function delete()
323  {
324  if ($this->exists()) {
325  return unlink($this->pwd());
326  }
327  return false;
328  }
329 
336  function info()
337  {
338  if ($this->info == null) {
339  $this->info = pathinfo($this->pwd());
340  }
341  if (!isset($this->info['filename'])) {
342  $this->info['filename'] = $this->name();
343  }
344  return $this->info;
345  }
346 
353  function ext()
354  {
355  if ($this->info == null) {
356  $this->info();
357  }
358  if (isset($this->info['extension'])) {
359  return $this->info['extension'];
360  }
361  return false;
362  }
363 
370  function name()
371  {
372  if ($this->info == null) {
373  $this->info();
374  }
375  if (isset($this->info['extension'])) {
376  return basename($this->name, '.' . $this->info['extension']);
377  } elseif ($this->name) {
378  return $this->name;
379  }
380  return false;
381  }
382 
390  function safe($name = null, $ext = null)
391  {
392  if (!$name) {
393  $name = $this->name;
394  }
395  if (!$ext) {
396  $ext = $this->ext();
397  }
398  return preg_replace('/[^\w\.-]+/', '_', basename($name, $ext));
399  }
400 
408  function md5($maxsize = 5)
409  {
410  if ($maxsize === true) {
411  return md5_file($this->pwd());
412  } else {
413  $size = $this->size();
414  if ($size && $size < ($maxsize * 1024) * 1024) {
415  return md5_file($this->pwd());
416  }
417  }
418  return false;
419  }
420 
427  function pwd()
428  {
429  return $this->folder->slashTerm($this->folder->pwd()) . $this->name;
430  }
431 
438  function exists()
439  {
440  $exists = (file_exists($this->pwd()) && is_file($this->pwd()));
441  return $exists;
442  }
443 
450  function perms()
451  {
452  if ($this->exists()) {
453  return substr(sprintf('%o', fileperms($this->pwd())), - 4);
454  }
455  return false;
456  }
457 
465  function size()
466  {
467  if ($this->exists()) {
468  return filesize($this->pwd());
469  }
470  return false;
471  }
472 
479  function writable()
480  {
481  return is_writable($this->pwd());
482  }
483 
490  function executable()
491  {
492  return is_executable($this->pwd());
493  }
494 
501  function readable()
502  {
503  return is_readable($this->pwd());
504  }
505 
511  function owner()
512  {
513  if ($this->exists()) {
514  return fileowner($this->pwd());
515  }
516  return false;
517  }
518 
525  function group()
526  {
527  if ($this->exists()) {
528  return filegroup($this->pwd());
529  }
530  return false;
531  }
532 
539  function lastAccess()
540  {
541  if ($this->exists()) {
542  return fileatime($this->pwd());
543  }
544  return false;
545  }
546 
553  function lastChange()
554  {
555  if ($this->exists()) {
556  return filemtime($this->pwd());
557  }
558  return false;
559  }
560 
567  function &folder()
568  {
569  return $this->folder;
570  }
571 }
572 
573 ?>