我有一个包含长字符串的变量。 (具体来说,其中包含几千个javascript代码)

我想通过外部命令(在这种情况下为javascript压缩器)传递此字符串,并在php中捕获外部命令(压缩的javascript)的输出,并将其分配给变量。

我知道在php中有用于压缩javascript的类,但这只是一个普遍问题的示例。

我们最初使用: 通用标签

这适用于小字符串,但不安全。 (如果oldvar包含对Shell具有特殊含义的字符,则可能会发生任何事情)

使用scapesshellarg进行转义可以解决此问题,但是由于操作系统对最大允许参数长度的限制,解决方案无法使用更长的字符串。

我尝试使用popen("command" "w")并写入命令-可以,但是命令的输出默默消失在空白中。

从概念上讲,我只想做以下事情: 通用标签

有帮助吗?

解决方案

使用 proc_open -函数,您可以获取两个stdout的句柄和标准输入,然后将数据写入其中并读取结果。

其他提示

使用朗伯建议,我可以使用以下解决方案,该解决方案似乎效果很好。将其发布在这里是为了对这个问题感兴趣的其他人的利益。 通用标签

可能存在死锁问题:如果您发送的数据大于管道的总大小,则外部命令将被阻塞,等待有人从其stdout读取,而php被阻塞,等待stdin被读取以腾出空间来提供更多输入。

可能PHP会以某种方式解决此问题,但是值得测试一下,如果您打算发送(或接收)超出管道容量的数据。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top