Newsgroup: it.comp.www.php
Titolo: Gestore di code

Ciao ragazzi
Sto cercandoi di creare un gestore di code in php (su windows) ma non ho
idea di come si possa fare...
Premetto che le stringhe di esecuzione sono sul DB ma non so come poter
fare...qualcuno potrebbe darmi una mano oppure  suggerirmi qualche prog gia
fatto???
Ciao
Grazie

 idea di come si possa fare...
Spiega più precisamente cosa intenderesti fare con php.
--
rob4you

 ha scritto:

Ho realizzato un programma che serve per spostare dei file.
Il programma funziona all'interno di una Lan quindi lo utilizzano piu
persone contemporaneamente di conseguenza mi è essenziale un gestoe di
code...ovvero:
- si selezionano i file da trasferire e dove trasverirli...
- poi si clicca sul pulsante invia e invece di eseguire subito l'azione
(come avviene ora ) valorizzo una tabella con i dati necessari per il
trasferimento
- ora il mio problema è creare uno script che "SENTE" che la tabella è
valorizzata e fa il suo dovere secondo una logica che imposterò io
all'interno.
In realta il mio problema è creare questo secondo script che SENTE che la
tabella è valorizzata.
Premetto che devo fare il tutto con WINDOWS quindi mi è impossibile
utilizzare il "Cron" e di utilizzare "operazioni pianificate proprio non mi
va".
Avete qualche idea???
Spero di essermi spiegato...
Ciao
Luca

 va".
Stai cercando rogne... :)
Fai un daemon: un ciclo infinito con uno sleep()
Ricordati che a quel punto il tuo non e` piu` uno script che muore con la
fine della pagina, perche` non muore, quindi devi stare attento a come
gestisci la memoria, a chiudere le risorse, ecc., altrimenti inizieranno i
memory leak.
Bye.

 va".
E cosa hanno di così fondamentalmente diverso un "cron" da 
un'"operazione pianificata"?
Se preferisci la linea di comando, usa il comando AT dal prompt dei 
comandi.
Se invece vuoi usare in ogni caso uno script php, magari come ti ha 
consigliato Alessandro, usando un ciclo infinito con sleep, il mio 
consiglio è di non lanciarlo da browser, ma da linea di comando, usando 
appunto la command line interface (CLI).
Qualora decidessi di optare per altre scelte, valuta anche l'utilità 
della funzione flock().
--
rob4you

>>
flock() will not work on NFS and many other networked file systems. Check  
your operating system documentation for more details.
On some operating systems flock() is implemented at the process level.  
When using a multithreaded server API like ISAPI you may not be able to  
rely on flock() to protect files against other PHP scripts running in  
parallel threads of the same server instance!
flock() is not supported on antiquated filesystems like FAT and its  
derivates and will therefore always return FALSE under this environments  
(this is especially true for Windows 98 users).
<<<<
-- 
Using Opera's revolutionary e-mail client: 
http://www.opera.com/mail/

 
appoggiarsi a mysql con le transazioni? potrebbe funzionare.. ma vedo
difficile fare il debug..
-- 
www.iuz-lab.info

 difficile fare il debug..
Mah, io non ho capito in realtà a cosa servisse flock in quel caso.
Cercherei di creare un piccolo scheduler.
Memorizzi una riga sul db che contiene i parametri relativi ad un  
esecuzione ed un flag di completamento.
Lo scheduler ad ogni avvio:
- a controlla se esiste un file pid ( se esiste esce con die() ).
- se il file non esiste ne crea uno.
- legge la riga sul db e avvia l'esecuzione
- completata l'esecuzione flagga la riga come completata.
- cancella il file pid.
Tac


> Mah, io non ho capito in realtà a cosa servisse flock in quel caso.
flock la immaginavo come un'alternativa, non come la sostituzione 
migliore.
Ovviamente andrebbe analizzato un opportuno modo di operare, qualora si 
scegliesse questa soluzione (e categoricamente non si volesse scegliere 
un'operazione di cron, come mi pareva di capire da Luca).
Non ci ho pensato neanche per più di dieci secondi, ma ad esempio si 
potrebbe:
- bloccare il file
- fare tutte le operazioni necessarie (tra cui modifica, spostamento, 
copia, spostamento della copia, eliminazione dell'originale o della 
copia, boh, dipende da ciò che serve)
- sbloccare il file
In questo modo, se un altro utente che cerca di accedere allo stesso 
file, deve attendere che siano completate le operazioni di cui sopra.
Ma ovviamente tutto dipende dallo specifico caso.
Io per primo penso che ricorrerei sin da subito a una soluzione 
passando per il db. Poi vabbè, dipende come sempre :-) , da mille altri 
parametri.
--
rob4you



Il problema è che il post a cui rispondiamo non è chiaro. Al di là di  
questo, il file locking di php ha una serie di falle che lo rendono non  
portabile. Qualsiasi tipo di locking effettuato da php è nei riguardi  
delle operazioni effettuate da altri processi di PHP stesso, non delle  
altre applicazioni. Andrebbe quindi (se non ho capito male il manuale)  
implementata una funzionalità di locking nativa e specifica alla  
piattaforma con la quale si interfaccia.
Nella maggioranza dei casi, cmq, non vedo male anche il non lockare i file  
su cui verranno effettuate le operazioni, può darsi che la probabilità di  
malfunzionamenti sia irrilevanti rispetto allo sbattimento di creare un  
locking (basta pensare che sistemi come ebay addirittura non usano le  
transazioni sul db...).
Per quel che riguarda la probabilità di effettuare due processi schedulati  
che si sovrappongano per qualche motivo, basta creare un file e verificare  
se c'è, non serve il locking.


 Tac
eeeeeh.. no.. direi cproprio che non funzionerebbe..
-- 
www.iuz-lab.info

 transazioni sul db...).
Veramente? Non ero a conoscenza di questo! Sapresti indicarmi qualche 
link aggiuntivo?
--
rob4you



http://martinfowler.com/bliki/Transactionless.html




Dici ? In genere i file pid servono anche a questo.
<?php //proof of concept
$pid = '/var/run/silly.pid';
if ( file_exists( $pid ) ) die ( 'pid alread present at:'.$pid );
$r = file_put_contents( $pid )
if ( !$r ) die( 'error in writing pid:'.$pid );
//do whatever you want
unlink ( $pid );
?>
Se un processo schedulato ritarda gli altri non partono. Se un processo  
termina in modo imprevisto gli altri non partono, il che mi pare anche  
corretto.


 Tac
e' un'po' piu' complesso dal mio punto di vista..
http://en.wikipedia.org/wiki/Mutex
cosa succede se due pagine PHP caricate contemporaneamente controllano il
pid file trovandolo mancante e poi tentano di crearlo insieme?
io consigliavo il db anche per la sua atomicita'..
un errore come quello e' infido.. puo' non dare problemi se si e' molto
fortunati e puo' darne di continuo in caso contrario.. e da quello che ho
capito si possono anche perdere dati per via della natura dell'applicazione
per cui serve..
-- 
www.iuz-lab.info



A livello teorico posso essere daccordo con te, ma a livello pratico direi  
che è assolutamente improbabile dato che i job partirebbero ogni  
(facciamo) 5 minuti e il problema non è tanto di avviarne due assieme,  
quanto di avviarne uno mentre l'altro stà ancora eseguendo (per qualche  
ritardo suo).
Il db resta comunque una buona scelta.
