Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2014
    Messaggi
    17

    Download file excel da server condiviso con php

    Ciao a tutti !

    Ho la necessità di far scaricare agli utenti un file excel posto in un server condiviso.
    Ho scritto il codice e non riesco a capire perchè non funziona.

    Ho provato a cambiare posizione del file da server condiviso a quello in utilizzo e funziona perfettamente. Questo mi ha fatto pensare che la variabile da me dichiarata $dir sia sbagliata.

    Codice PHP:
    //impostiamo la cartella in cui sono presenti i file per il download   
    $dir "\\10.x.x.x\cartelle restanti";    
    //riceviamo via GET il file da scaricare  la funzione basename la applichiamo al fine di evitare che   utenti maliziosi possano eseguire percorsi nell'URL       
    $file = isset($_GET['file']) ? basename( (string) $_GET['file'] ) : '';    
     
    $path1 $dir $file;
    // eseguiamo alcuni controlli preventivi    
    if($file=='')
    {    exit(
    'Nessun file indicato');      }
    else 
    if(!
    is_file($path1))
    {echo 
    $path1;    exit('Il file non esiste');        
    }else if(!
    is_readable($path1))
    {       exit(
    'Il file non ha i permessi per essere scaricato');        }
    // otteniamo alcune info sul file    
     
    $info pathinfo$path1 );
    $extension $info['extension'];
     
    // estensione    
    $size filesize($path1); 
    // dimensione in byte   
     
    $time_file date'r'filemtime$path1 ) );
     
    // time ultima modifica    
    // inviamo gli opportuni headers    
     
    header('Content-Type: application/octet-stream'); 
    header('Content-Disposition: attachment; filename="'basename($path1) .'"');    
     
    header('Content-Transfer-Encoding: binary');    
    header('Content-Length: ' $size);
    header('Last-Modified: ' $time_file);    
    header('Expires: 0');    
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');    
    header('Pragma: public');       

     
    // eliminiamo eventuale output inviato   
    ob_clean();    
    flush();       
     
    // leggiamo il file inviamo l'output @readfile($path1) or die('SERVER ERROR!');   

    exit; 

    Per vedere cosa mi restituiva $path1 l'ho visualizzato e ho notato che il doppio \\ non viene visualizzato correttamente , ma solo con una \.
    Ultima modifica di veciaz; 09-07-2014 a 10:31

  2. #2
    Il "\" (backslash) è un carattere speciale, per visualizzarne due devi metterne 4.

    Codice PHP:
    ...
    $dir "\\\\x.x.x.x\\folder...";
    ... 
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  3. #3
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,503
    Ma $dir cosa sarebbe?

    Non dovresti usare gli slash / invece dei backslash \ ?
    Su una URL \\ non credo che abbia senso, neanche su un filesystem Unix, al massimo su Windows.

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2014
    Messaggi
    17
    Grazie per aver risposto , ma ho già provato a metterne 4, e 2 per le altre ma non va... sono sicuro che è la scrittura della variabile dir che non fa funzionare ma non so più dove sbattere la testa

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2014
    Messaggi
    17
    @Alhazred Ho provato anche a mettere anche gli slash al posto dei backslash ma niente....
    $dir sarebbe il percorso che porta al file ... $dir= "//10.0.0.x/dir/"

  6. #6
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,503
    Ma ci vanno gli slash o backslash che siano davanti a un IP?
    Non è come usare un indirizzo assoluto?

    Prova un po' a toglierli.

  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2014
    Messaggi
    17
    Non ci crederai ma ho provato anche a toglierli...

  8. #8
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,503
    Così hai provato?

    $dir = "10.x.x.x/cartelle restanti";

    "cartelle restanti" suppongo sia solo un nome che hai messo qui per accorciare il path, ad ogni modo, assicurati che non ci siano nomi di cartelle con spazi.

  9. #9
    Utente di HTML.it
    Registrato dal
    Jul 2014
    Messaggi
    17
    Si , ho provato anche in questo modo..
    Cosa intendi con assicurati che non ci siano nomi di cartelle con spazi ?
    Tra le "cartelle restanti" ce ne sono due che hanno uno spazio, e quindi l'ho messo anche io su $dir...

    $dir = "10.x.x.x/cartella 1/cartella2/cartella 3/";
    Ultima modifica di veciaz; 09-07-2014 a 11:30

  10. #10
    Quote Originariamente inviata da Alhazred Visualizza il messaggio
    Ma $dir cosa sarebbe?

    Non dovresti usare gli slash / invece dei backslash \ ?
    Su una URL \\ non credo che abbia senso, neanche su un filesystem Unix, al massimo su Windows.
    Sotto windows è possibile accedere a risorse condivise utilizzando:

    \\IP o nome macchina

    Anche se dubito si possa utilizzare questo sistema in PHP
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

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.