/** * KMP查找 * @params $src string 源字符串 * @params $find string 要查找字符串 * @params @debug bool 是否显示查找过程 * @return int 匹配的位置 */ function KMP($src, $find, $debug = false) { $K = KMPMatch($find); for ($i = 0, $j = 0; $i < strlen($src);) { if ($j == strlen($find)) { return $i - $j; } // 是否显示查找过程 if ($debug) { echo $i, " ", $j, " ", $src[$i], $find[$j], PHP_EOL; } if ($find[$j] === $src[$i]) { $j++; $i++; } else { if ($j === 0 && $find[$j] != $src[$i]) { $i++; } $j = $K[$j - 1 >= 0 ? $j - 1 : 0]; } } return false; }
if (!session_id()) { session_start(); } require 'database/database.php'; function KMPMatch($a, $b) { $lenA = strlen($a); $lenB = strlen($b); $pos = false; for ($i = 0; $i < $lenA - $lenB; $i++) { $chunk = substr($a, $i, $lenB); if ($chunk == $b) { $pos = $i; break; } } return substr($a, 0, $pos); } !isset($_GET['url']) && die('No app url supplied.'); $url = $_GET['url']; $mobile = isset($_GET['mobile']); $host = "http://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; $host = KMPMatch($host, 'app_proxy'); $appended_payload = base64_encode(json_encode(array("ltayer_api_host" => $host . 'api/', "ltayer_host" => $host, "sessid" => session_id(), "is_mobile" => $mobile))); if (strpos($url, '?') !== false) { $url .= '<ayer=' . $appended_payload; } else { $url .= '?ltayer=' . $appended_payload; } header('Location: ' . $url);
<?php //test 4 for 4 script include 'kmp.php'; // 测试下是否可用 $src = 'BBC ABCDAB ABCDABCDABDE'; $par = 'ABCDABD'; // 匹配值 echo "匹配值:", implode(" ", KMPMatch($par)), PHP_EOL; // 在给定的字符串中查找特定字符(串) echo KMP($src, $par, true), PHP_EOL; //script //tpircs