PHP Exec взорвать массив - PullRequest
       31

PHP Exec взорвать массив

1 голос
/ 07 октября 2011

Почему следующее не работает.

$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>';, тогда я получаю строку, подобную этой, за li drwxr-xr-x 10 user 4.0K Sep 8 16:06 _test

Я пытаюсь получить только размер, а невся строка. Что я делаю не так?

Ответы [ 3 ]

3 голосов
/ 07 октября 2011

Вы также можете использовать PHP для этого:

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

Что дает вам хороший ассоциативный массив, такой как:

[./curl.php] => 1499
[./db.php] => 10267
1 голос
/ 07 октября 2011

Если вы просто хотите получить размеры файла, попробуйте это:

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 голосов
/ 07 октября 2011

Я бы не сказал, что вы делаете что-то не так - ваш подход вполне приемлем. Однако, если вы хотите избежать 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>';
...