升级PHP脚本
我使用vBulletin论坛软件(旧的3.x版本),它只是我喜欢的论坛软件。尽管vBulletin 3已经更新为至少支持PHP7.1,但为其开发的许多产品已经过时得可怕 我正在努力学习如何升级这些产品,我有一点PHP知识,但没有我希望的那么多。我在学习过程中所做的一些事情,例如;我下载了一个旧版本的vBulletin 3,和一个新版本的vBulletin 3,然后比较这些文件,看看它们做了哪些类型的更改。但这对学习并没有什么帮助。(为什么要进行这些更改,这些更改意味着什么?)升级PHP脚本,php,function,plugins,updating,vbulletin,Php,Function,Plugins,Updating,Vbulletin,我使用vBulletin论坛软件(旧的3.x版本),它只是我喜欢的论坛软件。尽管vBulletin 3已经更新为至少支持PHP7.1,但为其开发的许多产品已经过时得可怕 我正在努力学习如何升级这些产品,我有一点PHP知识,但没有我希望的那么多。我在学习过程中所做的一些事情,例如;我下载了一个旧版本的vBulletin 3,和一个新版本的vBulletin 3,然后比较这些文件,看看它们做了哪些类型的更改。但这对学习并没有什么帮助。(为什么要进行这些更改,这些更改意味着什么?) Find: da
Find:
datamanager(
function vB_DataManager
function delete()
=&
split(
$groupis = $_GET['groupis'];
split
parent::
ereg
Replace:
datamanager_init(
function __construct
function delete($doquery = true)
=
preg_split(
$groupis = intval($_GET['groupis']);
explode
parent::__construct
preg_match
我保留我的查找列表和替换列表,以便行匹配需要替换的内容
我正在尝试更新的最新产品包含多个文件,我知道要替换的一个不在我列表中的文件是“&$”(但不总是…?从我所读的内容来看,什么时候可以替换它们?)这只是我正在处理的大约5个文件中的一个,它当前运行(到处都有错误),但我不知道从哪里开始实际更新这段代码,使之成为更高效的代码。(删除了一些字符限制函数)
类vbma
{
var$vbulletin;
var$fields=array(//常用文件名的数组,也是alows积分
'custnum'=>'custnum',//键(短名称)=>Value(数据库表名)
“mpassword”=>“MAU密码”,
'信息'=>'妈妈信息'
);
var$货币符号;
var$VbPhase;
var$addons=array();
函数vbma($vbulletin,$vbphrase)
{
$this->vbulletin=$vbulletin;
$this->vbphrase=$vbphrase;
foreach(glob(“includes/class_vbma*.php”)作为$addon)
{
如果($addon=='includes/class_vbma.php')
{
继续;
}
需要_一次(DIR.'/.$addon);
$addon=basename(substr($addon,19,strlen($addon)),'.php');
$name='vbma_551;'。$addon;
$this->$addon=新的$name($this);
$this->addons[“$addon”]=$addon;
}
}
函数init($permissions)
{
$vbphrase=$this->vbphrase;
$this->canViewMemArea($permissions);
如果($this->vbulletin->options['memarea_enabled']==0和!($this->vbulletin->
userinfo['permissions']['adminpermissions']&$this->vbulletin->
bf_ugp_adminpermissions['CanControl Panel']))
{
评估(标准错误($this->vbulletin->options['memarea\u offmessage']);
}elseif($this->vbulletin->options['memarea\u enabled']==0和$this->vbulletin->
userinfo['permissions']['adminpermissions']&$this->vbulletin->
bf_ugp_管理员权限['CanControl Panel'])
{
$oringle=$vbphrase['alert_board_off'];
$vbphrase['alert_board_off']=$this->vbphrase['memarea_off'];
eval(“$GLOBALS[navbar].=”。获取模板('board\u inactive\u warning')。“;”);
}
foreach($this->addons as$addon)
{
如果(方法_存在($this->$addon,'init'))
{
$this->$addon->init();
}
}
$maxlength=TIMENOW-(60*60*24*3);
$GLOBALS['ma_session']=$this->vbulletin->db->query_first(“选择*FROM”)。
表_PREFIX.“用户ID=”所在的ma_会话“$this->vbulletin->userinfo['userid']。
“'和日期行>'”、“$maxlength.””;
$GLOBALS['curr']=$this->getCurrency();
$this->currency\u sym=$GLOBALS['currency\u sym']=$this->vbulletin->options['memarea\u curr\u code'];
}
函数checkCustomerInfo($customernum,$password)
{
$fcust=$this->fields['custnum'];
$fpass=$this->fields['mpassword'];
如果($this->vbulletin->userinfo[“$fcust”]==$customernum和$this->vbulletin->
用户信息[“$fpass”]==$password)
{
返回true;
}
返回false;
}
函数startSession($userid)
{
$this->vbulletin->db->query\u write(“插入到“.TABLE\u前缀中”)。
“ma_会话(`userid`、`dateline`)值(
“$this->vbulletin->db->escape_字符串($this->vbulletin->userinfo['userid'])。
“,”时间现在。“
)");
}
函数getCurrency()
{
$curr\u a=数组(“$”=>“USD”,$this->vbphrase['memarea\u currency\u eur']=>“eur”,
$this->vbphrase['memarea\u currency\u pound']=>GBP',$this->vbphrase['memarea\u currency\u nis']=>
“NIS”);
返回$curr\u a[$this->vbulletin->options['memarea\u curr\u code'];
}
函数getPaypalAddress($license)
{
$paypal=$license['paypal'];
如果(空($paypal)或$paypal=='0')
{
$paypal=$this->vbulletin->options['memarea\u paypal\u email'];
}
返回$paypal;
}
函数getLicense($licenseid,$checkpermission=true,$getproduct=true,$productfields=
“proid为proid的products.id,protitle为protitle的products.title”,$throwerror=true,$getExpireDate=true,
$showExpiredErrors=false,$showSusErrors=false)
{
如果($getproduct)
{
$license=$this->vbulletin->db->query_first(“选择许可证。*$productfields FROM”)。
表_前缀。“ma_许可证作为许可证”
左连接“.TABLE_前缀。
“在(products.id=licenses.productid)上将产品作为产品
其中licenses.id=“$licenseid.”;
}
其他的
{
$license=$this->vbulletin->db->query\u first(“SELECT*FROM.”表前缀。
“ma_许可证,其中id=”“$licenseid。””;
}
如果($throwerr和empty($license))
{
eval(标准错误(获取错误('license\u not\u found'))
class vbma
{
var $vbulletin;
var $fields = array(//Array of commonly used filed names, Also alows intergration
'custnum' => 'custnum',//Key (short name) => Value (database table name)
'mpassword' => 'ma_password',
'info' => 'ma_info'
);
var $currency_sym;
var $vbphrase;
var $addons = array();
function vbma($vbulletin, $vbphrase)
{
$this->vbulletin = $vbulletin;
$this->vbphrase = $vbphrase;
foreach (glob("includes/class_vbma*.php") as $addon)
{
if ($addon == 'includes/class_vbma.php')
{
continue;
}
require_once (DIR . '/' . $addon);
$addon = basename(substr($addon, 19, strlen($addon)), '.php');
$name = 'vbma_' . $addon;
$this->$addon = new $name($this);
$this->addons["$addon"] = $addon;
}
}
function init($permissions)
{
$vbphrase = $this->vbphrase;
$this->canViewMemArea($permissions);
if ($this->vbulletin->options['memarea_enabled'] == 0 and !($this->vbulletin->
userinfo['permissions']['adminpermissions'] & $this->vbulletin->
bf_ugp_adminpermissions['cancontrolpanel']))
{
eval(standard_error($this->vbulletin->options['memarea_offmessage']));
} elseif ($this->vbulletin->options['memarea_enabled'] == 0 and $this->vbulletin->
userinfo['permissions']['adminpermissions'] & $this->vbulletin->
bf_ugp_adminpermissions['cancontrolpanel'])
{
$oringle = $vbphrase['alert_board_off'];
$vbphrase['alert_board_off'] = $this->vbphrase['memarea_off'];
eval('$GLOBALS[navbar] .= "' . fetch_template('board_inactive_warning') . '";');
}
foreach ($this->addons as $addon)
{
if (method_exists($this->$addon, 'init'))
{
$this->$addon->init();
}
}
$maxlength = TIMENOW - (60 * 60 * 24 * 3);
$GLOBALS['ma_session'] = $this->vbulletin->db->query_first("SELECT * FROM " .
TABLE_PREFIX . "ma_session WHERE userid = '" . $this->vbulletin->userinfo['userid'] .
"' AND dateline > '" . $maxlength . "'");
$GLOBALS['curr'] = $this->getCurrency();
$this->currency_sym = $GLOBALS['currency_sym'] = $this->vbulletin->options['memarea_curr_code'];
}
function checkCustomerInfo($customernum, $password)
{
$fcust = $this->fields['custnum'];
$fpass = $this->fields['mpassword'];
if ($this->vbulletin->userinfo["$fcust"] == $customernum and $this->vbulletin->
userinfo["$fpass"] == $password)
{
return true;
}
return false;
}
function startSession($userid)
{
$this->vbulletin->db->query_write("INSERT INTO " . TABLE_PREFIX .
"ma_session (`userid`, `dateline`) VALUES (
'" . $this->vbulletin->db->escape_string($this->vbulletin->userinfo['userid']) .
"', '" . TIMENOW . "'
)");
}
function getCurrency()
{
$curr_a = array('$' => 'USD', $this->vbphrase['memarea_currency_eur'] => 'EUR',
$this->vbphrase['memarea_currency_pound'] => 'GBP', $this->vbphrase['memarea_currency_nis'] =>
'NIS');
return $curr_a[$this->vbulletin->options['memarea_curr_code']];
}
function getPaypalAddress($license)
{
$paypal = $license['paypal'];
if (empty($paypal) or $paypal == '0')
{
$paypal = $this->vbulletin->options['memarea_paypal_email'];
}
return $paypal;
}
function getLicense($licenseid, $checkpermission = true, $getproduct = true, $productfields =
'products.id as proid, products.title as protitle', $throwerror = true, $getExpireDate = true,
$showExpiredErrors = false, $showSusErrors = false)
{
if ($getproduct)
{
$license = $this->vbulletin->db->query_first("SELECT licenses.*, $productfields FROM " .
TABLE_PREFIX . "ma_licenses as licenses
LEFT JOIN " . TABLE_PREFIX .
"ma_products as products ON (products.id = licenses.productid)
WHERE licenses.id = '" . $licenseid . "'");
}
else
{
$license = $this->vbulletin->db->query_first("SELECT * FROM " . TABLE_PREFIX .
"ma_licenses WHERE id = '" . $licenseid . "'");
}
if ($throwerror and empty($license))
{
eval(standard_error(fetch_error('license_not_found')));
}
if ($checkpermission and $this->vbulletin->userinfo['userid'] !== $license['userid'])
{
print_no_permission();
}
if ($getExpireDate)
{
$license['expiredate'] = $this->getLicenseExpireDate($license);
}
if ($showExpiredErrors and $this->isExpired($license))
{
eval(standard_error(fetch_error('memarea_license_expired')));
}
if ($showSusErrors and $this->isSuspended($license))
{
eval(standard_error(fetch_error('memarea_suspended_license')));
}
return $license;
}
function isExpired($license)
{
if (intval($license['status']) == 0 or ($license['expire'] !== '0' and (($license['dateline'] +
$license['expire']) <= TIMENOW)))
{
return true;
}
else
{
return false;
}
}
function isSuspended($license)
{
if (intval($license['status']) == 1)
{
return true;
}
else
{
return false;
}
}
function getLicenseExpireDate($license)
{
if ($license['expire'] == '0')
{
return $this->vbphrase['memarea_lifetime'];
}
else
{
return vbdate($this->vbulletin->options['dateformat'], ($license['dateline'] + $license['expire']));
}
}
function sendCustomerInfo($userid, $username, $email, $num, $pass)
{
if ($this->vbulletin->options['memarea_notification_type'] == 0 or $this->
vbulletin->options['memarea_notification_type'] == 2)
{
vbmail($email, $this->vbphrase['memarea_email_subject'], construct_phrase($this->
vbphrase['memarea_email_message'], $num, $pass));
}
if ($this->vbulletin->options['memarea_notification_type'] == 1 or $this->
vbulletin->options['memarea_notification_type'] == 2)
{
$pmdm = datamanager_init('PM', $this->vbulletin, ERRTYPE_ARRAY);
$pmdm->set('fromuserid', $this->vbulletin->options['memarea_botuser']);
$fuserinfo = $this->vbulletin->db->query_first("SELECT username FROM " .
TABLE_PREFIX . "user WHERE userid = '" . $this->vbulletin->options['memarea_botuser'] .
"'");
$pmdm->set('fromusername', $fuserinfo['username']);
$pmdm->set('title', $this->vbphrase['memarea_email_subject']);
$pmdm->set('message', construct_phrase($this->vbphrase['memarea_email_message'],
$num, $pass));
$botpermissions = array();
$botpermissions['adminpermissions'] = 2;
$pmdm->set_recipients($username, $botpermissions);
$pmdm->set('dateline', TIMENOW);
$pmdm->pre_save();
if (count($pmdm->errors) == 0)
{
$pmdm->save();
}
else
{
var_dump($pmdm->errors);
}
}
}
function setCustomerNumber($ma_info, $usergroup = '', $usevb = true, $userinfo = '')
{
if ($usevb == false)
{
$this->vbulletin->userinfo = $userinfo;
}
$fcust = $this->fields['custnum'];
$fpass = $this->fields['mpassword'];
$finfo = $this->fields['info'];
$userdm = datamanager_init('User', $this->vbulletin, ERRTYPE_ARRAY);
$userinfo = fetch_userinfo($this->vbulletin->userinfo['userid']);
$userdm->set_existing($userinfo);
if (!$this->vbulletin->userinfo["$fcust"] and !$this->vbulletin->userinfo["$fpass"])
{
$rand = rand($this->vbulletin->options['memarea_numstart'], $this->vbulletin->
options['memarea_numend']);
$num = $this->vbulletin->options['custnum_prefix'] . substr(md5($rand), 0, $this->
vbulletin->options['memarea_custnumleng'] - strlen($this->vbulletin->options['custnum_prefix']));
$userdm->set($fcust, $num);
$pass = substr(md5(time() . $num . $rand . rand(0, 2000)), 0, $this->vbulletin->
options['memarea_custnumleng']);
$userdm->set($fpass, $pass);
$this->sendCustomerInfo($this->vbulletin->userinfo['userid'], $this->vbulletin->
userinfo['username'], $this->vbulletin->userinfo['email'], $num, $pass);
}
if ($usergroup or $usergroup !== '' or $usergroup !== '0')
{
if ($usergroup != $this->vbulletin->userinfo['usergroupid'])
{
$ma_info['oldgroup'] = $this->vbulletin->userinfo['usergroupid'];
$userdm->set('usergroupid', $usergroup);
}
}
if ($ma_info)
{
$ma_info = serialize($ma_info);
$userdm->set($finfo, $ma_info);
}
$userdm->pre_save();
if (count($userdm->errors) == 0)
{
$userdm->save();
return true;
}
else
{
var_dump($userdm->errors);
return false;
}
}
function checkProductPermissions($product)
{
$perm = unserialize($product['permissions']);
return in_array($this->vbulletin->userinfo['usergroupid'], $perm);
}
function buildInfoValues()
{
$values = array();
if (is_array($this->vbulletin->userinfo['ma_info']))
{
foreach ($this->vbulletin->userinfo['ma_info'] as $key => $value)
{
if (!$this->vbulletin->GPC["$key"])
{
$values["$key"] = $value;
}
}
}
return $values;
}
function canViewMemArea($permissions)
{
if (!($permissions['memarea_permissions'] & $this->vbulletin->bf_ugp['memarea_permissions']['memarea_active']))
{
print_no_permission();
}
}
function buildInfoArray()
{
return array('fullname' => $this->vbulletin->GPC['fullname'], 'address_1' => $this->
vbulletin->GPC['address_1'], 'address_2' => $this->vbulletin->GPC['address_2'],
'address_city' => $this->vbulletin->GPC['address_city'], 'address_state' => $this->
vbulletin->GPC['address_state'], 'address_zip' => $this->vbulletin->GPC['address_zip'],
'country' => $this->vbulletin->GPC['country'], 'phone' => $this->vbulletin->GPC['phone'],
'company' => $this->vbulletin->GPC['company']);
}
function insertPurchaseInfo($ids, $information, $userid = 'usevb')
{
if ($userid == 'usevb')
{
$userid = $this->vbulletin->userinfo['userid'];
}
$this->vbulletin->db->query_write("INSERT INTO " . TABLE_PREFIX .
"ma_purchases (`userid`, `dateline`, `order`, `info`) VALUES (
'" . $userid . "',
'" . TIMENOW . "',
'" . $this->vbulletin->db->escape_string(serialize($ids)) . "',
'" . $this->vbulletin->db->escape_string(serialize($information)) . "'
)");
return $this->vbulletin->db->insert_id();
}
function buildCartRow($page, $action, $title, $price, $id = 0, $multi = false)
{
$currency_sym = $this->currency_sym;
$product = array('title' => $title, 'price' => $price);
if ($page == 'billing')
{
$delname = 'del_item[' . $id . ']';
eval('$return = "' . fetch_template('memarea_billingdetailsbit') . '";');
}
else
{
$_REQUEST['do'] = 'paymentdetails';
eval('$return = "' . fetch_template('memarea_billingdetailsbit') . '";');
$_REQUEST['do'] = $action;
}
return $return;
}
function sendOutNewSaleEmail()
{
if (!empty($this->vbulletin->options['memarea_email_new_sale']))
{
foreach (explode(",", $this->vbulletin->options['memarea_email_new_sale']) as $userid)
{
$userinfo = fetch_userinfo($userid);
vbmail($userinfo['email'], construct_phrase($this->vbphrase['memarea_new_sale'],
$this->vbulletin->options['bbtitle']), construct_phrase($this->vbphrase['memarea_new_sale_body'],
$userinfo['username'], $this->vbulletin->options['bbtitle']));
unset($userinfo);
}
}
}
function checkDetailsFields($requested, $errormessage)
{
if (empty($this->vbulletin->GPC['fullname']) or empty($this->vbulletin->GPC['address_1']) or
empty($this->vbulletin->GPC['address_city']) or empty($this->vbulletin->GPC['address_zip']) or
empty($this->vbulletin->GPC['country']) or empty($this->vbulletin->GPC['phone']))
{
//$GLOBALS['error'] = $errormessage;
eval(standard_error($errormessage));
//$this->handleRequest($requested);
return false;
}
return true;
}
function handleRequest($do)
{
$method = 'handleRequest' . $do;
if (method_exists($this, $method))
{
$this->{$method}();
}
foreach ($this->addons as $addon)
{
if (method_exists($this->{$addon}, $method))
{
$this->{$addon}->{$method}();
}
}
}
function handleRequestgivelicense()
{
$vbphrase = $this->vbphrase;
$GLOBALS['id'] = $this->vbulletin->input->clean_gpc('r', 'id', TYPE_UINT);
$GLOBALS['license'] = $this->getLicense($GLOBALS['id'], true, false, '', true, false);
$GLOBALS['templatename'] = 'memarea_givelicense';
}
function handleRequestdogivelicense()
{
$vbphrase = $this->vbphrase;
$id = $this->vbulletin->input->clean_gpc('r', 'licenseid', TYPE_UINT);
$username = $this->vbulletin->input->clean_gpc('r', 'usernames', TYPE_STR);
$userinfo = $this->vbulletin->db->query_first("SELECT userid FROM " .
TABLE_PREFIX . "user WHERE username = '" . $username . "'");
if (empty($userinfo))
{
$GLOBALS['message'] = $vbphrase['memarea_givelicense_not_found'];
$this->handleRequestgivelicense();
}
else
{ //User exists
$license = $this->getLicense($id, true, false, '', true, false);
$licensedm = datamanager_init('License', $this->vbulletin, ERRTYPE_ARRAY);
$licensedm->set_existing($license);
$licensedm->setr('userid', $userinfo['userid']);
$licensedm->save();
eval(standard_error($vbphrase['memarea_gave_license']));
}
}
function handleRequestmembersarea()
{
$vbphrase = $this->vbphrase;
$licensesq = $this->vbulletin->db->query_read("SELECT licenses.*, licenses.title as sitetitle, products.title as title, products.licenseleng as expire FROM " .
TABLE_PREFIX . "ma_licenses as licenses
LEFT JOIN " . TABLE_PREFIX .
"ma_products as products ON (products.id = licenses.productid)
WHERE licenses.userid = '" . $this->vbulletin->userinfo['userid'] . "'");
$licenses = '';
while ($license = $this->vbulletin->db->fetch_array($licensesq))
{
if (empty($license['sitetitle']))
{
$license['sitetitle'] = substr($license['url'], 7);
}
$license['expiredate'] = $this->getLicenseExpireDate($license);
eval('$licenses .= "' . fetch_template('memarea_clientsbit') . '";');
}
if ($this->addons['helpdesk'])
{
$GLOBALS['tickets'] = $this->helpdesk->getTicketsBitMem();
}
$GLOBALS['licenses'] = $licenses;
$GLOBALS['templatename'] = 'memarea_clients';
}
function handleRequestlogout()
{
$this->vbulletin->db->query_write("DELETE FROM " . TABLE_PREFIX .
"ma_session WHERE userid = '" . $this->vbulletin->userinfo['userid'] . "'");
eval(standard_error($this->vbphrase['memarea_loggedout']));
}
function handleRequestlogin()
{
$this->vbulletin->input->clean_array_gpc('p', array('customernumber' => TYPE_STR,
'password' => TYPE_STR));
if ($this->checkCustomerInfo($this->vbulletin->GPC['customernumber'], $this->
vbulletin->GPC['password']))
{
$this->startSession($this->vbulletin->userinfo['userid']);
$this->handleRequest('membersarea');
$GLOBALS['bypass'] = true;
}
else
{
$this->handleRequest('membersarea');
$GLOBALS['errormessage'] = $this->vbphrase['memarea_bad_login'];
}
}
function handleRequestresend_details()
{
$num = $this->vbulletin->userinfo['custnum'];
$pass = $this->vbulletin->userinfo['ma_password'];
$this->sendCustomerInfo($this->vbulletin->userinfo['userid'], $this->vbulletin->
userinfo['username'], $this->vbulletin->userinfo['email'], $num, $pass);
eval(standard_error($this->vbphrase['memarea_details_sent']));
}
function handleRequestlicence()
{
$GLOBALS['templatename'] = 'memarea_licence';
}
function handleRequestdetails()
{
$GLOBALS['values'] = $this->buildInfoValues();
$GLOBALS['templatename'] = 'memarea_details';
}
function handleRequestsave_details()
{
$this->vbulletin->input->clean_array_gpc('p', array('fullname' => TYPE_STR,
'address_1' => TYPE_STR, 'address_2' => TYPE_STR, 'address_city' => TYPE_STR,
'address_state' => TYPE_STR, 'address_zip' => TYPE_STR, 'country' => TYPE_STR,
'phone' => TYPE_STR, 'company' => TYPE_STR));
if ($this->checkDetailsFields('details', $this->vbphrase['memarea_required_fields']))
{
$information = $this->buildInfoArray();
$this->vbulletin->userinfo['ma_info'] = $information;
$this->vbulletin->userinfo['usergroupid'] = $usergrpid;
if ($this->setCustomerNumber($information, $usergrpid))
{
$this->vbulletin->url = 'members.php?do=details';
eval(print_standard_redirect($this->vbphrase['memarea_saved_details'], false, true));
}
}
}
function handleRequestproducts()
{
global $stylevar;
$vbphrase = $this->vbphrase;
$products = $this->vbulletin->db->query_read("SELECT * FROM " . TABLE_PREFIX .
"ma_products");
$pros = '';
$haspro = ($this->addons['pro'] == 'pro');
$currency_sym = $this->currency_sym;
while ($product = $this->vbulletin->db->fetch_array($products))
{
if ($this->checkProductPermissions($product))
{
$file = DIR . '/images/productthumbs/' . basename('thumbnail_product_' . $product['id'] .
$product['thumbnail_ext']);
$show['prodthumb'] = false;
if (file_exists($file))
{
$filename = 'images/productthumbs/' . basename('thumbnail_product_' . $product['id'] .
$product['thumbnail_ext']);
$show['prodthumb'] = true;
}
$product['description'] = fetch_trimmed_title($product['description'], $this->
vbulletin->options['memarea_description_length']);
eval('$pros .= "' . fetch_template('memarea_productsbit') . '";');
}
}
$GLOBALS['pros'] = $pros;
$GLOBALS['templatename'] = 'memarea_products';
}
}