点击下载图片-使用PHP

点击下载图片-使用PHP,php,html,Php,Html,我正在寻找添加一个网站的点击功能下载图像。据我所知,我正在尝试使用PHP来实现这一点,如果不链接到另一个空白页面,然后右键单击“另存为”,就无法在HTML中实现这一点,这不是我想要的。 我在这里找到了这段代码,并希望对其进行修改,但我担心会破坏它,因为我对PHP的理解并不广泛。另外,我需要在多个文件上使用它,但是我使用的PHP建议您只能在一个文件中使用它,这意味着我可能需要许多PHP文件,每个图像下载一个 无论如何,我不确定,但是如果有人能帮助我,我可以做一些调整代码的帮助吗? 这些图像直接来自

我正在寻找添加一个网站的点击功能下载图像。据我所知,我正在尝试使用PHP来实现这一点,如果不链接到另一个空白页面,然后右键单击“另存为”,就无法在HTML中实现这一点,这不是我想要的。 我在这里找到了这段代码,并希望对其进行修改,但我担心会破坏它,因为我对PHP的理解并不广泛。另外,我需要在多个文件上使用它,但是我使用的PHP建议您只能在一个文件中使用它,这意味着我可能需要许多PHP文件,每个图像下载一个

无论如何,我不确定,但是如果有人能帮助我,我可以做一些调整代码的帮助吗? 这些图像直接来自站点,位于以下目录中: /img/bkg/img1.jpg 这也适用于img2-5

无论如何,以下是主文件中用于显示图像和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