Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    2

    Upload/download dei file via php

    Ciao ragazzi, ho già passato penso 3/4 delle discussioni sul download di file mediante php presenti su internet ma continuo ad avere un problema fastidioso.
    Ho già messo giù la function gemella che effettua l'upload:

    Codice PHP:
    if(isset($_POST['dest'])){
         switch(
    intval($_POST['dest'])){ //questa parte è solo un controllo su 2 opt che mi indicano la subdir in cui fare l'upload
              
    case 1$path.="backup/"; break;
              case 
    2$path.="docs/"; break;
              default: die(
    "Errore");
         }
         if(!
    is_dir($path))
              
    mkdir($path,0777TRUE);
         
    $path=$path.basename($_FILES['uploadedfile']['name']);
         if(
    move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $path)) {
              
    alert("File ".basename$_FILES['uploadedfile']['name'])." caricato con successo."); //funzione mia che uso per i test, praticamente è l'alert di js
              
    header("refresh:0");    
         }else{
              echo 
    "<pre>";
              
    print_r($_FILES);
              echo 
    "</pre>";
         }

    ho verificato sulla mia virtual machine che ospita una fedora per mysql+apache e funziona, i file sono integri e corretti.

    Ora, il problema viene con il download. Ogniqualvolta cerco di scaricare un file mi ritrovo un file che ha nome corretto, dimensione apparentemente corretta (ho trovato un paio di casi in cui la dimensione è > di circa 1/2 kB) ma contenuto inesorabilmente uguale: il file html generato dalla mia pagina php. Questo sia che il file si tratti di uno zip che di una immagine, che di un eseguibile.

    Aggiungo che apache non l'ho toccato (nella fedora 7 cmq dovrebbe essere recente), quindi forse c'è qualcosa che devo impostare anche lì?

    Ecco alcune delle funzioni che ho preso pari pari dal web:
    Codice PHP:
    function _Download($f_location,$f_name){
        
    header ("Cache-Control: must-revalidate, post-check=0, pre-check=0");
        
    header('Content-Description: File Transfer');
        
    header('Content-Type: application/octet-stream');
        
    header('Content-Length: ' filesize($f_location));
        
    header('Content-Disposition: attachment; filename=' basename($f_name));
        
    readfile($f_location);

    Codice PHP:
    function forceDownload($file) {
         if(
    file_exists($file) && is_readable($file)) {
              
    $filename basename($file);
              if(
    strpos(strtoupper($_SERVER['HTTP_USER_AGENT']), 'MSIE') !== false && strpos($filename'.') !== false) {
                   
    $parsename explode('.'$filename);
                   
    $last count($parsename) - 1;
                   
    $filename implode('%2E'array_slice($parsename0$last));
                   
    $filename .= '.'.$parsename[$last];
              }
              
    header('Content-Type: application/octet-stream');
              
    header('Content-Disposition: attachment; filename="'.$filename.'"');
              
    header('Content-Length:'.filesize($file));
              
    header('Content-Transfer-Encoding: binary');
              
    readfile($file);
         }

    Queste sono solo 2 delle non so quante versioni diverse che ho provato

    La parte che effettua le call contiene giusto un paio di istruzioni (utilizzate anche dall'upload quindi presumo corrette):

    Codice PHP:
    $path="/var/www/html/contents/files/upload/".create_dir_tree($ex['nome'])."/";
    //[..] <- vari controlli per sapere dove andare a prendere il file che mi serve
    $path.="backup/";
    $file_to_download=(string)$_POST['files_backup']; //non riporto altri controlli
    forceDownload($path.$file_to_download); 
    Aggiungo solo che il sito che sto realizzando è il mio primo e che è per uso strettamente interno, quindi preferisco imparare qualcosa e poi sistemare le eventuali falle di sicurezza.

    Vi ringrazio in anticipo per il supporto! S!

  2. #2
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    2
    nessuno che sappia darmi una mano? sarebbe piuttosto urgente

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.