【问题标题】:File is in unknown format when downloading using hidden URL使用隐藏 URL 下载时文件格式未知
【发布时间】:2014-11-13 05:56:36
【问题描述】:

每次我使用此代码并下载文件时,都会出现错误。我认为这是因为文件的路径。

download.php 文件位于 /modules/ 并包含在根目录下的 index.php 中(在 htdocs/project/ 内)/ 。该文件位于 /modules/download/file.zip

可能是什么原因? URL应该是系统路径?如果我不想使用系统路径怎么办?或者我的其他问题是什么?

        $stmt = $this->GetDatabaseConnection()->prepare('SELECT * FROM download_files WHERE id=?');
        $stmt->bind_param('i', $_GET['file']);
        $stmt->execute();
        $stmt->store_result();
        $stmt->bind_result($id, $name, $desc, $filename, $size, $added, $clicks, $uclicks);
        $stmt->fetch();
        if($stmt->num_rows > 0) {
            $fakeFileName= $name . '.zip';
            $realFileName = $filename;
            $file = "download/".$realFileName;
            $fp = fopen($file, 'rb');
            header("Content-Type: application/octet-stream");
            header("Content-Transfer-Encoding: Binary");
            header("Content-Disposition: attachment; filename=$fakeFileName");
            header("Content-Length: " . filesize($file));
            fpassthru($fp);
            exit;
        }
        $stmt->free_result();
        $stmt->close();

错误:

<b>Warning</b>:  fopen(download/6694488-PHPUploadFile.zip): failed to open stream: No such file or directory in <b>C:\xampp\htdocs\project\modules\download.inc.php</b> on line <b>27</b><br />
<br />
<b>Warning</b>:  filesize(): stat failed for download/6694488-PHPUploadFile.zip in <b>C:\xampp\htdocs\project\modules\download.inc.php</b> on line <b>31</b><br />
<br />
<b>Warning</b>:  fpassthru() expects parameter 1 to be resource, boolean given in <b>C:\xampp\htdocs\project\modules\download.inc.php</b> on line <b>32</b><br />

【问题讨论】:

  • 隐藏真实网址,如:stackoverflow.com/questions/10997516/…
  • 例如 '6694488-PHPUploadFile.zip' 是正确的。并且该文件存在于服务器上的“modules/download/6694488-PHPUploadFile.zip”中。

标签: php file fopen


【解决方案1】:

您正在使用 相对 路径,而fopen() 需要 绝对 路径。使用任何常量/方法/等来为您提供项目目录的绝对路径来构建文件的绝对路径。
一种可能的方法是使用服务器变量:

$file = $_SERVER['DOCUMENT_ROOT'] . '/modules/download/' . $realFileName;

【讨论】:

  • 我收到一条错误消息,提示无法打开文件。我认为这是窗户的事情。该文件确实存在于这个确切位置:C:/xampp/htdocs/modules/download/6694488-PHPUploadFile.zip&lt;br /&gt; &lt;b&gt;Warning&lt;/b&gt;: fopen(C:/xampp/htdocsC:/xampp/htdocs/modules/download/6694488-PHPUploadFile.zip): failed to open stream: Invalid argument in &lt;b&gt;C:\xampp\htdocs\project\modules\download.inc.php&lt;/b&gt; on line &lt;b&gt;28&lt;/b&gt;&lt;br /&gt; &lt;br /&gt; &lt;b&gt;Warning&lt;/b&gt;: filesize(): stat failed for C:/xampp/htdocs/modules/download/6694488-PHPUploadFile.zip in &lt;b&gt;C:\xampp\htdocs\project\modules\download.inc.php&lt;/b&gt; on line &lt;b&gt;32
  • 好吧,通过错误消息,您可以看到传递给fopen() 的路径都被阻塞了:fopen(C:/xampp/htdocsC:/xampp/htdocs... 您可能还想用转义的反斜杠/ 替换斜杠 -> @ 987654328@ 如docs for fopen() 中所示的示例
  • 我的错误,我用类似的结果修复了它。
猜你喜欢
  • 1970-01-01
  • 2013-12-16
  • 1970-01-01
  • 2021-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多