cvs: pearweb /public_html go-pear

From: Date: Fri, 04 Apr 2003 01:03:33 +0000
Subject: cvs: pearweb /public_html go-pear
Groups: php.pear.cvs 
Request: Send a blank email to pear-cvs+get-9734@lists.php.net to get a copy of this message
pajoye Thu Apr 3 20:03:33 2003 EDT Modified files: /pearweb/public_html go-pear Log: Major release (most of win32 problems solved) - Add go-pear launch from a web browser (christian dickmann) - Add GUI to select folder under win32 (if cscript is avaible, wsh) (paj) - Fix the installation on many drives (paj) - Spaces are currently not allowed in pear installation pathes - Fixes php.exe detection or force the user to enter the path (paj, urs) - enhance the temp folder detection (urs, christian, paj) - Add a REG file genetor for win32, it creates a registry file with the current settings (makes possible to the user to install as many installation as he wants, pear.bat uses ENV vars now) (paj) - Additionnals warning/notice to give info about what he uses - SAPI detection (paj) - Experimental functions to detect php.ini and alter the include_path Not yet used, but please, add a call to them and test them! :) - and some others minors fixes - It will now be bundled in php STABLE win32 snapshots as well as in 4.3.2 Thank's to Christian Dickmann and Urs Gehrig

