2013-06-25 63 views
2

此網站迄今爲止對我非常有幫助,但似乎我終於遇到了一個問題。 如何在html輸入中添加一個變量的問題已經被問及過,但有一個問題我似乎無法工作。

<?php 
if(isset($_POST['file_name'])){ 
    $file = $_POST['file_name']; 
    header('Content-Disposition: attachment; filename="'.$file.'"'); 
    readfile('uploads/'.$file); 
    exit(); 
} 
?> 
<form action="force_download.php" method="post" name="downloadform"> 
    <input name= "file_name" type="hidden" value="test.txt" /> 
    <input type="submit" value="Download"> 
</form> 

上述代碼正在用於下載文本文件「test.txt」我的上傳文件夾中的許多文本文件之一。 我的問題? 如何將test.txt的值變成一個變量?先前awnser我讀過會是這樣:

<input type="hidden" name="file_name" value="<?php echo htmlspecialchars($file); ?>" /> 

的問題是,當我做到這一點,它下載force_download.php,而不是我的任何文件。

我只在幾天前開始編碼,所以是的...對於新手問題感到抱歉。

+0

重複的:http://stackoverflow.com/questions/171318/how-do-i-capture-php-output-into-a-variable –

+0

你的意思是你想要的表單動作是用戶輸入中插入的文件名? – Sergio

+1

不是很確定你在問什麼,但也許file_get_contents() – 2013-06-25 21:48:07

回答

0

這裏有一個建議,你可能需要做一些調整。

在文件中調用這個你貼的代碼:
(如果我的理解不錯:intranet.php)

<form action="force_download.php" method="post" name="downloadform"> 
<?php 
$path = "./filesfolder/"; // this you need to change to your files folder 

function createDir($path) 
{ 
    if ($handle = opendir($path)) 
    { 
     while (false !== ($file = readdir($handle))) 
     { 
      if (is_dir($path.$file) && $file != '.' && $file !='..') 
       printSubDir($file, $path, $queue); 
      else if ($file != '.' && $file !='..') 
       $queue[] = $file; 
     } 
     printQueue($queue, $path); 
    } 
} 
function printQueue($queue, $path) 
{ 
    foreach ($queue as $file) 
    { 
     printFile($file, $path); 
    } 
} 
function printFile($file, $path) 
{ 
    if ($file=="thumbs.db") {echo "";} 
    else 
    { 
    echo " 
<input name= \"".$file."\" type=\"hidden\" value=\"".$file."\" />"; 
    } 
} 
createDir($path); 
?> 
<input type="submit" value="Download"> 
</form> 

這會爲它找到的所有文件的HTML,與可點擊的鏈接到每個文件。在這種情況下,你不需要在你發佈的文件(我認爲是force_download.php)

0

這裏我寫了一段時間的函數,請考慮添加正確的contect類型的例程還有:

function downloadFile($fullPathToFile, $renameFile=''){ 
     if(is_file($fullPathToFile)){ 
      $path_parts = pathinfo($fullPathToFile); 
      $dirname = $path_parts['dirname']; 
      $basename = $path_parts['basename']; 
      $extension = $path_parts['extension']; 
      $filename = $path_parts['filename']; 
      $filesize = filesize($fullPathToFile); 

      if(!empty($renameFile)){ 
       $extension = preg_match("/\.([^\.]+)$/", $renameFile, $matches); 
       $extension = preg_replace('/\./', '', $matches[0]) ; 
      } 
        /*Change the following one line to type of files or comment out*/ 
      header("Content-Type: text/plain"); 
      header ("Content-Length: " . $filesize); 
      header("Pragma: "); 
      header("Cache-Control: "); 
      if($renameFile){ 
       header("Content-Disposition: attachment; filename=\"$renameFile\""); 
      }else{ 
       header("Content-Disposition: attachment; filename=\"$basename\""); 
      } 
      ob_clean(); 
      flush(); 
      readfile($dirname.'/'.$basename); 
      die(); 
     } 
     else { 
      echo 'no such file or directory'; 
     } 
}