javascript & php per monitorare download.
- SuperStep
- Entusiasta Emergente

- Messaggi: 2037
- Iscrizione: lunedì 19 dicembre 2011, 16:26
- Desktop: Unity
- Distribuzione: Ubuntu 16.04 LTS x86_64
- Sesso: Maschile
- Località: Somma Vesuviana (NA)
javascript & php per monitorare download.
salve, ho provato a scrivere su big G le varie parole chiave, ma i risultati mi portano a scaricare browser con Javascript (LoL).
Quello che volevo fare era monitorare i download di file che venivano scelti sulla mia pagina web, lato browser.
In particolare mi interessava accedere ad informazioni quali:
- il progresso di download (dimensione scaricata, dimensione da scaricare).
- poter manipolare il path di destinazione lato client (magari utilizzando anche le finestre di sistema per il path del file).
- altre generiche.
ovviamente mi interessano per legarli ad alcuni servizi come salvare un feedback di download.
inoltre mi domandavo se fosse possibile monitorare anche da php il download di un file, del tipo:
- consentire / negare la possibilità di scaricare quel determinato file.
- altre generiche.
è possibile?
se si con che keyword posso accedere ai manuali?
Quello che volevo fare era monitorare i download di file che venivano scelti sulla mia pagina web, lato browser.
In particolare mi interessava accedere ad informazioni quali:
- il progresso di download (dimensione scaricata, dimensione da scaricare).
- poter manipolare il path di destinazione lato client (magari utilizzando anche le finestre di sistema per il path del file).
- altre generiche.
ovviamente mi interessano per legarli ad alcuni servizi come salvare un feedback di download.
inoltre mi domandavo se fosse possibile monitorare anche da php il download di un file, del tipo:
- consentire / negare la possibilità di scaricare quel determinato file.
- altre generiche.
è possibile?
se si con che keyword posso accedere ai manuali?
ubuntu 16.04 LTS 64-bit - Memoria: 31,3 Gib - Processore: Intel Core i7-5960X CPU @ 3.00 GHz × 16 - Grafica: AMD Radeon HD 7800 Series - Disco: SSD 256 GB x 4 (RAID 01)
Re: javascript & php per monitorare download.
Per poter controllare i download lato server devi proteggere tutti i file e permettere l'accesso solo tramite un tuo script downloader.
Una volta fatto questo puoi gestire chi può scaricare i file e tenere traccia di tutto.
Il download lato client invece è difficilmente controllabile, una volta iniziato il download di un file il controllo viene spostato al browser (giustamente) e a quel punto sono il browser e la usa interazione con l'utente a determinare il tutto.
Non sia mai che uno script possa decidere cosa, dove e quando scaricare e salvare sul pc senza l'esplicita autorizzazione dell'utente, sarebbe la fiera del malware.
Per avere un controllo come quello che chiedi servirebbe una applet java o una applicazione flash che va tramite socket a scaricare il file dal server e poi gestisce il salvataggio su disco.
Ma per fare questo devono essere applicazioni firmate e il browser gli deve concedere i permessi per farlo.
Inoltre in un ottica html5 applet e flash sono deprecati, giusto appunto applet e flash sono le due maggiori fonti di infezioni malware.
Una volta fatto questo puoi gestire chi può scaricare i file e tenere traccia di tutto.
Il download lato client invece è difficilmente controllabile, una volta iniziato il download di un file il controllo viene spostato al browser (giustamente) e a quel punto sono il browser e la usa interazione con l'utente a determinare il tutto.
Non sia mai che uno script possa decidere cosa, dove e quando scaricare e salvare sul pc senza l'esplicita autorizzazione dell'utente, sarebbe la fiera del malware.
Per avere un controllo come quello che chiedi servirebbe una applet java o una applicazione flash che va tramite socket a scaricare il file dal server e poi gestisce il salvataggio su disco.
Ma per fare questo devono essere applicazioni firmate e il browser gli deve concedere i permessi per farlo.
Inoltre in un ottica html5 applet e flash sono deprecati, giusto appunto applet e flash sono le due maggiori fonti di infezioni malware.
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
- SuperStep
- Entusiasta Emergente

