2015-09-16 3 views
2

Я пытаюсь загрузить файлы, используя следующий код, который находится в «download.php»:Загрузка файлов в PHP есть путь к файлу, который Я не хочу

<?php 
$file = $_GET['file']; 
header ("Content-type: octet/stream"); 
header('Content-Disposition: attachment; filename="'.$file.'"'); 
//header ("Content-disposition: attachment; filename=".$file.";"); 
header("Content-Length: ".filesize($file)); 
readfile($file); 
exit; 
?> 

Я называю эту загрузку. php из ссылки. например.,

download.php? Файл = user_songs/57/mp3/Satru_Munbu.mp3

Но имя donloaded файл изменен. Он выглядит как «user_songs-57-mp3-Satru_Munbu.mp3»

Кажется, что полный путь, который я передаю, добавляется. Может ли кто-нибудь помочь мне, как я могу его удалить?

ответ

0

$file содержит полное содержимое URL-адреса file=, который является полным именем пути. Вы можете использовать basename(), чтобы извлечь только часть имени файла.

header('Content-Disposition: attachment; filename="'.basename($file).'"'); 
+0

да. Я просто понял, что имя файла делает магию. Я сделал, изменив как arvind

0

«/» является зарезервированным характер, так что вы должны URL кодировать путь:

download.php?file=user_songs%2F57%2Fmp3%2FSatru_Munbu.mp3 

Кстати, будьте осторожны, потому что любой может получить доступ к любому файлу в системе с кодом (до тех пор, как Процесс Apache может получить к нему доступ). Например, download.php?file=%2Fetc%2Fpasswd загрузит ваш файл/etc/passwd.

+0

Я подумал, что это решение тоже, но мне кажется, вы можете передать «/» без кодирования его, и он все еще читает штраф в PHP скрипт – samrap

Смежные вопросы