Pagina 1 di 5 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 44
  1. #1

    Fare l'upload di un pdf con una password ed il download con un'altra

    Devo creare uno script che permetta a me di fare l'upload di un pdf e ad un altro utente di scaricare il file a mezzo di una password. Mi è stata bocciata l'idea di inserire il contenuto del file pdf nel database per motivi di spazio (il file pesa 50MB) però:

    1) Non credo che spostare il pdf sul sito e stop sia sufficientemente sicuro
    2) Non so come spostare il pdf sul sito inserendo solo l'url nel database

    Ho già quasi terminato un piccolo cms che mi permette di gestire i ruoli di diversi utenti nel sito ma non riesco a capire come posso affrontare in modo sicuro questo problema. Posso anche decidere di zippare con una password il pdf o di dare una password al documento ma resterebbe sempre e comunque il punto 2. Mi piacerebbe sapere se qualcuno in passato ha già affrontato questo problema e quale soluzione/script ha deciso di impiegare.





    Grazie
    Più pratica in futuro...

  2. #2
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,131
    Quando fai upload inserisci nel database il per corso nomesito/nomecartella/nomefile.xxx (il file lo recuperi dal input file del form) vedi se https://www.google.it/search?q=jquer...script+save+db
    Consiglio verifica che 50MB siano supportati (vedi upload grandi dimensioni) rischi che scatti il timeout
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  3. #3
    Grazie mille Cavicchiandrea. Ho letto alcuni degli esempi ma sono scritti tutti in php non procedurale così faccio un po' fatica a comprenderlo. Per ora ho letto 1 solo libro di php così sono ancora molto impedito ma con qualche dritta forse posso riuscire a fare questo script.

    Ho trovato un esempio che credo sia perfetto per il mio caso ma ha un problema di fondo: salva il file nel database. Pensavo di correggere questo script ma non so come scrivere in php "copia il file in DOWNLOADDIRECTORY e copia un url nel database".

    Il punto dove intervenire è certamente questo:

    Codice PHP:
    <?php
    include_once $_SERVER['DOCUMENT_ROOT'] .
        
    '/includes/magicquotes.inc.php';

    if (isset(
    $_POST['action']) and $_POST['action'] == 'upload')
    {
      
    // Bail out if the file isn't really an upload
      
    if (!is_uploaded_file($_FILES['upload']['tmp_name']))
      {
        
    $error 'There was no file uploaded!';
        include 
    $_SERVER['DOCUMENT_ROOT'] . '/includes/error.html.php';
        exit();
      }
      
    $uploadfile $_FILES['upload']['tmp_name'];
      
    $uploadname $_FILES['upload']['name'];
      
    $uploadtype $_FILES['upload']['type'];
      
    $uploaddesc $_POST['desc'];
      
    $uploaddata file_get_contents($uploadfile);

      include 
    'db.inc.php';

      try
      {
        
    $sql 'INSERT INTO filestore SET
            filename = :filename,
            mimetype = :mimetype,
            description = :description,
            filedata = :filedata'
    ;
        
    $s $pdo->prepare($sql);
        
    $s->bindValue(':filename'$uploadname);
        
    $s->bindValue(':mimetype'$uploadtype);
        
    $s->bindValue(':description'$uploaddesc);
        
    $s->bindValue(':filedata'$uploaddata);
        
    $s->execute();
      }
      catch (
    PDOException $e)
      {
        
    $error 'Database error storing file!';
        include 
    $_SERVER['DOCUMENT_ROOT'] . '/includes/error.html.php';
        exit();
      }

      
    header('Location: .');
      exit();
    }
    Più pratica in futuro...

  4. #4
    forse ho risolto con il comando copy! che bello!
    Più pratica in futuro...

  5. #5
    Sono riuscito a fare il download ed il delete del file dal disco ma non sono riuscito a fare la cosa più semplice: il download.

    L'errore è qui:

    Codice PHP:
    if (isset($_GET['action']) and ( $_GET['action'] == 'view' or $_GET['action'] == 'download') and
            isset(
    $_GET['id'])) {
        include 
    'db.inc.php';

        try {
            
    $sql 'SELECT filename, mimetype, url
            FROM filestore
            WHERE id = :id'
    ;
            
    $s $pdo->prepare($sql);
            
    $s->bindValue(':id'$_GET['id']);
            
    $s->execute();
        } catch (
    PDOException $e) {
            
    $error 'Database error fetching requested file.';
            include 
    $_SERVER['DOCUMENT_ROOT'] . '/includes/error.html.php';
            exit();
        }

        
    $file $s->fetch();
        if (!
    $file) {
            
    $error 'File with specified ID not found in the database!';
            include 
    $_SERVER['DOCUMENT_ROOT'] . '/includes/error.html.php';
            exit();
        }

        
    $filename $file['filename'];
        
    $mimetype $file['mimetype'];
        
    $url $file['url'];
        
    $disposition 'inline';

        if (
    $_GET['action'] == 'download') {
            
    $mimetype 'application/octet-stream';
            
    $disposition 'attachment';
        }

        
    // Content-type must come before Content-disposition
        
    header('Content-length: ' strlen($url));
        
    header("Content-type: $mimetype");
        
    header("Content-disposition: $disposition; filename=$filename");
        
    header("Location: $url");
        echo 
    $url;
        exit();

    in pratica lo script mi salva un file senza estensione con l'url del file invece che il file. A mio avviso l'errore è qui:

    Codice PHP:
        header('Content-length: ' strlen($url));
        
    header("Content-type: $mimetype");
        
    header("Content-disposition: $disposition; filename=$filename");
        
    header("Location: $url");
        echo 
    $url;
        exit(); 
    però non so come correggere...
    Più pratica in futuro...

  6. #6
    Ho trovato questo codice che funziona ma non capisco perché si dimentica dell'estensione del file:

    Codice PHP:
        // Content-type must come before Content-disposition
        //header('Content-length: ' . strlen($url));
        
    header("Content-type: $mimetype");
        
    //header("Content-disposition: $disposition; filename=$filename");
        //echo $url;
        
      
    header("Cache-Control: public");
      
    header("Content-description: File Transfer");
      
    header("Content-disposition: attachment; filename= " $filename);
      
    header("Content-transfer-encoding: binary");
      
    // Leggo il contenuto del file
      
    readfile($url);
        exit(); 
    i secondi suggerimenti li ho presi di qui:

    http://www.mrwebmaster.it/php/forzar...-php_7379.html



    che nervoso... una cosa tanto semplice complicata all'inverosimile...
    Più pratica in futuro...

  7. #7
    ho letto anche qui ma nulla...

    http://www.php.net/manual/it/function.header.php
    Più pratica in futuro...

  8. #8
    Ho provato a sostituire l'inizializzazione id $url in questo modo:

    Codice PHP:
    $url 'http://localhost' '/file_download/' $uploadname
    ma non funziona neppure in questo modo...

    Più pratica in futuro...

  9. #9
    una cosa che a mio avviso non è corretta e aver salvato un url non pubblico nel database quindi forse il problema è altrove...

    per esempio se volessi salvare nel database questa url:

    http://gianni.it/file_download/prova.jpg

    cosa posso scrivere al posto di 'http://gianni.it'? non c'è una funzione che calcola in automatico questo 'http://gianni.it'?

    $url = 'http://gianni.it' . '/file_download/' . $uploadname;
    Più pratica in futuro...

  10. #10
    neanche in questo modo funge

    Codice PHP:
    $url_pubblico 'http://' $_SERVER['SERVER_NAME'] . '/file_download/' $filename;
        
    // Content-type must come before Content-disposition
        
    header('Content-length: ' strlen($url_pubblico));
        
    header("Content-type: $mimetype");
        
    header("Content-disposition: $disposition; filename=$filename");
        
    //echo $url_pubblico;
        
    $readfile readfile($url_pubblico); 
    Più pratica in futuro...

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 © 2024 vBulletin Solutions, Inc. All rights reserved.