|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Oct 2000
Messaggi: 381
|
[PHP] ignore_user_abort() & register_shutdown_function() QUANDO USARLI?
Cosa fanno di preciso queste due funzioni?
Quando devono essere usate? E' possibile intercettate l'utente che chiude la finestra del browser? Ultima modifica di SimoneLucca : 19-02-2004 alle 08:55. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Simo, ti consiglio di usare il timeout come ti avevo scritto tempo fa... Anche le sessioni usano il timeout...
register_shutdown_function serve per far sì che una funzione php venga eseguita quando l'elaborazione della pagina è stata completata (anche dopo che il buffer di output viene inviato all'utente)... Con ignore_user_abort puoi settare se interrompere o meno l'esecuzione dello script in caso di disconnessione da parte del client (quando ad esempio il client chiude il browser oppure quando viene arrestato il caricamento)... http://it.php.net/manual/it/features...n-handling.php |
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: Oct 2000
Messaggi: 381
|
ma il problema è che voglio che ci stia loggato al massimo un utente alla vosta con lo stesso nome...
lo blocco al login e lo sblocco al logout. se l'utente non fa il logout e chiude il browser.... deve aspettare che scada la sessione. E' ragionevole questo? Che tempi metteresti di scadenza? Conta che se deve scarica' un file grosso ed è con una connesione lenta, alla fine deve riconnettersi tutte le volte... Quote:
mettere ignore_user_abort(0) cosa implica? |
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Non implica niente perchè la sessione TCP è già stata chiusa... In pratica non te ne accorgi se lo chiudi dopo che è finito il download della pagina...
Per i downlaod puoi gestirteli a mano (questo può evitare anche che ti linkino i downlaod da fuori)...e così alla fine setti come data e ora dell'ultima operazione, ogni tot minuti, durante il downlaod...così eviti che scada al sessione... Per gestirteli a mano intendo: settare il mime-type e dare in output il file richiesto leggendolo da disco a pacchetti (che so, di 10Kb)... Puoi usare fopen e fread come nel C.... |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Oct 2000
Messaggi: 381
|
download a mano...
ma non potevo proteggere i file da scaricare in una cartella protetta? sii più preciso in merito al download "a mano"... |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Cos'è un download ?
Quando richiedi il download l'output del server, oltre agli header standard, aggiunge il mime-type del file che si vuole scaricareè fatto così (ad esempio per uno zip): Content-Type: application/zip E dopo i dati binari... Una cosa del genere dovrebbe andere bene: Codice PHP:
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Oct 2000
Messaggi: 381
|
ok, grazie!
|
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Ho provato e c'è ancora qualcosa da rielaborare... Comunque la strada è quella...
|
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Ho risolto qualcosa, metti il file di prova in una directory e chiamalo index.php:
Codice PHP:
Apri il link in questo modo: http://127.0.0.1/dire/?pippo.zip... In questo modo IE riceve il file con l'estensione giusta, ma il nome è sbagliato (prende quello della dir)... Comunque credo che si possa risolvere il problema con mod_rewrite di Apache (devo ancora guardarmelo)... |
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Ho risolto quasi andando a caso...
Allora le mdoifiche da fare in httpd.conf sono queste: Caricare mod_proxy e mod_rewrite (magari ho caricato anche qualche modulo in più, non ho avuto tempo di provare)... Codice:
LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_connect_module modules/mod_proxy_connect.so LoadModule proxy_http_module modules/mod_proxy_http.so #LoadModule proxy_ftp_module modules/mod_proxy_ftp.so LoadModule rewrite_module modules/mod_rewrite.so Codice:
<IfModule mod_proxy.c>
ProxyRequests On
<Proxy *>
Order deny,allow
Deny from all
Allow from 127.0.0.1
</Proxy>
#
# Enable/disable the handling of HTTP/1.1 "Via:" headers.
# ("Full" adds the server version; "Block" removes all outgoing Via: headers)
# Set to one of: Off | On | Full | Block
#
#ProxyVia On
#
# To enable the cache as well, edit and uncomment the following lines:
# (no cacheing without CacheRoot)
#
#CacheRoot "H:/Programmi/Apache Group/Apache2/proxy"
#CacheSize 5
#CacheGcInterval 4
#CacheMaxExpire 24
#CacheLastModifiedFactor 0.1
#CacheDefaultExpire 1
#NoCache a-domain.com another-domain.edu joes.garage-sale.com
</IfModule>
Codice:
RewriteEngine on
RewriteRule ^/pippo/(.*) /download.php?file=$1 [P]
download.php è di questo tipo: Codice PHP:
In pratica la richiesta passa tramite il proxy... Ho provato con IE e funziona... La devo verificare anche con altri browser... L'unico problema è che se il download supera i 30 secondi si ferma (basta allungare il timout dello script, dopo guardo)... |
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Oct 2000
Messaggi: 381
|
ma io non posso modificare http.conf del server che mi ospita....
P.S. (mandami una foto della "bimba"... la voglio vedere.... |
|
|
|
|
|
#12 |
|
Senior Member
Iscritto dal: Oct 2000
Messaggi: 381
|
ma non posso mettere i file sensibili in dir protette del server?
|
|
|
|
|
|
#13 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Ah cacchio, non ci avevo epnsato che non potevi modificarlo... Anche se credo che (a parte il md_proxy) tu possa fare tutto con un file .htaccess da mettere nello spazio web...
Comunque ormai termino dicendo: scrivendo http://server/pippo/nomefile.zip si crede di scaricare un file direttamente dal server ed invece siamo noi farlo scaricare tramite PHP Codice PHP:
Insomma, la soluzione è vicina...e probabilmente è in mod_rewrite (che credo sia solitamente attivo)... Ora bisogna scoprire come fare scaricare il file con il nome giusto... Ultima modifica di cionci : 19-02-2004 alle 13:43. |
|
|
|
|
|
#14 |
|
Senior Member
Iscritto dal: Oct 2000
Messaggi: 381
|
sto mettendo un sito in rete sotto serverplan.
offrono dei servizi tra cui: http://www.serverplan.com/tutorial/ 1) protezione con pass di cartella (.HTACCESS) 2) abilitare protezione hotlink.... ho visto i tutorials, che ne dici? il mio sito starà la. |
|
|
|
|
|
#15 | ||
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
Quote:
Quindi secondo me devi cercare di trovare una soluzione simile a quella sopra... Ricordati che con quella sopra puoi impedire che scada la sessione nel DB... Con questi modi non puoi impedirlo... |
||
|
|
|
|
|
#16 |
|
Senior Member
Iscritto dal: Oct 2000
Messaggi: 381
|
come mai dici con .HTACCESS non posso proteggere una cartella?
|
|
|
|
|
|
#17 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
La puoi proteggere, ma username e password devi darli (in qualche modo) al client... E chi scarica di fatto può linkare il file in questo modo:
http://username:password@tuosito/nomedownload.zip |
|
|
|
|
|
#18 |
|
Senior Member
Iscritto dal: Oct 2000
Messaggi: 381
|
non posso darli io da script? in questo modo l'utente che si è precedentemente autenticato non deve fare nulla... e chi non si è autenticato, non può accedere...
|
|
|
|
|
|
#19 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Sì...le puoi dare, ma transitano comunque da server a client e poi di nuovo da client a server...
Codice:
<?php
ob_implicit_flush(); //invia l'output immediatamente al browser
$fp = fopen ("I:/Downloads/".$_GET["file"], "rb");
if(!$fp)
exit("errore nell'apertura del file");
header("Expires: Mon, 26 Jul 2001 05:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
header("Cache-control: private");
header("Connection: close");
header("Content-Type: application/zip");
while(!feof($fp) && !connection_aborted()) {
set_time_limit(20);
sleep(1); //ho messo una pausa per simulare un canale di trasmissione
echo fread($fp, 10240); //legge 10Kb alla volta e li da in output
}
?>
RewriteEngine on RewriteRule ^/download/(.*) /download.php?file=$1 [PT] Digitando http://tuoserver/download/pippo.zip sarà come chiamare http://tuoserver/download.php?file=pippo.zip e scarichi il file controllandolo tramite download.php |
|
|
|
|
|
#20 |
|
Senior Member
Iscritto dal: Oct 2000
Messaggi: 381
|
torniamo alla base:
io ho, per ogni utente che si logga, una cartella a cui solo lui (più l'amministratore) può accedere per scaricare i files. voglio fare in modo che i permessi per scaricare i files da quella cartella siano dati dallo script (nomeutente.php). voglio anche evitare che lo script che contiene i dati della connessione con i database sia leggibile (da uno script malizioso che mi legge il contenuto e mi stampa). Come posso implementare questo marchingegno? voglio, chiaramente, evitare che uno da fuori faccia: www.miosito.com/cartellautente/file.zip e che lo scarichi. è fattibile? |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 19:09.



















