Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Plaud Note Pro convince per qualità e integrazione, ma l’abbonamento resta un ostacolo
Plaud Note Pro convince per qualità e integrazione, ma l’abbonamento resta un ostacolo
Plaud Note Pro è un registratore digitale elegante e tascabile con app integrata che semplifica trascrizioni e riepiloghi, offre funzioni avanzate come template e note intelligenti, ma resta vincolato a un piano a pagamento per chi ne fa un uso intensivo
Google Pixel 10 è compatto e ha uno zoom 5x a 899€: basta per essere un best-buy?
Google Pixel 10 è compatto e ha uno zoom 5x a 899€: basta per essere un best-buy?
Google Pixel 10 è uno smartphone che unisce una fotocamera molto più versatile rispetto al passato grazie allo zoom ottico 5x, il supporto magnetico Pixelsnap e il nuovo chip Tensor G5. Il dispositivo porta Android 16 e funzionalità AI avanzate come Camera Coach, mantenendo il design caratteristico della serie Pixel con miglioramenti nelle prestazioni e nell'autonomia. In Italia, però, mancano diverse feature peculiari basate sull'AI.
Prova GeForce NOW upgrade Blackwell: il cloud gaming cambia per sempre
Prova GeForce NOW upgrade Blackwell: il cloud gaming cambia per sempre
L'abbonamento Ultimate di GeForce NOW ora comprende la nuova architettura Blackwell RTX con GPU RTX 5080 che garantisce prestazioni tre volte superiori alla precedente generazione. Non si tratta solo di velocità, ma di un'esperienza di gioco migliorata con nuove tecnologie di streaming e un catalogo giochi raddoppiato grazie alla funzione Install-to-Play
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


Plaud Note Pro convince per qualità e integrazione, ma l’abbonamento resta un ostacolo Plaud Note Pro convince per qualità e int...
Google Pixel 10 è compatto e ha uno zoom 5x a 899€: basta per essere un best-buy? Google Pixel 10 è compatto e ha uno zoom ...
Prova GeForce NOW upgrade Blackwell: il cloud gaming cambia per sempre Prova GeForce NOW upgrade Blackwell: il cloud ga...
Ecovacs Deebot X11 Omnicyclone: niente più sacchetto per lo sporco Ecovacs Deebot X11 Omnicyclone: niente più...
Narwal Flow: con il mocio orizzontale lava i pavimenti al meglio Narwal Flow: con il mocio orizzontale lava i pav...
Arriva Managed Kubernetes Standard, la p...
Dal MIT un nuovo elettrolita solido auto...
Object First annuncia la disponibilit&ag...
Apple lancia Music Transfer Tool: import...
Mario Draghi critica gli obiettivi green...
Dimensity 9500 promette prestazioni da p...
HybridPetya, il ransomware che può...
Apple Mac mini con chip M4 a prezzi mai ...
Alphabet, società madre di Google...
Incidente con Tesla in Svizzera: il prop...
Shein chiude a Stradella e si sposta in ...
Cosa ci ha detto IAA Mobility 2025? Elet...
Meta Ray-Ban Display trapelati in video:...
Titan Army e una nuova tecnologia che ca...
GPT-5-Codex ufficiale: è l'assist...
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: 12:14.


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