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

问题描述 投票:0回答:1

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

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

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

php c windows exec abstraction-layer
1个回答
0
投票

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

然后,可以从与进程的stdout文件流相关联的文件句柄中读取该过程的结果。有关更多信息和示例,请参阅proc_open() here的PHP手册页

© www.soinside.com 2019 - 2024. All rights reserved.