如何将文件流而不是文件发送到此命令?
/usr/local/bin/wkhtmltopdf --title "$SUBJECT" -q $SOURCEFILE $OUTPUTFILE
文件流来自 PHP 中的字符串。
答案1
您应该能够使用/dev/stdin
PHP来做到这一点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