题
我有一个包含长字符串的变量。 (具体来说,其中包含几千个javascript代码)
我想通过外部命令(在这种情况下为javascript压缩器)传递此字符串,并在php中捕获外部命令(压缩的javascript)的输出,并将其分配给变量。
我知道在php中有用于压缩javascript的类,但这只是一个普遍问题的示例。
我们最初使用: 通用标签
这适用于小字符串,但不安全。 (如果oldvar包含对Shell具有特殊含义的字符,则可能会发生任何事情)
使用scapesshellarg进行转义可以解决此问题,但是由于操作系统对最大允许参数长度的限制,解决方案无法使用更长的字符串。
我尝试使用popen("command" "w")
并写入命令-可以,但是命令的输出默默消失在空白中。
从概念上讲,我只想做以下事情: 通用标签
解决方案
使用 proc_open -函数,您可以获取两个stdout的句柄和标准输入,然后将数据写入其中并读取结果。
其他提示
使用朗伯建议,我可以使用以下解决方案,该解决方案似乎效果很好。将其发布在这里是为了对这个问题感兴趣的其他人的利益。 通用标签
可能存在死锁问题:如果您发送的数据大于管道的总大小,则外部命令将被阻塞,等待有人从其stdout读取,而php被阻塞,等待stdin被读取以腾出空间来提供更多输入。
可能PHP会以某种方式解决此问题,但是值得测试一下,如果您打算发送(或接收)超出管道容量的数据。
不隶属于 StackOverflow