通过PHP下载文件

时间:2012-09-29 22:49:15

标签: php download readfile

我正在尝试通过PHP启动文件下载。但是,它下载了无法打开的文件。我的路径是正确的,因为我通过HTML中的图像标签预览图像进行了测试。

    $findPage = mysql_query("SELECT * FROM pages WHERE page_id = '$pageId' LIMIT 1");
    $pg = mysql_fetch_array($findPage);

    $fullPath = $pg['page_link'];
    $explode = explode(".", $fullPath);

    $ext = $explode[count($explode)-1];

    header('Content-disposition: attachment; filename="Name.'.$ext.'"');
    header('Content-type: image/'.$ext);
    readfile($fullPath);

1 个答案:

答案 0 :(得分:2)

如果您尝试以下操作,您会得到什么:

$fullPath = 'https://www.google.co.uk/images/srpr/logo3w.png';

list($w,$h,$t) = getimagesize($fullPath);  
$mimetype = image_type_to_mime_type($t);
$extension = end(explode('.', $fullPath));

header('Content-disposition: attachment; filename="Name.'.$extension.'"');
header('Content-type: '.$mimetype);
readfile($fullPath);

你应该下载谷歌的徽标......我在我的本地设置。

*(此代码需要在您的服务器上启用fopen_wrappers)*

如果您确实正确下载了Google的徽标,那么我建议您从数据库提供的数据出现问题,或者当readfile尝试访问和读取您的文件时出现权限问题。

file_exists( $fullPath ) /// will tell you if the file exists or not

is_readable( $fullPath ) /// could be useful to detect a read error

如果你没有获得谷歌的徽标,那么你的服务器上的fopen_wrappers会被禁用,或者代码中的其他地方会出现奇怪的现象。

额外备注

$pageId在哪里设置?如果它从外部世界传递到您的脚本中 - 如通过URL - 我会坚持使用不同的方式来构建数据库查询。在将$pageId值插入查询之前,至少应该在$pageId = (int) $pageId; 值上运行某种转义函数。否则这是一个相当安全的问题。这是因为任何有权访问您网址的人都可以明显修改它,通过这样做,他们可以直接修改您的查询。处理简单ID时,保护数据库的最快方法是确保值为数字。

{{1}}