我正在尝试通过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);
答案 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}}