0

我想使用 PHPexec()函数在 Windows 服务器上运行可执行文件。命令字符串将使用 ASCII 控制字符作为传递给可执行文件的数据的分隔符。我目前拥有的代码是:

for( $i = 0; $i < $size; $i++ ){
    $input .= $arg[$i];
    $input .= "\037"; /* Unit Separator */
}

这为 C 程序从作为参数提供给封装函数的数组元素构建了一个输入。我正在编写一个抽象层,它允许 PHP 脚本将其一些更繁重的处理卸载到 C 程序以提高效率,并通过简单的函数调用透明地完成。为此,我将以序列化形式将用作算法输入的任何数据结构传递给 C 程序的标准输入流,可能使用简单的 echo 程序。这个回显程序的参数将是整个序列化输出。为了做到这一点,我需要确保 shell 不会删除任何控制字符(我已经尝试用换行符分隔输入项,这会导致过早终止命令字符串)。我对 Windows 的操作方式不是很熟悉,

4

1 回答 1

0

将任意数据传递给 ac 程序的一种安全方法是使用proc_open()数据并将其写入新创建进程的标准输入文件句柄。然后,shell 根本不接触数据。此外,即使嵌入了零字节,也可以传递任意二进制数据。

然后可以从与进程的标准输出文件流关联的文件句柄中读取进程的结果。有关更多信息和示例,请参阅proc_open() 此处的 PHP 手册页

于 2019-02-15T21:24:38.423 回答