Newsgroup: it.comp.www.php
Titolo: Php+javascript

Vorrei proprio capire una cosa:
Ho questo script:
$a=1;
if($a==1){
echo "<script>location.replace('
http://www.google.it
');</script>";
sleep(10);
}
Per quale motivo il redirect a 
google.it
 lo fa solo dopo 10 secondi???
Ovvero se lo sleep si trova dopo il redirect perche lo fa prima???
Questo è solo uno script di esempio...naturalmente a me serve per una cosa
un po più complessa ma che ha sempre la funzioncina sleep() di mezzo...
Come posso fare???
Ciao grazie

 Per quale motivo il redirect a 
google.it
 lo fa solo dopo 10 secondi???
Aggiungi dopo l'echo, un flush() (eventualmente anche un ob_flush()).
Con tutta probabilità il server invia al browser la risposta solo 
quando lo script termina l'esecuzione, perché bufferizza l'output.
--
rob4you

 ha scritto:


 }
Gli sleep non servono.
Bye.

 Bye.
ciaociao

> SCELGO PHP!!!
Come dice la massima: "se puoi scegliere di fare la stessa cosa con php 
o con js, scegli PHP". Ci sono tante ragioni per questa scelta.
In ogni caso ti ho detto il motivo per cui l'operazione ti veniva 
eseguita 10 secondi dopo.
--
rob4you

Scusatemi...torno sui miei passi
E se io invece volessi fare un redirect mentre sotto ho bisogno comunque che
alcune istruzioni vengano eseguite!
Ad esempio...specifico che il tutte queste azioni sono presenti in un unico
file!
- Ho una pagina in cui seleziono un file e la sua destinazione
- Invio il form
- Reindirizzo la pagina ad un menu principale
        header("Location: 
http://localhost/test/menu.php
");
- copio il file nella destinazione indicata nel form
        exec (cp ecc...)
La mia necessita potrebbe risultare ambigua ma ne ho bisogno poiche
trasferisco GRANDI moli di file e non posso aspettare la fine del processo
per motivi di tempo!!
Qual'č la soluzione secondo voi???
Ciao
grazie

 alcune istruzioni vengano eseguite!
Non puoi.
L'operazione di upload viene eseguita tra browser e server web. javascript
e php non possono fare niente nel frattempo.
Bye.

 Il Tue, 27 Feb 2007 17:38:01 +0100, Luca Temperini ha scritto:


 Devo necessariamente fare un gestore di code per questo???
Per favore quota meglio.
Non puoi fare nemmeno un gestore di code.
In javascript non puoi accedere al contenuto dei file del PC dell'utente,
nemmeno in lettura. Infatti per fare "upload in ajax" si usano tecniche
strane tipo mettere un pezzo di form in un iframe e simili.
Bye.

 Il Tue, 27 Feb 2007 17:57:35 +0100, Luca Temperini ha scritto:


 strane tipo mettere un pezzo di form in un iframe e simili.
Non posso fare un gestore di code per motivi di tempo...
Forse non mi sono spiegato bene cmq il flusso è questo:
Sono in una pagina php
Seleziono dei file e una destinazione
INVIO il form con act=1 (quindi esegue il codice PHP nella stessa pagina
php)
ORA(quello che vorrei fare è):
Effettuare un redirect della pagina in modo che sul browser visualizza un
altra pagina mentre in realtà continua ad eseguire la pagina precedente.
(capisco che è difficile da intendere, è un po un'assurdita pero è cosi...)
Mi sono spiegato??
Grazie dell'attenzione
Luca

 altra pagina mentre in realtà continua ad eseguire la pagina precedente.
Non penso si possa fare.  Ma è così tanta l'attesa che termini 
l'esecuzione della pagina originale?
--
rob4you

 ha scritto:



Facciamo una cosa, spiega più in dettaglio cosa hai bisogno di fare. 
Così valutiamo le varie possibilità.
--
rob4you


Si tratta di un piccolo servizio che sto tirando su all'interno dell amia
rete lan.
C'è un pagina php che fa uno scandir di una directory e da la possibilita di
selezionare dei file che, inviando il form, vengono trasmessi via FTP su
un'altra macchina(il form vine inviato sulla stessa pagina ma con act=1).
A questo punto, dopo che i file sono stati inviati la machina che li ha
ricevuti li processa per conto suo e il mio file php si preoccupa (con un
ciclo while) di controllare se sono stati processati e quando li ha fatti li
prende e li rimette nella macchina di origine.
Quindi il problema è il ciclo while che non esce fin quando non ritrova
tutti i file che io ho inviato...
Per ovviare al problema che l'operatore deve rimanere in attesa sul browser
fin quando non finisce il processo(che potrebbe durare anche 1 minuto).
Per questo volevo mettere un redirect che appena clicco su INVIO invia i
file con il form (act=1) e immediatamente fa un redirect su un'altra pagina.
Tutto qua...
Mi potete aiutare??
Ciao grazie  

 Mi potete aiutare??
Ora ho capito molto meglio il tuo problema! :-)
Non vorrei dire fesserie, ma temo che quello che vuoi fare tu, 
esattamente, non si può fare.
Però forse si potrebbero pensare a delle alternative, te le butto così 
ora.
- potresti lavorare di ajax per fare in modo, attraverso richieste 
asincrone, di vedere a che punto è l'operazione (in questo modo 
l'operatore, seppur costretto a "restare" in una pagina, non la vede 
del tutto bianca in attesa del completamento del processo).
oppure (e magari insieme alla prima, ma in modo leggermente diverso):
- quando l'utente seleziona la lista dei file da far inviare dal server 
all'altra macchina remota, questa lista viene inserita in un db. E 
stop.
- a questo punto entra in gioco un script php, lanciato magari via cron 
(ogni tot tempo), che controlla nella tabella del db se ci sono files 
da copiare dal server sulla macchina remota:
Se ci sono, li copia e controlla, come volevi tu, che siano stati 
processati, e in caso affermativo li rimette nella macchina di origine. 
Infine viene svuotata la tabella nel db.
Se invece non c'è nessun file nella tabella del db, allora non accade 
nulla.
Il cron potresti lanciarlo a intevalli di tempo scelti secondo le tue 
esigenze, tipo ogni cinque/dieci minuti, ogni ora, o vedi tu. Non 
sarebbero sprecate risorse perché l'effettivo trasferimento dei file 
avverrebbe soltanto qualora ci fosse almeno una riga nella tabella del 
db.
In questo modo l'operatore non è costretto ad attendere. Se volesse 
sincerarsi a che punto è il trasferimento dei file, potrebbe cliccare 
su un link che va a leggere le righe della tabella nel db, così vede 
quanti file restano ancora da trasferire. Oppure la stessa cosa 
potrebbe essere fatta attraverso ajax, con delle richieste asincrone 
che ogni tot tempo vanno a interrogare la tabella nel db per vedere 
quanti file restano.
Se poi prevedi che più operatori potrebbero fare le stesse operazioni, 
basterebbe aggiungere alla tabella dei files, una colonna che specifica 
l'operatore, e eventualmente anche un timestamp. Ma appunto questi sono 
tutti perfezionamenti che potrebbero rivelarsi utili o meno a seconda 
delle esigenze.
Spero di esserti stato di aiuto. :-)
--
rob4you
www.outofmind.eu

 Spero di esserti stato di aiuto. :-)
