fluxo de arquivo de entrada para o comando

2

Como é possível enviar um fluxo de arquivos para este comando em vez de um arquivo?

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

O fluxo de arquivos é de uma string em PHP.

    
por clarkk 26.03.2015 / 13:45

4 respostas

1

Você deve ser capaz de fazer isso usando /dev/stdin e proc_open () do PHP. Inicie o processo com um comando como

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

e canalize o HTML que você tem em sua variável para o processo em execução.

    
por 26.03.2015 / 13:53
0

para fazer um programa que abre um arquivo pelo nome lido no pipeline, dê a ele o nome de dispositivo especial /dev/stdin ... por exemplo:

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

ou faça isso antes do comando que você mostrou:

SOURCEFILE=/dev/stdin

então o programa irá open("/dev/stdin",...) , a menos que tenha lógica destinada a derrotar isso.

    
por 26.03.2015 / 14:10
0

adivinhando por comentários, você parece conseguir fazer isso com um arquivo temporário, por que não criar um pipe nomeado?

 mknod magritte p

dentro do seu código php, apenas escreva para magritte.

wkhtmltopdf deve ser executado com

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

você pode especificar o local com mais precisão.

Ainda adivinhando, wkhtmltopdf é executado dentro do php?

se sim, você precisa rodar como um processo em segundo plano, veja função exec do php

a chamada para exec deve ser feita antes de gravar no pipe.

    
por 26.03.2015 / 14:36
0

A coisa certa é usar substituição de processos .

wkhtmltopdf --title "$SUBJECT" -q <(command_with_output_stream) $OUTPUTFILE
    
por 26.03.2015 / 20:49