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 nameと aを渡すだけですsecurity token

于 2013-07-05T08:38:24.183 に答える