2010-01-12 86 views
4

我们在我们的应用程序中使用超长哈希来注册新用户。问题在于这些哈希在一些电子邮件客户端中断 - 使链接无法使用。Tinyurl API示例 - 我是否正确:D

我试着实现Tinyurl - API,用一个简单的调用,但我认为它有时超时...有时邮件没有到达用户。

我更新了代码,但现在URL永远不会被转换。 Tinyurl真的很慢,还是我做错了什么? (我的意思是嘿,5秒在这个时代很多)

有人可以推荐我一个更可靠的服务吗?

所有的我的错,在fopen中忘了一个错误。但我会离开这里的代码此示例,因为我经常会看到这样的样品,至极我觉得不工作非常可靠:

return file_get_contents('http://tinyurl.com/api-create.php?url='.$u); 

这是 - 我想完全工作的样品。我想听听改进。

static function gettinyurl($url) { 

    $context = 
     stream_context_create(
      array(
       'http' => array(
        'timeout' => 5 // 5 Seconds should be enough 
       ) 
      ) 
     ); 

    // get tiny url via api-create.php 
    $fp = fopen('http://tinyurl.com/api-create.php?url='.$url, 'r', $context); // open (read) api-create.php with long url as get parameter 

    if($fp) { // check if open was ok 
     $tinyurl = fgets($fp); // read response 

     if($tinyurl && !empty($tinyurl)) // check if response is ok 
      $url = $tinyurl; // set response as url 

     fclose($fp); // close connection 
    } 

    // return 
    return $url; // return (tiny) url 

}

回答

3

您可能需要使用urlencode()url参数。

也建议检查fgets()针对false。然后,您可以通过只是比较空字符串的反应,就像保存empty()函数调用:

$line = fgets($fp); 

if ($line !== false && $line !== '') { 
    // ... 
} 

一般情况下,最好是检查一切反对false首先,如果函数返回不同的类型,如值integerboolean。这可能是至关重要的,因为0false的意思是相同的比较。由于PHP缺乏类型安全性,强烈建议始终检查类型是否相等。甚至有文件明确建议这种情况,例如在strpos()的情况下。同时,我强迫自己使用===而不是==,与`!='相同等等。它需要更多打字,但绝对值得您付出努力,因为您可以消除可能的陷阱。

其余的代码对我来说看起来不错。

0

我不知道你的哈希究竟有多长,但并非所有的服务(浏览器,服务器等)可以处理的URL超过255个字符长。你可以看看php's Pack()

+0

一个例子哈希看起来像这样,总是在160个字符以下。 HTTP:// TESTSERVER/confirmuser键= c040049c01a93e8f7931e8c4b21db8f7:9d60a9aeb 3c853e3f2e099cb16bddc7c:d5c9886cb31f789ae3cdffd55456fe26 – 2010-01-12 16:10:11

0

很好的解决方案,并第一个是一个真正的恐怖:d

0

如果您立即将其缩短为7-8个字符tinyurl,使用“超长散列”有什么意义?

没有人会打扰猜测长散列,并会破解tinyurl。

自己使用10个字符的散列并且更多比现在安全。

+0

嗯...哈希的样子是不是在我的域名。我只需要发送包含Hash的工作电子邮件。 开发人员的意图是隐藏哈希中的一些信息,所以我们可以重建用户想要注册的等... 还有一个组件被加密,所以只要没有人发现密钥,我们哈希是非常安全的。 我不知道我是否正确理解你,但为什么Tinyurl应该更容易或更难以破解? – 2010-04-06 15:15:00

+0

关于tinyurl更容易被破解 - 如果他们只有一个10个字符的模式跟随关键字,那么猜测url(并测试以查看它们是否重定向到您的域)将比猜测长哈希要容易得多。但鉴于长期的网站本身并不在你的控制之下 - 对于混淆抱歉...... :) – 2010-04-06 19:34:13