Molto...grazie
Grazie ancora dell'attenzione
Luca

 fido molto, senza contare che non c'è il Cron.
Non cambia molto in questo caso.
Su Windows il Cron si chiama "Operazioni pianificate" (raggiungibile da 
Start->Tutti i Programmi->Accessori->Utilità di sistema).
Per il resto è tutto uguale al 99%.
Beh, certo Windows XP non è proprio l'ambiente ideale per mettere un 
server "in produzione" (se ti servono soluzioni sempre Windows, sarebbe 
meglio forse orientarsi verso un Windows 2000 server, o Windows 2003 
server).
Ma considerando il fatto che ti serve all'interno della LAN, non ci 
sono poi grosse controindicazioni anche con XP.
Basta configurare con attenzione WebServer/PHP/Database/FTPServer (del 
resto andrebbe sempre configurato con ATTENZIONE l'ambiente in cui far 
lavorare le proprie applicazioni). ;-)
--
rob4you

 Start->Tutti i Programmi->Accessori->Utilità di sistema).
Ah, dimenticavo, se per caso proprio non ti piacesse il modo in cui 
lavora "operazioni pianificate", trovi nel web tante utility anche free 
che emulano il caro Cron di Linux.
--
rob4you

 SCELGO PHP!!!
Vado in parte OT, ma vorrei precisare che il browser _dovrebbe_ eseguire 
il redirect e non il codice presente sotto il rediretc; comunque per 
sicurezza si usa mettere un exit dopo il redirect. Per completare 
l'informazione, NS 4.7 (o 4.5) terminava il codice della pagina prima di 
  procedere al redirect.
	Francesco



Vedi anche il comando AT di windows stesso (non credo che passando da w2k a
xp lo abbiano eliminato).
'bye