0

我无法修改我的 PHP 程序。最初,该程序会从 Unix 机器上下载一个特定的文件,它运行良好。现在我对其进行了一些修改,以便用户可以输入文件名进行下载。

现在它不起作用,我不知道为什么。它不会抛出任何我能看到的错误;该页面只是返回空白。

PHP version - 5.2.13
Apache - 2.0
Unix Box - HP-UX 11.11 (old version; latest is 11.31)
local PC - Windows XP Pro
Browser - IE 7, Mozilla

代码:

       <html>

      <body>


      <?php

      ob_start();
      if(isset($_POST['name']))

       {

       $file = $_POST['name'];
      echo "file is  $file" ;
     if(!file_exists($file))

       {

     die("file not found: " );

     }


       $name = basename($file);
            header('Content-Description: File Transfer');
        header('Content-Type: application/octet-stream');
          header('Content-Disposition: attachment; filename="'.$name.'"');

          header('Content-Transfer-Encoding: binary');
            header('Expires: 0');
           header('Cache-Control: must-revalidate');
          header('Pragma: public');
            header('Content-Length: ' . filesize($file));
             ob_clean();
         readfile($file);
            exit;

             }

           else

              {
             echo " <form action='download1.php' method='post' enctype='multipart/form-data'>


       <b> Enter the file name: </b><input type='text' name='name'>
        <br> <br>
        <button type='submit'> Upload </button>

     </form>";
          }
      ?>
         </body>

         </html>

我究竟做错了什么?

4

5 回答 5

0

编辑

要将其作为一个文件运行并action='' 用于完成此操作,请尝试以下操作:

<?php
ob_start();
if(isset($_POST['name'])) {

$file = $_POST['name'];
echo "file is  $file" ;
if (file_exists($file)) {

header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream;charset=utf-8');
header('Content-Disposition: attachment; filename="'.basename($file).'"');

header('Content-Transfer-Encoding: binary');
// header("Content-Type: application/text");
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($file));

ob_clean();

readfile($file);
exit;
}
}

/*
if (!file_exists($file)) { 

echo "<br>";
echo "$file does not exist.";
}
*/
?>

<form action='' method='post'>
<b> Enter the file name: </b><input type='text' name='name'>
<br> <br>
<button type='submit'> Upload </button>
</form>

原始答案

尝试这种方式,而不是使用两个单独的文件。(已测试)

注意:文件必须与执行的代码位于同一文件夹中,并且必须是准确的文件名。

即: File.zip并且file.zip将被视为两个不同的文件名,因为第一个以大写字母开头。

HTML 表单

<form action='download_file.php' method='post'>
<b> Enter the file name: </b><input type='text' name='name'>
<br> <br>
<button type='submit'> Upload </button>
</form>

注意: enctype='multipart/form-data'不是必须的。

PHP 处理程序 (download_file.php)

<?php
ob_start();
if(isset($_POST['name'])) {

$file = $_POST['name'];
echo "file is  $file" ;
if (file_exists($file)) {

header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream;charset=utf-8');
header('Content-Disposition: attachment; filename="'.basename($file).'"');

header('Content-Transfer-Encoding: binary');
// header("Content-Type: application/text");
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($file));

ob_clean();

readfile($file);
exit;
}
}

if (!file_exists($file)) { 

echo "<br>";
echo "$file does not exist.";
}
?>
于 2013-09-09T15:37:00.477 回答
0

以下是我的原始代码工作正常:

<?php

$file = '/opt/hpws/apache/htdocs/barn/file2';

if (!file_exists($file)) {
    die("The file does not exist");
}
if (!is_file($file)) {
    die("Not a file"); // Worry about symlinks later
}
if (!is_readable($file)) {
    die("The file is not readable");
}

//    die("DEBUG: Okay, will send the file -- remove this line and retry");

$name = basename($file); // Or anything else

header('Content-Type: application/octet-stream');
header("Content-Disposition: attachment; filename=\"{$name}\"");
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
readfile($file);
exit();
?>
于 2013-09-09T09:17:25.360 回答
0

正如 Vlad 所说,您在校准标头之前输出内容 - 因此您的代码会引发错误,因此您的首要任务是解决您无法看到它引发的错误的问题。

您的代码检查文件是否存在 - 但不检查文件是否可读。

下一个问题是,即使它确实找到了可读内容,它也会返回嵌入在 HTML 标记中的内容。

于 2013-09-09T08:17:14.710 回答
0

以下是在我的笔记本电脑上运行良好但在 unix box 上运行良好的那个..

enter code here

        <!DOCTYPE html>

           <html>

            <body>




             <?php

     if(isset($_POST["name"]))
        {
          ob_start();



      $file = $_POST["name"];
     if(!file_exists($file))

     {
       echo "$file <br>";
            die( "your file does not exist:");

         }


         elseif (file_exists($file)) {
            header('Content-Description: File Transfer');
                header('Content-Type: application/octet-stream;charset=utf-8');
        header('Content-Disposition: attachment; filename="'.basename($file).'"');

        header('Content-Transfer-Encoding: binary');
         header('Expires: 0');
           header('Cache-Control: must-revalidate');
         header('Pragma: public');
         header('Content-Length: ' . filesize($file));

         readfile($file);
        exit;
        }

         }

    else
          {

       echo "<form action='download1.php' method='POST' enctype='html/form-data'>

        Enter your file name : <input type='text' name='name' >
   <br>
    <br>
     <button type='submit'>Submit</button>

  </form>";
    }
       ?>



       </body> 

       </html>
于 2013-09-09T16:24:47.387 回答
0

我解决了它,我刚刚从我的代码中删除了标签,它工作正常..似乎输出正在缓冲,或者它没有发送到浏览器,或者它无法从缓冲区中显示出来或按照我的理解运行。 .谢谢你们的时间...

于 2013-09-10T14:01:12.390 回答