PHP exec |尝试设置DBUS_SESSION_BUS_ADDRESS时出现空字节错误

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP exec |尝试设置DBUS_SESSION_BUS_ADDRESS时出现空字节错误相关的知识,希望对你有一定的参考价值。

我正在使用php构建CLI APP,我需要使用notify-send作为root用户发送通知。

现在我知道在尝试发送通知之前我需要设置DBUS_SESSION_BUS_ADDRESS。否则它将无法工作。

现在这个代码如下:

$c = sprintf("DBUS_SESSION_BUS_ADDRESS=".$DBUS_SESSION." /usr/bin/notify-send \"TITLE\" \"MESSAGE\"");
system($c);

引发错误

system():检测到NULL字节。可能在第186行的/filepath.php中受到攻击

从我的广泛调试中我发现$DBUS_SESSION导致了这个问题。但是,如果我硬编码$DBUS_SESSION值,那么命令工作没有问题!

像这样:

$c = sprintf("DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus,guid=5ded8923178f8ea19642e36a5a37eb76 /usr/bin/notify-send \"sdfTITLE\" \"MESSAGE\"");
system($c);

这里发生了什么?我怎么解决这个问题?

答案

问题是你直接将变量传递给sprintf,但这不是它的工作原理。您指定参数类型,然后按顺序提供变量作为sprintf函数的连续参数,如下所示:

$c = sprintf("DBUS_SESSION_BUS_ADDRESS=%s /usr/bin/notify-send \"TITLE\" \"MESSAGE\"", $DBUS_SESSION);
system($c);

这应该解决NULL BYTE detected错误

以上是关于PHP exec |尝试设置DBUS_SESSION_BUS_ADDRESS时出现空字节错误的主要内容,如果未能解决你的问题,请参考以下文章

使用 php exec 和 amixer 设置音量

PHP:obdc_exec() 在 Zend 模型中静默失败

Centos PHP+Apache执行exec()等Linux脚本权限设置的详细步骤

尝试使用 NodeJS 创建与 MySQL 数据库的连接时 PHP Exec 挂起

PHP exec等待返回键

PHP 警告:exec() 无法分叉