Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine porta Logan in un'avventura inedita, violenta e fortemente narrativa, costruita attorno alla sua natura di combattente e al difficile rapporto con il proprio passato. Insomniac Games punta su combattimenti spettacolari, progressione e personalizzazione, inserendo l'azione in un mondo segnato dalla persecuzione dei mutanti. Un viaggio intenso, che alterna mattanza, esplorazione e momenti sorprendentemente emotivi.
DJI Romo 2: tante novità lo rendono un robot completo
DJI Romo 2: tante novità lo rendono un robot completo
Romo 2 è la seconda generazione di robot lavapavimenti di DJI, un modello che si caratterizza per la precisione nel sistema di navigazione e per il funzionamento particolarmente silenzioso. Con le modifiche introdotte in questa seconda versione, e un posizionamento di prezzo più allineato alla concorrenza, rappresenta una valida alternativa sul mercato delle soluzioni di pulizia domestica
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED
Il primo Sony con retroilluminazione True RGB alla prova del banco di misura e dei contenuti: luminanza enorme, colori accurati in HDR e un antiriflesso molto efficace. I limiti sono due sole HDMI 2.1 e il blooming fuori asse
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 20-07-2012, 12:50   #1
webmasterone
Member
 
L'Avatar di webmasterone
 
Iscritto dal: Nov 2006
Messaggi: 86
[PHP] - Problema con Curl e CURLOPT_FOLLOWLOCATION

