Inserire tastino "download file"

  • Creatore Discussione Creatore Discussione Trapano
  • Data di inizio Data di inizio

Trapano

Utente Attivo
27 Set 2012
238
0
16
49
Ciao a tutti.
Ho il seguente script..
PHP:
<?php 
// Definisco il path della cartella 
$path = "."; 

// Apro la cartella 
$dir_handle = @opendir($path) or die("Non è possibile aprire $path"); 

// Lettura e ciclo dei files 
while ($file = readdir($dir_handle)) { 

if($file == "." ||
 $file == ".."||
 $file == "questa_pagina.htm") 

continue; 
echo "<a href=\"$file\">   $file    </a>    <br/>"; 
} 
// Chiudo la cartella 
closedir($dir_handle); 
?>
Che mi elenca gli mp3 in una cartella.
Quando ci clicco, mi si apre il lettore e ascolto la musica...
Ma se volessi fare il download del file nel mio pc, cosa dovrei modificare?
Grazie.
 
Aggiorna il tuo codice di lettura
PHP:
foreach(glob('*.mp3') as $file)
{
  echo "<a href=\"$file\">   $file    </a>    <br/>"; 
  echo "<a href=\"download.php?file=$file\">   $file    </a>    <br/>";  
}

Poi crea la pagina per il download
PHP:
<?php
if(!empty($_GET['file']))
{
    $file = '/path/etc/'.$_GET['file'];
    if(file_exists($file) && pathinfo($file, PATHINFO_EXTENSION)=='mp3')
    {
        header("Content-type: audio/mpeg");
        header("Content-disposition: attachment; filename=".basename($file));
        readfile($file);
    }
}
 
Grazie Nefyt per l'aiuto...
Ho modificato così le due pagina...
"download.php" che richiamo...
PHP:
<?php  
// Definisco il path della cartella  
$path = "."; 

// Apro la cartella  
$dir_handle = @opendir($path) or die("Non è possibile aprire $path");  


foreach(glob('*.mp3') as $file)
{
  echo "<a href=\"$file\">   $file    </a>    <br/>"; 
  echo "<a href=\"scarica.php?file=$file\"> Scarica    </a>    <br/>";  
}
     
// Chiudo la cartella  
closedir($dir_handle);  
?>
e "scarica.php" che dovrebbe scaricare il file..
PHP:
<?php
if(!empty($_GET['file']))
{
    $file = '/path/etc/'.$_GET['file'];
    if(file_exists($file) && pathinfo($file, PATHINFO_EXTENSION)=='.mp3')
    {
        header("Content-type: audio/mpeg");
        header("Content-disposition: attachment; filename=".basename($file));
        readfile($file);
    }
}
?>

Però, il tastino "Scarica" mi da pagina bianca...
Sarà il mio server locale ?
 
Grazie Nefyt per l'aiuto...
Ho modificato così le due pagina...
"download.php" che richiamo...
PHP:
<?php  
// Definisco il path della cartella  
$path = "."; 

// Apro la cartella  
$dir_handle = @opendir($path) or die("Non è possibile aprire $path");  


foreach(glob('*.mp3') as $file)
{
  echo "<a href=\"$file\">   $file    </a>    <br/>"; 
  echo "<a href=\"scarica.php?file=$file\"> Scarica    </a>    <br/>";  
}
     
// Chiudo la cartella  
closedir($dir_handle);  
?>
e "scarica.php" che dovrebbe scaricare il file..
PHP:
<?php
if(!empty($_GET['file']))
{
    $file = '/path/etc/'.$_GET['file'];
    if(file_exists($file) && pathinfo($file, PATHINFO_EXTENSION)=='.mp3')
    {
        header("Content-type: audio/mpeg");
        header("Content-disposition: attachment; filename=".basename($file));
        readfile($file);
    }
}
?>

Però, il tastino "Scarica" mi da pagina bianca...
Sarà il mio server locale ?
Hai modificato la directory di download con la tua?(/path/etc/) Inoltre togli opendir e closedir non servono
 
No. Non è il mio server locale. Ho provato anche su un server esterno e risulta pagina bianca.
 
