Example #1
0
 /**
  * @param string url to the remote config file, like ftp://www.example.com/pear/config.ini
  * @return true|PEAR_Error
  */
 function readFTPConfigFile($path)
 {
     do {
         // poor man's try
         if (!class_exists('PEAR_FTP')) {
             if (!class_exists('PEAR_Common')) {
                 require_once 'PEAR/Common.php';
             }
             if (PEAR_Common::isIncludeable('PEAR/FTP.php')) {
                 require_once 'PEAR/FTP.php';
             }
         }
         if (!class_exists('PEAR_FTP')) {
             return PEAR::raiseError('PEAR_RemoteInstaller must be installed to use remote config');
         }
         $this->_ftp =& new PEAR_FTP();
         $this->_ftp->pushErrorHandling(PEAR_ERROR_RETURN);
         $e = $this->_ftp->init($path);
         if (PEAR::isError($e)) {
             $this->_ftp->popErrorHandling();
             return $e;
         }
         $tmp = System::mktemp('-d');
         PEAR_Common::addTempFile($tmp);
         $e = $this->_ftp->get(basename($path), $tmp . DIRECTORY_SEPARATOR . 'pear.ini', false, FTP_BINARY);
         if (PEAR::isError($e)) {
             $this->_ftp->popErrorHandling();
             return $e;
         }
         PEAR_Common::addTempFile($tmp . DIRECTORY_SEPARATOR . 'pear.ini');
         $this->_ftp->disconnect();
         $this->_ftp->popErrorHandling();
         $this->files['ftp'] = $tmp . DIRECTORY_SEPARATOR . 'pear.ini';
         $e = $this->readConfigFile(null, 'ftp');
         if (PEAR::isError($e)) {
             return $e;
         }
         $fail = array();
         foreach ($this->configuration_info as $key => $val) {
             if (in_array($this->getGroup($key), array('File Locations', 'File Locations (Advanced)')) && $this->getType($key) == 'directory') {
                 // any directory configs must be set for this to work
                 if (!isset($this->configuration['ftp'][$key])) {
                     $fail[] = $key;
                 }
             }
         }
         if (!count($fail)) {
             return true;
         }
         $fail = '"' . implode('", "', $fail) . '"';
         unset($this->files['ftp']);
         unset($this->configuration['ftp']);
         return PEAR::raiseError('ERROR: Ftp configuration file must set all ' . 'directory configuration variables.  These variables were not set: ' . $fail);
     } while (false);
     // poor man's catch
     unset($this->files['ftp']);
     return PEAR::raiseError('no remote host specified');
 }