• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Triple

max_redirects

18 mensagens neste tópico

Boas,

Tenho o seguinte code:

$base = basename($link[0]);
$ary_header = get_headers($link[0]);       
           
$size = $ary_header[6];
$i = strlen($base);
$extension = "";
while (substr($base, $i, 1) != ".") {
        $extension = substr($base, $i--, 1) . $extension;
    }
header("Content-Type: ".$extension);
header("Content-Length: ".$size);
header('Content-Disposition: attachment; filename='.$base);
readfile($link[0]);

Mas dáme um erro a dizier que o limite de redirecionamentos foi atingido. Como resolvo isto?

Cumps.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

nao resolves, eu quase que apostava que tens isso num alojamento gratuito, certo?

Se tiveres eles têm um limite de redirecionamentos para evitar abusos.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

nao resolves, eu quase que apostava que tens isso num alojamento gratuito, certo?

Se tiveres eles têm um limite de redirecionamentos para evitar abusos.

Não. Isto está num servidor dedicado =) Tenho plenos poderes para fazer seja o que for, se mesmo assim não for possivel resolver paciencia x)

Cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

nao resolves, eu quase que apostava que tens isso num alojamento gratuito, certo?

Se tiveres eles têm um limite de redirecionamentos para evitar abusos.

Não. Isto está num servidor dedicado =) Tenho plenos poderes para fazer seja o que for, se mesmo assim não for possivel resolver paciencia x)

Cumps

atenção o que te vou dizer é de noob (eu de php percebo pouco) , mas penso que isso se pode alterar no ficheiro php.ini

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

nao resolves, eu quase que apostava que tens isso num alojamento gratuito, certo?

Se tiveres eles têm um limite de redirecionamentos para evitar abusos.

Não. Isto está num servidor dedicado =) Tenho plenos poderes para fazer seja o que for, se mesmo assim não for possivel resolver paciencia x)

Cumps

atenção o que te vou dizer é de noob (eu de php percebo pouco) , mas penso que isso se pode alterar no ficheiro php.ini

Já estive à procura e não está lá nada disso... eu penso que se altera no parametro de "context" da função, mas não sei como fazer isto.

Cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

<br />

<b>Warning</b>:  fopen(link) [<a href='function.fopen'>function.fopen</a>]: failed to open stream: Redirection limit reached, aborting in <b>/home/wareztga/public_html/vip/link.php</b> on line <b>41</b><br />

<br />

afinal vou usar fopen, mas o erro é o mesmo

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

i set 'max_redirects' to 1 to disable redirect, but it did not work and

produce some error....

'PHP Warning:  fopen(): Redirection limit reached, aborting. in

D:\webroot\nlr.ph

p on line 66'

if i set it to 2, everything works well...redirect works.

vai ate esse site pode ser que te safes ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

<br />

<b>Warning</b>:  fopen(link) [<a href='function.fopen'>function.fopen</a>]: failed to open stream: Redirection limit reached, aborting in <b>/home/wareztga/public_html/vip/link.php</b> on line <b>41</b><br />

<br />

afinal vou usar fopen, mas o erro é o mesmo

Este erro está a ocorrer na linha 41 graças a um fopen (se calhar aquele readfile tb pode causar um erro destes). (Nobel plz ;))

Assim de repente, pode ser um problema com definições em ficheiros .htaccess, já tive um problema deste género causado por um directório que apontava para outro, e esse para o primeiro. Ou seja, fazia ali um loop que causava um erro deste género...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não há problemas com .htaccess... não há lá nenhum.

Cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Só para dizer que descobri a polvora:

$opts = array(
        'http' => array(
                'method' => "GET",
                'header' =>     "Accept: */*\r\n" .
                                        "Accept-Language: en-us\r\n" .
                                        "Accept-Encoding: gzip, deflate\r\n" .
                                        "User-Agent: Mozilla/4.0 (compatible; 
MSIE 6.0; Windows NT 5.1;
SV1; .NET CLR 2.0.50727; .NET CLR 1.1.4322)\r\n" .
                                        //"Host: www.netlibrary.com\r\n" .
                                        "Connection: Keep-Alive\r\n",
        'max_redirects' => '6'
        )
);

$context = stream_context_create($opts);
$fp = fopen($link[0], "r", false, $context);

Meti pa 6 e funciona L I N D A M E N T E :cheesygrin:

Cumps e Thanks.

EDIT: Esqueçam lá :wallbash: afinal n funca da HTTP bad request :rant_01:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Agora tenho outro problema... Como é que vou saber o Content-Length? Já usei a função get_headers mas o problema é que dá HTTP 302, logo a length é 0 mas depois disto faz redirect para a mesma pagina e já dá HTTP 200, mas o get_headers só apanha o 1º

Cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Agora tenho outro problema... Como é que vou saber o Content-Length? Já usei a função get_headers mas o problema é que dá HTTP 302, logo a length é 0 mas depois disto faz redirect para a mesma pagina e já dá HTTP 200, mas o get_headers só apanha o 1º

Cumps

Os headers de resposta ao primeiro pedido (o tal 302) devem conter uma Location... Se fizeres get_headers a essa location, não consegues saber o content-lenght?

EDIT: Ainda não tive oportunidade de testar o comportamento de get_headers() a uma resposta 302, mas caso ele redireccione automaticamente, pode ser que consigas descobrir a Location usando antes fsockopen() e um pedido HEAD (ou até GET), penso que neste caso não ocorre redireccionamento automático...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mas o location é para a mesma pagina...

Com o browser as coisas funcionam bem com o site? É que já não percebo nada :dontgetit:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu também não precebo... o link vai dar a um 302 que faz Location para si mesmo e que depois da 200 e começa a sacar...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu também não precebo... o link vai dar a um 302 que faz Location para si mesmo e que depois da 200 e começa a sacar...

Hmm... Deixa cá ver. Se tenho isto bem percebido, ao fazeres get_headers ele automaticamente redirecciona para a Location do 302, mas não te dá o Content-Lenght. Se mandares um HTTP HEAD ou GET com fsockopen, então recebes apenas o 302 (sem redireccionamento).

Parece-me que a solução seria enviares o tal GET com fsockopen, guardares a location e o cookie que recebes do servidor, e depois então enviar um novo pedido GET (junto com o cookie) que, com sorte, já trará o ficheiro (e os headers adequados, como o Content-Lenght).

A explicação seria que o servidor recebe o pedido, mas para que o link não seja usado por scripts ou se calhar por download managers (ou sei lá que razão obscura), ele emite primeiro um 302 que reencaminha para a mesma página, e só então (após uma qualquer verificação que assumo esteja contida num cookie) oferece o ficheiro/página ou lá o que seja para download.

Heh, esta teoria parece-me um pouco rebuscada, mas como não faço ideia de que site é esse que te envia o 302, nem qual o objectivo do teu script, esta foi a única hipótese de que me lembrei :(

EDIT: Após reler o teu post, realmente o objectivo é obter os headers desse 200 e fazer readfile a partir daí...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora