Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    file_exists o programmatore: chi fa cilecca?

    Chiedo scusa per il titolo ma quello che ho da dirvi oggi ha dell'incredibile:

    Ho creato uno script che funziona ma ogni tanto fa cilecca e non so perché:

    Codice PHP:
            if (file_exists $ipUnici )) {
                
    $current file_get_contents $ipUnici );
                
    $current2 $current $ip_address " | " $now "     \r\n";
                if (
    strpos $current$ip_address ) === false) {
                    
    file_put_contents $ipUnici$current2LOCK_EX );
                }
            } else {
                
    $current $ip_address " | " $now "     \r\n";
                
    file_put_contents $ipUnici$currentLOCK_EX );
            } 

    Come vedete il codice scrive dentro un file $ipUnici gli ip unici. Il programma funziona ma ogni 4 o 5 mesi il contenuto di $ipUnici viene "svuotato". L'unica ragione che mi sento di argomentare è che per qualche strana ragione si finisca nel ciclo else e si ricominci a scrivere il file. Da questa deduzione mi sorge spontanea la domanda:

    E' possibile che per qualche strana ragione (hosting free scrauso) un attimo prima php non si accorga della presenza del fine ed entri nel ciclo else facendo i danni che conoscete?

    Più pratica in futuro...

  2. #2
    Utente di HTML.it L'avatar di brodik
    Registrato dal
    Jan 2009
    Messaggi
    765
    mai pensato di usare il flag FILE_APPEND?
    eXvision

  3. #3
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Ricordati che il computer ha sempre ragione, se il programma/script che hai scritto non fa ciò che pensi dovrebbe fare, hai sbagliato tu, non ci sono alternative.

  4. #4
    Quote Originariamente inviata da Alhazred Visualizza il messaggio
    Ricordati che il computer ha sempre ragione, se il programma/script che hai scritto non fa ciò che pensi dovrebbe fare, hai sbagliato tu, non ci sono alternative.
    sospettavo!
    Più pratica in futuro...

  5. #5
    Quote Originariamente inviata da brodik Visualizza il messaggio
    mai pensato di usare il flag FILE_APPEND?
    Mi accorgo ora dell'esistenza però è una cosa molto controversa perché sul sito leggo:

    "Se il nome del file non esiste, viene creato il file. In caso contrario, il file esistente viene sovrascritto, a meno che non sia impostato il flag FILE_APPEND."

    http://php.net/manual/en/function.file-put-contents.php

    però un file che non esiste non può essere sovrascritto a meno che file_exists non funzioni a dovere. brodik potresti spiegarmi questa questione? Ti ricordo che non sono un programmatore ma un appassionato.

    Comunque tu mi stai dicendo di editare in questo modo il codice? Puoi essere più esaustivo?

    Codice PHP:
    if (file_exists $ipUnici )) {
                
    $current file_get_contents $ipUnici );
                
    $current2 $current $ip_address " | " $now "     \r\n";
                if (
    strpos $current$ip_address ) === false) {
                    
    file_put_contents $ipUnici$current2LOCK_EX );
                }
            } else {
                
    $current $ip_address " | " $now "     \r\n";
                
    file_put_contents $ipUnici$currentFILE_APPEND LOCK_EX );
            } 
    Più pratica in futuro...

  6. #6
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    776
    Ricordati che il computer ha sempre ragione, se il programma/script che hai scritto non fa ciò che pensi dovrebbe fare, hai sbagliato tu, non ci sono alternative.
    Salvo rarissime eccezioni! ;-)

    https://it.wikipedia.org/wiki/Pentium_FDIV_bug

  7. #7
    Quote Originariamente inviata da robynosse Visualizza il messaggio
    Salvo rarissime eccezioni! ;-)

    https://it.wikipedia.org/wiki/Pentium_FDIV_bug
    mai saputa una cosa del genere, interessante!
    Più pratica in futuro...

  8. #8
    Quote Originariamente inviata da giannino1995 Visualizza il messaggio
    mai saputa una cosa del genere, interessante!
    bè provate ad eseguire

    codice:
    console.log(0.1 + 0.2);

    in javascript...

  9. #9
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Beh, questo è un comportamento ben conosciuto e dovuto al fatto che non si possono rappresentare infiniti numeri con un numero limitato di bit, quindi ad un certo punto bisogna approssimare.
    Direi che meno dello 0.1% degli utenti abbia bisogno di numeri precisi fino alla 17° cifra decimale e chi ne ha bisogno sa che deve usare altri strumenti per avere la precisione di cui necessita, qui si sta parlando di comportamento di una programma (si scrivono istruzioni per fare una cosa, invece il PC ne fa un'altra, in quel caso lì lo sbaglio è sicuramente del programmatore che ha scritto istruzioni sbagliate), non si discute di precisione sui calcoli.

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.