【发布时间】:2018-12-18 19:50:24
【问题描述】:
我正在尝试使用
在文件中的行尾查找一个字符串shell_exec("grep -rl '=".$_GET['s']."$'");
这不返回任何内容,但如果我删除 $ 它将返回所有匹配项(即使不在行尾。)
请让我知道我做错了什么。
【问题讨论】:
-
有 PHP 方法可以做到这一点。解释您要查找的内容,有人会向您展示如何在 PHP 中执行此操作
-
我正在寻找可以帮助解决此问题的人:shell_exec("grep -rl '=".$_GET['s']."$'"); ...或者可以解释为什么它不起作用
-
可能是您正在抓取的文件有 CRLF 行结尾吗?我将按照以下步骤进行: (1) 将您正在构建的命令存储到 PHP 变量中,例如
$cmd,然后打印该变量。 (2) 做一个shell_exec($cmd)。 (3)验证还是不行,把第(1)步打印的命令复制到命令行,看看能不能用。这至少会告诉你问题是在 PHP 端还是在 Shell 端。 -
@user1934428 你向我发送了正确的方向.. 添加 $'\r' 解决了它。有没有办法在行尾匹配 \r 或 \n?
-
我发现推荐
$'\r'是有风险的,因为这是由shell 解释的,我们不知道您将运行什么shell。 bash 肯定可以理解它,但是 AFIK 它不在 Posix 中(如果我错了,请纠正我),我担心如果你在 shell_exec 启动严格的 POSIX shell 的系统上,这可能会中断。至于性能,用 PHP 本身搜索可能比用编译语言(grep 用 C 编写)要慢,但另一方面,您的解决方案需要 PHP 生成一个子进程,这也不便宜。