我们使用超级长哈希的新用户在我们的应用程序的注册。的问题是,这些哈希值在一些电子邮件客户端打破 - 使链接不可用

我想实现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

}

有帮助吗?

解决方案

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

时,还建议以检查针对fgets() false。然后,您可以通过比较只是一个空字符串的响应保存empty()函数调用,如:

$line = fgets($fp);

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

通常,可取的是首先核对false一切,如果函数返回不同类型的诸如integerboolean的值。这可能是至关重要的,因为0false在比较相同的意思。由于PHP缺乏类型安全,强烈建议经常检查类型的相等。甚至有案件的文档建议这个时候明确,例如在 strpos()的情况下。同时,我强迫自己使用=====,同为'!=”等,这需要更多的打字声,而是因为你消除可能存在的缺陷,绝对是值得的。

你的代码的其余部分对我来说很好。

其他提示

您可以尝试 bit.ly 服务。它通过谷歌支持我所知。

阿比

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

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

什么是使用“超级长哈希值”,如果你是立即将其缩短到7-8个字符TinyURL的?

没有人会与猜测长散列打扰,并会开裂TinyURL的代替。

使用10个字符的散列,并的更多的安全比你现在的样子。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top