Скрыть вывод из команды proc_open - PullRequest
0 голосов
/ 26 сентября 2019

У меня есть вопрос.Возможно, это новичок, но на самом деле я не могу найти решение своей проблемы, и раньше я не работал с этой командой.Может быть, кто-то может дать мне подсказку.

Я использую команду php proc_open для запуска pdflatex.exe для создания PDF-файла из tex файла.Код выглядит следующим образом:

$descriptorspec = array(
    0 => array("pipe", "r"),  
    1 => array("pipe", "w"), 
    2 => array("file", "D:/Freigabe/error.txt", "a")
);

$cwd = str_replace("\\", "/", __DIR__) .'/Tex/Working';
$env = null;
$this->execute = '"' .str_replace('/','\\',env('PDFLATEXENGINE', 'C:/Program Files (x86)/MiKTeX 2.9/miktex/bin/pdflatex.exe')) .'" -jobname="' .str_replace('.pdf','',$this->publicPdfFile) .'" -output-directory="' .str_replace("\\", "/", $this->pdfTargetPath) .'" "' .str_replace("\\", "/", str_replace(".tex","",$this->workingFilePath));
$process = proc_open('"' .$this->execute .'"', $descriptorspec, $pipes, $cwd, $env);
if (is_resource($process)) {
    fwrite($pipes[0], '<?php print_r($_ENV); ?>');
    fclose($pipes[0]);
    echo stream_get_contents($pipes[1]);
    fclose($pipes[1]);
    $return_value = proc_close($process);
}

Один из примеров команды такой:

$this->execute = '"D:\Program Files\TeXLive\texlive\2019\bin\win32\pdflatex.exe" -jobname="Rechnung_000036-19" -output-directory="D:/Files/Company/Tool/app/Classes/Rechnung/LaTex/Output/" "D:/Files/Company/Tool/app/Classes/Rechnung/LaTex/Output/Rechnung_FUmtC1P7lknTzvDfstMM_000036-19"';

Это прекрасно работает, но сама команда выдает некоторый вывод при генерации файла PDF,С этим кодом выше вывод команды выводится на мою веб-страницу и выглядит так:

enter image description here

Я также знаю, почему это происходитраспечатаны.Это просто из-за этой строки кода:

fwrite($pipes[0], '<?php print_r($_ENV); ?>');

Но когда я закомментирую команду print_r(), файл PDF больше не создается.Я проверил решение, чтобы подавить вывод командного окна.Я только нашел > /dev/null, но это я тоже получаю не работать.

У кого-нибудь есть решение или подсказка для моей проблемы?Спасибо заранее!Если какая-либо информация отсутствует, пожалуйста, дайте мне знать.Я обновлю оригинальный пост тогда.

1 Ответ

0 голосов
/ 26 сентября 2019

Я нашел ответ.Я могу подавить вывод console, просто добавив >nul к команде.Так что это мое решение:

$process = proc_open('"' .$this->execute .'" >nul', $descriptorspec, $pipes, $cwd, $env);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...