【问题标题】:PHP: Corrupted file in network?PHP:网络中的文件损坏?
【发布时间】:2016-02-26 20:43:34
【问题描述】:

我需要读取一个文件(总是一个图像)来下载它,但它总是损坏。

$path = 'S:\PATH\TO\ART2770.jpg';
$file = 'ART2770.jpg';
$filename = basename($file);
$file_extension = strtolower(substr(strrchr($filename,"."),1));

switch( $file_extension ) {
    case "gif": $ctype="image/gif"; break;
    case "png": $ctype="image/png"; break;
    case "jpeg":
    case "jpg": $ctype="image/jpeg"; break;
    default:
}

header('Last-Modified: ' . gmdate('D, d M Y H:i:s', filemtime($path)) . ' GMT');
header('Accept-Ranges: bytes');  // Allow support for download resume
header('Content-Length: ' . filesize($path));  // File size
header('Content-Encoding: none');
header('Content-Type: '.$ctype);
header('Content-Disposition: attachment; filename=' . $filename);  // Make the browser display the Save As dialog
readfile($path);
exit;

我尝试过的:

  1. 这不是safe_mode问题,因为它已经关闭了;
  2. 这不是 BOM 问题,因为我已经检查过了;
  3. 它不是代码末尾的?>\n 或某种空格,因为我已经检查过了;
  4. 编辑:它不是\n<? 或代码的begin 中的某种空白,因为我已经检查过了;
  5. 我可以使用img html 标记显示图像,没有任何问题;
  6. 我拥有目标文件夹的所有权限;
  7. S:/PATH/TO/ART2770.jpg、S:\\PATH\\TO\\ART2770.jpg 和 file:///S:/PATH/TO/ART2770.jpg 也无法返回有效文件。

我正在使用 Windows 7 64 位、PHP 版本 5.3.5、Xampp 1.7.4 和 Internet Explorer 11 (必须在IE上工作,不需要在其他浏览器上工作)。

【问题讨论】:

  • 你有这个正常吗:header('Content-Type: application/pdf');并且您正在尝试显示 JPEG?
  • 糟糕。已更正。还是不行。
  • 试试$path = 'S:\\PATH\\TO\\ART2770.jpg';
  • 谢谢,但也不行。将添加到我的问题
  • 第一行代码之前是什么?第一个 之前的任何空格

标签: php windows file networking internet-explorer-11


【解决方案1】:

header('Content-Type: $ctype');

将输出Content-Type: $ctype

试试header("Content-Type: $ctype"); 或header('Content-Type: '.$ctype);

另外:确保<?php之前没有空格

【讨论】:

  • 感谢指正,我累了,想的不是很好。用了你的建议,还是不行……
【解决方案2】:

我认为输入网络路径的正确方法是\\PATH\TO\ART2770.jpg,更不用说网络S:字母了。

【讨论】:

  • 嗯,那是因为 S: 是相对于您的用户的地图驱动器。如果运行 PHP 的用户没有该地图驱动器,这就是原因。
  • 感谢您的澄清!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-07
  • 2015-07-16
相关资源
最近更新 更多