2010-01-12 2 views
4

우리는 우리 애플리케이션에서 새 사용자 등록을 위해 초장기 해시를 사용합니다. 문제는 이러한 해시가 일부 전자 메일 클라이언트에서 중단되어 링크를 사용할 수 없게 만드는 것입니다.Tinyurl API 예제 - 올바르게하고 있습니까 : D

간단한 통화로 Tinyurl - API를 구현하려했지만 때로는 시간이 초과되었다고 생각합니다 ... 메일이 사용자에게 도달하지 못하는 경우가 있습니다.

코드를 업데이트했지만 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 

}

답변

3

당신은 url 매개 변수에 urlencode()을 사용할 수 있습니다.

fgets()false을 확인하는 것이 좋습니다. 그런 다음처럼 빈 문자열에 대한 응답을 비교하여 empty() 함수 호출을 절약 할 수있다 : 일반적으로

$line = fgets($fp); 

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

, 기능과 같은 다른 유형의 값을 반환하는 경우, 첫 번째 false에 대한 모든 것을 확인하는 것이 좋습니다 integer 또는 boolean. 0false은 같은 의미입니다. PHP는 타입 안전성이 부족하기 때문에 항상 타입 평등을 확인하는 것이 좋습니다. 설명서에서 명시 적으로 권장하는 경우도 있습니다 (예 : strpos()의 경우 한편, 저는 =====까지 사용하도록 강요했습니다.`! = '등등과 동일합니다. 더 많은 타이핑이 필요하지만 가능한 함정을 없애기 때문에 노력할 가치가 있습니다.

나머지 코드는 나에게 잘 어울립니다.

0

당신은 bit.ly 서비스를 시도 할 수 있습니다. 내가 아는 한 Google에서 지원합니다.

Api

0

나는 당신의 해시가 정확히 얼마나 오래 모르겠지만, 모든 서비스 (브라우저, 서버 등) 255 개 문자보다 긴 URL을 처리 할 수 ​​있습니다. 당신은 php's Pack()

+0

해시의 예는 다음과 같습니다. 항상 160 자 미만입니다. HTTP : // TESTSERVER/confirmuser = 키 c040049c01a93e8f7931e8c4b21db8f7 : 9d60a9aeb 3c853e3f2e099cb16bddc7c : d5c9886cb31f789ae3cdffd55456fe26 –

0

좋은 솔루션으로 볼 수 있으며, 첫 번째는 정말 공포입니다 : D

0

7-8 문자 tinyurl로 바로 단축 시키려면 "슈퍼 긴 해시"를 사용하는 것이 무엇입니까?

아무도 긴 해시를 추측 할 필요가 없으며 대신 tinyurl을 크랙합니다.

직접 10 자의 해시를 사용하고 개 이상보다 안전합니다.

+0

음 ... 해시 모양을 내 도메인에 있지 않습니다. 나는 해시가 포함 된 작업 전자 메일을 보내야합니다. 개발자의 의도는 해시에서 일부 정보를 숨기려고 했으므로 등록하려는 사용자를 다시 구성 할 수 있습니다. 아무도 키를 찾지 못하는 한 암호화 된 구성 요소가 있습니다. 해시는 꽤 안전합니다. 그리고 나는 당신을 정확하게 이해할 수 있을지 모르지만, 왜 Tinyurl이 더 쉽거나 더 단단해야합니까? –

+0

tinyurl이 해킹하기 쉽다는 것에 대해 - 10 자의 패턴을 따르는 키만있는 경우 긴 해시를 추측하는 것보다 URL을 추측하여 (그리고 도메인으로 리디렉션되는지 여부를 테스트하는 것보다 훨씬 쉬울 것입니다. 그러나 긴 URL 자체가 당신의 통제하에 있지 않다는 것을 고려하면 - 혼란에 대해 유감스럽게 생각합니다. :) –

관련 문제