我们使用超长哈希来为我们的应用程序中的新用户注册.问题是这些哈希在一些电子邮件客户端中断 – 使链接无法使用.
我尝试使用简单的呼叫实现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.这可能是至关重要的,因为0和false意味着比较相同.由于PHP缺乏类型安全性,强烈建议始终检查类型是否相等.甚至有些文档明确建议这样做,例如同时,我强迫自己使用=== over ==,同样适用于`!=’等等.它需要更多打字,但绝对值得努力,因为你消除了可能的陷阱.
其余的代码对我来说很好.