首页 > 解决方案 > readFile 和 file_get_contents 呈现损坏的 PDF 和 PNG 文件,但 JPG 很好

问题描述

我开发了一个允许用户将图片与文章相关联的应用程序。关联后,用户有两种可能,一种是下载关联的图片(全局为PDF、JPG或PNG文件),另一种是触发给自己的email。实际上,我有两个问题:-> 每当我尝试像这样获取文件内容时:

/**
 * Renvoie le flux correspondant à l'URL passée en paramètre
 * @param $url url complète du fichier à récupérer en HTTP
 * @return string
 */
private function getHTTPFile($url) {
    // Accès à un fichier HTTP avec les entêtes HTTP indiqués ci-dessus
    return file_get_contents($url);
}

对于 PDF 或 PNG 文件,文件内容在系统上都是错误的,但对于 JPG 文件来说是可以的。-> 每当我下载文件时,问题都是类似的,PDF 和 PNG 文件都已损坏。

<?php

$linkLogo = $_REQUEST['_link'];

if ($linkLogo) {
    header("Content-Description: File Transfer");
    header("Content-Type: application/octet-stream");
    header("Content-Disposition: attachment; filename=\"". basename($linkLogo) ."\"");
    if (ob_get_level()) {
        ob_end_clean();
    }
    readfile ($linkLogo);
    exit();
}
?>

我想知道问题是否不在于 PDF 和 PNG 都是二进制文件。

注意:我从插入到 Word 文件中的图像构建了一个 PDF 文件,它运行良好。问题可能是二进制文件的读取权限或apache服务器上的配置。请帮忙。

标签: php

解决方案


我用 %20 替换了空格

<?php

$linkLogo = $_REQUEST['_link'];

if ($linkLogo) {
    $linkLogo = str_replace(' ', '%20', $linkLogo);
    header("Content-Description: File Transfer");
    header("Content-Type: application/octet-stream");
    header("Content-Disposition: attachment; filename=\"". basename($_REQUEST['_link']) ."\"");
    if (ob_get_level()) {
        ob_end_clean();
    }
    readfile ($linkLogo);
    exit();
}
?>

推荐阅读