- Messaggi: 2037
- Iscrizione: lunedì 19 dicembre 2011, 16:26
- Desktop: Unity
- Distribuzione: Ubuntu 16.04 LTS x86_64
- Sesso: Maschile
- Località: Somma Vesuviana (NA)
Re: javascript & php per monitorare download.
mhhh, molto interessante.
per quanto riguarda lo script che permette l'accesso al downloader, potresti approfondire?
invece per quanto riguarda il controllo passato al browser, da li in poi mi confermi che non è nemmeno più possibile monitorare lo stato del download?
cioè non posso sapere a che percentuale di download sta?
Grazie mille.
per quanto riguarda lo script che permette l'accesso al downloader, potresti approfondire?
invece per quanto riguarda il controllo passato al browser, da li in poi mi confermi che non è nemmeno più possibile monitorare lo stato del download?
cioè non posso sapere a che percentuale di download sta?
Grazie mille.
ubuntu 16.04 LTS 64-bit - Memoria: 31,3 Gib - Processore: Intel Core i7-5960X CPU @ 3.00 GHz × 16 - Grafica: AMD Radeon HD 7800 Series - Disco: SSD 256 GB x 4 (RAID 01)
Re: javascript & php per monitorare download.
Si tratterebbe di uno script che va fisicamente a leggere il file da uno spazio del filesystem non raggiungibile tramite webserver e lo butta in output.SuperStep [url=http://forum.ubuntu-it.org/viewtopic.php?p=4555453#p4555453][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto: per quanto riguarda lo script che permette l'accesso al downloader, potresti approfondire?
Il piu' stupido che mi viene in mente sarebbe:
Codice: Seleziona tutto
<?php
function fileNotFound(){
header('HTTP/1.0 404 Not Found');
echo "<h1>404 Not Found</h1>The page that you have requested could not be found.";
exit;
}
if( !isset($_GET['file']) ){
fileNotFound();
}
$file = basename($_GET['file']);
$folder = '/private/file_folder/';
if( !file_exists( $folder . $file ) ){
fileNotFound();
}
echo file_get_contents( $folder . $file );
In linea di massima direi di no, mi è venuta in mente un'idea se si concretizza ti aggiorno.SuperStep [url=http://forum.ubuntu-it.org/viewtopic.php?p=4555453#p4555453][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto: invece per quanto riguarda il controllo passato al browser, da li in poi mi confermi che non è nemmeno più possibile monitorare lo stato del download?
cioè non posso sapere a che percentuale di download sta?
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
Re: javascript & php per monitorare download.
Ok come pensavo in realtà qualcosa si riesce a fare ma con grosse limitazioni.
La versione 2 di XmlHttpRequest (supportata da gran parte dei browser odierni, forse anche IE10) mette a disposizione un evento "progress" per il download e l'upload delle richieste AJAX.
Ipotizzando che la variabile xhr contenga un oggetto XmlHttpRequest è possibile registrare un handler per i due eventi in questa maniera:
L'evento passato a questi handler mette a disposizione due cambi che sono loaded (numero di byte scaricati) e total (numero di byte complessivi da scaricare).
Con questo però hai fatto solo il 50% del lavoro perché devi anche scrivere il file nel filesystem.
Le Filesystem API di html5 sono supportate solo da webkit (Chrome/Safari/Opera) e in maniera sperimentale anche perché le API stesse non sono stabili.
Affidarsi a queste non è il massimo.
L'alternativa sarebbe memorizzare il file in ram e poi dire al browser di "scaricarlo" quando lo scaricamento reale è terminato.
Questo approccio pone il problema della dimensione del file.
Per file di piccole dimensioni si può "fregare" il browser impostando nell'attributo href di un link il base64 del file scaricato e simulando il click.
Se riesco ti metto giù un POC.
La versione 2 di XmlHttpRequest (supportata da gran parte dei browser odierni, forse anche IE10) mette a disposizione un evento "progress" per il download e l'upload delle richieste AJAX.
Ipotizzando che la variabile xhr contenga un oggetto XmlHttpRequest è possibile registrare un handler per i due eventi in questa maniera:
Codice: Seleziona tutto
//Download
xhr.addEventListener( 'progress', handlerFunction, false);
//Upload
xhr.upload.addEventListener( 'progress', handlerFunction, false);Con questo però hai fatto solo il 50% del lavoro perché devi anche scrivere il file nel filesystem.
Le Filesystem API di html5 sono supportate solo da webkit (Chrome/Safari/Opera) e in maniera sperimentale anche perché le API stesse non sono stabili.
Affidarsi a queste non è il massimo.
L'alternativa sarebbe memorizzare il file in ram e poi dire al browser di "scaricarlo" quando lo scaricamento reale è terminato.
Questo approccio pone il problema della dimensione del file.
Per file di piccole dimensioni si può "fregare" il browser impostando nell'attributo href di un link il base64 del file scaricato e simulando il click.
Se riesco ti metto giù un POC.
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
Re: javascript & php per monitorare download.
Ecco il POC:
Richiede un file test.zip nella stessa cartella. Usa un file piccolo ~1MB.
Vedrai che funziona ma anche solo con 1MB senza poter usare il filesystem come buffer sarà lento.
Codice: Seleziona tutto
<!DOCTYPE html>
<html>
<head>
<title>Ajax downloader POC</title>
<meta charset="utf-8">
<link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css">
<link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap-theme.min.css">
<script type="text/javascript" src="//code.jquery.com/jquery-2.1.0.min.js"></script>
<script type="text/javascript" src="//netdna.bootstrapcdn.com/bootstrap/3.1.1/js/bootstrap.min.js"></script>
</head>
<body>
<div class="container">
<div class="panel panel-primary">
<div class="panel-heading"><h2>POC - Ajax downloader</h2></div>
<div class="panel-body">
<a href="#" download="test.zip" class="btn btn-success" id="linkStart">Start</a>
<div class="well">
<label>Progress:</label>
<div class="progress progress-striped">
<div id="progressBar" class="progress-bar progress-bar-info" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100">
<span class="sr-only">0% Complete</span>
</div>
</div>
</div>
</div>
</div>
</div>
<script type="text/javascript">
(function addXhrProgressEvent($) {
var originalXhr = $.ajaxSettings.xhr;
$.ajaxSetup({
xhr: function() {
var req = originalXhr(), that = this;
if (req) {
if (typeof req.addEventListener == "function" && that.progress !== undefined) {
req.addEventListener("progress", function(evt) {
that.progress(evt);
}, false);
}
if (typeof req.upload == "object" && that.progressUpload !== undefined) {
req.upload.addEventListener("progress", function(evt) {
that.progressUpload(evt);
}, false);
}
}
return req;
}
});
})(jQuery);
function base64Encode(str) {
var CHARS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
var out = "", i = 0, len = str.length, c1, c2, c3;
while (i < len) {
c1 = str.charCodeAt(i++) & 0xff;
if (i == len) {
out += CHARS.charAt(c1 >> 2);
out += CHARS.charAt((c1 & 0x3) << 4);
out += "==";
break;
}
c2 = str.charCodeAt(i++);
if (i == len) {
out += CHARS.charAt(c1 >> 2);
out += CHARS.charAt(((c1 & 0x3)<< 4) | ((c2 & 0xF0) >> 4));
out += CHARS.charAt((c2 & 0xF) << 2);
out += "=";
break;
}
c3 = str.charCodeAt(i++);
out += CHARS.charAt(c1 >> 2);
out += CHARS.charAt(((c1 & 0x3) << 4) | ((c2 & 0xF0) >> 4));
out += CHARS.charAt(((c2 & 0xF) << 2) | ((c3 & 0xC0) >> 6));
out += CHARS.charAt(c3 & 0x3F);
}
return out;
}
$('#linkStart').click(function(e){
var interval;
var $this = $(this);
var xhr = $.ajax({
url: 'test.zip',
//~ async: false,
progress: function(e){
var v = parseInt(e.loaded/e.total*100);
console.log(v);
$('#progressBar').parent().addClass('active');
$('#progressBar').attr('aria-valuenow',v)
.width(v+'%')
.find('span').text(v+'%');
},
success: function(fileData){
$('#progressBar').parent().removeClass('active');
var b64 = base64Encode(fileData);
window.open('data:application/zip;base64,'+b64,'test.zip');
},
});
});
</script>
</body>
</html>
Vedrai che funziona ma anche solo con 1MB senza poter usare il filesystem come buffer sarà lento.
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
- SuperStep
- Entusiasta Emergente

- Messaggi: 2037
- Iscrizione: lunedì 19 dicembre 2011, 16:26
- Desktop: Unity
- Distribuzione: Ubuntu 16.04 LTS x86_64
- Sesso: Maschile
- Località: Somma Vesuviana (NA)
Re: javascript & php per monitorare download.
Zoff, sono appena tornato a casa, sei un grande. domani appena mi sveglio provo subito il tuo codice. Veramente, ti stimo.
ubuntu 16.04 LTS 64-bit - Memoria: 31,3 Gib - Processore: Intel Core i7-5960X CPU @ 3.00 GHz × 16 - Grafica: AMD Radeon HD 7800 Series - Disco: SSD 256 GB x 4 (RAID 01)
- SuperStep
- Entusiasta Emergente

- Messaggi: 2037
- Iscrizione: lunedì 19 dicembre 2011, 16:26
- Desktop: Unity
- Distribuzione: Ubuntu 16.04 LTS x86_64
- Sesso: Maschile
- Località: Somma Vesuviana (NA)
Re: javascript & php per monitorare download.
ho trovato un secondo modo per permettere di scaricare un file da php, modificando gli header, in questo modo:Zoff [url=http://forum.ubuntu-it.org/viewtopic.php?p=4555589#p4555589][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:Si tratterebbe di uno script che va fisicamente a leggere il file da uno spazio del filesystem non raggiungibile tramite webserver e lo butta in output.SuperStep [url=http://forum.ubuntu-it.org/viewtopic.php?p=4555453#p4555453][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto: per quanto riguarda lo script che permette l'accesso al downloader, potresti approfondire?
Il piu' stupido che mi viene in mente sarebbe:Codice: Seleziona tutto
<?php function fileNotFound(){ header('HTTP/1.0 404 Not Found'); echo "<h1>404 Not Found</h1>The page that you have requested could not be found."; exit; } if( !isset($_GET['file']) ){ fileNotFound(); } $file = basename($_GET['file']); $folder = '/private/file_folder/'; if( !file_exists( $folder . $file ) ){ fileNotFound(); } echo file_get_contents( $folder . $file );In linea di massima direi di no, mi è venuta in mente un'idea se si concretizza ti aggiorno.SuperStep [url=http://forum.ubuntu-it.org/viewtopic.php?p=4555453#p4555453][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto: invece per quanto riguarda il controllo passato al browser, da li in poi mi confermi che non è nemmeno più possibile monitorare lo stato del download?
cioè non posso sapere a che percentuale di download sta?
Codice: Seleziona tutto
$file = "/path/completo/del/file.txt";
header("Cache-Control: public");
header("Content-Description: File Transfer");
header("Content-Disposition: attachment; filename= " . $nomefile.$estensione);
header("Content-Transfer-Encoding: binary");
readfile($file);
poi sarà ora di passare al lato client =(
vabbè piano piano, appena ho finito provo il codice lato client che mi hai passato; grazie mille zoff.
ubuntu 16.04 LTS 64-bit - Memoria: 31,3 Gib - Processore: Intel Core i7-5960X CPU @ 3.00 GHz × 16 - Grafica: AMD Radeon HD 7800 Series - Disco: SSD 256 GB x 4 (RAID 01)
Chi c’è in linea
Visualizzano questa sezione: 0 utenti iscritti e 2 ospiti