Index: pearweb/public_html/go-pear diff -u pearweb/public_html/go-pear:1.34 pearweb/public_html/go-pear:1.35 --- pearweb/public_html/go-pear:1.34 Fri Feb 14 11:45:29 2003 +++ pearweb/public_html/go-pear Thu Apr 3 20:03:32 2003 @@ -14,9 +14,10 @@ # +----------------------------------------------------------------------+ # | Authors: Tomas V.V.Cox <cox@idecnet.com> | # | Stig Sæther Bakken <stig@php.net> | +# | Christian Dickmann <dickmann@php.net> | +# | Pierre-Alain Joye <pajoye@pearfr.org> | # +----------------------------------------------------------------------+ -# -# $Id: go-pear,v 1.34 2003/02/14 16:45:29 mj Exp $ +# $Id: go-pear,v 1.35 2003/04/04 01:03:32 pajoye Exp $ # # Automatically download all the files needed to run the "pear" command # (the PEAR package installer). Requires PHP 4.1.0 or newer. @@ -24,12 +25,30 @@ # Usage: This script could be directly launched or can be passed # via lynx like this: # -# $ lynx -source go-pear.org | php +# $ lynx -source http://pear.php.net/go-pear | php +# +# On Windows go-pear uses stdin for user input, so you must download +# go-pear first and then run it: +# +# > php-cli -r 'readfile("http://pear.php.net/go-pear");' > go-pear +# > php-cli go-pear +# +# You can now use go-pear via a webbrowser, thanks to Christian Dickmann. It is +# still beta codes, but feel free to test it: +# 1.: Download the go-pear script by using the "Save target as ..." function +# of your browser here. # -# On Windows as of PHP 4.3.0 you can launch go-pear like this: +# 2.: Place the go-pear file somewhere under the document root of your webserver. +# The easiest way is to create a new directory for pear and to put the file in there. # -# > cli\php -n -r "include 'http://go-pear.org';" +# 3.: Access go-pear through your webserver and follow the instructions. Please +# make sure that PHP has write access to the dir you want to install PEAR into. # +# 4.: After running go-pear you get a link to the Web Frontend of the PEAR installer. +# I suggest bookmarking this link. +# +# 5.: Protect the Web Frontend directory and the go-pear script with a password. +# Use .htaccess on Apache webservers for example. # If using the CGI version of PHP, append the -q option to suppress # headers in the output. # @@ -37,14 +56,35 @@ set_time_limit(0); @ob_end_flush(); ob_implicit_flush(true); +define('WEBINSTALLER', (php_sapi_name() != 'cli' && !(php_sapi_name() == 'cgi' && !isset($_SERVER['GATEWAY_INTERFACE'])))); + ini_set('track_errors', true); -ini_set('html_errors', false); +ini_set('html_errors', WEBINSTALLER); ini_set('magic_quotes_runtime', false); error_reporting(E_ALL & ~E_NOTICE); +define('WINDOWS', (substr(PHP_OS, 0, 3) == 'WIN')); +define('GO_PEAR_VER', '0.2.2'); +define('WIN32GUI', !WEBINSTALLER && WINDOWS && php_sapi_name()== 'cli' && which('cscript')); +if(WIN32GUI){ + echo "Uses cscript GetFolder.\n"; +} +if (WEBINSTALLER && isset($_GET['action']) && $_GET['action'] == 'img' && isset($_GET['img'])) { + switch ($_GET['img']) + { + case 'note': + case 'pearlogo': + case 'smallpear': + showImage($_GET['img']); + exit; + default: + exit; + }; +} + +// Check if PHP version is sufficient if (!function_exists("version_compare")) { - die( -"Sorry! Your PHP version is too old. PEAR and this script requires at + die("Sorry! Your PHP version is too old. PEAR and this script requires at least PHP 4.1.0 for stable operation. It may be that you have a newer version of PHP installed in your web @@ -66,20 +106,18 @@ "); } -define('WINDOWS', (substr(PHP_OS, 0, 3) == 'WIN')); - -$tty = WINDOWS ? @fopen('\con', 'r') : @fopen('/dev/tty', 'r'); - -if (!$tty) { - $tty = fopen('php://stdin', 'r'); -} - $installer_packages = array( 'PEAR', 'Archive_Tar', 'Console_Getopt', 'XML_RPC' ); +if (WEBINSTALLER) { + $installer_packages[] = 'Pager'; + $installer_packages[] = 'HTML_Template_IT'; + $installer_packages[] = 'Net_UserAgent_Detect'; + $installer_packages[] = 'PEAR_Frontend_Web'; +}; $pfc_packages = array( 'DB', 'Net_Socket', @@ -87,8 +125,91 @@ 'Mail', 'XML_Parser' ); +$config_desc = array( + 'prefix' => 'Installation prefix', + 'bin_dir' => 'Binaries directory', + 'php_dir' => 'PHP code directory', + 'doc_dir' => 'Documentation base directory', + 'data_dir' => 'Data base directory', + 'test_dir' => 'Tests base directory', +); +if(!WEBINSTALLER && WINDOWS){ + $config_desc['php_bin'] = 'php.exe path'; +} +if (WEBINSTALLER) { + $config_desc['cache_dir'] = 'PEAR Installer cache directory'; + $config_desc['cache_ttl'] = 'Cache TimeToLive'; + $config_desc['webfrontend_file'] = 'Filename of WebFrontend'; +}; + +if (my_env('HTTP_PROXY')) { + $http_proxy = my_env('HTTP_PROXY'); +} elseif (my_env('http_proxy')) { + $http_proxy = my_env('http_proxy'); +} else { + $http_proxy = ''; +} + +register_shutdown_function('bail'); + +detect_install_dirs(); + +if (WEBINSTALLER) { + @session_start(); + if (!isset($_SESSION['go-pear']) || isset($_GET['restart'])) { + $sep = WINDOWS ? "\\" : '/'; + $_SESSION['go-pear'] = array( + 'http_proxy' => $http_proxy, + 'config' => array( + 'prefix' => dirname(__FILE__), + 'bin_dir' => $bin_dir, + 'php_bin' => $php_bin, + 'php_dir' => '$prefix'.$sep.'PEAR', + 'doc_dir' => $doc_dir, + 'data_dir' => $data_dir, + 'test_dir' => $test_dir, + 'cache_dir' => '$php_dir'.$sep.'cache', + 'cache_ttl' => 300, + 'webfrontend_file' => '$prefix'.$sep.'index.php', + ), + 'install_pfc' => true, + 'DHTML' => true, + ); + }; + if (!isset($_GET['step'])) { + $_GET['step'] = 'Welcome'; + }; + if ($_GET['step'] == 'install') { + $_SESSION['go-pear']['http_proxy'] = strip_magic_quotes($_POST['proxy']['host']).':'.strip_magic_quotes($_POST['proxy']['port']); + if ($_SESSION['go-pear']['http_proxy'] == ':') { + $_SESSION['go-pear']['http_proxy'] = ''; + }; + + foreach($_POST['config'] as $key => $value) { + $_POST['config'][$key] = strip_magic_quotes($value); + }; + $_SESSION['go-pear']['config'] = $_POST['config']; + $_SESSION['go-pear']['install_pfc'] = (isset($_POST['install_pfc']) && $_POST['install_pfc'] == 'on'); + $_SESSION['go-pear']['DHTML'] = !($_POST['BCmode'] == "on"); + }; + $http_proxy = $_SESSION['go-pear']['http_proxy']; + foreach($_SESSION['go-pear']['config'] as $var => $value) { + $$var = $value; + }; + $install_pfc = $_SESSION['go-pear']['install_pfc']; +}; + + -print "Welcome to go-pear! + +if (!WEBINSTALLER) { + $tty = WINDOWS ? @fopen('\con', 'r') : @fopen('/dev/tty', 'r'); + + if (!$tty) { + $tty = fopen('php://stdin', 'r'); + } + + print "Welcome to go-pear! Go-pear will install the 'pear' command and all the files needed by it. This command is your tool for PEAR installation and maintenance. @@ -98,43 +219,25 @@ If you wish to abort, press Control-C now, or press Enter to continue: "; -fgets($tty, 1024); - -print "\n"; - -if (my_env('HTTP_PROXY')) { - $http_proxy = my_env('HTTP_PROXY'); -} elseif (my_env('http_proxy')) { - $http_proxy = my_env('http_proxy'); -} else { - $http_proxy = ''; -} + fgets($tty, 1024); -register_shutdown_function('bail'); + print "\n"; -print "HTTP proxy (host:port), or Enter for none"; + print "HTTP proxy (host:port), or Enter for none"; -if (!empty($http_proxy)) { - print " [$http_proxy]"; -} -print ": "; -$tmp = trim(fgets($tty, 1024)); -if (!empty($tmp)) { - $http_proxy = $tmp; -} + if (!empty($http_proxy)) { + print " [$http_proxy]"; + } + print ": "; + $tmp = trim(fgets($tty, 1024)); + if (!empty($tmp)) { + $http_proxy = $tmp; + } +}; -detect_install_dirs(); $origpwd = getcwd(); -$config_desc = array( - 'prefix' => 'Installation prefix', - 'bin_dir' => 'Binaries directory', - 'php_dir' => 'PHP code directory', - 'doc_dir' => 'Documentation base directory', - 'data_dir' => 'Data base directory', - 'test_dir' => 'Tests base directory', -); $config_vars = array_keys($config_desc); // make indices run from 1... array_unshift($config_vars, ""); @@ -146,7 +249,54 @@ end($config_vars); $last = key($config_vars); -while (true) { +if (WEBINSTALLER) { + if (isset($_SESSION['go-pear']['DHTML']) && $_SESSION['go-pear']['DHTML'] == true && $_GET['step'] == 'install') { + $_GET['step'] = 'preinstall'; + }; + if ($_GET['step'] != 'install' && $_GET['step'] != 'install-progress') { + displayHTML($_GET['step']); + exit; + }; + if ($_GET['step'] == 'install-progress') { + displayHTMLHeader(); + echo "Starting installation ...<br/>"; + }; + ob_start(); +}; + +$progress = 0; +/* + * Checks PHP SAPI version under windows/CLI + */ +if( WINDOWS && !WEBINSTALLER && $php_bin=='') { + print " +We do not find any php.exe, please select the php.exe folder (CLI is +recommanded, usually in c:\php\cli\php.exe) +"; + $php_bin_set = false; +} elseif ( WINDOWS && !WEBINSTALLER && strlen($php_bin) ) { + $php_bin_sapi = win32DetectPHPSAPI(); + $php_bin_set = true; + if($php_bin_sapi!='cli'){ + if($php_bin_sapi=='cgi'){ + print " +*NOTICE* +We found php.exe under $php_bin, it uses a $php_bin_sapi SAPI. PEAR commandline +tool works well with it, if you have a CLI php.exe available, we +recommand to use it. +"; + } else { + print " +*WARNING* +We found php.exe under $php_bin, it uses an unknown SAPI. PEAR commandline +tool has not been tested with it, if you have a CLI (or CGI) php.exe available, +we strongly recommand to use it. +"; + } + } +} + +while (!WEBINSTALLER) { print " Below is a suggested file layout for your new PEAR installation. To change individual locations, type the number in front of the @@ -154,26 +304,68 @@ accept these locations. "; + if( WINDOWS && $php_bin=='' ){ + + } foreach ($config_vars as $n => $var) { printf("%2d. $descfmt : %s\n", $n, $config_desc[$var], $$var); } print "\n$first-$last, 'all' or Enter to continue: "; $tmp = trim(fgets($tty, 1024)); - if (empty($tmp)) { - break; + if ( empty($tmp) ) { + if( WINDOWS && !$php_bin_set ){ + echo "**ERROR** +Please, specify the php.exe path. + +"; + } else { + break; + } } if (isset($config_vars[(int)$tmp])) { $var = $config_vars[(int)$tmp]; $desc = $config_desc[$var]; $current = $$var; - print "$desc [$current] : "; - $tmp = trim(fgets($tty, 1024)); + if(WIN32GUI){ + $tmp = win32BrowseForFolder("$desc [$current] :"); + } else { + print "$desc [$current] : "; + $tmp = trim(fgets($tty, 1024)); + } $old = $$var; - if (!empty($tmp)) { - $$var = $tmp; + if(ereg(' ',$tmp)){ + echo "**ERROR**: No space allowed in any path, please choose another path.\n"; + $tmp=''; + } + if(WINDOWS && $var=='php_bin' ){ + if(file_exists($tmp.DIRECTORY_SEPARATOR.'php.exe')){ + $tmp = $tmp.DIRECTORY_SEPARATOR.'php.exe'; + $php_bin_sapi = win32DetectPHPSAPI(); + if($php_bin_sapi=='cgi'){ + print " +*NOTICE* +We found php.exe under $php_bin, it uses a $php_bin_sapi SAPI. PEAR commandline +tool works well with it, if you have a CLI php.exe available, we +recommand to use it. +"; + } elseif ($php_bin_sapi=='unknown') { + print " +*WARNING* +We found php.exe under $php_bin, it uses an $php_bin_sapi SAPI. PEAR commandline +tool has not been tested with it, if you have a CLI (or CGI) php.exe available, +we strongly recommand to use it. +"; + } + echo "php.exe (sapi: $php_bin_sapi) found.\n\n"; + $php_bin_set = true; + } else { + echo "**ERROR**: no php.exe found in this folder.\n"; + $tmp=''; + } } - if ($var == 'prefix' && $$var != $old) { - detect_install_dirs($prefix); + + if (!empty($tmp) ) { + $$var = $tmp; } } elseif ($tmp == 'all') { foreach ($config_vars as $n => $var) { @@ -196,6 +388,9 @@ foreach ($config_vars as $var) { $dir = $$var; + if (!preg_match('/_dir$/', $var)) { + continue; + }; if (!@is_dir($dir)) { if (!mkdir_p($dir)) { $root = WINDOWS ? 'administrator' : 'root'; @@ -205,23 +400,64 @@ } } -$msg = "The following PEAR packages are bundled with PHP: " . -implode(', ', $pfc_packages); -print "\n" . wordwrap($msg, 75) . ".\n"; -print "Would you like to install these as well? [Y/n] : "; -$install_pfc = !stristr(fgets($tty, 1024), "n"); -print "\n"; +if (!WEBINSTALLER) { + $msg = "The following PEAR packages are bundled with PHP: " . + implode(', ', $pfc_packages); + print "\n" . wordwrap($msg, 75) . ".\n"; + print "Would you like to install these as well? [Y/n] : "; + $install_pfc = !stristr(fgets($tty, 1024), "n"); + print "\n"; +}; #### # Temp stuff #### -$ptmp = tempnam(tmp_dir(), 'gope'); - +$foo = tmp_dir(); +$ptmp = tempnam($foo, 'gope'); +if(WINDOWS){ + $ptmp = str_replace($foo,'',$ptmp); + $foo=str_replace("\\\\",'/',$foo); + $s = substr($ptmp,0,1); + if($s=="\\" || $s=='/' ){ + $ptmp = $foo.'/'.substr($ptmp,1); + } else { + $ptmp = $foo.'/'.$ptmp; + } +} rm_rf($ptmp); mkdir_p($ptmp, 0700); -chdir($ptmp); +$ok = @chdir($ptmp); + +// If for some reason the user has no rights to access to +// the standard tempdir, we assume that he has the right +// to access his prefix and choose $prefix/tmp as tempdir +if (!$ok) { + print "System's Tempdir failed, trying to use \$prefix/tmp ..."; + $res = mkdir_p($prefix.'/tmp'); + if (!$res) { + bail('mkdir '.$prefix.'/tmp'.' ... failed'); + }; + $ptmp = tempnam($prefix.'/tmp', 'gope'); + + + rm_rf($ptmp); + mkdir_p($ptmp, 0700); + $ok = @chdir($ptmp); + + if (!$ok) { // This should not happen, really ;) + bail('chdir '.$ptmp.' ... failed'); + }; + + print "ok\n"; + + // Adjust TEMPDIR envvars + if (!isset($_ENV)) { + $_ENV = array(); + }; + $_ENV['TMPDIR'] = $_ENV['TEMP'] = $prefix.'/tmp'; +}; #### # Download @@ -229,26 +465,28 @@ ini_set("include_path", $ptmp); -if (!extension_loaded('zlib')) { +if (!extension_loaded('zlib') && !WEBINSTALLER) { // In Web context we could be in multithread env which makes dl() end up with a fatal error. if (WINDOWS) { @dl('php_zlib.dll'); } elseif (PHP_OS == 'HP-UX') { @dl('zlib.sl'); } elseif (PHP_OS == 'AIX') { @dl('zlib.a'); - } elseif (PHP_OS == 'OSX') { - @dl('zlib.bundle'); } else { @dl('zlib.so'); } } if (!extension_loaded('zlib')) { $urltemplate = 'http://pear.php.net/get/%s?uncompress=yes'; - $have_zlib = false; + $have_gzip = false; } else { $urltemplate = 'http://pear.php.net/get/%s'; - $have_zlib = true; + $have_gzip = true; } +print "Loading zlib: ".($have_gzip ? 'ok' : 'failed')."\n"; +if (!$have_gzip) { + print "Downloading uncompressed packages\n"; +}; if ($install_pfc) { $to_install = array_merge($installer_packages, $pfc_packages); @@ -256,18 +494,51 @@ $to_install = $installer_packages; } +displayHTMLProgress($progress = 5); + +if (file_exists(dirname(__FILE__).'/go-pear-bundle') || is_dir(dirname(__FILE__).'/go-pear-bundle')) { + $dh = @opendir(dirname(__FILE__).'/go-pear-bundle'); +}; +$local_dir = array(); +if ($dh) { + while($file = @readdir($dh)) { + if ($file == '.' || $file == '..' || !is_file(dirname(__FILE__).'/go-pear-bundle/'.$file)) { + continue; + }; + $local_dir[] = $file; + }; +}; + foreach ($installer_packages as $pkg) { - $msg = str_pad("Downloading package: $pkg", 38, '.'); + foreach($local_dir as $file) { + if (substr($file, 0, strlen($pkg)) == $pkg) { + echo str_pad("Using local package: $pkg", max(38,21+strlen($pkg)+4), '.'); + copy(dirname(__FILE__).'/go-pear-bundle/'.$file, $file); + $tarball[$pkg] = $file; + echo "ok\n"; + displayHTMLProgress($progress += round(65 / count($to_install))); + continue 2; + }; + }; + + $msg = str_pad("Downloading package: $pkg", max(38,21+strlen($pkg)+4), '.'); print $msg; $url = sprintf($urltemplate, $pkg); $tarball[$pkg] = download_url($url, null, $http_proxy); print "ok\n"; + displayHTMLProgress($progress += round(65 / count($to_install))); } print 'Bootstrapping: PEAR...................'; $r = 'RELEASE_' . ereg_replace('[^A-Za-z0-9]', '_', substr(substr($tarball['PEAR'], 5), 0, -4)); $url = "http://cvs.php.net/co.php/php4/pear/PEAR.php?p=1&r=$r"; -download_url($url, 'PEAR.php', $http_proxy); +if (in_array('Getopt.php', $local_dir)) { + copy(dirname(__FILE__).'/go-pear-bundle/PEAR.php', 'PEAR.php'); + echo "(local) "; +} else { + download_url($url, 'PEAR.php', $http_proxy); + echo "(remote) "; +}; include_once 'PEAR.php'; print "ok\n"; @@ -275,26 +546,53 @@ $r = 'RELEASE_' . ereg_replace('[^A-Za-z0-9]', '_', substr(substr($tarball['Archive_Tar'], 12), 0, -4)); $url = "http://cvs.php.net/co.php/pear/Archive_Tar/Archive/Tar.php?p=1&r=$r"; mkdir('Archive', 0700); -download_url($url, 'Archive/Tar.php', $http_proxy); + +if (in_array('Getopt.php', $local_dir)) { + copy(dirname(__FILE__).'/go-pear-bundle/Tar.php', 'Archive/Tar.php'); + echo "(local) "; +} else { + download_url($url, 'Archive/Tar.php', $http_proxy); + echo "(remote) "; +} print "ok\n"; print 'Bootstrapping: Console_Getopt.........'; $r = 'RELEASE_' . ereg_replace('[^A-Za-z0-9]', '_', substr(substr($tarball['Console_Getopt'], 15), 0, -4)); $url = "http://cvs.php.net/co.php/php4/pear/Console/Getopt.php?p=1&r=$r"; mkdir('Console', 0700); -download_url($url, 'Console/Getopt.php', $http_proxy); +if (in_array('Getopt.php', $local_dir)) { + copy(dirname(__FILE__).'/go-pear-bundle/Getopt.php', 'Console/Getopt.php'); + echo "(local) "; +} else { + download_url($url, 'Console/Getopt.php', $http_proxy); + echo "(remote) "; +}; print "ok\n"; if ($install_pfc) { foreach ($pfc_packages as $pkg) { - $msg = str_pad("Downloading package: $pkg", 38, '.'); + foreach($local_dir as $file) { + if (substr($file, 0, strlen($pkg)) == $pkg) { + echo str_pad("Using local package: $pkg", max(38,21+strlen($pkg)+4), '.'); + copy(dirname(__FILE__).'/go-pear-bundle/'.$file, $file); + $tarball[$pkg] = $file; + echo "ok\n"; + displayHTMLProgress($progress += round(65 / count($to_install))); + continue 2; + }; + }; + + $msg = str_pad("Downloading package: $pkg", max(38,21+strlen($pkg)+4), '.'); print $msg; $url = sprintf($urltemplate, $pkg); $tarball[$pkg] = download_url($url, null, $http_proxy); print "ok\n"; + displayHTMLProgress($progress += round(65 / count($to_install))); } } +displayHTMLProgress($progress = 70); + PEAR::setErrorHandling(PEAR_ERROR_DIE, "\n%s\n"); print 'Extracting installer..................'; $dot = strrpos($tarball['PEAR'], '.'); @@ -302,22 +600,28 @@ $ext = substr($tarball['PEAR'], $dot+1); include_once 'Archive/Tar.php'; -$tar = &new Archive_Tar($tarball['PEAR'], $have_zlib); +$tar = &new Archive_Tar($tarball['PEAR'], $have_gzip); if (!$tar->extractModify($ptmp, $pkg)) { bail("failed!\n"); } print "ok\n"; + $tarball['PEAR'] = 'package.xml'; // :-) -include_once "./PEAR.php"; -include_once "./PEAR/Config.php"; -include_once "./PEAR/Command.php"; -include_once "./PEAR/Registry.php"; +include_once "PEAR.php"; +include_once "PEAR/Config.php"; +include_once "PEAR/Command.php"; +include_once "PEAR/Registry.php"; -$config = &PEAR_Config::singleton(); +if (WEBINSTALLER) { + $config = &PEAR_Config::singleton($prefix."/pear.conf", ''); +} else { + $config = &PEAR_Config::singleton(); +}; foreach ($config_vars as $var) { $config->set($var, $$var); } + $config->store(); $registry = new PEAR_Registry($php_dir); @@ -332,112 +636,124 @@ if ($registry->packageExists($pkg)) { $options['upgrade'] = true; } + $install->run('install', $options, array($src)); + + displayHTMLProgress($progress += round(29 / count($tarball))); } +displayHTMLProgress($progress = 99); + +// Base installation finished + ini_restore("include_path"); -$sep = WINDOWS ? ';' : ':'; -$include_path = explode($sep, ini_get('include_path')); -if (!in_array($php_dir, $include_path)) { - print " +if (!WEBINSTALLER) { + $sep = WINDOWS ? ';' : ':'; + $include_path = explode($sep, ini_get('include_path')); + if (!in_array($php_dir, $include_path)) { + print " ****************************************************************************** WARNING! The include_path defined in the currently used php.ini does not contain the PEAR PHP directory you just specified. If the specified directory is also not in the include_path used by your scripts, you will have problems getting any PEAR packages working. "; - if (WINDOWS) { - print " + if (WINDOWS) { + print " Please look over your php.ini file to make sure $php_dir is in your include_path."; - } else { - print " + } else { + print " I will add a workaround for this in the 'pear' command to make sure the installer works, but please look over your php.ini or Apache configuration to make sure $php_dir is in your include_path. "; - } - if (WINDOWS) { - // on Windows, we can be pretty sure that there is a php.ini - // file somewhere - do { - $php_ini = PHP_CONFIG_FILE_PATH . DIRECTORY_SEPARATOR . 'php.ini'; - if (@file_exists($php_ini)) break; - $php_ini = 'c:\winnt\php.ini'; - if (@file_exists($php_ini)) break; - $php_ini = 'c:\windows\php.ini'; - } while (false); - } else { - $php_ini = PHP_CONFIG_FILE_PATH . DIRECTORY_SEPARATOR . 'php.ini'; - } - print " + } + if (WINDOWS) { + // on Windows, we can be pretty sure that there is a php.ini + // file somewhere + do { + $php_ini = PHP_CONFIG_FILE_PATH . DIRECTORY_SEPARATOR . 'php.ini'; + if (@file_exists($php_ini)) break; + $php_ini = 'c:\winnt\php.ini'; + if (@file_exists($php_ini)) break; + $php_ini = 'c:\windows\php.ini'; + } while (false); + } else { + $php_ini = PHP_CONFIG_FILE_PATH . DIRECTORY_SEPARATOR . 'php.ini'; + } + print " Current include path : ".ini_get('include_path')." Configured directory : $php_dir Currently used php.ini (guess) : $php_ini - -Press Enter to continue: "; - fgets($tty, 1024); - if (!WINDOWS) { - print 'Fixing installer include_path.........'; - $pear_cmd = "$bin_dir/pear"; - $tmpfile = "$bin_dir/.tmp.pear"; - $fp = @fopen($pear_cmd, "r"); - $wp = @fopen($tmpfile, "w"); - if ($fp && $wp) { - $hashbang = fgets($fp, 1024); - fwrite($wp, $hashbang); - if (substr($hashbang, 0, 9) == "#!/bin/sh") { - fwrite($wp, "PHP_PEAR_INSTALL_DIR=$php_dir;". - "export PHP_PEAR_INSTALL_DIR\n"); - } - while ($data = fread($fp, 2048)) { - fwrite($wp, $data); - } - fclose($fp); - fclose($wp); - chmod($tmpfile, fileperms($pear_cmd)); - rename($tmpfile, $pear_cmd); - print "ok\n"; - } else { - print "failed\n"; - print "Make sure you update your php.ini!\n\n"; +"; + if(WINDOWS){ + win32CreateRegEnv(); } - } -} - -$pear_cmd = $bin_dir . DIRECTORY_SEPARATOR . 'pear'; - -// check whether the installed pear and the one in the path are the same -$pear_old = which('pear', $bin_dir); -if ($pear_old && $pear_old != $pear_cmd) { - // check if it is a link or symlink - $islink = WINDOWS ? is_link($pear_old) : false; - if ($islink && readlink($pear_old) != $pear_cmd) { - print "\n** WARNING! The link $pear_old does not point to the " . - "installed $pear_cmd\n"; - } elseif (is_writable($pear_old)) { - rename($pear_old, "{$pear_old}_old"); - print "\n** WARNING! Backed up old pear to {$pear_old}_old\n"; - } else { - print "\n** WARNING! Old version found at $pear_old, please remove it or ". - "be sure to use the new $pear_cmd command\n"; - } -} + print "Press Enter to continue: "; + fgets($tty, 1024); -print "\nThe 'pear' command is now at your service at $pear_cmd\n"; - -// Alert the user if the pear cmd is not in PATH -$old_dir = $pear_old ? dirname($pear_old) : false; -if (!which('pear', $old_dir)) { - print " + if (!WINDOWS) { + print 'Fixing installer include_path.........'; + $pear_cmd = "$bin_dir/pear"; + $tmpfile = "$bin_dir/.tmp.pear"; + $fp = @fopen($pear_cmd, "r"); + $wp = @fopen($tmpfile, "w"); + if ($fp && $wp) { + $hashbang = rtrim(fgets($fp, 1024)); + if (!strstr($hashbang, "include_path=")) { + $hashbang .= "d include_path=$php_dir"; + } + fwrite($wp, "$hashbang\n"); + while ($data = fread($fp, 2048)) { + fwrite($wp, $data); + } + fclose($fp); + fclose($wp); + $perms = fileperms($pear_cmd); + rename($tmpfile, $pear_cmd); + chmod($pear_cmd, $perms); + print "ok\n"; + } else { + print "failed\n"; + print "Make sure you update your php.ini!\n\n"; + } + } + } + + $pear_cmd = $bin_dir . DIRECTORY_SEPARATOR . 'pear'; + + // check that the installed pear and the one in tha path are the same (if any) + $pear_old = which('pear', $bin_dir); + if ($pear_old && $pear_old != $pear_cmd) { + // check if it is a link or symlink + $islink = WINDOWS ? is_link($pear_old) : false; + if ($islink && readlink($pear_old) != $pear_cmd) { + print "\n** WARNING! The link $pear_old does not point to the " . + "installed $pear_cmd\n"; + } elseif (is_writable($pear_old)) { + rename($pear_old, "{$pear_old}_old"); + print "\n** WARNING! Backed up old pear to {$pear_old}_old\n"; + } else { + print "\n** WARNING! Old version found at $pear_old, please remove it or ". + "be sure to use the new $pear_cmd command\n"; + } + } + + print "\nThe 'pear' command is now at your service at $pear_cmd\n"; + + // Alert the user if the pear cmd is not in PATH + $old_dir = $pear_old ? dirname($pear_old) : false; + if (!which('pear', $old_dir)) { + print " ** The 'pear' command is not currently in your PATH, so you need to ** use '$pear_cmd' until you have added ** '$bin_dir' to your PATH environment variable. "; -} + } -print "Run it without parameters to see the available actions, try 'pear list' + print "Run it without parameters to see the available actions, try 'pear list' to see what packages are installed, or 'pear help' for help. For more information about PEAR, see: @@ -449,6 +765,60 @@ Thanks for using go-pear! "; +} + + +if (WEBINSTALLER) { + print "Writing WebFrontend file ... "; + @unlink($webfrontend_file); //Delete old one + $fp = fopen($webfrontend_file, 'w'); + if (!$fp) { + print "failed\n"; + } else { + $php_file = '<'."?php + ini_set('include_path', '".$php_dir."'); + require_once('PEAR.php'); + \$pear_user_config = '".$prefix."/pear.conf'; + \$useDHTML = true; + require_once('PEAR/WEBINSTALLER.php'); + ?".'>'; + fwrite($fp, $php_file); + fclose($fp); + print "ok\n"; + }; + //copy($config->get('doc_dir').'/PEAR_Frontend_Web/docs/example.php', $webfrontend_file); + + if ($_GET['step'] == 'install-progress') { + displayHTMLProgress($progress = 100); + ob_end_clean(); + displayHTMLInstallationSummary(); + displayHTMLFooter(); + } else { + $out = ob_get_contents(); + + $out = explode("\n", $out); + foreach($out as $line => $value) { + if (preg_match('/ok$/', $value)) { + $value = preg_replace('/(ok)$/', '<span class="green">\1</span>', $value); + }; + if (preg_match('/^install ok:/', $value)) { + $value = preg_replace('/^(install ok:)/', '<span class="green">\1</span>', $value); + }; + if (preg_match('/^Warning:/', $value)) { + $value = '<span style="color: #ff0000">'.$value.'</span>'; + }; + $out[$line] = $value; + }; + $out = nl2br(implode("\n",$out)); + ob_end_clean(); + + displayHTML('install', $out); + }; + exit; +}; + + +// Set of functions following // {{{ download_url() @@ -466,9 +836,9 @@ $fp = fsockopen($tmp['host'], $tmp['port'], $errno, $errstr); //print "\nconnecting to $tmp[host]:$tmp[port]\n"; } else { - $proxy = eregi_replace('^http://', '', $proxy); - $proxy = ereg_replace('/.*', '', $proxy); - list($phost, $pport) = explode(":", $proxy); + $tmp_proxy = parse_url($proxy); + $phost = $tmp_proxy['host']; + $pport = $tmp_proxy['port']; $fp = fsockopen($phost, $pport, $errno, $errstr); //print "\nconnecting to $phost:$pport\n"; } @@ -487,26 +857,48 @@ $path .= "#$tmp[fragment]"; } $request = "GET $path HTTP/1.0\r\nHost: $tmp[host]:$tmp[port]\r\n". - "User-Agent: go-pear\r\n\r\n"; + "User-Agent: go-pear\r\n"; + + if (!empty($proxy) && $tmp_proxy['user'] != '') { + $request .= 'Proxy-Authorization: Basic ' . + base64_encode($tmp_proxy['user'] . ':' . $tmp_proxy['pass']) . "\r\n"; +// print "\nauthenticating against proxy with : user = ${tmp_proxy['user']} \n"; +// print "and pass = ${tmp_proxy['pass']}\n"; + } // if + $request .= "\r\n"; fwrite($fp, $request); $cdh = "content-disposition:"; $cdhl = strlen($cdh); + $content_length = 0; while ($line = fgets($fp, 2048)) { if (trim($line) == '') { break; } + if (preg_match('/^Content-Length: (.*)$/i', $line, $matches)) { + $content_length = trim($matches[1]); + }; if ($use_suggested_filename && !strncasecmp($line, $cdh, $cdhl)) { if (eregi('filename="([^"]+)"', $line, $matches)) { $destfile = basename($matches[1]); } } } + if ($content_length) { + displayHTMLSetDownload($destfile); + }; $wp = fopen($destfile, "wb"); if (!$wp) { bail("could not open $destfile for writing\n"); } + $bytes_read = 0; + $progress = 0; while ($data = fread($fp, 2048)) { fwrite($wp, $data); + $bytes_read += strlen($data); + if ($content_length != 0 && floor($bytes_read * 10 / $content_length) != $progress) { + $progress = floor($bytes_read * 10 / $content_length); + displayHTMLDownloadProgress($progress * 10); + }; } fclose($fp); fclose($wp); @@ -565,8 +957,14 @@ chdir($origpwd); rm_rf($ptmp); } - if ($msg) { - die($msg); + if ($msg && WEBINSTALLER) { + $msg = @ob_get_contents() ."\n\n". $msg; + @ob_end_clean(); + displayHTML('error', $msg); + exit; + }; + if ($msg && !WEBINSTALLER) { + die($msg); } } @@ -621,20 +1019,42 @@ // }}} // {{{ tmpdir() - +/* + * Fixes for winXP/wrong tmp set by Urs Gehrig (urs@circle.ch) + */ function tmp_dir() { if (WINDOWS){ - if (my_env('TEMP')) { - return my_env('TEMP'); - } - if (my_env('TMP')) { - return my_env('TMP'); - } - if (my_env('windir')) { - return my_env('windir') . '\temp'; + if ( my_env('TEMP') ) { + $_temp = my_env('TEMP'); + } elseif ( my_env('TMP') ) { + $_temp = my_env('TMP'); + } elseif ( my_env('windir') ) { + $_temp = my_env('windir') . '\temp'; + } elseif ( my_env('SystemRoot') ) { + $_temp = my_env('SystemRoot') . '\temp'; + } + + // handle ugly ENV var like \Temp instead of c:\Temp + $dirs = explode("\\", realpath($_temp)); + if(strpos($_temp, ":") != 1) { + unset($_temp); + $_dirs = array(); + foreach($dirs as $key => $val) { + if((boolean)$val ) { + $_dirs[] = str_replace("/", "", $val); + } + } + unset($dirs); + $dirs = $_dirs; + array_unshift ($dirs, "c:" ); + $_temp = $dirs[0]; + for($i = 1;$i < count($dirs);$i++) { + $_temp .= "//" . $dirs[$i]; + } } - return my_env('SystemRoot') . '\temp'; + $ptmp = $_temp; + return $_temp; } if (my_env('TMPDIR')) { return my_env('TMPDIR'); @@ -657,29 +1077,47 @@ } // }}} - // {{{ detect_install_dirs() function detect_install_dirs($_prefix = null) { - global $prefix, $bin_dir, $php_dir, $doc_dir, $data_dir, $test_dir; + global $prefix, $bin_dir, $php_dir, $php_bin, $doc_dir, $data_dir, $test_dir; if (WINDOWS) { if ($_prefix === null) { - $prefix = PHP_BINDIR; + $prefix = getcwd(); } else { $prefix = $_prefix; } + if (!@is_dir($prefix)) { - if (@is_dir('c:\php')) { - $prefix = 'c:\php'; - } elseif (@is_dir('c:\php4')) { + if (@is_dir('c:\php4')) { $prefix = 'c:\php4'; + } elseif (@is_dir('c:\php')) { + $prefix = 'c:\php'; } } + $bin_dir = '$prefix'; $php_dir = '$prefix\pear'; $doc_dir = '$php_dir\docs'; $data_dir = '$php_dir\data'; - $test_dir = '$php_dir\tests'; + $test_dir = '$php_dir\tests'; + /* + * Detects php.exe + */ + if( $t=getenv('PHP_PEAR_PHP_BIN') ){ + $php_bin = $t; + } elseif ($t=getenv('PHP_BIN') ) { + $php_bin = $t; + } elseif ( $t=which('php') ) { + $php_bin = $t; + } elseif ( is_file($prefix.'\cli\php.exee') ) { + $php_bin = $prefix.'\cli\php.exe'; + } elseif ( is_file($prefix.'\php.exe') ) { + $php_bin = $prefix.'\php.exe'; + } + if( $php_bin && !is_file($php_bin) ){ + $php_bin = ''; + } } else { if ($_prefix === null) { $prefix = dirname(PHP_BINDIR); @@ -690,7 +1128,7 @@ $php_dir = '$prefix/share/pear'; $doc_dir = '$php_dir/docs'; $data_dir = '$php_dir/data'; - $test_dir = '$php_dir/tests'; + $test_dir = '$php_dir/tests'; // check if the user has installed PHP with PHP or GNU layout if (@is_dir("$prefix/lib/php/.registry")) { $php_dir = '$prefix/lib/php'; @@ -698,7 +1136,7 @@ $php_dir = '$prefix/share/pear/lib'; $doc_dir = '$prefix/share/pear/docs'; $data_dir = '$prefix/share/pear/data'; - $test_dir = '$prefix/share/pear/tests'; + $test_dir = '$prefix/share/pear/tests'; } elseif (@is_dir("$prefix/share/php/.registry")) { $php_dir = '$prefix/share/php'; } @@ -706,3 +1144,967 @@ } // }}} + +function displayHTMLHeader() +{ + ?> +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> +<html> +<head> + <title>PEAR :: Installer :: Go-PEAR</title> + <style type="text/css"> + <!-- + a { + color:#000000; + text-decoration: none; + } + a:visited { + color:#000000; + text-decoration: none; + } + a:active { + color:#000000; + text-decoration: none; + } + a:hover { + color:#000000; + text-decoration: underline; + } + + a.green { + color:#006600; + text-decoration: none; + } + a.green:visited { + color:#006600; + text-decoration: none; + } + a.green:active { + color:#006600; + text-decoration: none; + } + a.green:hover { + color:#006600; + text-decoration: underline; + } + + body, td, th { + font-family: verdana,arial,helvetica,sans-serif; + font-size: 90%; + } + + p { + font-family: verdana,arial,helvetica,sans-serif; + } + + th.pack { + color: #FFFFFF; + background: #009933; + text-align: right; + } + + td.package_info_title { + color: #006600; + font-weight: bold; + } + + th.others { + color: #006600; + text-align: left; + } + + em { + font-weight: bold; + font-style: italic; + } + + .green { + color: #006600; + } + + span.headline { + font-family: verdana,arial,helvetica,sans-serif; + font-size: 125%; + font-weight: bold; + color: #ffffff; + } + + span.title { + font-family: verdana,arial,helvetica,sans-serif; + font-size: 110%; + font-weight: bold; + color: #006600; + } + + .newsDate { + font-size: 85%; + font-style: italic; + color: #66cc66; + } + + .compact { + font-family: arial, helvetica, sans-serif; + font-size: 90%; + } + + .menuWhite { + font-family: verdana,arial,helvetica,sans-serif; + font-size: 75%; + color: #ffffff; + } + .menuBlack { + font-family: verdana,arial,helvetica,sans-serif; + text-decoration: none; + font-weight: bold; + font-size: 75%; + color: #000000; + } + + .sidebar { + font-size: 85%; + } + + code, pre, tt { + font-family: Courier, "Courier New", monospace; + font-size: 90%; + } + + pre.php { + border-color: black; + border-style: dashed; + border-width: 1px; + background-color: #eeeeee; + padding: 5px; + } + + h1 { + font-family: verdana,arial,helvetica,sans-serif; + font-size: 140%; + font-weight: bold; + color: #006600; + } + + h2 { + font-family: verdana,arial,helvetica,sans-serif; + font-size: 125%; + font-weight: bold; + color: #006600; + } + + h3 { + font-family: verdana,arial,helvetica,sans-serif; + font-size: 110%; + font-weight: bold; + color: #006600; + } + + small { + font-family: verdana,arial,helvetica,sans-serif; + font-size: 75%; + } + + a.small { + font-family: verdana,arial,helvetica,sans-serif; + font-size: 75%; + text-decoration: none; + } + + .tableTitle { + font-family: verdana,arial,helvetica,sans-serif; + font-weight: bold; + } + + .tableExtras { + font-family: verdana,arial,helvetica,sans-serif; + font-size: 85%; + color: #FFFFFF; + } + + input { + font-family: verdana,arial,helvetica,sans-serif; + } + + textarea { + font-family: verdana,arial,helvetica,sans-serif; + } + + input.small, select.small { + font-family: verdana,arial,helvetica,sans-serif; + font-size: 75%; + } + + textarea.small { + font-family: verdana,arial,helvetica,sans-serif; + font-size: 75%; + } + + form { + margin-bottom : 0; + } + --> + </style> + <meta name="description" content="This is the Web Interface of the PEAR Installer" /> +</head> + +<body topmargin="0" leftmargin="0" + marginheight="0" marginwidth="0" + bgcolor="#ffffff" + text="#000000" + link="#006600" + alink="#cccc00" + vlink="#003300" +> + <?php +} + +function displayHTML($page = 'Welcome', $data = array()) +{ + global $pfc_packages; + + displayHTMLHeader(); + +?> +<a name="TOP" /></a> +<table border="0" cellspacing="0" cellpadding="0" height="48" width="100%"> + <tr bgcolor="#339900"> + <td align="left" width="120"> + <img src="<?php echo basename(__FILE__); ?>?action=img&amp;img=pearlogo" width="104" height="50" vspace="2" hspace="5" alt="PEAR"> + </td> + <td align="left" valign="middle" width="20"> + &nbsp; + </td> + <td align="left" valign="middle"> + <span class="Headline">Go-PEAR</span> + </td> + </tr> + + <tr bgcolor="#003300"><td colspan="3"></td></tr> + + <tr bgcolor="#006600"> + <td align="right" valign="top" colspan="3"> + <span style="color: #ffffff">Version <?php echo GO_PEAR_VER; ?></span>&nbsp;<br /> + </td> + </tr> + + <tr bgcolor="#003300"><td colspan="3"></td></tr> +</table> + + +<table cellpadding="0" cellspacing="0" width="100%"> + <tr valign="top"> + <td bgcolor="#f0f0f0" width="100"> + <table width="200" border="0" cellpadding="4" cellspacing="0"> + <tr valign="top"> + <td style="font-size: 90%" align="left" width="200"> + <br><br> + <img src="<?php echo basename(__FILE__); ?>?action=img&amp;img=smallpear" border="0"> + <a href="<?php echo basename(__FILE__); ?>?step=Welcome&restart=1" <?php if ($page == 'Welcome') echo ' class="green"'; ?>> + Welcome to Go-PEAR + </a><br/> + + <img src="<?php echo basename(__FILE__); ?>?action=img&amp;img=smallpear" border="0"> + <a href="<?php echo basename(__FILE__); ?>?step=config" <?php if ($page == 'config') echo ' class="green"'; ?>> + Configuration + </a><br/> + + <img src="<?php echo basename(__FILE__); ?>?action=img&amp;img=smallpear" border="0"> + <?php if ($page == 'install') echo '<span class="green">'; ?> + Complete installtion<br/> + <?php if ($page == 'install') echo '</span>'; ?> + + </td> + </tr> + </table> + </td> + <td bgcolor="#cccccc" width="1" background="/gifs/checkerboard.gif"></td> + <td> + <table width="100%" cellpadding="10" cellspacing="0"> + <tr> + <td valign="top"> + +<table border="0"> +<tr> + <td width="20"> + </td> + <td> + <?php + if ($page == 'error') { + ?> + <span class="title">Error</span><br/> + <br/> + <?php + $value = $data; + if (preg_match('/ok$/', $value)) { + $value = preg_replace('/(ok)$/', '<span class="green">\1</span>', $value); + }; + if (preg_match('/failed$/', $value)) { + $value = preg_replace('/(failed)$/', '<span style="color: #ff0000">\1</span>', $value); + }; + if (preg_match('/^install ok:/', $value)) { + $value = preg_replace('/^(install ok:)/', '<span class="green">\1</span>', $value); + }; + if (preg_match('/^Warning:/', $value)) { + $value = '<span style="color: #ff0000">'.$value.'</span>'; + }; + + echo nl2br($value); + } elseif ($page == 'Welcome') { + ?> + <span class="title">Welcome to go-pear <?php echo GO_PEAR_VER; ?>!</span><br/> + <br/> + Go-pear will install the Web Frontend of the PEAR Installer and all the needed <br/> + files. This frontend is your tool for PEAR installation and maintenance.<br/> + <br/> + Go-pear also lets you download and install the PEAR packages bundled<br/> + with PHP: <?php echo implode(', ', $GLOBALS['pfc_packages']); ?>.<br/> + <br/> + <a href="<?php echo basename(__FILE__); ?>?step=config" class="green">Next &gt;&gt;</a> + <?php + } elseif ($page == 'config') { + list($proxy_host, $proxy_port) = explode(':', $GLOBALS['http_proxy']); + ?> + <form action="<?php echo basename(__FILE__);?>?step=install" method="post"> + <span class="title">Configuration</span><br/> + <br/> + HTTP proxy (host:port): + <input type="text" name="proxy[host]" value="<?php echo $proxy_host;?>"> + <input type="text" name="proxy[port]" value="<?php echo $proxy_port;?>" size="6"> + <br/><br/><hr/><br/> + Below is a suggested file layout for your new PEAR installation. <br/> + <br/> + <table border="0"> + <TR> + <TD valign="top"><img src="<?php echo basename(__FILE__); ?>?action=img&amp;img=note" border="0"></TD> + <TD> + <span class="green"> + <b>Note:</b> Make sure that PHP has the permission to access the specified<br/> + directories.<br/><br/> + </span> + </TD> + </TR> + </table> + <TABLE border="0"> + <?php + foreach($GLOBALS['config_vars'] as $n => $var) { + printf('<tr><td>%d. %s</td><td><input type="text" name="config[%s]" value="%s"></td></tr>', + $n, + $GLOBALS['config_desc'][$var], + $var, + $GLOBALS[$var]); + }; + ?> + </TABLE> + <br/><hr/><br/> + The following PEAR packages are common ones, and can be installed<br/> + by go-pear too: <br/> + <?php echo implode(', ', $GLOBALS['pfc_packages']);?>.<br/> + <input type="checkbox" name="install_pfc" <?php if($GLOBALS['install_pfc']) echo 'checked';?>> Install those too<br/> + <br/><br/> + <table border="0"> + <TR> + <TD valign="top"><img src="<?php echo basename(__FILE__); ?>?action=img&amp;img=note" border="0"></TD> + <TD> + <span class="green"> + <b>Note:</b> Installation might take some time, because go-pear has to download<br/> + all needed files from pear.php.net. Just be patient and wait for the next<br/> + page to load.<br/> + </span> + </TD> + </TR> + </table> + <br> + <input type="checkbox" name="BCmode" id="BCmode" checked> Compatibility-Mode for old non-DOM Browsers<br/> + <script type="text/javascript"> + <!-- + if (document.getElementById('BCmode')) { + document.getElementById('BCmode').checked = 0; + }; + // --> + </script> + + <?php + if (WIN && phpversion() == '4.1.1') { + ?> + <table border="0"> + <TR> + <TD valign="top"><img src="<?php echo basename(__FILE__); ?>?action=img&amp;img=note" border="0"></TD> + <TD> + <span style="color: #ff0000"> + <b>Warning:</b> Your PHP version (4.1.1) might be imcompatible with go-pear due to a bug<br/> + in your PHP binary. If the installation crashes you might want to update your PHP version.</br> + </span> + </TD> + </TR> + </table> + <?php + }; + ?> + <br/> + <input type="submit" value="Install" onClick="javascript: submitButton.value='Downloading and installing ... please wait ...'" name="submitButton"> + </form> + <?php + } elseif ($page == 'install') { + ?> + <span class="title">Installation Complete - Summary</span><br/> + <?php + displayHTMLInstallationSummary($data); + } elseif ($page == 'preinstall') { + ?> + <span class="title">Installation in progress ...</span><br/> + <br/> + <script language="javascript"> + <!-- + + var progress; + var downlodprogress; + progress = 0; + downloadprogress = 0; + + function setprogress(value) + { + progress = value; + + prog = document.getElementById('installation_progress'); + prog.innerHTML = progress + " %"; + progress2 = progress / 10; + progress2 = Math.floor(progress2); + for (i=0; i < 10; i++) + document.getElementById('progress_cell_'+i).style.backgroundColor = "#cccccc"; + switch(progress2) + { + case 10: + document.getElementById('progress_cell_9').style.backgroundColor = "#006600"; + case 9: + document.getElementById('progress_cell_8').style.backgroundColor = "#006600"; + case 8: + document.getElementById('progress_cell_7').style.backgroundColor = "#006600"; + case 7: + document.getElementById('progress_cell_6').style.backgroundColor = "#006600"; + case 6: + document.getElementById('progress_cell_5').style.backgroundColor = "#006600"; + case 5: + document.getElementById('progress_cell_4').style.backgroundColor = "#006600"; + case 4: + document.getElementById('progress_cell_3').style.backgroundColor = "#006600"; + case 3: + document.getElementById('progress_cell_2').style.backgroundColor = "#006600"; + case 2: + document.getElementById('progress_cell_1').style.backgroundColor = "#006600"; + case 1: + document.getElementById('progress_cell_0').style.backgroundColor = "#006600"; + }; + } + + function addprogress(value) + { + progress += value; + setprogress(progress); + } + + function setdownloadfile(value) + { + setdownloadprogress(0); + + prog = document.getElementById('download_file'); + prog.innerHTML = 'Downloading '+value+' ...'; + }; + + function setdownloadprogress(value) + { + downloadprogress = value; + + prog = document.getElementById('download_progress'); + prog.innerHTML = downloadprogress + " %"; + progress2 = downloadprogress / 10; + progress2 = Math.floor(progress2); + for (i=0; i < 10; i++) + document.getElementById('download_progress_cell_'+i).style.backgroundColor = "#cccccc"; + switch(progress2) + { + case 10: + document.getElementById('download_progress_cell_9').style.backgroundColor = "#006600"; + case 9: + document.getElementById('download_progress_cell_8').style.backgroundColor = "#006600"; + case 8: + document.getElementById('download_progress_cell_7').style.backgroundColor = "#006600"; + case 7: + document.getElementById('download_progress_cell_6').style.backgroundColor = "#006600"; + case 6: + document.getElementById('download_progress_cell_5').style.backgroundColor = "#006600"; + case 5: + document.getElementById('download_progress_cell_4').style.backgroundColor = "#006600"; + case 4: + document.getElementById('download_progress_cell_3').style.backgroundColor = "#006600"; + case 3: + document.getElementById('download_progress_cell_2').style.backgroundColor = "#006600"; + case 2: + document.getElementById('download_progress_cell_1').style.backgroundColor = "#006600"; + case 1: + document.getElementById('download_progress_cell_0').style.backgroundColor = "#006600"; + }; + }; + + // --> + </script> + <table style="border-width: 1px; border-color: #000000" cellspacing="0" cellpadding="0"> + <tr> + <td> + <table border="0"> + <tr> + <td bgcolor="#cccccc" width="10" height="20" id="progress_cell_0">&nbsp;</td> + <td bgcolor="#cccccc" width="10" height="20" id="progress_cell_1">&nbsp;</td> + <td bgcolor="#cccccc" width="10" height="20" id="progress_cell_2">&nbsp;</td> + <td bgcolor="#cccccc" width="10" height="20" id="progress_cell_3">&nbsp;</td> + <td bgcolor="#cccccc" width="10" height="20" id="progress_cell_4">&nbsp;</td> + <td bgcolor="#cccccc" width="10" height="20" id="progress_cell_5">&nbsp;</td> + <td bgcolor="#cccccc" width="10" height="20" id="progress_cell_6">&nbsp;</td> + <td bgcolor="#cccccc" width="10" height="20" id="progress_cell_7">&nbsp;</td> + <td bgcolor="#cccccc" width="10" height="20" id="progress_cell_8">&nbsp;</td> + <td bgcolor="#cccccc" width="10" height="20" id="progress_cell_9">&nbsp;</td> + <td bgcolor="#ffffff" width="10" height="20">&nbsp;</td> + <td bgcolor="#ffffff" height="20" id="installation_progress" class="green">0 %</td> + </tr> + </table> + <br> + <table border="0"> + <tr> + <td bgcolor="#cccccc" width="10" height="20" id="download_progress_cell_0">&nbsp;</td> + <td bgcolor="#cccccc" width="10" height="20" id="download_progress_cell_1">&nbsp;</td> + <td bgcolor="#cccccc" width="10" height="20" id="download_progress_cell_2">&nbsp;</td> + <td bgcolor="#cccccc" width="10" height="20" id="download_progress_cell_3">&nbsp;</td> + <td bgcolor="#cccccc" width="10" height="20" id="download_progress_cell_4">&nbsp;</td> + <td bgcolor="#cccccc" width="10" height="20" id="download_progress_cell_5">&nbsp;</td> + <td bgcolor="#cccccc" width="10" height="20" id="download_progress_cell_6">&nbsp;</td> + <td bgcolor="#cccccc" width="10" height="20" id="download_progress_cell_7">&nbsp;</td> + <td bgcolor="#cccccc" width="10" height="20" id="download_progress_cell_8">&nbsp;</td> + <td bgcolor="#cccccc" width="10" height="20" id="download_progress_cell_9">&nbsp;</td> + <td bgcolor="#ffffff" width="10" height="20">&nbsp;</td> + <td bgcolor="#ffffff" height="20" id="download_progress" class="green">0 %</td> + <td bgcolor="#ffffff" width="10" height="20">&nbsp;</td> + <td bgcolor="#ffffff" height="20" id="download_file" class="green"></td> + </tr> + </table> + <br> + <iframe src="<?php echo basename(__FILE__); ?>?step=install-progress&amp;<?php echo SID;?>" width="700" height="700" frameborder="0" marginheight="0" marginwidth="0"></iframe> + </td> + </tr> + </table> + <?php + }; + ?> + </td> +</tr> +</table> + + +</td> + </tr> + </table> + </td> + + </tr> +</table> +<?php + displayHTMLFooter(); +} + +function displayHTMLFooter() +{ + ?> + </body> + </html> + <?php +}; + +function displayHTMLInstallationSummary($data = '') +{ + $next = NULL; + $prefix = dirname($GLOBALS['webfrontend_file']); + $doc_root = strip_magic_quotes($_SERVER['DOCUMENT_ROOT']); + $file_dir = dirname(__FILE__); + if (WINDOWS) { + $prefix = str_replace('/', '\\', strtolower($prefix)); + $doc_root = str_replace('/', '\\', strtolower($doc_root)); + $file_dir = str_replace('/', '\\', strtolower($file_dir)); + }; + + if ($doc_root && substr($prefix, 0, strlen($doc_root)) == $doc_root) { + $next = substr($prefix, strlen($doc_root)).'/index.php'; + } else if ($file_dir && substr($prefix, 0, strlen($file_dir)) == $file_dir) { + $next = substr($prefix, strlen($file_dir)).'/index.php'; + }; + + if ($data) { + echo "<br/>".$data; + }; + ?> + <br/> + <table border="0"> + <TR> + <TD valign="top"><img src="<?php echo basename(__FILE__); ?>?action=img&amp;img=note" border="0"></TD> + <TD> + <span class="green"> + <b>Note:</b> To use PEAR without any problems you need to add your<br/> + PEAR Installation path (<?php echo $GLOBALS['php_dir']; ?>)<br> + to your <a href="http://www.php.net/manual/en/configuration.directives.php#ini.include_path">include_path</a>.<br/> + You can use <i>adjust_incpath.php</i> coming with go-pear to change your<br/> + include_path (you might need to change adjust_incpath.php to match your needs).<br/> + Using a .htaccess file or directly edit httpd.conf would be working solutions<br/> + for Apache running servers, too.<br/> + </span> + </TD> + </TR> + </table> + <br/> + For more information about PEAR, see:<br/> + <a href="http://pear.php.net/faq.php" target="_new" class="green">PEAR FAQ</a><br/> + <a href="http://pear.php.net/manual/" target="_new" class="green">PEAR Manual</a><br/> + <br/> + Thanks for using go-pear!<br/> + <br/> + <?php + if ($next === NULL) { + ?> + <table border="0"> + <TR> + <TD valign="top"><img src="<?php echo basename(__FILE__); ?>?action=img&amp;img=note" border="0"></TD> + <TD> + <span style="color: #ff0000"> + <b>Warning:</b> Go-PEAR was not able to determine the URL to the newly<br/> + installed Web Frontend of the PEAR Installer. Please access it manually.<br/> + Since you specified the prefix, you should know how to do so.<br/> + </span> + </TD> + </TR> + </table> + <?php + } else { + if ($_GET['step'] == 'install-progress') { + ?> + <a href="<?php echo $next;?>" class="green" target="_parent">Start Web Frontend of the PEAR Installer &gt;&gt;</a> + <?php + } else { + ?> + <a href="<?php echo $next;?>" class="green">Start Web Frontend of the PEAR Installer &gt;&gt;</a> + <?php + }; + }; +}; + +function strip_magic_quotes($value) +{ + if (ini_get('magic_quotes_gpc')) { + return stripslashes($value); + } + return $value; +}; + +function showImage($img) +{ + $images = array( + 'smallpear' => array( + 'type' => 'gif', + 'data' => 'R0lGODlhEQATAMQAAAAAACqUACiTAC2WAC+YAzKZBTSaBsHgszOZADCYADmcB4TCZp3Ohtfrzd/v1+by4PD47DaaAz+fDUijF2WyOlCoHvT58VqtJPn893y+S/v9+f7//f3+/Pz9+////////ywAAAAAEQATAAAFkqAnjiR5NGXqcdpCoapnMVRdWbEHUROVVROYalHJTCaVAKWTcjAUGckgQY04SJAFMhJJIL5e4a5I6X6/gwlkRIwOzucAY9SYZBRvOCKheIwYFxR5enxCLhVeemAHbBQVg4SMIoCCinsKVyIOdlKKAhQcJFpGiWgFQiIYPxeJCQEEcykcDIgDAwYUkjEWB70NGykhADs=', + ), + 'pearlogo' => array( + 'type' => 'gif', + 'data' => 'R0lGODlhaAAyAMT/AMDAwP3+/TWaAvD47Pj89vz++zebBDmcBj6fDEekFluvKmu3PvX68ujz4XvBS8LgrNXqxeHw1ZnPaa/dgvv9+cLqj8LmltD2msnuls3xmszwmf7+/f///wAAAAAAAAAAACH5BAEAAAAALAAAAABoADIAQAX/ICCOZGmeaKqubOtWWjwJphLLgH1XUu//C1Jisfj9YLEKQnSY3GaixWQqQTkYHM4AMulNLJFC9pEwIW/odKU8cqTfsWoTTtcomU4ZjbR4ZP+AgYKCG0EiZ1AuiossEhwEXRMEg5SVWQ6MmZqKWD0QlqCUEHubpaYlExwRPRZioZZVp7KzKQoSDxANDLsNXA5simd2FcQYb4YAc2jEU80TmAAIztPCMcjKdg4OEsZJmwIWWQPQI4ikIwtoVQnddgrv8PFlCWgYCwkI+fp5dkvJ/IlUKMCy6tYrDhNIIKLFEAWCTxse+ABD4SClWA0zovAjcUJFi6EwahxZwoGqHhFA/4IqoICkyxQSKkbo0gDkuBXV4FRAJkRCnTgi2P28IcEfk5xpWppykFJVuScmEvDTEETAVJ6bEpypcADPkz3pvKVAICHChkC7siQ08zVqu4Q6hgIFEFZuEn/KMgRUkaBmAQs+cEHgIiHVH5EAFpIgW4+NT6LnaqhDwe/Ov7YOmWZp4MkiAWBIl0kAVsJWuzcYpdiNgddc0E8cKBAu/FElBwagMb88ZZKDRAkWJtkWhHh3wwUbKHQJN3wQAaXGR2LpArv5oFHRR34C7Mf6oLXZNfqBgNI7oOLhj1f8PaGpygHQ0xtP8MDVKwYTSKcgxr9/hS6/pCCAAg5M4B9/sWh1YP9/XSgQWRML/idBfKUc4IBET9lFjggKhDYZAELZJYEBI2BDB3ouNBEABwE8gAwiCcSYgAKqPdEVAG7scM8BPPZ4AIlM+OgjAgpMhRE24OVoBwsIFEGFA7ZkQQBWienWxmRa7XDjKZXhBdAeSmKQwgLuUVLICa6VEKIGcK2mQWoVZHCBXJblJUFkY06yAXlGsPIHBEYdYiWHb+WQBgaIJqqoHFNpgMGB7dT5ZQuG/WbBAIAUEEFNfwxAWpokTIXJAWdgoJ9kRFG2g5eDRpXSBpEIF0oEQFaZhDbaSFANRgqcJoEDRARLREtxOQpsPO906ZUeJgjQB6dZUPBAdwcF8KLXXRVQaKFcsRRLJ6vMiiCNKxRE8ECZKgUA3Va4arOAAqdGRWO7uMZH5AL05gvsjQbg6y4NCjQ1kw8TVGcbdoKGKx8j3bGH7nARBArqwi0gkFJBrZiXBQRbHoIgnhSjcEBKfD7c3HMhz+JIQSY3t8GGKW+SUhfUajxGzKd0IoHBNkNQK86ZYEqdzYA8AHQpqXRUm80oHs1CAgMoBxzRqvzs9CIKECC1JBp7enUpfXHApwVYNAfo16c4IrYPLVdSAJVob7IAtCBFQGHcs/RRdiUDPHA33oADEAIAOw==', + ), + 'note' => array( + 'type' => 'png', + 'data' => 'iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAAAAADFHGIkAAAAAmJLR0QAAKqNIzIAAAEESURBVHjaZZIhksMwDEV9voWFSwsLA0MLDf8VdARBUUNBQ1FBHcErZ5M0baXJjOPnb0vfLuMMn3H+lWMgBKL89A1Eq9Q9IrwB+gIOsnMPBR8giMclguQfBGS8x5xIoPQxnxqb4LL/eQ4l2AVNONP2ZshLCqJ3qqzWtT5pNgNnLU4OcNbuiqaLmFmHGhJ0TCMC99+f2wphlhaOYjuQVc0IIzLH2BRWfQoWsNSjct8AVop4rF3belTuVAb3MRj6kLrcTwtIy+g03V1vC57t1XrMzqfP5pln5yLTkk7+5UhstvOni1X3ixLEdf2c36+W0Q7kOb48hnSRLI/XdNPfX4kpMkgP5R+elfdkDPprQgAAAEN0RVh0U29mdHdhcmUAQCgjKUltYWdlTWFnaWNrIDQuMi44IDk5LzA4LzAxIGNyaXN0eUBteXN0aWMuZXMuZHVwb250LmNvbZG6IbgAAAAqdEVYdFNpZ25hdHVyZQAzYmQ3NDdjNWU0NTgwNzAwNmIwOTBkZDNlN2EyNmM0NBTTk/oAAAAOdEVYdFBhZ2UAMjR4MjQrMCswclsJMQAAAABJRU5ErkJggg==', + ), + ); + + Header('Content-Type: image/'.$images[$img]['type']); + echo base64_decode($images[$img]['data']); +}; + +function displayHTMLProgress($progress) +{ + if (!(WEBINSTALLER && isset($_SESSION['go-pear']['DHTML']) && $_SESSION['go-pear']['DHTML'])) { + return; + }; + $msg = ob_get_contents(); + ob_end_clean(); + + $msg = explode("\n", $msg); + foreach($msg as $key => $value) { + if (preg_match('/ok$/', $value)) { + $value = preg_replace('/(ok)$/', '<span class="green">\1</span>', $value); + }; + if (preg_match('/failed$/', $value)) { + $value = preg_replace('/(failed)$/', '<span style="color: #ff0000">\1</span>', $value); + }; + if (preg_match('/^install ok:/', $value)) { + $value = preg_replace('/^(install ok:)/', '<span class="green">\1</span>', $value); + }; + if (preg_match('/^Warning:/', $value)) { + $value = '<span style="color: #ff0000">'.$value.'</span>'; + }; + $msg[$key] = $value; + }; + $msg = implode('<br>', $msg); + + $msg.='<script type="text/javascript"> parent.setprogress('.((int) $progress).'); </script>'; + + echo $msg; + ob_start(); +}; + +function displayHTMLDownloadProgress($progress) +{ + if (!(WEBINSTALLER && isset($_SESSION['go-pear']['DHTML']) && $_SESSION['go-pear']['DHTML'])) { + return; + }; + $msg = ob_get_contents(); + ob_end_clean(); + + echo '<script type="text/javascript"> parent.setdownloadprogress('.((int) $progress).'); </script>'; + + ob_start(); + echo $msg; +}; + +function displayHTMLSetDownload($file) +{ + if (!(WEBINSTALLER && isset($_SESSION['go-pear']['DHTML']) && $_SESSION['go-pear']['DHTML'])) { + return; + }; + $msg = ob_get_contents(); + ob_end_clean(); + + echo '<script type="text/javascript"> parent.setdownloadfile("'.$file.'"); </script>'; + + ob_start(); + echo $msg; +}; + +/* + * Create a vbs script to browse the getfolder dialog, called + * by cscript, if it's available. + * $label is the label text in the header of the dialog box + * + * TODO: + * - Do not show Control panel + * - Replace WSH with calls to w32 as soon as callbacks work + * @Author Pierrre-Alain Joye + */ +function win32BrowseForFolder ( $label ) +{ + global $ptmp; + static $wshSaved=false; + static $cscript=''; + + $wsh_browserfolder = 'Option Explicit +Dim ArgObj, var1, var2, sa, sFld +Set ArgObj = WScript.Arguments +Const BIF_EDITBOX = &H10 +Const BIF_NEWDIALOGSTYLE = &H40 +Const OFN_LONGNAMES = &H200000 +Const OFN_NOLONGNAMES = &H40000 +Const ssfDRIVES = &H11 +Const ssfNETWORK = &H12 +Set sa = CreateObject("Shell.Application") +var1=ArgObj(0) +Set sFld = sa.BrowseForFolder(0, var1, BIF_NEWDIALOGSTYLE , ssfDRIVES ) +if not sFld is nothing Then + if not left(sFld.items.item.path,1)=":" Then + WScript.Echo sFld.items.item.path + Else + WScript.Echo "invalid" + End If +Else + WScript.Echo "cancel" +End If +'; + if( !$wshSaved){ + $cscript = $ptmp.DIRECTORY_SEPARATOR."bf.vbs"; + $fh = fopen($cscript,"wb+"); + fwrite($fh,$wsh_browserfolder,strlen($wsh_browserfolder)); + fclose($fh); + $wshSaved = true; + } + exec('cscript '.$cscript.' "'.$label.'" //noLogo',$arPath); + if($arPath[0]=='' || $arPath[0]=='cancel'){ + return ''; + } elseif ($arPath[0]=='invalid') { + echo "Invalid Path.\n"; + return ''; + } + return $arPath[0]; +} + +/* + * Generates a registry addOn for Win32 platform + * This addon set PEAR environment variables + * @Author Pierrre-Alain Joye + */ +function win32CreateRegEnv(){ + global $prefix, $bin_dir, $php_dir, $php_bin, $doc_dir, $data_dir, $test_dir; + $nl = "\r\n"; + $reg ='REGEDIT4'.$nl. + '[HKEY_CURRENT_USER\Environment]'.$nl. + '"PHP_PEAR_SYSCONF_DIR"="'.addslashes($prefix).'"'.$nl. + '"PHP_PEAR_INSTALL_DIR"="'.addslashes($php_dir).'"'.$nl. + '"PHP_PEAR_DOC_DIR"="'.addslashes($doc_dir).'"'.$nl. + '"PHP_PEAR_BIN_DIR"="'.addslashes($bin_dir).'"'.$nl. + '"PHP_PEAR_DATA_DIR"="'.addslashes($data_dir).'"'.$nl. + '"PHP_PEAR_PHP_BIN"="'.addslashes($php_bin).'"'.$nl. + '"PHP_PEAR_TEST_DIR"="'.addslashes($test_dir).'"'.$nl; + //$path = dirname(__FILE__).DIRECTORY_SEPARATOR; + $fh = fopen($prefix.DIRECTORY_SEPARATOR.'PEAR_ENV.reg','wb'); + if($fh){ + fwrite($fh, $reg ,strlen($reg)); + fclose($fh); + echo " + +* WINDOWS ENVIRONMENT VARIABLES * +For convenience, a REG file is available under $prefix\\PEAR_ENV.reg . +This file creates ENV variables for the current user. + +Double-click this file to add it to the current user registry. + +"; + } +} + +/* + * Try to detect the kind of SAPI used by the + * the given php.exe. + * @Author Pierrre-Alain Joye + */ +function win32DetectPHPSAPI() +{ + global $php_bin; + if($php_bin!=''){ + exec($php_bin.' -v', $res); + if(is_array($res)) { + if( strpos($res[0],"(cli)") ) { + return 'cli'; + } + if( strpos($res[0],"cgi") ) { + return 'cgi'; + } else { + return 'unknown'; + } + } + } +} + +/* + * Get the php.ini file used with the current + * process or with the given php.exe + * + * Horrible hack, but well ;) + * + * Not used yet, will add the support later + * @Author Pierre-Alain Joye <paj@pearfr.org> + */ +function getPhpiniPath() +{ + $pathIni = get_cfg_var('cfg_file_path'); + if( $pathIni && is_file($pathIni) ){ + return $pathIni; + } + ob_implicit_flush(false); + ob_start(); + phpinfo(INFO_GENERAL); + $strInfo = ob_get_contents (); + ob_end_clean(); + ob_implicit_flush(true); + if( php_sapi_name() != 'cli' ){//$ini_path = $ini_arr[1]) ); + $strInfo = strip_tags($strInfo,'<td>'); + $arrayInfo = explode("</td>", $strInfo ); + $cli = false; + } else { + $arrayInfo = explode("\n",$strInfo); + $cli = true; + } + foreach($arrayInfo as $val){ + if( strpos($val,"php.ini") ){ + if($cli){ + list(,$pathIni) = explode('=>',$val); + } else { + $pathIni = strip_tags(trim($val) ); + } + $pathIni = trim($pathIni); + if(is_file($pathIni)){ + return $pathIni; + } + } + } + return false; +} + +/* + * Not used yet, will add the support later + * Not optimized, but seems to work, if some nice + * peardev will test it before we active it :) + * + * @Author Pierre-Alain Joye <paj@pearfr.org> + */ +function alterPhpIni($php_ini) +{ + $arrayIni = file($pathIni); + $i=0; + $found=0; + // do we have many include_path? + foreach( $arrayIni as $iniLine ) { + if( preg_match("/^include_path/",trim($iniLine)) ){ + $foundAt[] = $i; + $found++; + } + $i++; + } + + if($found){ + $iniSep = WINDOWS?';':':'; + + $includeLine = $arrayIni[$foundAt[0]]; + list(,$currentPath)=explode('=',$includeLine); + + $currentPath = trim($currentPath); + if(substr($currentPath,0,1)=='"'){ + $currentPath = substr($currentPath,1,strlen($currentPath)-2); + } + + $arrayPath = explode($iniSep, $currentPath); + if( $arrayPath[0]=='.' ){ + $newPath[0] = '.'; + $newPath[1] = $php_dir; + array_shift($arrayPath); + print_r($arrayPath); + } else { + $newPath[0] = $php_dir; + } + + foreach( $arrayPath as $path){ + $newPath[]= $path; + } + + $newInclude = 'include_path="'.implode($iniSep,$newPath).'"'; + + // force the use of the 1st found + $arrayIni[$foundAt[0]] = $newInclude; + + for( $i=1; $i<$found; $i++){ + $arrayIni[$foundAt[$i]]=';'.trim($arrayIni[$foundAt[$i]]); + } + foreach($foundAt as $key){ + echo $arrayIni[$key]."\n"; + } + + $newIni = implode("\n",$arrayIni); + $pathIni = "ooh/test.ini"; + if ($fh = @fopen($pathIni, "w+") ){ + fwrite($fh, $newIni, strlen($newIni)); + fclose($fh); + readfile($pathIni); + } else { + echo "cannot write php.ini\n"; + } + } +} + +?> \ No newline at end of file
« previous php.pear.cvs (#9734) next »