2010-01-12 32 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