Aiuto Con fgets

di il
3 risposte

Aiuto Con fgets

Ragazzi Salve a Tutti ^^
mi son Avvicinato al mondo Del php da poco
Volevo un aiuto circa questa mia idea:

Ho un file di testo
all'interno di questo file di testo ho una serie di link, precisamente un link per ogni riga

Ora ho necessita' di prendere un link alla volta per eseguirci delle operazioni, precisamente copiare il sorgente della pagina a cui fa riferimento il link

Allora ho deciso di usare la funzione fgets
tuttavia ho notato che quando nel file di testo c'e' piu' di un link mi crea un po di problemi

ovvero se ho:

Link1
Link2

con la fgets quando prendo il link1 in realta' mi prende la riga del link 1 piu' una riga vuota e quindi quando poi vado ad utilizzare file_get_contents per leggere il sorgente mi dice che il link e' errato
come posso prendere precisamente la i-esima riga senza la riga vuota?

3 Risposte

  • Re: Aiuto Con fgets

    Ciao Goku
    Se in ogni caso devi leggere tutte le righe del tuo file di testo, personalmente ti consiglio la funzione file che funziona singolarmente e, come da guida php.net, restituisce i contenuti del file in un array, nel quale ogni elemento è una riga di tale file. E qui viene il bello: negli argomenti della funzione è possibile specificare un paio di flag utili, ovvero FILE_IGNORE_NEW_LINES e FILE_SKIP_EMPTY_LINES; il primo elimina direttamente alla lettura i caratteri di file linea (\n, \r o qualsiasi loro combinazione che sia) mentre il secondo fa in modo che non vengano restituite le linee vuote. Ecco un esempio:

    links.txt
    http://www.iprogrammatori.it/forum-programmazione
    http://www.google.com
    
    http://php.net
    script.php
    
    $file_array = file( "links.txt", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES );
    foreach( $file_array as $line ) {
    	// QUI LO SCRIPT CHE USA IL LINK
    }
    Se poi facessimo un print_r della variabile creata, ecco che avremmo:
    print_r( $file_array );
    Array (
    	[0] => http://www.iprogrammatori.it/forum-programmazione,
    	[1] => http://www.google.com,
    	[2] => http://php.net
    )
    Seinvece vuoi continuare ad usare il tuo metodo, ti consiglio all'interno del loop la funzione TRIM sulla riga corrente, che non serve ad altro se non ripulire una stringa dagli spazi in eccesso all'inizio e alla fine, in questo modo elimineresti i caratteri di fine linea dalle righe in questione:
    while( ( $line = fgets( $handle ) ) !== false ) {
    	$line = trim( $line );
    	// ... QUI IL RESTO
    }
    ____________________________________________
    Link alla reference guide:
    funzione FILE
    funzione TRIM
    funzione FGETS

    Buon lavoro!
  • Re: Aiuto Con fgets

    Mmm mi piace il metodo da te suggeritomi ^^
    Grazie Mille
    Lo provo e ti faccio sapere ^^

    EDIT

    c'e' per caso la possibilita' di dire alla funzione file_get_contents di prendere solo la riga numero X di un file?
    In particolare mi serve prendere una sola riga della sorgente di una pagina
  • Re: Aiuto Con fgets

    Goku ssj3 ha scritto:


    c'e' per caso la possibilita' di dire alla funzione file_get_contents di prendere solo la riga numero X di un file?
    In particolare mi serve prendere una sola riga della sorgente di una pagina
    Temo di no, in quanto lo stream è sul carattere: la linea in realtà non è altro che l'insieme dei caratteri racchiusi fra due delimitatori, anch'essi caratteri perciò fino alla lettura del file non è possibile sapere quante e quali linee vi sono contenute. Quel che puoi fare è ipotizzare più o meno a che carattere inizia e a quale finisce tale riga, dunque tenendo anche conto di qualche carattere d'errore, puoi sfruttare gli argomenti offset e maxlen di e tramite regexp o altra espressione elaborare e prendere la linea che ti interessa
Devi accedere o registrarti per scrivere nel forum
3 risposte