如何找到名称与变量类似的图像?

时间:2014-03-13 15:15:14

标签: php image search

到目前为止,我编写了一个脚本,用于查找外部网站中是否存在某个文件。

<?php
if (isset($_GET['user'])){
    if ($_GET['user'] != ""){
        $userloc = "http://somesite.com/images/" . htmlspecialchars($_GET["user"]) . ".png";
        $user = htmlspecialchars($_GET['user']);
        if (getimagesize($userloc) !== false) {
            echo $user . "exists!" ;
            echo "<img src=\"" . $userloc . "\" height=\"100px\" />";
        } else {
            echo $username . "\" does not exist.";
            $suggest = /* Code to find an image with a similar name */
            echo "Did you mean: <a href=\"index.php?user=" . $suggest . "\"></a>"; 
    }
}
?>

基本上,我想扩展代码,以便显示图像建议。 在PHP代码方面,我是一个完整的新手。任何帮助将非常感激。 :)

2 个答案:

答案 0 :(得分:1)

levenshtein函数可用于查找字符串中的相似性。

假设您已正确检查文件是否存在,那么您可以使用此功能提出建议。

/**
 * @param string   $inputName
 * @param string[] $knownNames
 *
 * @return string[]
 */
function getNameSuggestions($inputName, array $knownNames = array())
{
    $candidates = array();
    foreach ($knownNames as $candidate) {
        $lev = levenshtein($inputName, $candidate);
        if ($lev <= strlen($inputName) / 3 || false !== strpos($candidate, $inputName)) {
            $candidates[] = $candidate;
        }
    }

    return $candidates;
}

然后调用函数

$suggestions = getNameSuggestions((string) $_GET['user'], array(
    // a list of known users
));

答案 1 :(得分:0)

您的脚本不会测试远程网站上是否存在文件。它的作用是假设文件$_GET['user'] . 'png';存在于http://somesite.com/images/,如果它不是""

你应该做的是这样的事情:

$remote = 'http://somesite.com/images/' . urlencode($_GET["user"]) . '.png';

if (file_get_contents($remote) !== false) {
    echo 'Exists!';
} else {
    echo 'Does not exist!';

    // try something else or start bruteforce :P
}