【问题标题】:Incorrect return from shell_execshell_exec 的返回错误
【发布时间】:2011-10-26 18:28:09
【问题描述】:

我正试图弄清楚我将要迭代的 CSV 中存在多少行,以便我可以监控进度。

从命令行,这给出了正确的值:

cat /path/to/CA_MA.csv | perl -p -i -e "s/^M/\n/g" | wc -l

但是,使用shell_exec(),我什么也得不到:

trim( shell_exec( "cat /path/to/CA_MA.csv | perl -p -i -e 's/^M/\n/g' | wc -l" ) )

我已经尝试过 STDOUT 和 STDERR (... 2>&1)。我已经从交互式控制台 (php -a) 的脚本中尝试了这个。

【问题讨论】:

  • 也许我是愚蠢的建议但是......你不能使用 file_get_contents() 并计算新行吗?或者也许使用 file() 并计算返回数组的元素?
  • 我几乎可以肯定您不需要处理 ^M 字符和 wc -l < /path/to/CA_MA.csv 只会回显行数。为什么您在 php shell_exec 中没有看到任何结果,这超出了我的经验。您是否尝试搜索 tag=php shell_exec?我几乎可以肯定我在这方面提到了另一个函数调用,即 shell_execv() 或类似的。祝你好运。
  • 为什么不使用 pipeview (pv) 实用程序来监控进度?
  • @shellter 如果我不处理 ^M,我会在命令行上得到 wc -l 结果为 1。还有其他外壳/系统功能,但我得到的结果都是一样的。
  • @AurelioDeRosa 老实说,我没有尝试过。行尾都是 fubar 所以我可能认为我需要做更多。我会尝试这种方法。谢谢。

标签: php bash exec


【解决方案1】:

Count lines in a file using PHP

<?php 
  $file = "somefile.txt"; 

  $lines = count(file($file)); 

  echo "There are $lines lines in $file"; 
?>

它甚至适用于以“DOS”行结尾的文件。

【讨论】:

  • 哇。 真的那么容易吗?迫不及待想试试这个,谢谢。
  • 哇。看起来真的那么容易。如此简单,我什至从未想过它会是这样。
猜你喜欢
  • 2012-05-06
  • 2017-03-02
  • 1970-01-01
  • 2013-01-30
  • 2016-04-10
  • 1970-01-01
  • 2013-08-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多