点击下载图片-使用PHP
我正在寻找添加一个网站的点击功能下载图像。据我所知,我正在尝试使用PHP来实现这一点,如果不链接到另一个空白页面,然后右键单击“另存为”,就无法在HTML中实现这一点,这不是我想要的。 我在这里找到了这段代码,并希望对其进行修改,但我担心会破坏它,因为我对PHP的理解并不广泛。另外,我需要在多个文件上使用它,但是我使用的PHP建议您只能在一个文件中使用它,这意味着我可能需要许多PHP文件,每个图像下载一个 无论如何,我不确定,但是如果有人能帮助我,我可以做一些调整代码的帮助吗? 这些图像直接来自站点,位于以下目录中: /img/bkg/img1.jpg 这也适用于img2-5 无论如何,以下是主文件中用于显示图像和PHP文件下载链接的代码:点击下载图片-使用PHP,php,html,Php,Html,我正在寻找添加一个网站的点击功能下载图像。据我所知,我正在尝试使用PHP来实现这一点,如果不链接到另一个空白页面,然后右键单击“另存为”,就无法在HTML中实现这一点,这不是我想要的。 我在这里找到了这段代码,并希望对其进行修改,但我担心会破坏它,因为我对PHP的理解并不广泛。另外,我需要在多个文件上使用它,但是我使用的PHP建议您只能在一个文件中使用它,这意味着我可能需要许多PHP文件,每个图像下载一个 无论如何,我不确定,但是如果有人能帮助我,我可以做一些调整代码的帮助吗? 这些图像直接来自
<a href="download.php?file=path/<?=$row['img1.jpg']?>">
<img src="img/bkg/img1.jpg" alt="CWP - Wallpaper 1" width="1056" height="600"/>
</a>
以下是我需要为这些文件和正确目录调整的代码:
<?php
$file = $_GET['file'];
download_file($file);
function download_file( $fullPath ){
// Must be fresh start
if( headers_sent() )
die('Headers Sent');
// Required for some browsers
if(ini_get('zlib.output_compression'))
ini_set('zlib.output_compression', 'Off');
// File Exists?
if( file_exists($fullPath) ){
// Parse Info / Get Extension
$fsize = filesize($fullPath);
$path_parts = pathinfo($fullPath);
$ext = strtolower($path_parts["extension"]);
// Determine Content Type
switch ($ext) {
case "pdf": $ctype="application/pdf"; break;
case "exe": $ctype="application/octet-stream"; break;
case "zip": $ctype="application/zip"; break;
case "doc": $ctype="application/msword"; break;
case "xls": $ctype="application/vnd.ms-excel"; break;
case "ppt": $ctype="application/vnd.ms-powerpoint"; break;
case "gif": $ctype="image/gif"; break;
case "png": $ctype="image/png"; break;
case "jpeg":
case "jpg": $ctype="image/jpg"; break;
default: $ctype="application/force-download";
}
header("Pragma: public"); // required
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private",false); // required for certain browsers
header("Content-Type: $ctype");
header("Content-Disposition: attachment; filename=\"".basename($fullPath)."\";" );
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".$fsize);
ob_clean();
flush();
readfile( $fullPath );
} else
die('File Not Found');
}
?>
我很抱歉,如果以上是一个愚蠢的问题,但我宁愿寻求帮助,而不是打破它一遍又一遍。我不确定我在哪里更换文件和目录等,我想得到它的权利
非常感谢您的帮助。您的脚本可以在一个页面上处理多个下载。很好,您可以添加多个:
<a href="download.php?file=path/<?=$row['img1.jpg']?>">
我还将删除您不使用的mime类型,因此只保留jpg或所有图像类型。文件名在查询字符串中传递,只需更改每个链接的文件名,它就可以正常工作了?您真的应该自己尝试这样做,或者至少了解脚本正在做什么:例如,在没有输入验证的情况下,你绝对不应该使用这个脚本,如果有人用
download.php?file=../../../../etc/passwd
点击你的服务器,你可能会遇到很大的问题。关于你的问题,你是想一次点击下载多个文件,还是想在一个页面上多次下载?我想一次点击下载一个文件,但是有很多图片需要点击,所以点击img1.jpg,你可以得到img1,img2.jpg,得到img2等等。至于理解它,我已经对它有了一个非常基本的了解,但我不是PHP专家,我最近一直在学习,但我在这里跳到了最深处。我会避免这种情况,但我有一个最后期限,这是很重要的尝试,并让这与它一起工作-再次,所有的帮助是感激的Hi Jerone,谢谢你的帮助:)我已经添加到代码中,并删除了非图像相关的文件类型。这可能看起来很愚蠢,但这正是我遇到问题的地方。我很好奇img1.jpg或其他相关的图像文件在代码中的确切位置。例如,在HTML中显示“file=path”时,这是与我需要适应文件的文件路径的关系吗?或者它是一个PHP命令或函数?此外,在您的代码中,它表示%_GET['file'];该“文件”是否将替换为img1.jpg?在download.php文档的顶部有类似的内容吗?对不起,如果我看起来没用,这对我来说是全新的me@JohnMcPherson你的链接应该是这样的:download.php?file=the_image\u你想要的\u下载\u here.jpg
并且你在php中添加的路径应该是存储图像的路径,相对于您正在运行的脚本。我将其改编为以下内容:@John McPherson为什么要在末尾添加/
?你应该链接到你的脚本,而不是图片。我不确定该用什么替换它,所以我用图片替换了它。我改变了这一点,得到了同样的结果。这可能就是为什么。。。在download.php文件中,有两个部分说了同样的话:“$\u GET['file'];”-这个文件需要链接到我的图像吗?或者它是我不遵循的PHP的一部分?还有一个$filepath属性,我不确定是否需要在任何地方编辑它?另外,为了澄清,现在的链接如下所示:
if (preg_match('#[^\w.-]#', $_GET['file']))
{
// if $_GET['file'] contains anything that is not a word character, a dot or a -
die("invalid input");
}
else
{
$file = 'path/' . $_GET['file'];
// rest of your code