命令的输入文件流

命令的输入文件流

如何将文件流而不是文件发送到此命令?

/usr/local/bin/wkhtmltopdf --title "$SUBJECT" -q $SOURCEFILE $OUTPUTFILE

文件流来自 PHP 中的字符串。

答案1

您应该能够使用/dev/stdinPHP来做到这一点proc_open()。使用以下命令启动该进程

wkhtmltopdf --title "$SUBJECT" -q /dev/stdin $OUTPUTFILE

并将变量中的 HTML 通过管道传输到正在运行的进程中。

答案2

要制作一个按从管道读取的名称打开文件的程序,请为其提供特殊的设备名称/dev/stdin......例如:

/usr/local/bin/program-to-output-the-html | /usr/local/bin/wkhtmltopdf --title "$SUBJECT" -q /dev/stdin $OUTPUTFILE

或者在您显示的命令之前执行此操作:

SOURCEFILE=/dev/stdin

那么程序就会这样做,open("/dev/stdin",...)除非它有逻辑打算阻止它。

答案3

从评论中猜测,您似乎可以使用临时文件来完成此操作,为什么不制作一个命名管道?

 mknod magritte p

在你的 php 代码中,只需写信给马格利特。

wkhtmltopdf 应该运行

/usr/local/bin/wkhtmltopdf --title "$SUBJECT" -q magritte $OUTPUTFILE

您可以更准确地指定位置。

仍在猜测, wkhtmltopdf 是从 php 中运行的吗?

如果是,您需要作为后台进程运行,请参阅PHP执行函数

在写入管道之前要调用 exec。

答案4

所以使用正确的东西是流程替代

wkhtmltopdf --title "$SUBJECT" -q <(command_with_output_stream) $OUTPUTFILE

相关内容