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

グロブも使えます。

$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 に答える