Пример #1
0
/**
 * 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;
}
Пример #2
0
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 .= '&ltayer=' . $appended_payload;
} else {
    $url .= '?ltayer=' . $appended_payload;
}
header('Location: ' . $url);
Пример #3
0
<?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