当 运行 PHP 的 exec() 函数在 Windows 服务器上时,它会将 ASCII 控制字符传递给 shell 吗?

When running PHP's exec() function on a Windows server, will it pass ASCII control characters to the shell?

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

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

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

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

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

的 PHP 手册页