Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1

    fopen() non funziona in switch...case se metto @

    Ciao a tutti.

    dunque, voglio controllare con fopen() se un determinato URL esiste.

    Allora, seguendo questo thread ho fatto un ciclo if:

    Codice PHP:
    $result=@fopen($siteurl"r");
    if(
    $result) {
      echo 
    "esiste";
    } else {
      echo 
    "non esiste"

    e funziona.

    perchè invece non funziona se lo scrivo così?

    Codice PHP:
    $result=@fopen($siteurl"r");
    switch(
    $siteurl) {
    case 
    $result :
    echo 
    "non esiste";
    break;

    Riprende a funzionare se tolgo la chiocciola da
    $result=@fopen($siteurl, "r");

    come documenta il manuale di php, in fopen() "Se la open fallisce, la funzione restituisce FALSE e viene generato un errore di tipo E_WARNING. Si può utilizzare @ per sopprimere questo warning"

    Quindi... perchè nello switch un @fopen() non funziona e invece negli IF funziona??

  2. #2
    $result=@fopen($siteurl, "r");
    // $siteurl e' una stringa ...
    // $result un resource o un boolean (false) ...



    switch($siteurl) {
    // switcho una stringa ...



    case $result :
    // ... come fa una stringa ad essere un resource o un
    // boolean false ??? VVoVe:



    // non esiste che $result e' stringa
    echo "non esiste";
    break;
    }




    mentre nell' altro , giustamente, usi l' if sull' eventuale resource e non sulla stringa

    $result=@fopen($siteurl, "r");
    if($result) {
    ...



    dicci cosa stai tentando di fare
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  3. #3
    stavo tentando di riscrivere i controlli di validazione di una form senza dover scrivere mille cicli if annidati.
    $siteurl è una stringa contenente un url.

    Per cui ho pensato: uso switch...case, dovrebbe fare la stessa cosa, o no?

    Insomma,

    Codice PHP:
    switch $result {
    case 
    $result 
    echo 
    "l'indirizzo esiste";
    break;

    case !
    $result :
    echo 
    "l'indirizzo non esiste";
    break;

    non è uguale a
    Codice PHP:
    if ($result) { echo "esiste"; } else { echo "non esiste" ; } 
    ???

    Help... sono "un po'" confuso

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2002
    Messaggi
    460
    codice:
    try {
        $file = @fopen("cani.txt", "r");
        if (!$file)
            throw new Exception("Impossibile aprire file.");
        
        while ($row = fread($file)) {
            if (condizioneErrore)
                throw new Exception("Messaggio di errore");
        }
    }
    catch(Exception $e) {
        print("E' avvenuto un errore: " . $e->getMessage();
        exit();
    }
    There are 10 types of people in the world - those who understand binary and those who don't.

  5. #5
    frinkia, ma a che cosa si riferisce il tuo codice??
    Dubito che possa essermi utile

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2002
    Messaggi
    460
    Volevo solo indicarti di usare le eccezioni anziche' 3000 if annidati. E' un modo di programmare molto migliore.

    Ho letto male quello che ti serviva fare e mi sono limitato a riportare un pezzettino di codice scritto con le eccezioni per evitare i mille if annidati, sorry per la confusione. Per esserti piu' utile, per validare puoi fare cosi:

    codice:
    try {
        if ($cognome == null)
            throw new Exception("Il cognome e' obbligatorio");
    
        if ($nome == null)
            throw new Exception("Il nome e' obbligatorio");
    
        $fp = @fopen($url, "r");
        if ($fp == null)
            throw new Exception("Url non esiste");
    
        // Altri controlli
        print("Validazione ok");
    }
    catch (Exception $e) {
        print("Il form non e' valido: " . $e->getMessage());
    }
    There are 10 types of people in the world - those who understand binary and those who don't.

  7. #7
    Oh, benissimo!

    Mi spiegheresti con un esempio facile? non ho molto capito il tuo codice.

  8. #8
    Utente di HTML.it
    Registrato dal
    Sep 2002
    Messaggi
    460
    Stavo editando, vedi sopra (PHP5)
    There are 10 types of people in the world - those who understand binary and those who don't.

  9. #9

  10. #10

    MITICO

    Ho risolto!

    Codice PHP:
    $esiste = @fopen($siteurl"r");
    switch 
    $siteurl {
    case (
    $esiste == null) :  //prima facevo: case $esiste
    echo "non esiste";
    break;

    non ho capito moltissimo ma così ora funziona
    mi rimangono alcune domande:

    1)
    case $result :
    // ... come fa una stringa ad essere un resource o un
    // boolean false ???
    // non esiste che $result e' stringa
    echo "non esiste";
    break;
    }


    mentre nell' altro , giustamente, usi l' if sull' eventuale resource e non sulla stringa
    Non ho comunque capito la differenza tra if e switch, perchè in uno $result è stringa e nell'altro resource? Che vuol dire "restituire boolean false"?

    2) Ma allora le exception le posso usare solo in php5?

    Pietà per un povero coder ignorante!

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.