2014-03-13 35 views
0

到目前为止,我编写了一个脚本,用于查找某个文件是否存在于外部网站中。如何找到名称与变量类似的图像?

<?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代码时,我是一个完整的新手。任何帮助将非常感激。 :)

+0

您将需要能够从外部站点获取的图像列表,否则你有无限的可能性。 – AbraCadaver

+0

当你不知道有什么可用时,你如何提出建议?如果'somesite.com'是你的网站,你可以生成一个包含所有图像的数组,.. – DanFromGermany

+0

此外,你的代码不检查图像是否存在。 – AbraCadaver

回答

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

+1,因为根本不知道这个函数在PHP – Syd

+0

存在我会考虑这一点。唯一的问题是,这个文件夹中有大约14,530,014张图片,我不知道这些图片被称为什么。如果我声明文件夹是Minecraft的皮肤库,它可能会有所帮助。 :) – AlfredPersonMc

+0

我不知道需要多长时间才能创建一个包含每个图像名称的数组。如果脚本找到以“$ user”开头的所有图像,然后创建一个数组,则可能会缩短时间。 - 我也不知道如何从外部网站创建一个数组。 :) – AlfredPersonMc

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 
} 
+1

不要'urlencode()'整个URL或它不起作用。 – AbraCadaver

+0

嗯......你说得对。我粘贴的代码似乎没有检查文件是否存在(我有更多的代码,看起来我遗漏了一部分)。我现在将追加。 – AlfredPersonMc

+0

@AbraCadaver我不知道你确定吗? – Syd