0

可能重复:
scandir 无法打开目录

我解决了部分scandir()问题,但我不喜欢数组。我希望它显示上传的文件并提供指向它们的链接,以便您可以单击图像并查看它们,或单击 zip 文件并下载它们。问题是我不知道该怎么做。

<?php
 $files = scandir('../snaps'); 
 print_r($files);
 ?>

scandir到目前为止。

4

3 回答 3

1

尝试:

function print_dir($dir) {
    if ($handle = opendir($dir)) {
        $files = array();
        while (false !== ($file = readdir($handle))) {
            if ($file != "." && $file != "..") {
                $files[] = $file;
            }
        }
        echo '<table>';
        foreach($files as $file) {
            echo '<tr><td style="border:none;"><a href="path/to/' . $file . '"><img src="images/icons/file.png" /></a></td><td style="font-size:18px; border:none; padding-top:28px"><a href="path/to/' . $file . '">' . $file_name . '</a></td></tr>';
        }
        echo '</table>';
        closedir($handle);
    }
}
于 2012-08-09T15:29:46.030 回答
1

您也可以使用 glob。

$files = glob('../snaps/*');

foreach($files as $f) {
  echo '<a href="'.$f.'">'.$f.'</a><br />';
}

这是一个非常简单的示例 - 您可能想要检查当前项目是否不是“..”或“.” 在每次通过。

于 2012-08-09T15:50:56.730 回答
0

如果您提供更多详细信息可能会有所帮助,我认为此代码将对链接有所帮助:

    <?php
$files = scandir('../snaps'); 

foreach($files as $file){ ?>
<a href="../<?php echo $file; ?>"><?php echo $file; ?></a>
<?
}
?>

这是创建 Zip 文件的功能

    <?
function create_zip($files = array(),$destination = '',$overwrite = false, $distill_subdirectories = true) {
  //if the zip file already exists and overwrite is false, return false
  if(file_exists($destination) && !$overwrite) { return false; }
  //vars
  $valid_files = array();
  //if files were passed in...
  if(is_array($files)) {

    //cycle through each file
    foreach($files as $file) {
      //make sure the file exists
      if(file_exists($file)) {
          // echo 1;
        $valid_files[] = $file;
      }
    }
  }
  //if we have good files...
  if(count($valid_files)) {
    //create the archive
    $zip = new ZipArchive();
    if($zip->open($destination,$overwrite ? ZIPARCHIVE::OVERWRITE : ZIPARCHIVE::CREATE) !== true) {
      return false;
    }
    //add the files
    foreach($valid_files as $file) {
        if ($distill_subdirectories) {
        $zip->addFile($file, basename($file) );
        } else {
        $zip->addFile($file, $file);
        }
        }
    //debug
    //echo 'The zip archive contains ',$zip->numFiles,' files with a status of ',$zip->status;

    //close the zip -- done!
    $zip->close();


    //check to make sure the file exists
    //return file_exists($destination);
    header("Content-type: application/octet-stream");
    header("Content-disposition: attachment; filename={$destination}");
    ob_clean();
    flush();
    readfile($destination);
    //echo $destination;
  }
  else
  {
    return false;
  }
}

?>

这就是你可以称之为的方式:

    $files = scandir('../snaps');

    $to_zip = array();
    foreach($files as $file){
        if($file != "." AND $file !=".."){
            $to_zip[] = $folder . "/".$file;
        }
    } 

$zip = create_zip($to_zip, "test.zip", true);   
于 2012-08-09T15:52:21.913 回答