Pergunta

Usamos hashes super longos para o registro de novos usuários em nosso aplicativo. O problema é que esses hashes quebram em alguns clientes de email - tornando os links inutilizáveis.

Tentei implementar a API TinyUrl - com uma chamada simples, mas acho que às vezes se destaca ... às vezes o e -mail não chega ao usuário.

Atualizei o código, mas agora o URL nunca é convertido. Tinyurl é realmente tão lento ou estou fazendo algo errado? (Quero dizer, ei, 5 segundos são muito nesse momento)

Alguém pode me recomendar um serviço mais confiável?

Toda a minha culpa, esqueci um falso no fope. Mas vou deixar esta amostra de código aqui, porque muitas vezes vejo esta amostra, o que acho que não funciona muito confiável:

return file_get_contents('http://tinyurl.com/api-create.php?url='.$u);

Esta é a amostra - acho que está funcionando totalmente. Eu gostaria de ouvir sobre melhorias.

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

}

Foi útil?

Solução

Você pode querer usar urlencode () para o url parâmetro.

Também é recomendável verificar fgets() contra false. Então, você pode salvar o empty() Chamada de função apenas comparando a resposta a uma string vazia, como:

$line = fgets($fp);

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

Geralmente, é aconselhável verificar tudo contra false Primeiro, se a função retornar valores de diferentes tipos, como integer ou boolean. Isso pode ser crucial porque 0 e false significa em comparações iguais. Devido à falta de segurança do tipo PHP, é altamente recomendável verificar sempre a igualdade do tipo. Existem até casos em que a documentação recomenda isso explicitamente, por exemplo, no caso de strpos (). Enquanto isso, eu me forcei a usar === para ==, o mesmo para `! = 'etc. Requer mais digitação, mas definitivamente vale o esforço porque você elimina possíveis armadilhas.

O resto do seu código parece bom para mim.

Outras dicas

Podes tentar bit.ly serviço. Apoiado pelo Google, como eu sei.

API

Não sei exatamente quanto tempo seu hash, mas nem todos os serviços (navegadores, servidores etc.) podem lidar com URLs com mais de 255 chars. Você poderia olhar para pacote de php ()

boa solução, e a primeira é realmente um horror: D

Qual é o sentido de usar um "hash super longo", se você o está diminuindo imediatamente para um Tinyurl de 7-8 de personagem?

Ninguém se incomodaria em adivinhar o hash longo e quebraria o Tinyurl.

Use um hash de 10 caracteres e seja mais Seguro do que você agora.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top