php Exec爆炸阵列

时间:2011-10-07 04:01:57

标签: php foreach exec explode

为什么以下不起作用。

$directory = './';
exec('ls -loh ' . $directory, $directory_list);
echo '<ul>';
foreach ($directory_list as $file) {
    $x = explode(' ', $file);
    echo '<li>' . $x[3] . '</li>';
}
echo '</ul>';

如果我没有爆炸,我只是echo '<li>'.$file.'</li>';那么我得到一个像这样的字符串 drwxr-xr-x 10 user 4.0K Sep 8 16:06 _test

我试图只获得大小而不是整个字符串。我做错了什么。

3 个答案:

答案 0 :(得分:3)

您也可以使用PHP:

$files = glob("./*");
$files = array_combine($files, array_map("filesize", $files));

它为您提供了一个很好的关联数组,如:

[./curl.php] => 1499
[./db.php] => 10267

答案 1 :(得分:1)

如果您只想获取文件的大小,请尝试以下操作:

exec("ls -sh ./", $results);
foreach(array_slice($results,1,count($results)) as $file) {
    echo $file . "\n";
}

这是我的输出:

4.0K 24
   0 BookingTest.php
   0 date
4.0K date.php
4.0K exec2.php
4.0K somefile
4.0K file.php
4.0K file

答案 2 :(得分:0)

我不会说你做错了什么 - 你的做法完全可以接受。但是,如果您想避免explode(),可以执行以下操作:

$directory = './';
exec('ls -loh | awk \'{print $4}\'' . $directory, $directory_list);
echo '<ul>';
foreach ($directory_list as $file_size) {
    echo '<li>' . $file_size . '</li>';
}
echo '</ul>';