Ciao a tutti
ho una classe (non fatta da me) che uso per recuperare dei dati da una pagina web
Codice PHP:
class CurlBrowser {
        function 
__construct() {
                
$this->ckfile tempnam ("/tmp""SismicCookie");
        }
        function 
__destruct() {
                echo 
file_get_contents($this->ckfile);
                @
unlink($this->ckfile);
        }
        function 
http_get($url$outfile null) {
                return 
$this->http_request($url'GET'null$outfile);
        }
        function 
http_post($url$data = array(), $outfile null) {
                return 
$this->http_request($url'POST'$data$outfile);
        }
        function 
http_request($url$type$data null$outfile null) {
                
$ch curl_init($url);
                
$outfileHandle 0;

                if (!empty(
$outfile)) {
                        
$outfileHandle fopen($outfile,'w');
                        
curl_setopt($chCURLOPT_FILE$outfileHandle);
                }
                else
                        
curl_setopt($chCURLOPT_RETURNTRANSFERtrue);

                if (
strtoupper($type) == 'POST') {
                        
curl_setopt($chCURLOPT_POSTtrue);
                        
curl_setopt($chCURLOPT_POSTFIELDShttp_build_query($data));
                }

                
curl_setopt($chCURLOPT_COOKIEFILE$this->ckfile);
                
curl_setopt($chCURLOPT_COOKIEJAR$this->ckfile);

                
curl_setopt($chCURLOPT_FOLLOWLOCATIONTRUE);
                
curl_setopt($chCURLOPT_MAXREDIRS20);

                
$out curl_exec($ch);
                
curl_close($ch);
                if (
$outfileHandle!==0)
                        
fclose($outfileHandle);
                return 
$out;
        }

e la uso nello script richiamandola come da esempio sotto:

Codice PHP:
$browser=new CurlBrowser();

$browser->http_post(
    
'http://www.xxx.it',
    array(
"Login"=>"Entra""login_pwd"=>$password"login_email"=>$email)
);

            
$browser->http_post(
    
'http://www.xxx.it',
    array(
        
'date_from'=>$date_from,
        
'date_to'=>$date_to,
        
'town'=>'nessuno',
        
'search'=>'Cerca'
    
)
);


$csv_file $browser->http_get('http://www.xxx.it'); 
tutto funzionava alla perfezione, finchè non ho cambiato provider
il nuovo spazio ha open_basedir attivata (per sicurezza) e safe_mode disattivato.

a causa del open_basedir attiva la seguente riga della classe va in errore:
Codice PHP:
//RIGA 129 è la seguente
curl_setopt($chCURLOPT_FOLLOWLOCATIONtrue); 
e l'errore è:
Warning: curl_setopt() [function.curl-setopt]: CURLOPT_FOLLOWLOCATION cannot be
activated when safe_mode is enabled or an open_basedir is set in
/home/xyz/public_html/xyz/include/function.php on line 129

di questo errore se ne parla ampiamente su php.net (http://us2.php.net/manual/en/functio...opt.php#102121)

ho chiesto al provider se è possibile (non ci speravo ) disattivare open_basedir , ma ovviamente mi hanno detto di no (hanno già disattivato il safe_mode che era on di default)

mi hanno detto che una soluzione è presente qui:

http://simone.cabrino.it/blog/php-er...ollowlocation/

in sostanza viene suggerita una funzione per ovviare al problema.
questa:
Codice PHP:
function curl_redir_exec($ch) {
static 
$curl_loops = -1;
static 
$curl_max_loops 10;
if (
$curl_loops++ >= $curl_max_loops) {
$curl_loops 0;
return 
false;
}
curl_setopt($chCURLOPT_HEADERtrue);
curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
$data curl_exec($ch);

list(
$header$content) = explode(chr(10).chr(13).chr(10), $data);

$http_code curl_getinfo($chCURLINFO_HTTP_CODE);

if (
$http_code == 301 || $http_code == 302) {
$matches = array();
$matches explode(chr(10),$header);
foreach( 
$matches as $value) {
$pos strpos($value"Location:");
if (
$pos === 0) {
list(
$variabile,$url) = explode(" ",$value);
}
}
$url parse_url(trim($url));
if (!
$url) { //couldn't process the url to redirect to
$data = array($curl_loops,curl_getinfo($ch),$datacurl_error($ch));
return 
$data;
}
$last_url parse_url(curl_getinfo($chCURLINFO_EFFECTIVE_URL));
if (!isset(
$url['scheme']))
$url['scheme'] = $last_url['scheme'];
if (!isset(
$url['host']))
$url['host'] = $last_url['host'];
if (!isset(
$url['path']))
$url['path'] = $last_url['path'];
$new_url $url['scheme'] . '://' $url['host'] . $url['path'] . (isset($url['query'])?'?'.$url['query']:'');
curl_setopt($chCURLOPT_URL$new_url);
return 
curl_redir_exec($ch);
} else {
$data = array($curl_loops,curl_getinfo($ch),$datacurl_error($ch));
return 
$data;
}

e la spiegazione dice:

La funzione curl_exec_redir($ch) ritorna un’array a 4 dimensioni, contenente il numero di loop (redirect) effettuati [posizione 0], le informazioni sull’ultima interrogazione al server di destinazione [posizione 1], i dati (header e corpo della pagina) dell’ultima chiamata [posizione 2] e eventuali codici o stati d’errore [posizione 3].

adesso, vorrei provare ad usarla, ma già non avevo capito come agicva Curl, figuriamoci se ho capito come/dove usare la funzione.

Non è che mi dareste una piccola mano ?

(lascio inoltre sia il problema che eventuale soluzione qui, caso mai qualcun' altro avesse lo stesso problema)

Grazie

Web.
__________________
Wm1
webmasterone è offline   Rispondi citando il messaggio o parte di esso
Old 22-07-2012, 20:38   #2
webmasterone
Member
 
L'Avatar di webmasterone
 
Iscritto dal: Nov 2006
Messaggi: 86
speravo non fosse così difficile....
;(
__________________
Wm1
webmasterone è offline   Rispondi citando il messaggio o parte di esso
Old 24-07-2012, 17:15   #3
webmasterone
Member
 
L'Avatar di webmasterone
 
Iscritto dal: Nov 2006
Messaggi: 86
Risolto
lascio qui la soluzione, nel caso serevisse ad altri

ho integrato la funzione nello script

ho modificato la classe, cambiando la riga
$out = curl_exec($ch);
in :
$out = curl_redir_exec($ch);

ho modificato lo script, nella riga in cui memorizza i risultati in una variabile.
questo eprchè adesso non ottengo più la pagina, ma un array
il contenuto della pagina (quello che mi interessa) è nell' indice 2

quindi ho cambiato la riga
$csv_file = $browser->http_get('http://www.xxx.it');
in
$csv_iside_array = $browser->http_get('http://iside.rm.ingv.it/iside/download?export=1&type=csv&data=EVENTS');

e qindi aggiunto:

$csv_iside = $csv_iside_array[2];

Web
__________________
Wm1
webmasterone è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa Marvel's Wolverine, la recensione: Logan torna p...
DJI Romo 2: tante novità lo rendono un robot completo DJI Romo 2: tante novità lo rendono un ro...
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED Sony Bravia 9 II: il True RGB alla prova, dove l...
Geely EX5, un mese al volante: il SUV elettrico cinese che ci ha sorpreso (quasi) senza riserve Geely EX5, un mese al volante: il SUV elettrico ...
Mova Z70 Ultra Roller Complete: motore potente, rullo di lavaggio e l'IA a guidare Mova Z70 Ultra Roller Complete: motore potente, ...
La Serie A con DAZN e Amazon Prime con l...
Giochi Ubisoft su Steam senza Ubisoft Co...
Miami Beach ha autorizzato la maxi opera...
Apple regala un altro anno di funzioni s...
Alla fine è successo davvero: Vol...
Il meglio di Amazon del weekend in uno s...
Speciale TV in offerta su Amazon: Hisens...
Non c'è pace per Trezor: 347.000 e-mail ...
È un portatile Dell e li vale tut...
Apple iPhone 17 Pro Max 256GB a 1.195€ (...
GPT-6 Astra è davvero AGI o non s...
LG OLED G6S 48'' a 845€ e G6 55'' a 1368...
Mantax Otax: il malware Android che crip...
Musk incassa un altro maxi contratto IA:...
Le vendite di EV sono esplose in tutto i...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 22:18.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v