【问题标题】:php Exec explode arrayphp Exec爆炸数组
【发布时间】:2011-10-07 04:01:57
【问题描述】:

为什么以下不起作用。

$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 '&lt;li&gt;'.$file.'&lt;/li&gt;';,那么我每 li 都会得到一个这样的字符串 drwxr-xr-x 10 user 4.0K Sep 8 16:06 _test

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

【问题讨论】:

  • 你用双倍空格分割你的字符串
  • 你知道PHP有filesystem functions,不是吗
  • 你现在得到了什么结果?

标签: php foreach exec explode


【解决方案1】:

您也可以使用 PHP:

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

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

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

【讨论】:

  • 谢谢,效果很好,但我想知道为什么 exec 不工作。
【解决方案2】:

如果你只想获取文件的大小,试试这个:

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

【讨论】:

    【解决方案3】:

    我不会说你做错了什么——你的方法是完全可以接受的。但是,如果您想避免使用 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>';
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-07-26
      • 1970-01-01
      • 2017-02-18
      • 2015-08-28
      • 2012-08-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多