I’m dealing with this php script, which when executed on the host gives a 500 error, apparently the line where the preg_match is is the one that contains the error…
this file is going to be executed as a cron to validate.
<?php $encoded = wordwrap($encoded, 80, "xa", true); $license_file = $dir . "/modules/addons/Kayako/license.php"; if ($key != $sellKey) { die("Invalid "license . php" file!"); } function getWhmcsDomain() { if (!empty($_SERVER["SERVER_NAME"])) { return $_SERVER["SERVER_NAME"]; } } $license["checkdate"] = date("Ymd"); $keyName = $modleName . "_licensekey"; $dir = __DIR__; $encoded = strrev($encoded); $license["status"] = "Active"; $sellKey = "ModulesGarden_Kayako_54M02934WH301844E_HackbyRicRey"; $license["checktoken"] = $checkToken; $key_data = WHMCSDatabaseCapsule::table("tblconfiguration")->where("setting", "kayako_localkey")->first(); $license = array("licensekey" => $key, "validdomain" => getWhmcsDomain(), "validip" => getIp(), "validdirectory" => $dir . "/modules/addons/Kayako," . $dir . "/modules/addons," . $dir . "/modules/addons/Kayako," . $dir . "/modules/addons/Kayako," . $dir . "/modules/addons," . $dir . "," . $dir . "/modules"); $secret = "659c08a59bbb484f3b40591"; include_once "init.php"; function getIp() { return isset($_SERVER["SERVER_ADDR"]) ? $_SERVER["SERVER_ADDR"] : $_SERVER["LOCAL_ADDR"]; } if (!$key_data) { WHMCSDatabaseCapsule::table("tblconfiguration")->insert(array("setting" => "kayako_localkey", "value" => '')); } $checkToken = time() . md5(rand(1000000000, 0) . $key); $modleName = "kayako"; $encoded = $encoded . md5($encoded . $secret); $encoded = serialize($license); preg_match("/kayako_licensekeys?=s?"([A - Za - z0 - 9_] +) "/", $content, $matches); $encoded = md5($license["checkdate"] . $secret) . $encoded; $key = $matches[1]; $encoded = base64_encode($encoded); if (file_exists($license_file)) { $content = file_get_contents($license_file); } else { echo "Please Upload "license . php" File Inside: " . $dir . "/modules/addons/Kayako/"; } $content = ''; try { WHMCSDatabaseCapsule::table("tblconfiguration")->where("setting", "kayako_localkey")->update(array("value" => $encoded)); echo "Done!"; } catch(Throwable $e) { echo "There is an issue, contact."; } ?>
Advertisement
Answer
You have extra double quotes in the regular expression. You also have extra spaces inside the []
in the regexp. You can replace that character class with w
, which matches alphanumerics and underscore.
preg_match('/kayako_licensekeys?=s?(w+)/', $content, $matches);
Another problem: You use a number of variables before you assign them:
$modleName
$checkToken
$key
$sellKey
$dir
Did you post the code out of order?