4

アプリケーションでの新規ユーザーの登録には、超長ハッシュを使用します。問題は、これらのハッシュが一部の電子メール クライアントで壊れて、リンクが使用できなくなることです。

Tinyurl - API を簡単な Cal​​l で実装してみたのですが、時々タイムアウトしてしまう…と思い、メールがユーザーに届かないことがあります。

コードを更新しましたが、URL が変換されません。Tinyurl は本当に遅いですか、それとも何か間違ったことをしていますか? (つまり、このタイムズでは 5 秒は長い)

より信頼性の高いサービスを勧めてくれる人はいますか?

すべての私のせいで、fopen で false を忘れていました。しかし、私はこのサンプルをよく目にするので、このコードのサンプルをここに残しておきます。

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

}

4

5 に答える 5

3

パラメータにurlencode()を使用することをお勧めしurlます。

fgets()に対してチェックすることもお勧めしfalseます。empty()次に、応答を次のように空の文字列と比較するだけで、関数呼び出しを保存できます。

$line = fgets($fp);

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

一般に、関数がまたはfalseなどのさまざまなタイプの値を返す場合は、最初にすべてをチェックすることをお勧めします。これは非常に重要です。なぜなら、比較すると同じことを意味するからです。PHPには型の安全性がないため、型の同等性を常にチェックすることを強くお勧めします。たとえばstrpos()の場合など、ドキュメントでこれが明示的に推奨されている場合もあります。その間、私は「!=」などと同じように、を使用することを余儀なくされました。より多くの入力が必要ですが、起こりうる落とし穴を排除するため、努力する価値があります。integerboolean0false=====

あなたのコードの残りの部分は私には良さそうです。

于 2010-03-31T01:34:39.077 に答える
0

すぐに7〜8文字のtinyurlに短縮する場合、「超長いハッシュ」を使用するポイントは何ですか?

誰も長いハッシュを推測することを気にせず、代わりに tinyurl をクラックします。

自分で 10 文字のハッシュを使用して、今よりも安全にしましょう

于 2010-04-03T12:37:36.413 に答える
0

bit.lyサービスを試すことができます。私が知っているように、Googleによってサポートされています。

アピ

于 2010-01-12T15:59:14.880 に答える
0

ハッシュの長さは正確にはわかりませんが、すべてのサービス (ブラウザー、サーバーなど) が 255 文字を超える URL を処理できるわけではありません。PHPの Pack()を調べることができます

于 2010-01-12T16:08:44.130 に答える