[RISOLTO]CURL e richiamo CSS,JS ecc

ivarello

Utente Attivo
14 Dic 2012
211
1
16
Ragazzi ho un piccolo problema, mi spiego, con il CURL ottengo i dati da una pagina, che ha sua volta carica dei file css e js.
Praticamente ho preso questi css e js e caricati in locale e funziona, in realtà relativamente, perchè se ipotizziamo che la mia pagina con il CURL si trova dentro a localhost/CURL/index.php, ogni volta il codice va a cercare i file js e css nella cartella localhost/111.233/.
Se fosse sempre così non c'è problema basta caricare i file in locale e creare la cartella (come ho fatto), il problema sorge perchè questa cartella a volte cambia ad esempio con 123.465 o 124.568 senza nessun criterio.
Quindi non c'è un modo per dire al mio codice che si trovano sempre in una cartella specifica del mio server?
Grazie in anticipo
 
forse è meglio se aggiungi qualche dettaglio in più e qualche pezzo di codice, così è davvero difficile capire cosa stai facendo...
 
Be in realtà anche se pubblico il codice ci si fa poco, perchè come spiegavo è un normale codice CURL:

PHP:
<?php
function 
curl_grab_page($url,$ref_url,$data,$login,$proxy,$proxystatus){
    if($login == 'true') {
        $fp = fopen("cookie.txt", "w");
        fclose($fp);
    }
    $ch = curl_init();
	curl_setopt($ch,CURLOPT_HTTPHEADER,array("Expect:  "));
    curl_setopt($ch, CURLOPT_COOKIEJAR, "cookie.txt");
    curl_setopt($ch, CURLOPT_COOKIEFILE, "cookie.txt");
    curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");
    curl_setopt($ch, CURLOPT_TIMEOUT, 40);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
    if ($proxystatus == 'true') {
        curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, TRUE);
        curl_setopt($ch, CURLOPT_PROXY, $proxy);
    }
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);

    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_REFERER, $ref_url);

    curl_setopt($ch, CURLOPT_HEADER, FALSE);
    curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
    curl_setopt($ch, CURLOPT_POST, TRUE);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    ob_start();
    return curl_exec ($ch); // execute the curl command
    ob_end_clean();
    curl_close ($ch);
    unset($ch);
}
$dt = array();
$dt['username'] = 'prova';
$dt['password'] = 'prova';

echo curl_grab_page("http://prova/login.cgi", "http://prova/login.cgi", $dt , "true",  "null", "false");
?>

come dicevo questo mi porta alla pagina dove c'è un contenuto dinamico che va a cercare i file nelle cartelle 1111.23 o 4545.29.
Quello che vorrei fare è dirgli di cercare nella cartella che dico io, tipo se cerchi prova.js la trovi qui, se cerchi main.png lo trovi qui.
Spero di essere stato chiaro :S
 
e mi sa allora che ti tocca parsare quello che ti arriva in risposta e sostituire i percorsi...

PHP:
$output = curl_grab_page("http://prova/login.cgi", "http://prova/login.cgi", $dt , "true",  "null", "false"); 

$output = preg_replace('/src="(http:\/\/([^\/]+)\/)?([^"]+)"/', "src=\"http://iltuosito.com/\\3\"", $output);

echo $output;
 
Grazie per l'aiuto credo che ci siamo quasi
PHP:
$output = curl_grab_page("http://prova/login.cgi", "http://prova/login.cgi", $dt , "true",  "null", "false");  
$output = preg_replace('/src="(http:\/\/([^\/]+)\/)?([^"]+)"/', "src=\"http://localhost/prova\\3\"", $output); 
echo $output;

Così facendo la pagina si comporta così (ho usato il programma fiddler per vedere come si c)
http://localhost/prova/prova.php
http://localhost/prova/111219.2045/index.js
http://localhost/prova/111219.2045/js/jquery.js
http://localhost/prova/111219.2045/images/logo.gif
http://localhost/prova/111219.2045/images/link.png

Quindi dovrei praticamente dire al codice che il file index.js, js/jquery.js, logo.gif, link.png, si trovano nella cartella
http://localhost/prova/filemisti/

Qualche idea???
 
Dato che la cartella che cambia sempre nome a la costante di avere 11 caratteri, non si potrebbe usare una specie di:

PHP:
$stringa11caratteri = 'xxxxxx.xxxx';   ( esempio di cartella 111219.2045) oppure
$stringa11caratteri = str_word_count($str, 11);  // ovviamente non è questa la giusta formula per intenderci

$output = curl_grab_page("http://prova/login.cgi", "http://prova/login.cgi", $dt , "true",  "null", "false");   
$output = preg_replace('/src="(http:\/\/([^\/]+)\/)?([^"]+'.$stringa11caratteri.')"/', "src=\"http://localhost/prova\\3\"", $output); 
echo $output;
 
PHP:
$output = curl_grab_page("http://prova/login.cgi", "http://prova/login.cgi", $dt , "true",  "null", "false");  
$output = preg_replace('/src="(http:\/\/([^\/]+)\/)?([^"]+)/([\d\.]{11})/(.*)"', "src=\"http://localhost/prova\\5\"", $output); 
echo $output;
 
Ultima modifica:
Grazie tante non ho fatto in tempo a scriverlo, ci sono arrivato grazie tante cmq ;)
 

Discussioni simili