【问题标题】:ls -ltr using PHP exec()ls -ltr 使用 PHP exec()
【发布时间】:2010-07-01 10:56:14
【问题描述】:

如问题所述.. 当我这样做时

exec("ls -ltr  > output.txt 2>&1",$result,$status);

它与正常输出不同。添加了一个额外的列。像

-rw-r--r-- 1 apache   apache    211 Jul  1 15:52 withoutsudo.txt
-rw-r--r-- 1 apache   apache      0 Jul  1 15:53 withsudo.txt

就像从命令提示符执行时一样

-rw-r--r-- 1 apache   apache    211 2010-07-01 15:52 withoutsudo.txt
-rw-r--r-- 1 apache   apache    274 2010-07-01 15:53 withsudo.txt
-rw-r--r-- 1 apache   apache    346 2010-07-01 15:55 sudominusu.txt
-rw-r--r-- 1 apache   apache    414 2010-07-01 15:58 sudominusu.txt

看看区别。所以在第一个输出中,我通常的 awk '{print $8}' 失败了。 我在使用 cron 时遇到了同样的问题。但是通过调用解决了它

./$HOME/.bashrc

在脚本中。但使用 php 不会发生。如果我能以某种方式从通常的环境中“告诉” php 到“exec”。任何帮助,将不胜感激。

【问题讨论】:

    标签: php exec


    【解决方案1】:

    在您的登录 shell 中,ls 可能是别名,以便它打印另一个日期。这将在您的 .basrc 或 .bash_profile 中。

    --time-style= 选项显式传递给ls 以确保它在使用PHP 时以预期的格式打印日期。

    【讨论】:

    • 你的建议也是正确的.. 但我想我只能标记 1 正确.. :)
    【解决方案2】:

    我猜你只对文件名感兴趣,你想用反向时间排序。 试试这个:

    ls -tr1 > output.txt 2>&1

    你会得到一个只有文件名的列表,所以你根本不需要 awk。

    另一种解决方案是使用“--time-style iso”指定时间格式。看看man page

    【讨论】:

    • 嘿,你的解决方案有效.. 我尝试使用 php AND 命令行.. 两个输出都是相同的.. 它将是相同的,但我必须确定..
    【解决方案3】:

    这不是额外的输出,而是格式化日期的不同。显然,您在 PHP 和 bash(“命令提示符”)中设置了不同的语言环境。

    (在 bash 中,运行 export LANG=Cexport LANG=en_US 会给出包含三个字母月份名称的结果)

    【讨论】:

      【解决方案4】:

      ls 的输出很大程度上取决于环境(例如,LANG 是这里的重要变量)。为什么不使用scandirstatkrsort 的组合?

      function ls($dir_name) {
        $finfo = array();
        foreach (scandir($dir_name) as $file_name) {
          $s = stat(join('/', array($dir_name,$file_name)));
          $finfo[$file_name] = $s['mtime'];
        }
        krsort($finfo);
        return array_keys($finfo);
      }
      

      这将比炮击ls 更安全、更有效。更不用说您可以通过在 exec 中难以做到的方式自定义排序和过滤结果。

      顺便说一句:我绝不是 PHP 专家,所以上面的 sn-p 可能非常不安全并且充满错误。

      【讨论】:

      • 我不确定代码,但是感谢 LANG 部分。我的 php 在 LANG 为“c”且命令行 LANG 为“en_US.UTF-8”的环境中运行,这就是差异的原因..
      猜你喜欢
      • 1970-01-01
      • 2018-11-28
      • 1970-01-01
      • 1970-01-01
      • 2015-06-10
      • 1970-01-01
      • 2011-09-22
      • 1970-01-01
      • 2020-07-18
      相关资源
      最近更新 更多