Php 如何在URL中实现escapeshellarg?

Php 如何在URL中实现escapeshellarg?,php,linux,Php,Linux,用户通过名为username和name的HTML表单提供两个变量。 它们用于执行当前不安全的shell命令。 我有以下PHP代码: (exec("cat /opt/application/userdata/$username/following | grep -w $name")) 我正在尝试实现escapeshellarg,但通过遵循官方PHP文档无法实现它,我尝试了: (exec("cat /opt/application/userdata/ .escapeshellarg($userna

用户通过名为username和name的HTML表单提供两个变量。 它们用于执行当前不安全的shell命令。 我有以下PHP代码:

(exec("cat /opt/application/userdata/$username/following | grep -w $name"))
我正在尝试实现escapeshellarg,但通过遵循官方PHP文档无法实现它,我尝试了:

(exec("cat /opt/application/userdata/ .escapeshellarg($username)/following | grep -w .escapeshellarg($name)"))
但这不起作用,我认为这是一个语法错误。 如何正确设置格式?

escapeshellarg()函数是PHP内置函数,但您试图将其作为shell函数执行。只需将函数从字符串范围中拉出并连接结果,即可修复此问题:

exec(“cat/opt/application/userdata/”.escapeshellarg($username)。“/following | grep-w.escapeshellarg($name));

发生的情况是,您当前正在尝试在字符串中运行函数。这可以通过额外的步骤实现,但并不可取

您要做的是将字符串与函数的输出连接起来。 您可以通过以下方式将其内联:

exec('cat /opt/application/userdata/' . escapeshellarg($username) . '/following | grep -w ' . escapeshellarg($name))
(注意,我使用了单引号[
),因为在字符串中没有进行扩展,这会加快速度并保持其独立性)

或者,您可以更早地执行该操作,只需在字符串中包含(“展开”)变量,就像您的第一个示例所提示的:

$username = escapeshellarg($username);
$name = escapeshellarg($name);
exec("cat /opt/application/userdata/$username/following | grep -w $name")
(注意,我使用了双引号[
],因为字符串中发生了扩展)