home *** CD-ROM | disk | FTP | other *** search
/ PC World 2001 August / PCWorld_2001-08_cd.bin / Komunikace / phptriad / phptriadsetup2-11.exe / php / pear / PHPDoc / filehandler / PhpdocFileHandler.php
PHP Script  |  2001-02-18  |  6KB  |  208 lines

  1. <?php
  2. /**
  3. * File handling functions in phpdoc. 
  4. *
  5. * @version  $Id: PhpdocFileHandler.php,v 1.3 2001/02/18 15:40:33 uw Exp $
  6. * @author   Ulf Wendel <ulf@redsys.de>
  7. */
  8. class PhpdocFileHandler extends PhpdocObject {
  9.     
  10.     /**
  11.     * Filepath. The path is automatically added in front of all filenames
  12.     *
  13.     * @var  string  $path
  14.     * @see  setFilePath()
  15.     */
  16.     var $path = "";
  17.         
  18.     /**
  19.     * Reads a list of files or one file.
  20.     *
  21.     * @param    mixed       Filename or an array filenames, $k => $filename
  22.     * @throws   PhpdocError
  23.     * @access   public
  24.     */        
  25.     function get($files) {
  26.         if ("" == $files) {
  27.             $this->err[] = new PhpdocError("No files specified.", __FILE__, __LINE__);
  28.             return array("", "");
  29.         }
  30.         
  31.         if (!is_array($files))
  32.             $files = array($files);
  33.         
  34.         $contents = array();    
  35.         $together = "";
  36.         
  37.         reset($files);
  38.         while (list($k, $filename) = each($files)) 
  39.             $contents[$filename] = $this->getFile($filename);
  40.         
  41.         return $contents;
  42.     } // end func get
  43.     
  44.     /**
  45.     * Sets the filepath. The path is automatically added in front of all filenames
  46.     *
  47.     * @param    string  $path
  48.     * @return   bool    $ok
  49.     * @access   public
  50.     */
  51.     function setFilePath($path) {
  52.         $this->path = $path;
  53.     } // end func setFilePath
  54.     
  55.     /** 
  56.     * Reads a file. 
  57.     *
  58.     * @param    string  $filename
  59.     * @return   string  $content
  60.     * @throws   PhpdocError
  61.     */
  62.     function getFile($filename) {
  63.         if ("" == $filename) {
  64.             $this->err[] = new PhpdocError("getFile(), no filename specified.", __FILE__, __LINE__);                
  65.             return "";
  66.         }
  67.         if (!file_exists($filename)) {
  68.             $this->err[] = new PhpdocError("getFile(), unknown file '$filename'.", __FILE__, __LINE__);
  69.             return "";
  70.         }
  71.         if (!$fh = @fopen($filename, "r")) {
  72.             $this->err[] = new PhpdocError("getFile(), can't open file '$filename' for reading.", __FILE__, __LINE__);
  73.             return "";
  74.         }
  75.  
  76.         $content = fread($fh, filesize($filename));
  77.         fclose($fh);
  78.         
  79.         return $content;            
  80.     } // end func getFile
  81.     
  82.     /**
  83.     * Appends a string to a file.
  84.     * 
  85.     * @param    string  Filename
  86.     * @param    string  Content to append
  87.     * @param    string  Directory prefix
  88.     * @throw    PHPDocError
  89.     * @return    boolean
  90.     */
  91.     function appendToFile($filename, $content, $directory = "") {
  92.         if ("" == $filename || "" == $content) {
  93.             $this->err[] = new PhpdocError("No filename and/or no content given.", __FILE__, __LINE__);
  94.             return false;
  95.         }
  96.         
  97.         $fh = @fopen($filename, "a");
  98.         if (!$fh) {
  99.             print $filename;
  100.             return false;
  101.         }
  102.         
  103.         fwrite($fh, $content);
  104.         fclose($fh);
  105.         
  106.         return true;
  107.     } // end func appendToFile
  108.     
  109.     /**
  110.     * Creates a new file.
  111.     * 
  112.     * Create or overrides a file in a specified directory. If the
  113.     * directory does not exists, it attempts to create it.
  114.     * 
  115.     * @param    string
  116.     * @param    string
  117.     * @param    string
  118.     * @throws   PHPDocError
  119.     * @return   boolean
  120.     */ 
  121.     function createFile($filename, $content, $directory = "") {
  122.         if ("" == $filename || "" == $content) {
  123.             $this->err[] = new PhpdocError("No filename or no content given.", __FILE__, __LINE__);
  124.             return false;
  125.         }
  126.         
  127.         $fh = @fopen($filename, "w");
  128.         if (!$fh) {
  129.             $this->err[] = new PhpdocError("Can't create file '$filename'.", __FILE__, __LINE__);
  130.             return false;
  131.         }
  132.         
  133.         fwrite($fh, $content);
  134.         fclose($fh);
  135.         
  136.         return true;
  137.     } // end func createFile
  138.     
  139.     /**
  140.     * Returns a list of files in a specified directory
  141.     *
  142.     * @param    string  $directory
  143.     * @param    mixed   $suffix         Suffix of the files returned 
  144.     * @param    boolean $flag_subdir    include subdirectories? 
  145.     * @param    array   $files          New entries are added to this variable if provided.
  146.     *                                   Used only for the subdir feature.
  147.     * @return   array   $files
  148.     * @throws   PhpdocError
  149.     */
  150.     function getFilesInDirectory($directory, $suffix = "", $flag_subdir = true, $files = "") {
  151.         if ("" == $directory) {
  152.             $this->err[] = new PhpdocError("No directory specified", __FILE__, __LINE__);
  153.             return array();
  154.         }
  155.         
  156.         if ("/" != substr($directory, -1))
  157.             $directory .= "/";
  158.  
  159.         if ("" == $suffix) 
  160.             $flag_all = true;
  161.         else {
  162.         
  163.             $flag_all = false;
  164.             $allowed     = array();
  165.             
  166.             if (!is_array($suffix))
  167.                 $suffix = array($suffix);
  168.             
  169.             reset($suffix);
  170.             while (list($k, $v) = each($suffix))
  171.                 $allowed[".$v"] = true;
  172.                 
  173.         }
  174.  
  175.         if (!is_array($files)) 
  176.             $files = array();
  177.         
  178.         $dh = @opendir($directory);
  179.         if (!$dh) {
  180.             $this->err[] = new PhpdocError("Can't open '$directory' for reading.", __FILE__, __LINE__);
  181.             return array();
  182.         }
  183.         
  184.         while ($file = readdir($dh)) {
  185.             if ("." == $file || ".." == $file)
  186.                 continue;
  187.             
  188.             if ($flag_subdir && is_dir($directory.$file))
  189.                 $files = $this->getFilesInDirectory($directory.$file, $suffix, true, $files);
  190.                 
  191.             if (!is_file($directory.$file))
  192.                 continue;
  193.             
  194.             if ($flag_all) {
  195.                 $files[] = $file;
  196.             } else {            
  197.                 if (isset($allowed[substr($file, strrpos($file, "."))]))
  198.                     $files[] = $directory.$file;
  199.             }
  200.             
  201.         }
  202.         closedir($dh);
  203.         
  204.         return $files;
  205.     } // end fun getFilesInDirectory
  206.         
  207. } // end class PhpdocFileHandler
  208. ?>