Ma che directory devo mettere?
PHP:
<?php 
if(!empty($_GET['file'])) 
{ 
    $file = 'http://.../../....php'.$_GET['file']; 
    if(file_exists($file) && pathinfo($file, PATHINFO_EXTENSION)=='.mp3') 
    { 
        header("Content-type: audio/mpeg"); 
        header("Content-disposition: attachment; filename=".basename($file)); 
        readfile($file); 
    } 
} 
?>
Tutto l'indirizzo completo di dove si trova la cartella che contiene le pagine?
 
Ma che directory devo mettere?
PHP:
<?php 
if(!empty($_GET['file'])) 
{ 
    $file = 'http://.../../....php'.$_GET['file']; 
    if(file_exists($file) && pathinfo($file, PATHINFO_EXTENSION)=='.mp3') 
    { 
        header("Content-type: audio/mpeg"); 
        header("Content-disposition: attachment; filename=".basename($file)); 
        readfile($file); 
    } 
} 
?>
Tutto l'indirizzo completo di dove si trova la cartella che contiene le pagine?
La tua directory di download, dove tieni i file mp3 in locale sul server

Prova inoltre aggiungendo basename
PHP:
$file = '/mp3s/'.basename($_GET['file']);
 
Negativo.
Ora sono esattamente così:
download.php
PHP:
<?php   
$path = "."; 
foreach(glob('*.mp3') as $file)
{
  echo "<a href=\"$file\">   $file    </a>    <br/>"; 
  echo "<a href=\"scarica.php?file=$file\"> Scarica    </a>    <br/>";  
} 
?>
e scarica.php
PHP:
<?php
if(!empty($_GET['file']))
{
    $file = '/archivio/musica'.basename ($_GET['file']);
    if(file_exists($file) && pathinfo($file, PATHINFO_EXTENSION)=='.mp3')
    {
        header("Content-type: audio/mpeg");
        header("Content-disposition: attachment; filename=".basename($file));
        readfile($file);
    }
}
?>
la directory è corretta, ho copiato l'indirizzo di un file e ho confrontato...
Ancora pagina bianca.
Scusa se ti faccio perdere tempo...
 
Negativo.
Ora sono esattamente così:
download.php
PHP:
<?php   
$path = "."; 
foreach(glob('*.mp3') as $file)
{
  echo "<a href=\"$file\">   $file    </a>    <br/>"; 
  echo "<a href=\"scarica.php?file=$file\"> Scarica    </a>    <br/>";  
} 
?>
e scarica.php
PHP:
<?php
if(!empty($_GET['file']))
{
    $file = '/archivio/musica'.basename ($_GET['file']);
    if(file_exists($file) && pathinfo($file, PATHINFO_EXTENSION)=='.mp3')
    {
        header("Content-type: audio/mpeg");
        header("Content-disposition: attachment; filename=".basename($file));
        readfile($file);
    }
}
?>
la directory è corretta, ho copiato l'indirizzo di un file e ho confrontato...
Ancora pagina bianca.
Scusa se ti faccio perdere tempo...
Puoi incollarmi l'indirizzo del file che viene mandato via url?
Ti sei dimenticato uno slash '/archivio/musica/'
 
PHP:
http://XXX.XXX.XX.XX/archivio/musica/scarica.php?file=Afro%20Dylan%20-%20Elegibo.mp3

PHP:
http://XXX.XXX.XX.XX/archivio/musica/Afro%20Dylan%20-%20Elegibo.mp3
 
Allora dovrebbe bastarti, se i file mp3 sono nella stessa directory
PHP:
$file = '/archivio/musica/'.$_GET['file'];
 
Nemmeno così... Ho provato anche a cambiare browser... sto usando Safari... chrome... niente!
Se ti sei stufato, lascia perdere, grazie per il tempo che mi hai dedicato... se riesco a risolvere, posto la soluzione...
al momento sono così:
pagina "download.php"
PHP:
<?php    
$path = "."; 
foreach(glob('*.mp3') as $file)
{
  echo "<a href=\"$file\" target=\"_blank\">   $file    </a>    <br/>"; 
  echo "<a href=\"scarica.php?file=$file\" > Scarica    </a>    <br/>";  
}
?>
e pagina scarica.php
PHP:
<?php
if(!empty($_GET['file']))
{
    $file = '/archivio/musica/'.$_GET['file']; 
    if(file_exists($file) && pathinfo($file, PATHINFO_EXTENSION)=='mp3')
    {
        header("Content-type: audio/mpeg");
        header("Content-disposition: attachment; filename=".basename($file));
        readfile($file);
    }
}
?>
 
