Visualizzazione dei risultati da 1 a 8 su 8

Discussione: [PHP] fopen di una URL

  1. #1

    [PHP] fopen di una URL

    Salve a tutti

    Allora io devo prendere il sorgente di una pagina internet: come faccio?

    Io ho provato a fare:

    $nomefile= "http://www.sito.com/index.php?showforum=109";
    $file = fopen($nomefile,"r");

    Ma mi restituisce che il file non esiste... come posso fare?

    Grazie

  2. #2
    fopen è utilizzabile con URL solo se il php.ini è configurato con allow_url_fopen settato su true

    http://it2.php.net/manual/it/ref.fil...llow-url-fopen

    l'alternativa è scaricarti la pagina con i socket.. è un po' pèiù laborioso ma non troppo difficile..dipende anche da cosa devi fare poi con la pagina


  3. #3
    Utente di HTML.it L'avatar di deleted_id_48586
    Registrato dal
    Nov 2002
    Messaggi
    1,732

    Re: [PHP] fopen di una URL

    [supersaibal]Originariamente inviato da Pamput
    Salve a tutti

    Allora io devo prendere il sorgente di una pagina internet: come faccio?

    Io ho provato a fare:

    $nomefile= "http://www.sito.com/index.php?showforum=109";
    $file = fopen($nomefile,"r");

    Ma mi restituisce che il file non esiste... come posso fare?

    Grazie [/supersaibal]
    quella che hai messo come URL è una pagina dinamica, non puoi leggerne il sorgente così.

    il vero sorgente è "index.php".

    Hai i permessi di lettura?

  4. #4
    Lo so che e una pagina dinamica... purtroppo... e me non server il sorgente di index.php ma l'output elaborato (quello che viene restituito all'utente che si connette a quella pagina)... no cmq non ho i permessi

  5. #5
    Utente di HTML.it L'avatar di deleted_id_48586
    Registrato dal
    Nov 2002
    Messaggi
    1,732
    ma scusa allora ti basta vedere l'html con il browser

  6. #6
    sarebbe semplice... ma molto piu lungo. Vi spiego precisamente cosa sto cercando di fare:

    Devo creare una lista in un forum delle discussioni di una determinata sezione, per fare cio pero devo riuscire a prendere il codice sorgente delle pagine e poi elaborarlo, per quanto riguarda l'elaboratore gia fatto... ms non so come prendere lo script delle pagine

  7. #7
    [supersaibal]Originariamente inviato da Pamput
    sarebbe semplice... ma molto piu lungo. Vi spiego precisamente cosa sto cercando di fare:

    Devo creare una lista in un forum delle discussioni di una determinata sezione, per fare cio pero devo riuscire a prendere il codice sorgente delle pagine e poi elaborarlo, per quanto riguarda l'elaboratore gia fatto... ms non so come prendere lo script delle pagine [/supersaibal]
    se l'elaboraion l'hai già fatta [è il grosso] usa le socket..

    come ti dicevo fopen può funzionare su URL solo se il php.ini lo permette.. se non hai accesso al php.ini l'unica è gestirtela con le socket: fai una richiesta GET proprio come se fossi un browser, e ti leggi la risposta del serevr


  8. #8
    Io avrei trovato uno script pronto mi potresti vedere un attimo se e quello che mi serve:

    / Il file da scaricare
    $file = 'index.html';

    // Impostiamo dove si deve connettere
    $host = "http://www.italodome.com/index.php?showforum=109";

    // La porta a cui connettersi
    $port = 80;

    // Creiamo la socket (Una socket basata su IPv4, Socket Stream [ovvero un sistema di comunicazione con il controllo dell'errore] ed infine SOL_TCP gli specifica di usare il layer di comunicazione TCP
    $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);

    // Dice a php di connettersi a HOST:PORT usando la socket creata in precedenza
    socket_connect($socket, $host, $port);

    // Prepariamo il contenuto da inviare
    $header_send = '';
    $header_send .= "GET /{$file} HTTP/1.0\n";
    $header_send .= "HOST: {$host}:{$port}\n";
    $header_send .= "\n";

    // Inviamo i dati
    socket_write($socket, $header_send);

    // Inzializziamo la variabile che conterra' i dati del buffer
    $buffer = '';

    // Legge i dati dalla sockeet a blocchi di 512 byte mettendoli dentro la variabile $tmpdata. Se socket_read restituisce FALSE, vuol dire che la comunciazione si è chiusa
    while (($tmpdata = socket_read($socket, 512)) != FALSE) {

    // Aggiungo i dati al buffer
    $buffer .= $tmpdata;
    }

    // Il protocollo HTTP 1.0 è composto da due sezioni separate da un duplice invio. La prima sezione sono le informazioni sul file ricevuto, la seconda è il contenuto
    $tmp = explode("\r\n\r\n", $buffer);

    // Estraggo gli headers
    $headers = array_shift($tmp);

    // Il contenuto poteva contenere a sua volta dei duplici invii, quindi per evitare di perdere dati o di averli malformati reimplodiamo l'array da cui abbiamo tolto gli headers
    $content = implode("\r\n\r\n", $tmp);

    // A questo punto mettiamo tutto dentro un file e abbiamo scritto il nostro "downloader"
    $fp = fopen(basename($file), "wb+t");
    fwrite($fp, $content);
    fclose($fp);





    Funziona con pagine normali ma con quella che mi serve a me no mi da come errore:

    Warning: socket_connect() Host lookup failed [11004]: Il nome richiesto è valido e presente nel database ma non possiede i dati associati corretti per la risoluzione. in d:\programmi\easyphp\www\rel\beta\super.php on line 15

    dimme un po

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.