[zi-cvs] packages/com.zzoss.installer.lib Utils.php,1.3,1.4
[email protected] Sun, 11 Jan 2004 08:24:21 -0800
| Newsgroups | gmane.comp.php.zzoss.installer.cvs |
|---|---|
| Message-ID | <[email protected]> |
Update of /cvsroot/zzossinstaller/packages/com.zzoss.installer.lib
In directory sc8-pr-cvs1:/tmp/cvs-serv6196
Modified Files:
Utils.php
Log Message:
error handling if in downloadFile() does not exist
Index: Utils.php
===================================================================
RCS file: /cvsroot/zzossinstaller/packages/com.zzoss.installer.lib/Utils.php,v
retrieving revision 1.3
retrieving revision 1.4
diff -C2 -d -r1.3 -r1.4
*** Utils.php 4 Jan 2004 20:29:15 -0000 1.3
--- Utils.php 11 Jan 2004 16:24:19 -0000 1.4
***************
*** 1,431 ****
! <?php
! /*
! Copyright (C) 2001-2004 ZZOSS GbR, http://www.zzoss.com
!
! This library is free software; you can redistribute it and/or
! modify it under the terms of the GNU Lesser General Public
! License as published by the Free Software Foundation; either
! version 2.1 of the License, or (at your option) any later version.
!
! This library is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
! Lesser General Public License for more details.
!
! You should have received a copy of the GNU Lesser General Public
! License along with this library; if not, write to the Free Software
! Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
! */
!
! /**
! @version $Id$
! @copyright Copyright © 2001-2004 ZZ/OSS GbR, http://www.zzoss.com
! @license http://opensource.org/licenses/lgpl-license.php GNU Lesser General Public License
! */
!
! /**
! * Helper methods for several occasions.
! */
! class ZZOSS_InstallerUtils
! {
!
! // serializes $var and dumps it
! // to disk
! function serializeToFile($file, $var) {
! $fp = fopen($file, "w");
! fwrite($fp, serialize($var));
! fclose($fp);
! }
!
! // reads a serialized dump from disk
! // and returns it unserialized
! function unserializeFromFile($file) {
! if(file_exists($file)){
! $fp = fopen($file,"r");
! $ser = fread ($fp, filesize ($file));
! fclose($fp);
! return unserialize($ser);
! }
! }
!
! // RMDIR
! // --------
! // removes directory recursively, even if non-empty
! function rmdir ($dirName) {
! if($d = @opendir ($dirName)) {
! while($entry = @readdir($d)) {
! if ($entry != "." && $entry != ".." && $entry != "") {
! if (is_dir($dirName."/".$entry)) {
! ZZOSS_InstallerUtils::rmdir($dirName."/".$entry);
! } else {
! @unlink($dirName."/".$entry);
! }
! }
! }
! closedir($d);
! }
! return @rmdir($dirName);
! }
!
!
! /*
! * MY MKDIR
! *
! * make directories recursively
! */
! function mkdir ( $path )
! {
! // check if there are two succeeding slashes, then
! // this might be an error of merged paths
! $path = str_replace('//', '/', $path);
!
! // split data path in directories
! $dataDirs = explode( '/', $path );
! for( $a=0; $a<count($dataDirs); $a++) {
! $currPath .= $dataDirs[$a].'/';
! // does directory to store data exist?
! if(!is_dir( $currPath )) {
! // if not, then make directory
! //echo $currPath.'<br>';
! mkdir( $currPath, 0777 );
! }
! }
! }
!
!
! // MY CRYPT
! // --------
! // generates DES encrypted string using random salt
! function crypt($pw)
! {
! // generate random salt
! srand((double)microtime()*1000000);
! $saltseeds = array( '.','/','0','1','2','3','4','5','6','7','8','9',
! 'a','b','c','d','e','f','g','h','i','j','k','l','m',
! 'n','o','p','q','r','s','t','u','v','w','x','y','z',
! 'A','B','C','D','E','F','G','H','I','J','K','L','M',
! 'N','O','P','Q','R','S','T','U','V','W','X','Y','Z');
! $salt = $saltseeds[rand(0,63)] . $saltseeds[rand(0,63)];
! // encrypt
! return crypt(trim($pw),$salt);
! }
!
! /*
! * Replaces special chars of a string to make the string compatible with
! * filename conventions.
! */
! function convertStringToFilename($title)
! {
! $nametitle = strtolower($title);
! $nametitle = str_replace('Ä','ae',$nametitle);
! $nametitle = str_replace('Ö','oe',$nametitle);
! $nametitle = str_replace('Ü','ue',$nametitle);
! $nametitle = str_replace('?','_',$nametitle);
! $nametitle = str_replace('\'','_',$nametitle);
! $nametitle = str_replace("´",'_',$nametitle);
! $nametitle = str_replace('&','_',$nametitle);
! $nametitle = str_replace('+','_',$nametitle);
! $nametitle = str_replace('$','_',$nametitle);
! $nametitle = str_replace('-','_',$nametitle);
! $nametitle = str_replace('%','_',$nametitle);
! $nametitle = str_replace("'",'_',$nametitle);
! $nametitle = str_replace('&','_',$nametitle);
! $nametitle = str_replace('<','_',$nametitle);
! $nametitle = str_replace('>','_',$nametitle);
! $nametitle = str_replace(' ','_',$nametitle);
! $nametitle = str_replace('§','_',$nametitle);
! $nametitle = str_replace('&','_',$nametitle);
! $nametitle = str_replace(' ','e',$nametitle);
! $nametitle = str_replace('ä','ae',$nametitle);
! $nametitle = str_replace('ö','oe',$nametitle);
! $nametitle = str_replace('ü','ue',$nametitle);
! $nametitle = str_replace('/','_',$nametitle);
! $nametitle = str_replace('\\','_',$nametitle);
! $nametitle = str_replace('ß','_',$nametitle);
! //$nametitle = str_replace('.','_',$nametitle);
! $nametitle = str_replace(':','_',$nametitle);
! $nametitle = str_replace('#','_',$nametitle);
! $nametitle = str_replace('*','_',$nametitle);
! $nametitle = str_replace('~','_',$nametitle);
! $nametitle = str_replace('"','_',$nametitle);
!
! return($nametitle);
! }
!
! /*
! * GET UTC TIME WITH TIME ZONE OFFSET
! */
! // get date, time, GMT difference
! function getUTCDateTime()
! {
! $offset = ZZOSS_InstallerUtils::getUTCOffset();
! $offsetHHMM = mktime(0,0,$offsetSec,date("m"),date("d"),date("Y"));
! $formattedString = date('Y-m-d\TH:i:s').$offset;
!
! return $formattedString;
! }
!
!
! /*
! * Get UTC/GMT offset
! */
! function getUTCOffset()
! {
! $offsetSec = date('Z');
! if($offsetSec[0] == '-') {
! $offsetSec = str_replace( '-', '', $offsetSec );
! $offsetDiff = '-';
! } else {
! $offsetDiff = '+';
! }
! $offsetHHMM = mktime(0,0,$offsetSec,date("m"),date("d"),date("Y"));
! return $offsetDiff.date( 'H:i', $offsetHHMM );
! }
!
!
! function copy($src, $dest, $recursive = true, $overwrite = true, $ignore_list = array())
! {
! // lowercase all entries in ignorelist
! foreach($ignore_list as $key => $val) {
! $ignore_list[$key] = strtolower($val);
! }
! if (is_dir($src)){
! if (!ZZOSS_InstallerUtils::copy_rec($src, $dest, $recursive, $overwrite, $ignore_list)){
! return false;
! }
! if (is_file($src) && ($overwrite || !file_exists($dest))){ // do regular copy
! if (!copy($src, $dest)){
! return false;
! }
! }
! }
! return true;
! }
!
!
! function copy_rec($src, $dest, $recursive = true, $overwrite = true, $ignore_list = array()){
! //$CMD = 'mv '.$src.' '.$dest;
! //exec($CMD);
! //echo $src.' -> '.$dest.'<br/>';
! ZZOSS_InstallerUtils::mkdir($dest);
! $handle = opendir($src);
! while ($file = readdir($handle)){
! if(!in_array(strtolower($file), $ignore_list)) {
! $src_file = $src.$file;
! //echo ' -> ';
! $dest_file = $dest.$file;
! //echo '<br/>';
! if ($recursive && is_dir($src_file) && $file !="." && $file != "..")
! if (!ZZOSS_InstallerUtils::copy_rec($src_file.DIRECTORY_SEPARATOR, $dest_file.DIRECTORY_SEPARATOR,$recursive, $overwrite, $ignore_list))
! return false;
! if (is_file($src_file) && ($overwrite || !file_exists($dest_file)))
! if (!copy($src_file, $dest_file))
! return false;
! }
! }
! closedir($handle);
! return true;
! }
!
! function downloadFile($src, $dest) {
! if(file_exists($dest)) {
! @unlink($dest);
! }
! $dest_dir = $dest;
! if(!is_dir($dest)){
! $dest_dir = dirname($dest);
! }
! include_once 'PEAR/Common.php';
! //$callback = array('ZZOSS_InstallerUtils');
! $result = PEAR_Common::downloadHttp($src, &$ui, $dest_dir);
! // WORKAROUND, did not understand how to define
! // the full file path in PEAR's method, so we
! // copy the saved file to the defined location,
! // but only if the differ
! //echo "$dest != $result";
! if(!is_dir($dest) && $dest != $result){
! copy($result, $dest);
! unlink($result);
! }
!
! return $result;
! }
!
! // {{{ downloadHttp()
!
! /**
! * Download a file through HTTP. Considers suggested file name in
! * Content-disposition: header and can run a callback function for
! * different events. The callback will be called with two
! * parameters: the callback type, and parameters. The implemented
! * callback types are:
! *
! * 'setup' called at the very beginning, parameter is a UI object
! * that should be used for all output
! * 'message' the parameter is a string with an informational message
! * 'saveas' may be used to save with a different file name, the
! * parameter is the filename that is about to be used.
! * If a 'saveas' callback returns a non-empty string,
! * that file name will be used as the filename instead.
! * Note that $save_dir will not be affected by this, only
! * the basename of the file.
! * 'start' download is starting, parameter is number of bytes
! * that are expected, or -1 if unknown
! * 'bytesread' parameter is the number of bytes read so far
! * 'done' download is complete, parameter is the total number
! * of bytes read
! * 'connfailed' if the TCP connection fails, this callback is called
! * with array(host,port,errno,errmsg)
! * 'writefailed' if writing to disk fails, this callback is called
! * with array(destfile,errmsg)
! *
! * If an HTTP proxy has been configured (http_proxy PEAR_Config
! * setting), the proxy will be used.
! *
! * @param string $url the URL to download
! * @param object $config PEAR_Config instance
! * @param string $save_dir (optional) directory to save file in
! * @param mixed $callback (optional) function/method to call for status
! * updates
! *
! * @return string Returns the full path of the downloaded file or a PEAR
! * error on failure. If the error is caused by
! * socket-related errors, the error object will
! * have the fsockopen error code available through
! * getCode().
! *
! * @access public
! */
! function _downloadHttp($url, $save_dir = '.', $dest_file = null, $callback = null, $proxy = null)
! {
! if (preg_match('!^http://([^/:?#]*)(:(\d+))?(/.*)!', $url, $matches)) {
! list(,$host,,$port,$path) = $matches;
! }
! $proxy_host = $proxy_port = $proxy_user = $proxy_pass = '';
! if (is_array($proxy)) {
! $proxy_host = @$proxy['host'];
! $proxy_port = @$proxy['port'];
! $proxy_user = @$proxy['user'];
! $proxy_pass = @$proxy['pass'];
! if ($proxy_port == '') {
! $proxy_port = 8080;
! }
! if ($callback) {
! call_user_func($callback, 'message', "Using HTTP proxy $host:$port");
! }
! }
! if (empty($port)) {
! $port = 80;
! }
! if ($proxy_host != '') {
! $fp = @fsockopen($proxy_host, $proxy_port, $errno, $errstr);
! if (!$fp) {
! if ($callback) {
! call_user_func($callback, 'connfailed', array($proxy_host, $proxy_port,
! $errno, $errstr));
! }
! return PEAR::raiseError("Connection to `$proxy_host:$proxy_port' failed: $errstr", $errno);
! }
! $request = "GET $url HTTP/1.0\r\n";
! } else {
! $fp = @fsockopen($host, $port, $errno, $errstr);
! if (!$fp) {
! if ($callback) {
! call_user_func($callback, 'connfailed', array($host, $port,
! $errno, $errstr));
! }
! return PEAR::raiseError("Connection to `$host:$port' failed: $errstr", $errno);
! }
! $request = "GET $path HTTP/1.0\r\n";
! }
! $request .= "Host: $host:$port\r\n".
! "User-Agent: PHP/".PHP_VERSION."\r\n";
! if ($proxy_host != '' && $proxy_user != '') {
! $request .= 'Proxy-Authorization: Basic ' .
! base64_encode($proxy_user . ':' . $proxy_pass) . "\r\n";
! }
! $request .= "\r\n";
! fwrite($fp, $request);
! $headers = array();
! while (trim($line = fgets($fp, 1024))) {
! if (preg_match('/^([^:]+):\s+(.*)\s*$/', $line, $matches)) {
! $headers[strtolower($matches[1])] = trim($matches[2]);
! } elseif (preg_match('|^HTTP/1.[01] ([0-9]{3}) |', $line, $matches)) {
! if ($matches[1] != 200) {
! return PEAR::raiseError("File http://$host:$port$path not valid (received: $line)");
! }
! }
! }
! if (isset($headers['content-disposition']) &&
! preg_match('/\sfilename=\"([^;]*\S)\"\s*(;|$)/', $headers['content-disposition'], $matches)) {
! $save_as = basename($matches[1]);
! } else {
! $save_as = basename($url);
! }
! if ($callback) {
! $tmp = call_user_func($callback, 'saveas', $save_as);
! if ($tmp) {
! $save_as = $tmp;
! }
! }
! if($dest_file == null) {
! $dest_file = $save_dir . DIRECTORY_SEPARATOR . $save_as;
! }
! if (!$wp = @fopen($dest_file, 'wb')) {
! fclose($fp);
! if ($callback) {
! call_user_func($callback, 'writefailed', array($dest_file, $php_errormsg));
! }
! return PEAR::raiseError("could not open $dest_file for writing");
! }
! if (isset($headers['content-length'])) {
! $length = $headers['content-length'];
! } else {
! $length = -1;
! }
! $bytes = 0;
! if ($callback) {
! call_user_func($callback, 'start', $length);
! }
! while ($data = @fread($fp, 1024)) {
! $bytes += strlen($data);
! if ($callback) {
! call_user_func($callback, 'bytesread', $bytes);
! }
! if (!@fwrite($wp, $data)) {
! fclose($fp);
! if ($callback) {
! call_user_func($callback, 'writefailed', array($dest_file, $php_errormsg));
! }
! return PEAR::raiseError("$dest_file: write failed ($php_errormsg)");
! }
! }
! fclose($fp);
! fclose($wp);
! if ($callback) {
! call_user_func($callback, 'done', $bytes);
! }
! return $dest_file;
! }
!
! // }}}
!
! function trimArray($array) {
! if(is_array($array)) {
! foreach($array as $key => $val) {
! if(is_array($val)) {
! $array[$key] = ZZOSS_InstallerUtils::trimArray($val);
! } else {
! $array[$key] = trim($val);
! }
! }
! }
! return $array;
! }
!
! function fixPath($path) {
! $path = preg_replace('/\/{2,}|\\\{1,}/i', DIRECTORY_SEPARATOR, $path);
! return $path;
! }
! }
?>
--- 1,433 ----
! <?php
! /*
! Copyright (C) 2001-2004 ZZOSS GbR, http://www.zzoss.com
!
! This library is free software; you can redistribute it and/or
! modify it under the terms of the GNU Lesser General Public
! License as published by the Free Software Foundation; either
! version 2.1 of the License, or (at your option) any later version.
!
! This library is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
! Lesser General Public License for more details.
!
! You should have received a copy of the GNU Lesser General Public
! License along with this library; if not, write to the Free Software
! Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
! */
!
! /**
! @version $Id$
! @copyright Copyright © 2001-2004 ZZ/OSS GbR, http://www.zzoss.com
! @license http://opensource.org/licenses/lgpl-license.php GNU Lesser General Public License
! */
!
! /**
! * Helper methods for several occasions.
! */
! class ZZOSS_InstallerUtils
! {
!
! // serializes $var and dumps it
! // to disk
! function serializeToFile($file, $var) {
! $fp = fopen($file, "w");
! fwrite($fp, serialize($var));
! fclose($fp);
! }
!
! // reads a serialized dump from disk
! // and returns it unserialized
! function unserializeFromFile($file) {
! if(file_exists($file)){
! $fp = fopen($file,"r");
! $ser = fread ($fp, filesize ($file));
! fclose($fp);
! return unserialize($ser);
! }
! }
!
! // RMDIR
! // --------
! // removes directory recursively, even if non-empty
! function rmdir ($dirName) {
! if($d = @opendir ($dirName)) {
! while($entry = @readdir($d)) {
! if ($entry != "." && $entry != ".." && $entry != "") {
! if (is_dir($dirName."/".$entry)) {
! ZZOSS_InstallerUtils::rmdir($dirName."/".$entry);
! } else {
! @unlink($dirName."/".$entry);
! }
! }
! }
! closedir($d);
! }
! return @rmdir($dirName);
! }
!
!
! /*
! * MY MKDIR
! *
! * make directories recursively
! */
! function mkdir ( $path )
! {
! // check if there are two succeeding slashes, then
! // this might be an error of merged paths
! $path = str_replace('//', '/', $path);
!
! // split data path in directories
! $dataDirs = explode( '/', $path );
! for( $a=0; $a<count($dataDirs); $a++) {
! $currPath .= $dataDirs[$a].'/';
! // does directory to store data exist?
! if(!is_dir( $currPath )) {
! // if not, then make directory
! //echo $currPath.'<br>';
! mkdir( $currPath, 0777 );
! }
! }
! }
!
!
! // MY CRYPT
! // --------
! // generates DES encrypted string using random salt
! function crypt($pw)
! {
! // generate random salt
! srand((double)microtime()*1000000);
! $saltseeds = array( '.','/','0','1','2','3','4','5','6','7','8','9',
! 'a','b','c','d','e','f','g','h','i','j','k','l','m',
! 'n','o','p','q','r','s','t','u','v','w','x','y','z',
! 'A','B','C','D','E','F','G','H','I','J','K','L','M',
! 'N','O','P','Q','R','S','T','U','V','W','X','Y','Z');
! $salt = $saltseeds[rand(0,63)] . $saltseeds[rand(0,63)];
! // encrypt
! return crypt(trim($pw),$salt);
! }
!
! /*
! * Replaces special chars of a string to make the string compatible with
! * filename conventions.
! */
! function convertStringToFilename($title)
! {
! $nametitle = strtolower($title);
! $nametitle = str_replace('Ä','ae',$nametitle);
! $nametitle = str_replace('Ö','oe',$nametitle);
! $nametitle = str_replace('Ü','ue',$nametitle);
! $nametitle = str_replace('?','_',$nametitle);
! $nametitle = str_replace('\'','_',$nametitle);
! $nametitle = str_replace("´",'_',$nametitle);
! $nametitle = str_replace('&','_',$nametitle);
! $nametitle = str_replace('+','_',$nametitle);
! $nametitle = str_replace('$','_',$nametitle);
! $nametitle = str_replace('-','_',$nametitle);
! $nametitle = str_replace('%','_',$nametitle);
! $nametitle = str_replace("'",'_',$nametitle);
! $nametitle = str_replace('&','_',$nametitle);
! $nametitle = str_replace('<','_',$nametitle);
! $nametitle = str_replace('>','_',$nametitle);
! $nametitle = str_replace(' ','_',$nametitle);
! $nametitle = str_replace('§','_',$nametitle);
! $nametitle = str_replace('&','_',$nametitle);
! $nametitle = str_replace(' ','e',$nametitle);
! $nametitle = str_replace('ä','ae',$nametitle);
! $nametitle = str_replace('ö','oe',$nametitle);
! $nametitle = str_replace('ü','ue',$nametitle);
! $nametitle = str_replace('/','_',$nametitle);
! $nametitle = str_replace('\\','_',$nametitle);
! $nametitle = str_replace('ß','_',$nametitle);
! //$nametitle = str_replace('.','_',$nametitle);
! $nametitle = str_replace(':','_',$nametitle);
! $nametitle = str_replace('#','_',$nametitle);
! $nametitle = str_replace('*','_',$nametitle);
! $nametitle = str_replace('~','_',$nametitle);
! $nametitle = str_replace('"','_',$nametitle);
!
! return($nametitle);
! }
!
! /*
! * GET UTC TIME WITH TIME ZONE OFFSET
! */
! // get date, time, GMT difference
! function getUTCDateTime()
! {
! $offset = ZZOSS_InstallerUtils::getUTCOffset();
! $offsetHHMM = mktime(0,0,$offsetSec,date("m"),date("d"),date("Y"));
! $formattedString = date('Y-m-d\TH:i:s').$offset;
!
! return $formattedString;
! }
!
!
! /*
! * Get UTC/GMT offset
! */
! function getUTCOffset()
! {
! $offsetSec = date('Z');
! if($offsetSec[0] == '-') {
! $offsetSec = str_replace( '-', '', $offsetSec );
! $offsetDiff = '-';
! } else {
! $offsetDiff = '+';
! }
! $offsetHHMM = mktime(0,0,$offsetSec,date("m"),date("d"),date("Y"));
! return $offsetDiff.date( 'H:i', $offsetHHMM );
! }
!
!
! function copy($src, $dest, $recursive = true, $overwrite = true, $ignore_list = array())
! {
! // lowercase all entries in ignorelist
! foreach($ignore_list as $key => $val) {
! $ignore_list[$key] = strtolower($val);
! }
! if (is_dir($src)){
! if (!ZZOSS_InstallerUtils::copy_rec($src, $dest, $recursive, $overwrite, $ignore_list)){
! return false;
! }
! if (is_file($src) && ($overwrite || !file_exists($dest))){ // do regular copy
! if (!copy($src, $dest)){
! return false;
! }
! }
! }
! return true;
! }
!
!
! function copy_rec($src, $dest, $recursive = true, $overwrite = true, $ignore_list = array()){
! //$CMD = 'mv '.$src.' '.$dest;
! //exec($CMD);
! //echo $src.' -> '.$dest.'<br/>';
! ZZOSS_InstallerUtils::mkdir($dest);
! $handle = opendir($src);
! while ($file = readdir($handle)){
! if(!in_array(strtolower($file), $ignore_list)) {
! $src_file = $src.$file;
! //echo ' -> ';
! $dest_file = $dest.$file;
! //echo '<br/>';
! if ($recursive && is_dir($src_file) && $file !="." && $file != "..")
! if (!ZZOSS_InstallerUtils::copy_rec($src_file.DIRECTORY_SEPARATOR, $dest_file.DIRECTORY_SEPARATOR,$recursive, $overwrite, $ignore_list))
! return false;
! if (is_file($src_file) && ($overwrite || !file_exists($dest_file)))
! if (!copy($src_file, $dest_file))
! return false;
! }
! }
! closedir($handle);
! return true;
! }
!
! function downloadFile($src, $dest) {
! if(file_exists($dest)) {
! @unlink($dest);
! }
! $dest_dir = $dest;
! if(!is_dir($dest)){
! $dest_dir = dirname($dest);
! }
! include_once 'PEAR/Common.php';
! //$callback = array('ZZOSS_InstallerUtils');
! $result = PEAR_Common::downloadHttp($src, &$ui, $dest_dir);
! // WORKAROUND, did not understand how to define
! // the full file path in PEAR's method, so we
! // copy the saved file to the defined location,
! // but only if the differ
! //echo "$dest != $result";
! if(is_object($result)) {
! // TODO: trigger error since we got a pear error object
! return PEAR::raiseError("Unable to get file $src");
! } elseif(!is_dir($dest) && $dest != $result){
! copy($result, $dest);
! unlink($result);
! }
! return $result;
! }
!
! // {{{ downloadHttp()
!
! /**
! * Download a file through HTTP. Considers suggested file name in
! * Content-disposition: header and can run a callback function for
! * different events. The callback will be called with two
! * parameters: the callback type, and parameters. The implemented
! * callback types are:
! *
! * 'setup' called at the very beginning, parameter is a UI object
! * that should be used for all output
! * 'message' the parameter is a string with an informational message
! * 'saveas' may be used to save with a different file name, the
! * parameter is the filename that is about to be used.
! * If a 'saveas' callback returns a non-empty string,
! * that file name will be used as the filename instead.
! * Note that $save_dir will not be affected by this, only
! * the basename of the file.
! * 'start' download is starting, parameter is number of bytes
! * that are expected, or -1 if unknown
! * 'bytesread' parameter is the number of bytes read so far
! * 'done' download is complete, parameter is the total number
! * of bytes read
! * 'connfailed' if the TCP connection fails, this callback is called
! * with array(host,port,errno,errmsg)
! * 'writefailed' if writing to disk fails, this callback is called
! * with array(destfile,errmsg)
! *
! * If an HTTP proxy has been configured (http_proxy PEAR_Config
! * setting), the proxy will be used.
! *
! * @param string $url the URL to download
! * @param object $config PEAR_Config instance
! * @param string $save_dir (optional) directory to save file in
! * @param mixed $callback (optional) function/method to call for status
! * updates
! *
! * @return string Returns the full path of the downloaded file or a PEAR
! * error on failure. If the error is caused by
! * socket-related errors, the error object will
! * have the fsockopen error code available through
! * getCode().
! *
! * @access public
! */
! function _downloadHttp($url, $save_dir = '.', $dest_file = null, $callback = null, $proxy = null)
! {
! if (preg_match('!^http://([^/:?#]*)(:(\d+))?(/.*)!', $url, $matches)) {
! list(,$host,,$port,$path) = $matches;
! }
! $proxy_host = $proxy_port = $proxy_user = $proxy_pass = '';
! if (is_array($proxy)) {
! $proxy_host = @$proxy['host'];
! $proxy_port = @$proxy['port'];
! $proxy_user = @$proxy['user'];
! $proxy_pass = @$proxy['pass'];
! if ($proxy_port == '') {
! $proxy_port = 8080;
! }
! if ($callback) {
! call_user_func($callback, 'message', "Using HTTP proxy $host:$port");
! }
! }
! if (empty($port)) {
! $port = 80;
! }
! if ($proxy_host != '') {
! $fp = @fsockopen($proxy_host, $proxy_port, $errno, $errstr);
! if (!$fp) {
! if ($callback) {
! call_user_func($callback, 'connfailed', array($proxy_host, $proxy_port,
! $errno, $errstr));
! }
! return PEAR::raiseError("Connection to `$proxy_host:$proxy_port' failed: $errstr", $errno);
! }
! $request = "GET $url HTTP/1.0\r\n";
! } else {
! $fp = @fsockopen($host, $port, $errno, $errstr);
! if (!$fp) {
! if ($callback) {
! call_user_func($callback, 'connfailed', array($host, $port,
! $errno, $errstr));
! }
! return PEAR::raiseError("Connection to `$host:$port' failed: $errstr", $errno);
! }
! $request = "GET $path HTTP/1.0\r\n";
! }
! $request .= "Host: $host:$port\r\n".
! "User-Agent: PHP/".PHP_VERSION."\r\n";
! if ($proxy_host != '' && $proxy_user != '') {
! $request .= 'Proxy-Authorization: Basic ' .
! base64_encode($proxy_user . ':' . $proxy_pass) . "\r\n";
! }
! $request .= "\r\n";
! fwrite($fp, $request);
! $headers = array();
! while (trim($line = fgets($fp, 1024))) {
! if (preg_match('/^([^:]+):\s+(.*)\s*$/', $line, $matches)) {
! $headers[strtolower($matches[1])] = trim($matches[2]);
! } elseif (preg_match('|^HTTP/1.[01] ([0-9]{3}) |', $line, $matches)) {
! if ($matches[1] != 200) {
! return PEAR::raiseError("File http://$host:$port$path not valid (received: $line)");
! }
! }
! }
! if (isset($headers['content-disposition']) &&
! preg_match('/\sfilename=\"([^;]*\S)\"\s*(;|$)/', $headers['content-disposition'], $matches)) {
! $save_as = basename($matches[1]);
! } else {
! $save_as = basename($url);
! }
! if ($callback) {
! $tmp = call_user_func($callback, 'saveas', $save_as);
! if ($tmp) {
! $save_as = $tmp;
! }
! }
! if($dest_file == null) {
! $dest_file = $save_dir . DIRECTORY_SEPARATOR . $save_as;
! }
! if (!$wp = @fopen($dest_file, 'wb')) {
! fclose($fp);
! if ($callback) {
! call_user_func($callback, 'writefailed', array($dest_file, $php_errormsg));
! }
! return PEAR::raiseError("could not open $dest_file for writing");
! }
! if (isset($headers['content-length'])) {
! $length = $headers['content-length'];
! } else {
! $length = -1;
! }
! $bytes = 0;
! if ($callback) {
! call_user_func($callback, 'start', $length);
! }
! while ($data = @fread($fp, 1024)) {
! $bytes += strlen($data);
! if ($callback) {
! call_user_func($callback, 'bytesread', $bytes);
! }
! if (!@fwrite($wp, $data)) {
! fclose($fp);
! if ($callback) {
! call_user_func($callback, 'writefailed', array($dest_file, $php_errormsg));
! }
! return PEAR::raiseError("$dest_file: write failed ($php_errormsg)");
! }
! }
! fclose($fp);
! fclose($wp);
! if ($callback) {
! call_user_func($callback, 'done', $bytes);
! }
! return $dest_file;
! }
!
! // }}}
!
! function trimArray($array) {
! if(is_array($array)) {
! foreach($array as $key => $val) {
! if(is_array($val)) {
! $array[$key] = ZZOSS_InstallerUtils::trimArray($val);
! } else {
! $array[$key] = trim($val);
! }
! }
! }
! return $array;
! }
!
! function fixPath($path) {
! $path = preg_replace('/\/{2,}|\\\{1,}/i', DIRECTORY_SEPARATOR, $path);
! return $path;
! }
! }
?>
-------------------------------------------------------
This SF.net email is sponsored by: Perforce Software.
Perforce is the Fast Software Configuration Management System offering
advanced branching capabilities and atomic changes on 50+ platforms.
Free Eval! http://www.perforce.com/perforce/loadprog.html