我如何获得随机文件的URL(来自目录和子目录)&将它返回到id的href?

时间:2011-04-25 00:55:46

标签: php javascript html

我尝试了一个php解决方案但在上一个问题中被告知我“无法通过HTTP读取/列出目录。您需要使用不同的协议在Internet上列出目录:FTP,SSH等你需要访问远程服务器来执行此操作。如果你唯一可以使用的是HTTP,你需要检索网页(= HTML文档)并自己解析它。 (How to get a php script to print/work

我希望它很简单 - 我可以做HTML,我正在学习Java,而我只是在用PHP挣扎。

更新:一个例子。 file.txt,file2.txt,& file3.txt在/ some /目录中 - 我想要一个PHP脚本来抓取一个RANDOMLY&以一种我可以把它放在一个元素的href中的方式给我。如果不是PHP,还有其他什么?感谢。

2 个答案:

答案 0 :(得分:1)

我没有测试过这个。

$filenames=glob("files/*.txt");
$count=count($filenames);
if($count>0)
{
    $rndfile=$filenames[rand(0,$count-1)];
    echo '<a href="' . $rndfile . "'>Random file</a>";
}

答案 1 :(得分:0)

首先你需要文件:

<?php
    [...]
    $files = scandir(dirname(__FILE__));
    $links = array();
    foreach($files as $file)
    {
     links[] = '<a href="http://localhost/url_decoder?file="'.md5_file($filepath.$file).'"> $file';
    }
    <table>
    foreach ($links as $link){ echo "<tr><td>$link</td></tr>";}
    <table>
?>

这个小脚本扫描当前php脚本的文件路径,并在该目录中为每个文件创建一个链接到另一个使用文件md5哈希值作为参数的php脚本。然后解码器应该如下:

<?php
    [...]
    $file_search = $_GET['file'];
    $files = scandir(dirname(__FILE__));//coder and decored located in same folder
    foreach($files as $file)
    {
     if (md5_file(dirname(__FILE__).DIRECTORY_SEPARATOR.$file) == $file)
     {
      $fd = fopen (dirname(__FILE__).DIRECTORY_SEPARATOR.$file, "r")) {
      $fsize = filesize(dirname(__FILE__).DIRECTORY_SEPARATOR.$file);
      $path_parts = pathinfo($fullPath);
      $ext = strtolower($path_parts["extension"]);
      switch ($ext) {
        case "pdf":
          header("Content-type: application/pdf");
          header("Content-Disposition: attachment; filename=\"".$path_parts["basename"]."\""); // use 'attachment' to force a download
       break;
       default;
         header("Content-type: application/octet-stream");
         header("Content-Disposition: filename=\"".$path_parts["basename"]."\"");
      }
      header("Content-length: $fsize");
      header("Cache-control: private"); //use this to open files directly
      while(!feof($fd)) {
        $buffer = fread($fd, 2048);
        echo $buffer;
      }
      fclose ($fd);
      exit;
     }
    }
?>

这并不完美,有些代码来自page,但至少可以让您了解如何操作。希望这有帮助!