• User

    Scemenza da principiante

    Salve ragazzi, sto cercando di studiare il php seguendo un tutorial su questo forum, ma non riesco a capire per quale motivo non funziona correttamente:

    [php]<?php
    $cartella = opendir('../archivio');
    while ($file = readdir($cartella)) {
    $file_array[] = $file;
    }
    foreach ($file_array as $file) {
    if ( $file == ".." || $file == ".") {
    continue;
    }
    echo "<a href="../archivio/$file">$file<BR></a>";
    $lungh_array= count($file_array);
    }
    echo "$lungh_array";
    ?>[/php]La lunghezza del'array tracciato non è esatta e mi ritrovo nella lista anche i file che iniziano per "." o ".." non capisco, dove sbaglio?

    Sono agli inizi... non massacratemi. 😊


  • User

    Ragazzi, ma perchè mi ritrovo sempre due file in più in una semplice cartella sul server?
    I file sono "." e "..", da dove vengono fuori? Perchè sono costretto a toglierli con un ciclo?

    Se faccio così funziona tutto, è fatto bene?
    Sono solo esercizi scemi :

    [php]<?php
    $cartella = opendir('../archivio');
    while ($file = readdir($cartella)) {
    $file_array[] = $file;
    $lunghFile= count($file_array);
    }
    foreach ($file_array as $file)
    {
    if ( $file == ".." || $file == ".") {
    continue;
    }
    echo "<a href="../archivio/$file">$file</a><BR>";
    }
    echo "$lunghFile"-2;

    $doppio = "blu";
    $colori = array('bianco','verde','blu','giallo','nero');
    $lunghColori= count($colori);

    foreach ($colori as $colore)
    {
    if ( $colore == $doppio) {
    echo "<BR>c'è un doppione ed è : $colore";
    }
    }
    echo"<BR>$lunghColori"
    ?>[/php]


  • ModSenior

    Quelli sono i collegamenti alle cartelle superiori, alla radice.
    La funzione legge tutto... 🙂
    Potresti fare un if che estrometta quei risultati.


  • User

    Dici di mettere un if direttamente nel primo ciclo while?
    Mi aiuti?


  • ModSenior

    Ciao nuovobuio,

    dai un occhiata qui.


  • User

    Ti ringrazio Thedarkita, ho fatto così ma non capisco per quale motivo se cerco di mettere i file nell'array invece di stamparli soltanto mi riescono i file "." ".."

    poi scusami, ma dopo l'if non ci vogliono le graffe con il codice da eseguire? Perchè tu non le hai messe e funziona lo stesso?

    [php]$cartella = "../archivio";
    $apriCartella = opendir($cartella);

    while (false !== ($files = readdir($apriCartella)))
    {
    if ($files != '.' && $files != '..')
    $file_array[] = $files;
    echo $files.'<br />';
    //echo "<a href="../archivio/$files">$files</a><BR>";
    }
    [/php]


  • ModSenior

    Credo sai un problema del costrutto if.

    [php]if ($files != '.' && $files != '..')
    {
    $file_array[] = $files;
    echo $files.'<br />';
    echo "<a href="../archivio/$files">$files</a><BR>";
    }[/php]

    Prova a mettere le azioni tra graffe.


  • ModSenior

    I file . e .. sono per andare alle directory superiori, lo trovavi scritto anche nella discussione che ti ho indicato, vengono trovati sempre.
    Le parentesi graffe non sono obbligatorie, se non ci sono viene eseguita solo l'operazione successiva, cioè:
    [php]
    if(1 == 1)
    {
    echo 'a';
    }
    echo 'b';
    [/php]
    è equivalente a:
    [php]
    if(1 == 1)
    echo 'a';
    echo 'b';
    [/php]
    Solo echo 'a'; viene eseguito se la condizione è vera, echo 'b'; viene eseguito sempre.


  • User

    Vi ringrazio tantissimo ragazzi, piano piano imparerò! In effetti mettendo le graffe per l'if funziona tutto perfettamente:

    [php]$cartella = "../archivio";
    $apriCartella = opendir($cartella);

    while (false !== ($files = readdir($apriCartella)))
    {
    if ($files != '.' && $files != '..')
    {
    $fileArray[] = $files;
    $lunghFile= count($fileArray);
    //echo $files.'<br />';
    //echo "<a href="../archivio/$files">$files</a><BR>";
    }
    }

    echo "$fileArray[0]<BR>";
    echo "$lunghFile";[/php]Posso farvi ancora una domanda? Voi utilizzate qualche sw per scrivere php? Lo chiedo perchè non conosco ancora bene la sua formattazione, in flash c'è un pulsante che ti aggiusta e ti formatta tutto il codice scritto in automatico, verificandolo allo stesso tempo, non esiste una cosa simile per il php?
    Io sono su mac.


  • User Attivo

    Io uso Notepad++ che ha la sintassi colorata che aiuta non poco.


  • ModSenior

    Nuovobuio fai attenzione alle maiuscole e alla punteggiatura nei messaggi...
    Per quanto mi riguarda uso il semplice gedit di linux.