Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 21
  1. #1
    Utente di HTML.it L'avatar di xshell
    Registrato dal
    Apr 2008
    Messaggi
    157

    Significato di @ in PHP

    Ciao.

    Scusate per la domanda banale (ho iniziato da pochi giorni a studiare php), ma guardando uno script PHP che ho trovato in internet, ho letto:

    @set_limit_time(0);

    Cosa significa quel simbolo di @ davanti alla funzione? Sempre su internet avevo letto che la @ serve per bloccare i messaggi di errore, ma non mi sono fidato... che errore potrebbe mai dare quella funzione? Qualcuno potrebbe indicarmi cosa serve quel simbolo?

    Confermate quello che ho letto riguardo @?

    Grazie in anticipo per le future risposte.

  2. #2
    Utente di HTML.it L'avatar di gianiaz
    Registrato dal
    May 2001
    Messaggi
    8,027
    si è corretto, serve per sopprimere i messaggi di errore e i warning.

    Nella fattispecie potresti non avere i permessi per lanciare il comando set_time_limit(0), quindi otterresti degli errori.

    Se posso darti un consiglio, a meno che non sai benissimo quello che stai facendo usa il meno possibile la @, che aggiunge un peso in più al server, e soprattutto rende difficile il debug in caso di errori.

    ciao

  3. #3
    giusto per dovere di cronaca: la @ non rallenta l'esecuzione delle pagine al massimo le velocizza perché non si passa dall'error handler in caso di problemi però ... anch'io sottolineo con forza l'importanza di ridurne l'uso ai minimi termini ...

    se devi fare qualcosa tipo

    if (($fp = @fopen(....., ....)) === false) .......

    allora ha senso perché comunque controlli l'errore ed eviti immondizia a video altrimenti è meglio far comparire l'errore
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  4. #4
    Utente di HTML.it L'avatar di xshell
    Registrato dal
    Apr 2008
    Messaggi
    157
    Ok, grazie a tutti. Nello sviluppo del sito non utilizzerò questo simbolo: quando lo visualizzerò, se compariranno errori superflui, inserirò la @.

  5. #5
    Originariamente inviato da xshell
    Ok, grazie a tutti. Nello sviluppo del sito non utilizzerò questo simbolo: quando lo visualizzerò, se compariranno errori superflui, inserirò la @.
    nota: gli errori non sono superflui
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  6. #6
    Originariamente inviato da daniele_dll
    nota: gli errori non sono superflui
    ...::: DESIDERARE E' UMANO :::...
    ...::: POSSEDERE E' DIVINO :::...
    ...::: HAVE A NICE DAY :::...
    (¯`·.¸¸.->ĐĮ ĦΞŁŁ<-.¸¸.·`¯)
    http://www.djhellclub.com

  7. #7
    Utente di HTML.it L'avatar di gianiaz
    Registrato dal
    May 2001
    Messaggi
    8,027
    Originariamente inviato da daniele_dll
    nota: gli errori non sono superflui
    rilancio dicendoti che nei miei file php quando sono in fase di test/sviluppo ci sono sempre queste 2 linee di codice:

    error_reporting(E_ALL); // report all errors
    ini_set("display_errors", 1);


    cosi li vedo tutti gli errori e i warnings...

    Grazie a daniele per la precisazione

  8. #8
    l'ultima nota, lo giuro

    E_ALL, attualmente, non comprende E_STRICTquindi conviene settare

    error_reporting(E_ALL+E_STRICT)

    ( info al testo della spiegazione, prima dei commenti, su http://it2.php.net/error_reporting )
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  9. #9
    Utente di HTML.it L'avatar di gianiaz
    Registrato dal
    May 2001
    Messaggi
    8,027
    Originariamente inviato da daniele_dll
    l'ultima nota, lo giuro
    ehehe figurati, anzi, grazie delle info.

    Una domanda, nella pagina che mi hai linkato non viene citata la tua sintassi con il più, ma con la pipe, puoi darmi qualche dritta in più?

    grazie

  10. #10
    il PIPE fa l'OR ovvero fa l'or di ogni singolo bit tra i due valori



    La sequenza di BIT dell'E_ALL è
    0001011111111111

    (l'ho allineata a 16 bit, ergo 2 byte, ergo uno short integer)

    mentre la sequenza di bit di E_STRING è
    0000100000000000

    con l'or si ottiene
    0001011111111111 OR
    0000100000000000
    ------------------
    0001111111111111

    perché prende il TRUE anche se solo uno dei due valori è TRUE (il true corrisponde a 1 in questo caso)

    siccome la somma, nel nostro caso specifico, permette di ottenere lo stesso risultato perché stiamo andando a sommare due valori i cui bit non coincidono ... viene fuori che
    0001111111111111 => 8191

    e
    6143 (E_ALL) + 2048 (E_STRING) = 8191



    in pratica matematica binaria utilizzata per le maschere ... c'è un sacco di roba ad esempio il byteshifting è utilissimo ... o l'utilizzo di AND

    se per sempio acquisiamo il valore corrente dell'error reporting è si vuole sapere se E_USER_WARNING è attivo ... ovvero se è presente la sequenza
    0000001000000000

    basta applicare una maschera AND con il valore di 0x200 al valore dell'error reporting (0x200 è l'esadecimale di 512 ... possiamo applicare il valore cosi com'è perché trattandosi di maschere e flag il 512 è un flag, un singolo bit, che ci interessa verificare se presente)

    ovvero
    0001011111111111 AND
    0000001000000000
    ------------------
    0000001000000000

    restituisce l'esatto valore della maschera del flag applicato e quindi a questo punto si sa che c'è quel dato bit attivo

    in parole pratiche

    codice:
    if ((error_reporting() & 0x200) == 0x200)
    {
        echo "E_USER_ERROR attivo!";
    }

    #########

    nota: quando si lavora con i BIT è molto importante controllare se l'architettura è BIG INDIAN o LITTLE INDIAN perché varia l'importaza dei bit nelle sequenze!

    ovvero il valore di E_ALL
    0001011111111111

    è in formato LITTLE INDIAN

    se fossi su PPC (vecchi apple o ibm ad esempio ... PPC, G4, G5, motorola e cosi via) sarebbe

    1111111111101000
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

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.