PDA

View Full Version : [PHP] FOPEN esegue il download di una pagina diversa da quella indicata


InsomNia_Italy
12-06-2011, 16:40
Ciao ragazzi,
sto creando uno script particolare; fino ad ora tutto funzionava come avrebbe dovuto, ma oggi, provando ad eseguire il download di determinate pagine google per estrarne alcuni dati mi sono imbattuto in un problema.

Con il comando FOPEN di PHP non riesco ad eseguire il download di alcune pagine in particolare, come ad esempio questa:
http://www.google.com/movies?near=roma&hl=it&ei=1XvzTfLhJoeEOq29xLUH&view=list&sort=1&mid=dbcedce533e291ba

Viene automaticamente scaricata un'altra pagina, come se il server rispondesse diversamente in base all'user agent o similie....Visualizzando il link da browser, la pagina è quella giusta, ma scaricandola tramite lo script, il contenuto è diverso.

Come mai? Come posso risolvere?

P.S. Sto lavorando in locale con EasyPHP.

Il codice:
$url="http://www.google.com/movies?near=roma&hl=it&ei=1XvzTfLhJoeEOq29xLUH&view=list&sort=1&mid=dbcedce533e291ba";
set_time_limit(120);
$handle = fopen("$url","r");
$dati = '';
while (!feof($handle)) {
$dati .= fread($handle, 8192);
}
return $dati;

InsomNia_Italy
12-06-2011, 19:14
Problema parzialmente risolto. Guardare commento successivo perfavore...

InsomNia_Italy
12-06-2011, 19:38
Allora, sono riuscito ad isolare il problema.
Il problema è nel passaggio del link, ma non capisco perchè. Se eseguo il download della pagina indicando come parametro il link completo, il download viene effettuato correttamente. Se invece imposto come parametro "http://www.google.com" seguito dal restante link estratto dalla pagina precedente, viene effettuato il download di una pagina errata.
Eppure confrontando i link sono identici, non cambia nulla, sia quello scritto completamente come parametro che quello ricavato.

Come mai? Da cosa può dipendere?

Grazie in anticipo!!

$mezzolink=substr($spezzone,$pos1+25,$pos2-$pos1-25);
download_pagina("http://www.google.com".$mezzolink);
download_pagina("http://www.google.com/movies?near=roma&hl=it&ei=1XvzTfLhJoeEOq29xLUH&view=list&sort=1&mid=dbcedce533e291ba");
}

function download_pagina($link){
set_time_limit(120);
$flusso = fopen("$link","r");
$nuovidati = "";
while (!feof($flusso)) {
$nuovidati .= fread($flusso, 8192);
}
echo "\n".$nuovidati."\n";
}

Kenger
12-06-2011, 19:42
Il link che passi deve essere per forza di cose diverso, magari per qualche piccolo dettaglio che non hai notato. Prova ad incollarli entrambi qua e vediamo.

InsomNia_Italy
12-06-2011, 20:08
Ho anche provato a fare un confronto tra le due stringhe, la prima composta e la seconda con il link specificato da me.

Il risultato è che gli ECHO visualizzano la stessa identica cosa, mentre lo strcmp da -1 ed infatti, il download della pagina con $mezzolink1 NON FUNZIONA mentre quella con $mezzolink2 si....

$mezzolink1="http://www.google.com".substr($spezzone,$pos1+25,$pos2-$pos1-25)."";
$mezzolink2="http://www.google.com/movies?near=roma&hl=it&ei=1XvzTfLhJoeEOq29xLUH&view=list&sort=1&mid=dbcedce533e291ba";
echo "#1#".$mezzolink1."#\n";
echo "#2#".$mezzolink2."#\n";
echo strcmp($mezzolink1,$mezzolink2)."\n";

risultato delle echo:

#1#http://www.google.com/movies?near=roma&hl=it&ei=1XvzTfLhJoeEOq29xLUH&view=list&sort=1&mid=dbcedce533e291ba#
#2#http://www.google.com/movies?near=roma&hl=it&ei=1XvzTfLhJoeEOq29xLUH&view=list&sort=1&mid=dbcedce533e291ba#
-1


ho anche provato ad aggiungere il terminatore di stringa, a fare il cast con (string) ma nulla, ottengo sempre lo stesso risultato :(

InsomNia_Italy
13-06-2011, 00:46
Ho risolto grazie a htmlspecialchars_decode.

Mi sono accorto di cosa succedeva convertendo le due stringhe in esadecimale e da esadecimale nuovamente in stringa. Ho notato che i caratteri & venivano sostituiti con & e simili. Ora con il semplice htmlspecialchars_decode ho risolto tutto :)