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?