Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 18

Discussione: Stream php

  1. #1
    Utente di HTML.it L'avatar di Dark867
    Registrato dal
    Mar 2010
    Messaggi
    435

    Stream php

    Ciao, vorrei sapere se è possibile, attraverso qualche libreria php, attuare il seguente scenario:

    1)Un client invia un file al server php, sotto forma di stream binario.
    2)Il server permette a un altro client di scaricare detto file.

    Insomma l'obiettivo finale sarebbe quello di fare un trasferimento file client-client su http mediante l'ausilio di un server php che si comporta come "smistatore", quello che mi interessa però è che mentre il primo client uploada un frammento il secondo lo prenda subito, senza aspettare che l'intero file sia presente sul server (a dire il vero a fine operazione il file non ci dovrebbe proprio stare).

  2. #2
    fondamentalmente c'è un problema di fondo, ovvero che se chi invia un file lo fa tramite un normale browser non c'è nessuno stream agli occhi di php, ovvero il file che viene caricato è allegato alla richiesta HTTP e php si trova eventualmente il file interamente pronto tramite $_FILES (quindi il file c'è o non c'è, php viene messo in esecuzione quando il file è stato oramai interamente trasferito sul server, per semplificare). L'unico modo sarebbe avere un client nativo che si collega ad uno script php che si mette in ascolto tramite socket su una porta ed eventualmente fa relay all'altro client nativo (il ricevente) che si collega nello stesso modo e riceve il file via socket.

    altrimenti la cosa più semplice è far compilare un campo con la mail del ricevente e quando il server ha finito di ricevere il file, invia una notifica automatica via email al ricevente dicendo che il file inviato da xyz è disponibile all'indirizzo tal dei tali

  3. #3
    Utente di HTML.it L'avatar di Dark867
    Registrato dal
    Mar 2010
    Messaggi
    435
    Capito...almeno esiste un modo per cancellare un file presente sul server in automatico non appena questo viene scaricato?

  4. #4
    Originariamente inviato da Dark867
    Capito...almeno esiste un modo per cancellare un file presente sul server in automatico non appena questo viene scaricato?
    beh per scaricare il file invece che dare l'indirizzo diretto al file puoi fare uno script php che fa da proxy: legge il contenuto del file e fa un "echo" e prima del termine cancella il file

  5. #5
    Utente di HTML.it L'avatar di Dark867
    Registrato dal
    Mar 2010
    Messaggi
    435
    E' la prima volta che sento questo metodo...cioè apro il file lato server e faccio echo dei bytes man mano che li leggo? Ma il browser riesce così a capire che c'è un download in atto?

  6. #6
    ah dimenticavo, teoricamente con i websocket potresti ottenere qualcosa di simile a quello che vorresti fare, ma questo vorrebbe dire avere a disposizione un client con websockets abilitati sia da una parte che dall'altra, dunque avresti (per il momento) un raggio d'azione assai limitato (a meno che una cosa del genere non ti serve in "pubblico" ma per un ristretto numero di utenti a cui puoi imporre determinati requisiti)

  7. #7
    Originariamente inviato da Dark867
    E' la prima volta che sento questo metodo...cioè apro il file lato server e faccio echo dei bytes man mano che li leggo? Ma il browser riesce così a capire che c'è un download in atto?
    inviando i dovuti headers, sì
    quando un browser scarica un file direttamente dal webserver non è che Apache faccia qualcosa di molto diverso, solo che facendole tramite php hai controllo diretto e puoi dunque cancellare il file al termine del trasferimento

  8. #8
    Utente di HTML.it L'avatar di Dark867
    Registrato dal
    Mar 2010
    Messaggi
    435
    Avevo pensato ai websocket ma non sono riuscito a trovare molte fonti/guide...almeno il lato client sembra facilissimo da implementare ma il lato server non saprei proprio come impostarlo!
    Guarda alla fine è solo un programma che sto facendo a tempo perso, inoltre ormai quasi tutti i moderni browser hanno il suporto alle websocket quindi se mi fornisci una documentazione x l'implementazione in php potrei anke provare...

    X quanto riguarda l'altro metodo ho realizzato questo script x il download:
    codice:
    <?php
    // definisco una variabile con il percorso alla cartella
    // in cui sono archiviati i file
    $dir = "files/";
    
    // Recupero il nome del file dalla querystring
    // e lo accodo al percorso della cartella del download
    $file = $dir . $_GET['filename'];
    
    // verifico che il file esista
    if(!file)
    {
      // se non esiste chiudo e stampo un errore
      die("Il file non esiste!");
    }else{
      // Se il file esiste...
      // Imposto gli header della pagina per forzare il download del file
      header("Cache-Control: public");
      header("Content-Description: File Transfer");
      header("Content-Disposition: attachment; filename= " . $file);
      header("Content-Transfer-Encoding: binary");
      // Leggo il contenuto del file
      readfile($file);
    }
    ?>
    Se dopo l'ultima riga metto un delete file secondo te può funzionare? O corro il rischio ke l'altro client si ritrovi un file troncato?

  9. #9
    puoi mettere tranquillamente il delete, perchè quando readfile ha finito l'esecuzione ha già trasferito tutto l'output al webserver, che poi è lui a vedersela con il client, tu puoi già cancellare tranquillamente il file.

    In ogni caso stai attento con file particolarmente grossi, potresti avere problemi di uso della memoria che potrebbero portare all'interruzione dello script. Ti conviene fare alcune prove per il download.

  10. #10
    Utente di HTML.it L'avatar di Dark867
    Registrato dal
    Mar 2010
    Messaggi
    435
    Grazie dell'aiuto ora il mio programma funziona!
    Ora cercherò info sulle websocket x valutare un altro approccio...mi hai incuriosito!

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.