在 PHP 中强制下载图像。在本地工作但在实时 Linux 服务器上崩溃

Jon*_*ley 4 php http download

我正在通过我的网站强制下载图像。

\n\n

强制下载在 Apache/Windows 开发机器上运行良好。

\n\n

然而,当它在我的 Linux Web 服务器上运行时,它会将垃圾字符推送到屏幕上。

\n\n
e.g. \xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbdJFIF\xef\xbf\xbd\xef\xbf\xbdH\xef\xbf\xbdH\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd6Exif\xef\xbf\xbd\xef\xbf\xbdMM\xef\xbf\xbd*\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\n
Run Code Online (Sandbox Code Playgroud)\n\n
    \n
  • 火狐浏览器——垃圾
  • \n
  • 铬 - 垃圾
  • \n
  • Internet Explorer 7 - 在页面中显示图像

    \n\n
    $fileName = basename($filePath);\n$fileSize = filesize($filePath);\n\n\n// Output headers.\nheader("Cache-Control: private");\nheader("Content-Type: Image/jpeg");\nheader("Content-Length: ".$fileSize);\nheader("Content-Disposition: attachment; filename=".$fileName);\n\n\n// Output file.\nreadfile ($filePath);                   \nexit();\n
    Run Code Online (Sandbox Code Playgroud)
  • \n
\n\n

我的实时服务器上可能存在哪些差异会导致其崩溃?

\n

El *_*obo 5

向stillstand致敬(和+1),他指出使用fifo,但我想我应该在这里提供一个示例来提供帮助。这个例子需要安装 fifo 扩展,并且已经被破解并从我的其他一些代码中稍作修改。

    $filename = 'blarg.jpg';
    $filepath = '/foo/bar/blarg.jpg';
    $finfo    = new finfo(FILEINFO_MIME);
    $mime     = $finfo->file($file);

    // Provide a default type in case all else fails
    $mime = ($mime) ? $mime : 'application/octet-stream';

    header('Pragma: public');
    header('Content-Transfer-Encoding: binary');
    header('Content-type: ' . $mime);
    header('Content-Length: ' . filesize($filepath));
    header('Content-Disposition: attachment; filename="' . $filename . '"');

    header('Content-transfer-encoding: 8bit');
    header('Expires: 0');
    header('Pragma: cache');
    header('Cache-Control: private');
Run Code Online (Sandbox Code Playgroud)