Forse ho capito vuole solo il file locale perché sono nella stessa directory
PHP:
if(!empty($_GET['file'])) 
{ 
    $file = $_GET['file'];  
    if(file_exists($file) && pathinfo($file, PATHINFO_EXTENSION)=='mp3') 
    { 
        header("Content-type: audio/mpeg"); 
        header("Content-disposition: attachment; filename=".$file); 
        readfile($file); 
    } 
}
 
:beer::beer::beer::beer::beer::beer::beer::beer::beer::beer::beer::beer::beer::beer::beer::mavieni::mavieni::mavieni::elvis::elvis::elvis::elvis:


Grazieeeeee!!!

pagina "download.php"
PHP:
<?php    
$path = "."; 
foreach(glob('*.mp3') as $file)
{
  echo "<a href=\"$file\" target=\"_blank\">   $file    </a>    <br/>"; 
  echo "<a href=\"scarica.php?file=$file\" > Scarica    </a>    <br/>";  
}
?>

che richiama pagina "scarica.php"
PHP:
<?php
if(!empty($_GET['file']))
{
     $file = $_GET['file']; 
    if(file_exists($file) && pathinfo($file, PATHINFO_EXTENSION)=='mp3')
    {
        header("Content-type: audio/mpeg");
        header("Content-disposition: attachment; filename=".basename($file));
        readfile($file);
    }
}
?>

e funziona.
 
pagina "download.php"
PHP:
<?php    
$path = "."; 
foreach(glob('*.mp3') as $file)
{
  echo "<a href=\"$file\" target=\"_blank\">   $file    </a>    <br/>"; 
  echo "<a href=\"scarica.php?file=$file\" > Scarica    </a>    <br/>";  
}
?>

che richiama pagina "scarica.php"
PHP:
<?php
if(!empty($_GET['file']))
{
     $file = $_GET['file']; 
    if(file_exists($file) && pathinfo($file, PATHINFO_EXTENSION)=='mp3')
    {
        header("Content-type: audio/mpeg");
        header("Content-disposition: attachment; filename=".basename($file));
        readfile($file);
    }
}
?>

e funziona.[/QUOTE]

Adesso Nefyt mi manderà a quel paese, ma sono a casa e mi annoio, così vado a pensarle e provarle tutte...
Questo script funziona per quanto riguarda gli mp3. Ma avrei anche una cartella che contiene .avi, .mov, e m4v...
Dovrei cambiare le estensioni, ma siccome è più di un file come faccio? :angel:
 
download.php
PHP:
<?php    
$path = "."; 
foreach(glob('*.*') as $file)
{
  echo "<a href=\"$file\" target=\"_blank\">   $file    </a>    ------"; 
  echo "<a href=\"scarica.php?file=$file\" > Scarica    </a>    <br/>";  
}
?>
e scarica.php
PHP:
<?php
if(!empty($_GET['file']))
{
     $file = $_GET['file']; 
    if(file_exists($file) && pathinfo($file, PATHINFO_EXTENSION)=='*')
    {
        header("Content-type: video/x-msvideo");
        header("Content-disposition: attachment; filename=".basename($file));
        readfile($file);
    }
}
?>
Così non va...:hammer::hammer:
 
PHP:
if(!empty($_GET['file'])) 
{ 
     $estensioni = array('mp3'=>'audio/mpeg','avi' =>'video/avi','mov'=>'video/quicktime','m4v'=>'video/mp4');
     $file = $_GET['file'];  
     $ext = pathinfo($file, PATHINFO_EXTENSION);
    if(file_exists($file) && in_array($ext, array_keys($estensioni))) 
    { 
        header("Content-type: {$estensioni[$ext]}"); 
        header("Content-disposition: attachment; filename=$file"); 
        readfile($file); 
    } 
}
Mettili tutti nella stessa directory oppure cambia e aggiungi quelli che vuoi
 

Discussioni simili