Visualizzazione risultati 1 fino 12 di 12

Discussione: [php] Non considerare più un file dopo averlo incluso

  1. #1
    Guest

    Predefinito [php] Non considerare più un file dopo averlo incluso

    ciao a tutti, sto facendo una galleria e memorizza le informazioni delle foto in file txt che ho bisogno di includere e poi non considerare più, ed ecco che escono i problemi... come posso fare?:

    questo è il file di informazioni:
    Codice PHP:
    $name = 'Fotografia'; //il titolo
    $desc = 'Una bella fotografia'; //descrizione
    $author = 'Me'; //autore
    $date = '01/01/2001'; //data
    e questa è il codice non completata:

    Codice PHP:
    <?php
    $dir
    = $_GET['dir']; //prendo la cartella

    $dircart = opendir($dir); //apro la cartella

    while($file = readdir($dircart)) {
    if (
    $file == ".." || $file == ".") {

    continue;
    //levo le cartelle che non mi servono
    }

    $filen = basename($file,".jpg"); //levo l'estensione

    include("$filen.txt"); //includo

    echo "<img src=\"".$file."\"><span>Nome: ".$name".<br />Descriz: ".$desc".<br />Autore: ".$author".<br />Data: ".$date".</span>";//stampo le informazioni

    uninclude("$filen.txt"); //ora non considero più il file perchè visto che il codice verrà ripetuto più volte si creerebbero conflitti nelle variabili (p.s. lo so che la funzione non esiste, ma rende l'idea :) )
    }
    closedir($dircart);
    ?>
    come posso fare???

    p.s. grazie in anticipo

  2. #2
    L'avatar di miki92
    miki92 non è connesso AlterGuru 2500
    Data registrazione
    21-04-2007
    Residenza
    Procida (NA)
    Messaggi
    4,233

    Predefinito

    Non ho ben capito vuoi includere una sola volta un file?
    Apprezzi l'aiuto? Offrimi un caffè!

  3. #3
    Data registrazione
    04-09-2009
    Messaggi
    183

    Predefinito

    Forse hai le idee un po' confuse.
    Quando includi un file con la funzione include(), è come se tu scrivessi in quel punto il contenuto del file, quindi, se includi un codice PHP, tale codice viene eseguito al momento dell'inclusione.

    Per cancellare una variabile, puoi usare la funzione unset().
    Age Of Empires GIF Creator & Archive
    New! Blog informatico di scripting PHP avanzato
    Vuoi giocare online a Age of Empires The Conquerors? -> Usa Voobly !! (MSN Zone non lo supporta più dal 19 giugno 2006)
    Il mio clan di The Conquerors -> Rifugio dei Conquerors
    Il mio stato su Xfire Live Video -> Unreal Tournament 2004
    Facebook MMORPG

  4. #4
    Guest

    Predefinito

    noo! faccio un esempio: io ho due file var1.php e var2.php all'interno di questi file ci sono due variabili con lo stesso nome ma con valori diversi.
    se io ho un ciclo for che si ripete e include i file uno dopo l'altro in due cicli non vorrei che andassero in conflitto poichè hanno lo stesso nome!
    quindi dopo avere stampato/usato ecc le variabili vorrei che nel ciclo successivo sia come se non avessi mai incluso il primo file
    Ultima modifica di edo98 : 26-12-2009 alle ore 12.32.40

  5. #5
    Guest

    Predefinito

    Non lo puoi fare, però puoi fare in modo che venga incluso una sola volta pur essendo nel ciclo, ma a questo punto non vedo che senso abbia metterlo dentro ad un ciclo.

  6. #6
    L'avatar di miki92
    miki92 non è connesso AlterGuru 2500
    Data registrazione
    21-04-2007
    Residenza
    Procida (NA)
    Messaggi
    4,233

    Predefinito

    Ma se tu, in un solo ciclo, includi entrambi i file devono per forza andare in conflitto.

    Cioè se io ho due file con le stesse variabile e li includo uno dopo l'altro e poi stampo una variabile contenuta in questi file essa avrà il risultato dell'ultima inclusione.

    Forse sono io che continuo a non capire ma non puoi assegnare nomi diversi a queste variabili almeno temporaneamente?
    Apprezzi l'aiuto? Offrimi un caffè!

  7. #7
    Guest

    Predefinito

    io in pratica devo cancellare le variabili del primo file per poi includere l'altro che ha le stesse ma con valore diverso

    ora vi faccio un esempio senza l'include...

    Codice PHP:
    <?php
    $var
    = 'ciao';

    echo(
    "$var"); //restituisce ciao

    ????($var); //funzione ignota che cancella la variabile

    echo("$var"); //non restituisce niente

    $var = 'prova';

    echo(
    "$var"); //restituisce prova

    ?>
    Ultima modifica di edo98 : 26-12-2009 alle ore 12.35.54

  8. #8
    Guest

    Predefinito

    Ho capito che cosa vuoi fare, la funzione ???? corrisponde ad unset, ma se modifichi il valore di una variabile è come se la cancellassi quindi non vedo che cambia.

  9. #9
    Guest

    Predefinito

    Basta vedere l'esempio della funzione while():

    Codice PHP:
    $i = 1;
    while (
    $i <= 10)
    {
    echo
    $i . ' - ';
    $i++;
    }
    Avrai come risultato:
    Codice:
    1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 -
    Questo per farti capire che, come dice alessandro, non c'è bisogno di usare unset(), ma basta cambiare il valore.

    Dovresti postare lo script intero che utilizzo in modo da poterti consigliare eventualmente una soluzione migliore

    Se è querllo postato su avevi anche due errori di sintassi, mancavano due punti per concatenare la stringa. Poi ti sfido a capirci qualcosa in quel codice, non ha indentazione, usi solo le ", anche dove non necessario, e sei pieno di escape! Poi non capisco la funzione uninclude(), non esiste

    Questo è il codice migliorato:
    Codice PHP:
    $dir = $_GET['dir']; // prendo la cartella

    if ($dircart = opendir($dir)) // apro la cartella
    {
    while (
    $file = readdir($dircart))
    {
    if (!(
    $file == ".") && !($file == ".."))
    {
    $filen = basename($file, ".jpg"); // levo l'estensione

    include("$filen.txt"); // includo

    echo '<img src="' . $file . '"><span>Nome: ' . $name . '. <br />Descriz: ' . $desc . '.<br />Autore: ' . $author . '.<br />Data: ' . $date . '.</span>'; // stampo le informazioni

    // uninclude("$filen.txt");
    }
    }
    closedir($dircart);
    }
    E tutto quello che hai scritto, si potrebbe fare in meno righe di codice:
    Codice PHP:
    $dir = $_GET['dir']; //prendo la cartella

    if ($dir && !substr($dir, 0, 1) == '/')
    {
    $dir = $dir . '/';
    }

    if (
    file_exists($dir) && is_dir($dir))
    {
    foreach (
    glob($dir . "*.jpg") as $filename)
    {
    $file = basename($filename, '.jpg'); // levo l'estensione

    include("$filen.txt"); // includo

    echo '<img src="' . $file . '"><span>Nome: ' . $name . '. <br />Descriz: ' . $desc . '.<br />Autore: ' . $author . '.<br />Data: ' . $date . '.</span>';
    }
    }

  10. #10
    Guest

  11. #11
    Guest

    Predefinito

    Cosa c'emtra include_once()? Questa funzione include un file SOLO se NON è già stato incluso precedentemento allo script. Dato che è impossibile ci siano immagini con lo stesso nome (una va a sovrascrivere l'altra) non cambierebbe nulla
    A me pare strano creare un file.txt per ogni immagine caricata, mi pare una gallery flat, ma se fosse così utilizzere un file .xml così strutturato (contate che non conosco e non ho mai utilizzato questo linguaggio):
    Codice HTML:
    <?xml version="1.0" ?>
    <immagine file="name">
    	<name>Nome</name>
    	<author>Me</author>
    	<desc>Descrizione</desc>
    	<date>1256953732</date>
    </immagine>
    <immagine file="name_2">
    	<name>Nome 2</name>
    	<author>Pippo</author>
    	<desc>Descrizione file 2</desc>
    	<date>1256963745</date>
    </immagine>
    Poi nello script php aggiunge ad ogni nome l'estensione jpg dato che nello script fa un glob/basename solo di questa e si risparmia già 4 caratteri per ogni immagine. Secondo me sarebbe molto più veloce e non dovresti includere/creare un file per ogni immagine, ma solamente aggiornarne uno con la classe DOM se non erro.
    Ultima modifica di biccheddu : 27-12-2009 alle ore 09.47.57

  12. #12
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito

    Citazione Originalmente inviato da edo98 Visualizza messaggio
    noo! faccio un esempio: io ho due file var1.php e var2.php all'interno di questi file ci sono due variabili con lo stesso nome ma con valori diversi.
    se io ho un ciclo for che si ripete e include i file uno dopo l'altro in due cicli non vorrei che andassero in conflitto poichè hanno lo stesso nome!
    quindi dopo avere stampato/usato ecc le variabili vorrei che nel ciclo successivo sia come se non avessi mai incluso il primo file
    Provo a darti una soluzione alternativa, di livello un po' più "alto": dovresti riuscire a trasformare i compiti eseguiti da questi due file in due funzioni. Le variabili che richiedono i file si trasformano in parametri, mentre eventuali risultati puoi passarli al resto del codice come valori di ritorno.

    Quando è il momento di eseguire questi due file-funzione, semplicemente le richiami come le funzioni ordinarie. Le funzioni comunicano con il resto del codice soltanto tramite i parametri e i valori di ritorno (ok, ci sono anche le variabili globali, ma queste dovresti cercare di evitarle il più possibile), quindi le variabili definite all'interno della funzione non vanno in conflitto con il resto del codice.

    È una soluzione un po' elegante, che ti ricorda anche qual è lo scopo originario delle funzioni PHP: quello di suddividere un problema più complesso in tanti sotto-problemi più semplici, ed agevolare il riutilizzo del rispettivo codice per i task più ripetitivi...

    Stammi bene...
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •