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
}
해결책
사용하고 싶을 수도 있습니다 urlencode () 용 url
매개 변수.
확인하는 것이 좋습니다 fgets()
에 맞서 false
. 그런 다음, 당신은 그것을 저장할 수 있습니다 empty()
응답을 빈 문자열과 비교하여 다음과 같은 기능을 호출합니다.
$line = fgets($fp);
if ($line !== false && $line !== '') {
// ...
}
일반적으로 모든 것을 확인하는 것이 좋습니다 false
첫째, 함수가 다른 유형의 값을 반환하는 경우 integer
또는 boolean
. 이것은 중요 할 수 있습니다 0
그리고 false
비교의 의미. PHP의 유형 안전성 부족으로 인해 항상 유형 평등을 확인하는 것이 좋습니다. 문서가이를 명시 적으로 추천하는 경우도 있습니다. strpos (). 한편, 나는 스스로 사용하도록 강요했다 ===
위로 ==
,`! = '등에 대해 동일합니다. 더 많은 타이핑이 필요하지만 가능한 함정을 제거하기 때문에 노력할 가치가 있습니다.
나머지 코드는 나에게 좋아 보인다.