📄 installer.php
字号:
<?php
/**
* installer Class.
* This class is used during the installation and upgrade processes
* @package Installer
* @access private
* @copyright Copyright 2003-2007 Zen Cart Development Team
* @copyright Portions Copyright 2003 osCommerce
* @license http://www.zen-cart.com/license/2_0.txt GNU Public License V2.0
* @version $Id: installer.php 7619 2007-12-11 17:49:09Z drbyte $
*/
class installer {
var $php_version, $user_agent;
var $configKeys = array();
var $configFiles = array();
var $configInfo = array();
var $error, $fatal_error, $error_array;
function installer() {
$this->php_version = PHP_VERSION;
$this->user_agent = $_SERVER['HTTP_USER_AGENT'];
$this->configKeys = (isset($_SESSION['installerConfigKeys'])) ? $_SESSION['installerConfigKeys'] : array();
if (isset($_POST['zcinst'])) $this->readConfigKeysFromPost();
$this->configFiles = array();
}
function test_admin_configure($zp_error_text, $zp_error_code, $zp_fatal = false) {
if (!file_exists('../admin/includes/configure.php')) {
@chmod('../admin/includes', 0777);
@touch('../admin/includes/configure.php');
@chmod('../admin/includes', 0755);
if (!file_exists('../admin/includes/configure.php')) {
$this->setError($zp_error_text, $zp_error_code, $zp_fatal);
return false;
}
} else {
return true;
}
}
function test_admin_configure_write($zp_error_text, $zp_error_code, $zp_fatal = true) {
$fp = @fopen('../admin/includes/configure.php', 'a');
if (!is_writeable('../admin/includes/configure.php') || (!$fp) ) {
$this->setError($zp_error_text, $zp_error_code, $zp_fatal);
$this->admin_config_writable=false;
} else {
$this->admin_config_writable=true;
}
if ($fp) @fclose($fp);
}
function test_store_configure_write($zp_error_text, $zp_error_code, $zp_fatal = true) {
$fp = @fopen('../includes/configure.php', 'a');
if (!is_writeable('../includes/configure.php') || (!$fp) ) {
$this->setError($zp_error_text, $zp_error_code, $zp_fatal);
$this->store_config_writable=false;
} else {
$this->store_config_writable=true;
}
if ($fp) @fclose($fp);
}
function test_store_configure($zp_error_text, $zp_error_code, $zp_fatal = true) {
if (!file_exists('../includes/configure.php')) {
@chmod('../includes', 0777);
@touch('../includes/configure.php');
@chmod('../includes', 0755);
if (!file_exists('../includes/configure.php')) {
$this->setError($zp_error_text, $zp_error_code, $zp_fatal);
return false;
}
} else {
return true;
}
}
function test_php_version ($zp_test, $test_version, $zp_error_text='', $zp_error_code='', $zp_fatal=false) {
if (isset($_GET['ignorephpver']) && $_GET['ignorephpver']=='1') return false;
$string = explode('.',substr($this->php_version,0,6));
foreach ($string as $key=>$value) {
$string[$key] = str_pad((int)$value, 2, '0', STR_PAD_LEFT);
}
$myver_string = implode('',$string);
$string = explode('.',$test_version);
foreach ($string as $key=>$value) {
$string[$key] = str_pad($value, 2, '0', STR_PAD_LEFT);
}
$test_version = implode('',$string);
$zp_error_text = $this->php_version . ' ' . $zp_error_text;
//echo '<br />$myver='.$myver_string . ' $test_ver = ' . $test_version . ' TEST: ' . $zp_test . ' error-text: ' . $zp_error_text;
switch ($zp_test) {
case '=':
if ($myver_string == $test_version) {
$this->setError($zp_error_text, $zp_error_code, $zp_fatal);
return true;
}
break;
case '<':
if ($myver_string < $test_version) {
$this->setError($zp_error_text, $zp_error_code, $zp_fatal);
return true;
}
break;
}
return false;
}
function isEmpty($zp_test, $zp_error_text, $zp_error_code) {
if (!$zp_test || $zp_test=='http://' || $zp_test=='https://' ) {
$this->setError($zp_error_text, $zp_error_code, true);
}
return $zp_test;
}
function checkPrefix($zp_test, $zp_error_text, $zp_error_code) {
if (preg_replace('/[^0-9a-zA-Z_]/', '_', $zp_test) != $zp_test) {
$this->setError($zp_error_text, $zp_error_code, true);
}
}
function fileExists($zp_file, $zp_error_text, $zp_error_code) {
if (!file_exists($zp_file)) {
$this->setError($zp_error_text, $zp_error_code, true);
}
}
function isDir($zp_file, $zp_error_text, $zp_error_code) {
if (!is_dir($zp_file)) {
$this->setError($zp_error_text, $zp_error_code, true);
}
}
function isWriteable($zp_file, $zp_error_text='', $zp_error_code='') {
$retVal = true;
if (is_dir($zp_file)) $zp_file .= '/test_writable.txt';
$fp = @fopen($zp_file, 'a');
if (!is_writeable($zp_file) || (!$fp) ) {
if ($zp_error_code !='') $this->setError($zp_error_text, $zp_error_code, true);
$retVal = false;
}
@fclose($fp);
if (file_exists($zp_file) && !strstr($zp_file, 'configure.php')) @unlink($zp_file);
return $retVal;
}
function functionExists($zp_type, $zp_error_text, $zp_error_code) {
if ($zp_type == 'mysql') {
$function = 'mysql_connect';
}
if (!function_exists($function)) {
$this->setError($zp_error_text, $zp_error_code, true);
}
}
function dbConnect($zp_type, $zp_host, $zp_database, $zp_username, $zp_pass, $zp_error_text, $zp_error_code, $zp_error_text2=ERROR_TEXT_DB_NOTEXIST, $zp_error_code2=ERROR_CODE_DB_NOTEXIST) {
if ($this->error == false) {
if ($zp_type == 'mysql') {
if (@mysql_connect($zp_host, $zp_username, $zp_pass) == false ) {
$this->setError($zp_error_text.'<br />'.@mysql_error(), $zp_error_code, true);
} else {
if (!@mysql_select_db($zp_database)) {
$this->setError($zp_error_text2.'<br />'.@mysql_error(), $zp_error_code2, true);
} else {
@mysql_close();
}
}
}
}
}
function dbCreate($zp_create, $zp_type, $zp_name, $zp_error_text, $zp_error_code) {
if ($zp_create == 'true' && $this->error == false) {
if ($zp_type == 'mysql' && (@mysql_query('CREATE DATABASE ' . $zp_name) == false)) {
$this->setError($zp_error_text, $zp_error_code, true);
}
}
}
function dbExists($zp_create, $zp_type, $zp_host, $zp_username, $zp_pass, $zp_name, $zp_error_text, $zp_error_code) {
// echo $zp_create;
if ($zp_create != 'true' && $this->error == false) {
if ($zp_type == 'mysql') {
@mysql_connect($zp_host, $zp_username, $zp_pass);
if (@mysql_select_db($zp_name) == false) {
$this->setError($zp_error_text.'<br />'.@mysql_error(), $zp_error_code, true);
}
@mysql_close();
}
}
}
function isEmail($zp_param, $zp_error_text, $zp_error_code) {
if (zen_validate_email($zp_param) == false) {
$this->setError($zp_error_text, $zp_error_code, true);
}
}
function isEqual($zp_param1, $zp_param2, $zp_error_text, $zp_error_code) {
if ($zp_param1 != $zp_param2) {
$this->setError($zp_error_text, $zp_error_code, true);
}
}
function setError($zp_error_text, $zp_error_code, $zp_fatal = false) {
$this->error = true;
$this->fatal_error = $zp_fatal;
$this->error_array[] = array('text'=>$zp_error_text, 'code'=>$zp_error_code);
$this->throwException(($zp_fatal ? 'FATAL: ' : '') . str_replace('<br />', ' - ', $zp_error_text));
$this->logDetails(($zp_fatal ? 'FATAL: ' : '') . str_replace('<br />', ' - ', $zp_error_text));
}
/**
* Test CURL communications
*
* returns string
*/
function test_curl($mode='NONSSL', $proxy = false, $proxyAddress = '') {
if (!function_exists('curl_init')) {
$this->setError(ERROR_TEXT_CURL_NOT_COMPILED, ERROR_CODE_CURL_SUPPORT, false);
return ERROR_TEXT_CURL_NOT_COMPILED;
}
$url = ($mode == 'NONSSL') ? "http://www.zen-cart.com/testcurl.php" : "https://www.zen-cart.com/testcurl.php";
$data = "installertest=checking";
if ($proxy && $proxyAddress == '') $proxyAddress = 'proxy.shr.secureserver.net:3128';
// Send CURL communication
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_VERBOSE, 0);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 4);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); /* compatibility for SSL communications on some Windows servers (IIS 5.0+) */
if ($proxy) {
curl_setopt ($ch, CURLOPT_HTTPPROXYTUNNEL, true);
@curl_setopt ($ch, CURLOPT_PROXYTYPE, CURLPROXY_HTTP);
curl_setopt ($ch, CURLOPT_PROXY, $proxyAddress);
}
$result = curl_exec($ch);
$errtext = curl_error($ch);
$errnum = curl_errno($ch);
$commInfo = @curl_getinfo($ch);
curl_close ($ch);
if (isset($_GET['debug'])) echo $mode . ($proxy ? ' (proxy)': '') . ' CURL RESULTS: ' . $errnum . ' => ' . $errtext . (trim($result) != '' ? ' [' . $result . ']' : '') . '<pre>' . print_r($commInfo, true) . '</pre><br /><br />';
if ($errnum != 0 || trim($result) != 'PASS') {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -