0

以前我可以在 php 和 IIS 中下载 wav 文件。但是现在文件无法下载。我不知道出了什么问题。在 IIS 中使用 php manager 安装 php 5.3 并将其更改为 php 5.4 后,无法下载该文件。我有文件链接来下载它,如下所示:

       <a href="download.php?voice='$filename'"> Download </a>

下载.php 脚本

     <?php
       $filename = $_GET['voice'];
       $dir = 'd:/temp_file/voice/';
       if(is_file($dir.$filename))
        {
          header('Content-type: audio/wav');
          header('Content-Disposition: attachment; filename='".$filename.'"');
          echo file_get_contents($dir.$filename);
       }
      ?>

当我试图找到文件无法下载的错误时,我删除了 if 语句并运行程序,它确实提示窗口下载文件,带有空 wav 文件的音频播放器。因此,我得出结论,路径错误,不允许访问另一个驱动器的文件。我在 c:\inetpub\wwwroot\ 中有 php 代码,但要下载的 wav 文件位于 d:\temp_file\voice 路径中。我应该怎么做?

4

2 回答 2

1

也许是 PHP open_basedir限制。

尝试将d:/temp_file/voice/, 添加到php.ini.

更新

我从未使用过 IIS,但您必须检查的另一件事是 IIS 用户是否有权读取该目录。尝试添加,仅用于测试,Everyone具有对d:\temp_file\voice.

于 2012-04-25T09:40:42.550 回答
0

我不知道出了什么问题

然后启用错误报告,因为在我看来这是一个语法错误 header('Content-Disposition: attachment; filename='".$filename.'"'),您在.'之后缺少引号 () filename='"。但是,既然您说它有效(并且在没有 的情况下有效if),我会说这是一个复制粘贴错误。

然后执行 a var_dump($filename),其中可能包含引号,因为您将引号放在链接 ( <a href="download.php?voice='$filename'">) 中的 URL 周围。该文件D:/temp_file/voice/'foo.wav'可能不存在。

于 2012-05-01T11:26:42.937 回答