0

我想创建指向特定目录中所有文件的链接。例子

Directory: /account contains;

user/
data/
register.txt
login.txt
instructions.docx

我想让php生成:

<a href="action.php?action=register.txt">register</a>
<a href="action.php?action=login.txt">login</a>

最好只创建 .txt 文件的链接。

我有这个代码:

<?php
 if ($handle = opendir('account')) {
 while (false !== ($file = readdir($handle)))
 {
    if (($file != ".") 
     && ($file != ".."))
    {
        $test=`basename "$file"`; //this is line 8
        $thelist = '<a href="action.php?action='.$file.'">'.$test.'</a>';
    }
   }



   closedir($handle);
  } 
  ?>

 <P>List of files:</p>
 <UL>
 <P><?=$thelist?></p>
 </UL>

但它给出了这个错误:

 Warning: shell_exec() has been disabled for security reasons in /public_html/directory/checkit.php on line 8 

即使它可以工作,它也会显示没有 .txt 扩展名的文件。(我知道安全原因错误经常可以通过更改一些 php 设置或更改一些权限来解决?但我知道有一种方法可以在不更改所有设置的情况下做到这一点)。

4

4 回答 4

4

换行

$test=`basename "$file"`; //this is line 8

经过

$test=basename("$file");

阅读文档basename()

于 2013-07-05T08:33:37.900 回答
1

您可以使用 scandir() 来获取文件夹的内容:

$theList = '';
$content = scandir('account');
foreach($content as $aFileInIt) {
    // skip files that do not end on ".txt"
    if(!preg_match('/(\.txt)$/i', $aFileInIt))
         continue;
    // save a-elements to variable
    // UPDATE: take the file's basename as the linktext
    $theList .= '<li><a href="action.php?action='.$aFileInIt.'">'.str_ireplace('.txt', '', $aFileInIt).'</a></li>';
}

后来,为了有一个正确的 UL 元素:

echo '<ul>'.$theList.'</ul>';
于 2013-07-05T08:38:31.913 回答
0

改为使用GlobIterator...

$fs = new GlobIterator(__DIR__.'/*.txt');
foreach ($fs as $file) {
    printf("<a href=\"action.php?action=%s\">%s</a> <br />\n", 
           urlencode($file),
           $file->getBasename(".txt"));
}

请注意,将完整文件路径传递给 有很多安全隐患action=,我认为这是一个糟糕的设计,而不是一个好主意。

只需通过file nameand asecurity token代替

于 2013-07-05T08:38:24.183 回答
0

使用全局函数。

$directory = 'PATH_TO_YOUR_DIRECTORY' . DIRECTORY_SEPARATOR;

foreach( glob( $directory . "*.txt" ) as $filename ) {
  if( ! is_dir( $filename ) ) {
    echo basename( $filename ) . "\n";
  }
}
于 2013-07-05T08:46:50.597 回答