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

    flock e maximum execution time

    Se un mio script esegue l'istruzione:
    Codice PHP:
    flock($fpLOCK_EX); 
    e poi viene terminato con l'errore:
    codice:
    Maximum execution time exceeded
    il puntatore al file viene distrutto e di conseguenza il file torna accessibile oppure il file rimane bloccato?

  2. #2
    http://www.php.net/flock

    The lock is released also by fclose() (which is also called automatically when script finished).
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  3. #3
    Come posso sapere se l'esecuzione dello script č terminata regolarmente o č stata interrotta a causa di questo errore?

  4. #4
    troppo complicato ed esoso in termini di risorse ... il lock viene rilasciato in automatico o alla terminazione dello script, o con l'uso di fclose ... e manualmente unlockandolo
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  5. #5
    Beh, diciamo che sapere se lo script č stato completato o interrotto č fondamentale. Quale sarebbe la soluzione esosa?

  6. #6
    Utente di HTML.it L'avatar di bubi1
    Registrato dal
    Dec 2009
    Messaggi
    1,230
    Originariamente inviato da starcraftworld
    Beh, diciamo che sapere se lo script č stato completato o interrotto č fondamentale. Quale sarebbe la soluzione esosa?
    Diciamo che devi raggionare al contrario. Non puoi catturare l'evento timeout, per il semplice motivo che lo script s'interrompe proprio quando arriva a questo punto. E quindi non puoi farlo dallo script stesso.

    Ma se ti serve poterlo verificare succesivamente, potresti provare a creare un evento "esecuzione riuscita" e controllare quello.
    Ad esempio potresti rinominare il file dove scrivi.
    Al inizio del tuo script, il file.txt lo rinomini in file.txt.tmp
    processi i tuoi dati
    Quando hai finito, rinomini il file indietro in file.txt

    In questo modo, se ad un successivo controllo vedi che il file e' rimasto file.txt.tmp - significa che lo script non ha finito di processare i dati.

    Questo e' solo un metodo, ce ne sono degli altri invece. ne ho anche visto una volta uno molto brutale: lo script (con l'impostazione display_errors on) veniva chiamato via http con un altro script, da dove veniva parsato continuamente l'output per cercare stringhe di errore. Ma questo aveva senso solo se lo script che chiamava aveva un timeout piu' lungo.

    Io ad esempio per cose del genere in cui mi serve un controllo preciso ed in tempo reale, uso i pcntl. Ma il pcntl e' una cosa da usare con molta cura, e sicuramente non disponibile su hosting condiviso, e sicuramente inutile quando si possono trovare soluzioni piu' semplici.

  7. #7
    Grazie della risposta.
    Escludendo i file, quali altre soluzioni si possono trovare?

  8. #8
    Utente di HTML.it L'avatar di bubi1
    Registrato dal
    Dec 2009
    Messaggi
    1,230
    Boh, scrivere in un database un flag, 1-iniziato elaborazione dati, 2-finito, e controllare secondo lo stesso principio.

    Poi in alternativa (sarebbe piu' facile se tu dicessi cosa esattamente stai facendo) - se hai un ciclo che elabora qualcosa, potresti prendere il time() all'inizio, e ad ogni giro controllare di quanto e' andato avanti il tuo script. E se vedi che ti stai avvicindando al max_execution_time, interrompi tutto, e fai qualcosa..

  9. #9
    Mi piacerebbe poter fare una cosa del tipo:
    Codice PHP:
    setTimeException(true); 
    per indicare che lo script č in esecuzione e:
    Codice PHP:
    setTimeException(false); 
    al termine dello script.
    Solo che non vorrei salvare questo valore nč su file nč su database, vorrei che si arrangiasse il server a memorizzarselo per conto suo, come se fosse una variabile globale.
    FantaProgrammazione?

  10. #10
    Utente di HTML.it L'avatar di bubi1
    Registrato dal
    Dec 2009
    Messaggi
    1,230
    Se hai qualche acceleratore sul server, puoi usare i suoi meccanismi di cache per salvare variabili persistenti.. Funzioni tipo eaccelerator_put, o apc_add

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.