• Consiglio Direttivo

    [File e Cartelle] file_get_contents();

    PHP 4.3.0, 5
    Sintatti: string file_get_contents ( string $file [, bool $use_include_path [, resource $context [, int $offset ]]] )

    file_get_contents è una funzione di PHP che memorizza il contenuto del file in un unica stringa, diversamente da come avviene con la funzione file(); che memorizza le varie righe come elementi di un array.
    Tramite il parametro $offset (introdotto dal PHP 5.1.0) è possibile specificare da quale numero di carattere cominciare questa "estrazione".

    file.txt

    abcdefghilm
    

    [php]<?
    $file = "file.txt";
    $string = file_get_contents ($file);
    echo $string; // risultato: abcdefghilm

    $string = file_get_contents ($file, 2); // impostiamo un offset
    echo $string; // risultato: cdefghilm
    ?>[/php]


  • User Newbie

    E se il file da recuperare è una pagina (php o html) ?
    Con file_get_contents viene recuperata la pagina, o meglio il codice della pagina, se alcune informazioni sono contenute in un file javascript richiamato dalla pagina ed elaborato dal browser nn sono recuperabili dalla funzione;

    Se quindi $html=file_get_contents() il contenuto del javascript nn c'è sta 😞 come si può fare per recuperare le informazioni contenute nel file javascript e magari metterle nella variabile ? (escludendo fsocket() e simili).

    è un problemino che sto cercando di risolvere da qualche giorno :arrabbiato: grazie per l'aiuto.


  • Consiglio Direttivo

    Ciao titothefree e benvenuto nel Forum GT 😉

    Il problema è che tu sbagli approccio con la funzione, file_get_contents() non recupera la pagina o il codice della pagina....questa funzione fa esattamente un copiaincolla del file che tu hai puntato. Quindi se nel tuo file viene richiamato lo script esterno.......troverai solo ed esclusivamente il richiamo allo script esterno...esattamente per come è nel file che stai puntando, se vuoi recuperare

    file.html
    [html]<html>
    <head>
    <script language="javascript" src="filejs.js">
    </head>
    <body>
    etc etc[/html]Eseguiamo la funzione su questo file
    [php]<?
    $html=file_get_contents("file.html");
    ?>[/php]Questo sarà il codice contenuto nella variabile $html:
    [html]<html>
    <head>
    <script language="javascript" src="filejs.js">
    </head>
    <body>
    etc etc[/html]
    Se tu vuoi conoscere il contenuto di filejs.js dovrai far puntare la funzione direttamente al filejs.js
    [php]<?
    $html=file_get_contents("filejs.js");
    ?>[/php]
    Spero di esser stato chiaro
    :ciauz:


  • User Newbie

    Grazie per la velocità della risposta, in fondo nn sei così diversamente agile 😄
    Premetto che ho risolto :yuppi:ad ogni modo,ti devo un paio di precisazioni:

    A me serviva salvare una pagina (risultato di un form) in un file, in automatico. tipo deve fare una "foto" della pagina e salvarla in un file che viene archiviato in una dir in formato txt o html, quindi nn servono solo i dati del form, ma la pagina completa una volta visualizzata sul lato client e mi interessa salvarla tutta (naturalmente sul lato server).

    ho provato con fsocket ma il server mi da un warning (Warning: fsockopen() has been disabled);
    a includere la pagina e il risultato è simile (Warning: include() [function.include]: URL file-access is disabled in the server configuration)
    :mmm:

    così ho provato con file_get_contents e il dilemma mi sembrava risolto invece... :mmm: il file di ritorno che salvavo non aveva il risultato del form.

    Pensavo fosse un problema di javascript invece nel form c'è del testo e lo passavo nudo e crudo, e con urlencode(teso) ho risolto :rollo:, alla fine sono le cose più semplici che mi complicano la vita...

    Grazie ancora per l'aiuto.


  • Consiglio Direttivo

    Di nulla ;)....anzi...di cosa?? hai fatto tutto tu alla fine 😄

    Alla prossima :ciauz:


  • User Attivo

    Vi prego fatemi capire come ha risolto lui il problema...
    io uso delle sessioni per "riempire i campi" ma con l'uso del file_get_contens risultano vuoti....

    Grazie per l'aiuto.


  • User

    Buon pomeriggio,
    vi espongo il mio problema:

    in una cartella ho un numero imprecisato di file di testo, alcuni dei quali iniziano con la seguente stringa:

    <?xml version="1.0" encoding="ISO-8859-1"?>
    ```Ho realizzato il seguente script automatico che aggiunge questa stringa a tutti i file che non ce l'hanno:
    
    [php]$dir = "./"; //questo file è stato inserito nella stessa dir nella quale si trovano i file da analizzare
    
    // Open a known directory, and proceed to read its contents
    if (is_dir($dir)) {
        if ($dh = opendir($dir)) {
            $count = 0;
            while (($file = readdir($dh)) !== false) {
                 if ($file != 'text.php') { //non voglio che la stringa venga aggiunta anche a questo file
                     $old_content = file_get_contents($file);
                     $codifica = '<?xml version="1.0" encoding="ISO-8859-1"?>';
                     if(substr($old_content, 0, 5) != '<?xml ') {    
                        $new_content = $codifica . "\r\n" . $old_content;
                        file_put_contents($file, $new_content);
                        $count++;
                        echo "$count Il file: $file è stato modificato" . "<br />";
                     }        
                  }
              }
            echo "Totale file modificati: " . $count;
            closedir($dh);
        }
    }[/php]Il problema è che la stringa viene aggiunta anche a quei file che già ce l'hanno. Ciò è dovuto alla funzione file_get_contents che non legge il testo contenuto nei tag. Come posso fare?
    Tanti consigliano include() ma non credo vada bene in questo caso visto che ho dei file di testo. 
    
    Vi ringrazio anticipatamente e vi saluto

  • User Attivo

    Ciao PSampras,

    La stringa ti viene aggiunta perché prendi una porzione di 5 caratteri con il substr e poi nell'if la compari con "<?xml " che di caratteri ne ha 6. Ovviamente quella condizione sarà sempre vera e quindi ti riaggiunge la arringa anche quando è già presente.

    Comunque, una soluzione più elegante, che posso consigliarti di usare, è la preg_match, che usa espressioni regolari per verificare se il testo è presente ed è quindi un po' più flessibile.

    Ciao,
    Luca Bartoli


  • User Attivo

    Ciao PSampras,

    La stringa ti viene aggiunta perché prendi una porzione di 5 caratteri con il substr e poi nell'if la compari con "<?xml " che di caratteri ne ha 6. Ovviamente quella condizione sarà sempre vera e quindi ti riaggiunge la arringa anche quando è già presente.

    Comunque, una soluzione più elegante, che posso consigliarti di usare, è la preg_match, che usa espressioni regolari per verificare se il testo è presente ed è quindi un po' più flessibile.

    Ciao,
    Luca Bartoli


  • User

    @lucabartoli said:

    La stringa ti viene aggiunta perché prendi una porzione di 5 caratteri con il substr e poi nell'if la compari con "<?xml " che di caratteri ne ha 6. Ovviamente quella condizione sarà sempre vera e quindi ti riaggiunge la arringa anche quando è già presente.

    Hai ragione ma il problema resta, in quanto il comando:
    [php]$old_content = file_get_contents($file);[/php]memorizza nella variabile $old_content la seguente stringa:

    n_htmlrow   idbon   import_bonifici...etc...
    ```saltando la prima parte del file di testo, quella contenente i tags. Te la riporto per chiarezza:
    

    <?xml version="1.0" encoding="ISO-8859-1"?>
    <zoom hastotals="off" step="30">
    <htmlrow class="f_elabora_bonifici_HtmlRow">n_htmlrow</htmlrow>
    <pk type="N">idbon</pk>
    <table>import_bonifici</table>
    <template>../zoom_cariddi</template>

    
    C'è un modo per risolvere?
    Come bisogna usare la funzione preg_match? Ho provato con
    [php]preg_match($stringa, $file)[/php] ma non funziona.
    
    Grazie per l'aiuto