【发布时间】:2016-11-22 14:11:02
【问题描述】:
$php index2.php testphp
$filename = $argv[1];
echo shell_exec("cat ".$filename." | head -1");
导致以下错误:
cat: write error: Broken pipe error
我不知道为什么会收到此错误。更改为以下仍然会给我错误:
echo shell_exec("cat testphp | head -1");
【问题讨论】:
-
只是一个旁注,但你真的应该在文件名上使用
escapeshellarg()。不仅可以防止 shell 代码注入攻击,还可以确保正常的文件名不会对您的代码造成严重破坏。 -
除了@ChristianF所说的,应该考虑直接用PHP来获取文件的第一行。请注意,与大多数其他工具一样,
head能够自行读取文件,因此无论哪种方式都不需要管道。 -
@TomFenech 更改代码,因此没有管道,只需使用 head 读取文件即可解决问题,谢谢。如果您想发布答案,我可以接受。
-
我建议阅读文件第一行的方法是在 PHP 中使用
fopen,然后是fgets,然后是fclose,尽管这并不是您问题的直接答案。我很高兴你让它正常工作。
标签: php shell command-line-interface