2011-10-07 118 views
1

为什么下面的不起作用。php Exec爆炸阵列

$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

我“米试图让只有大小,而不是整个字符串。我是什么做错了

+0

是否将您的字符串拆分为双倍空间 – Gowri

+0

我正在使用单个空间。 – Pinkie

+2

你知道PHP有[文件系统功能](http://php.net/manual/en/ref.filesystem.php),是不是你 – NullUserException

回答

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 
+0

很好,它的工作原理。 – Pinkie

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>'; 
3

您也可以使用PHP为:

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

这给你一个很好的关联数组,如:

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

谢谢,这很好,但我想知道为什么exec不工作。 – Pinkie