【问题标题】:How to download all images from a folder如何从文件夹中下载所有图像
【发布时间】:2012-12-06 08:15:26
【问题描述】:

我正在通过 Apache 服务器显示图像。 当我点击每张图片时,它应该会打开 download.php?fiel=file_name.jpg 并将图片下载到系统中。

这是图像显示的代码

  <?php
 $files = glob("Image/"."*.*");
 for ($i=0; $i<count($files); $i++)
{
$num = $files[$i];
echo $num."<br>";
echo '<img src="'.$num.'" alt="Here should be image" width="256" height="192" >'."<br/>";
}
?>

我使用以下代码下载图片(即download.php文件)。

 <?php
 $file = $_GET['file'];
  header("Content-type: image");
 header("Content-disposition: attachment; filename= ".$file."");
 readfile($file);
 ?> 

如何做到这一点?

【问题讨论】:

  • 我希望您的 download.php 文件中有一些安全检查,以防止攻击者读取您文件系统上的任何文件。

标签: php html apache


【解决方案1】:

你的意思是这样的? :

<?php
$files = glob("Image/"."*.*");
$countFiles = count($files); //Don't do calculations in your loop, this is really slow

for ($i=0; $i<$countFiles; $i++)
{
    $num = $files[$i];

    echo '<a href="download.php?file=' . $files[$i] . '"><img src="'.$num.'" alt="Here should be image" width="256" height="192" ></a><br/>';
}
?>

【讨论】:

  • count() 计算成本高吗?它不只是从数组标题中获取大小吗?除非您的循环执行数百万次,否则它不太可能产生重大影响。
【解决方案2】:
foreach (glob("Image/*.*") as $file) {
  echo "<a href='download.php?file=$file'>$file<br>\n";
  echo "<img src='$file' alt='Here should be image' width='256' height='192'/><br>\n</a>";
}

【讨论】:

  • 你的意思是 foreach 不是 for 吗?但是,在循环中进行计算可能会非常慢,因为它每次都会进行评估。
  • @DillenMeijboom 感谢您的更正。但是我在循环中做了哪些计算?
  • 当您执行 foreach(glob("Image/*.*") as $file) 时,将为每个条目调用 glob 函数。当你使用这样的东西时: foreach($files as $file) 和 $files contains glob("Image/*.*") 那么 glob 函数将只被调用一次,这要快得多。
  • @DillenMeijboom 我不认为这是真的,但我会做一个测试来检查。
  • @DillenMeijboom 我的测试证实数组参数中对foreach 的函数调用只执行一次。
【解决方案3】:

如果您想将所有图像下载到一个文件夹中,我建议您使用 zip 或类似工具将图像存档。您可以在 php 中即时压缩文件。要遍历目录中的所有文件,请查看 RecursiveDirectoryIterator

foreach (new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir)) as $file) {
    var_dump($file);
}

【讨论】:

    猜你喜欢
    • 2016-05-28
    • 1970-01-01
    • 2012-06-24
    • 1970-01-01
    • 1970-01-01
    • 2011-12-09
    • 1970-01-01
    • 2011-06-03
    • 1970-01-01
    相关资源
    最近更新 更多