Я хотел бы опубликовать ответ, который также использует curl для получения содержимого, и mpdf , чтобы сохранить результаты в pdf, поэтому вы получите все шаги типичного варианта использования.
// import mpdf somewhere
require_once dirname(__FILE__) . '/mpdf/vendor/autoload.php';
// get mpdf instance
$mpdf = new \Mpdf\Mpdf();
// src php file
$mysrcfile = 'http://www.somesite.com/somedir/mysrcfile.php';
// where we want to save the pdf
$mydestination = 'http://www.somesite.com/somedir/mypdffile.pdf';
// encode $_POST data to json
$json = json_encode($_POST);
// init curl > pass the url of the php file we want to pass
// data to and then print out to pdf
$ch = curl_init($mysrcfile);
// tell not to echo the results
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1 );
// set the proper headers
curl_setopt($ch, CURLOPT_HTTPHEADER, [ 'Content-Type: application/json', 'Content-Length: ' . strlen($json) ]);
// pass the json data to $mysrcfile
curl_setopt($ch, CURLOPT_POSTFIELDS, $json);
// exec curl and save results
$html = curl_exec($ch);
curl_close($ch);
// parse html and then save to a pdf file
$mpdf->WriteHTML($html);
$this->mpdf->Output($mydestination, \Mpdf\Output\Destination::FILE);
В $ mysrcfile я буду читать данные json, подобные этому (как указано в предыдущих ответах):
$data = json_decode(file_get_contents('php://input'));
// (then process it and build the page source)
Символ escape-функции Windows по какой-либо причине. ^ / g0]
echo some string ^< with angle ^> brackets >>myfile.txt
Вы также можете использовать двойные кавычки для выхода из специальных символов ...
echo some string "<" with angle ">" brackets >>myfile.txt
echo some string "<" with angle ">" brackets >>con
приводит к: некоторой строке & quot; & lt; & quot; с углом «& gt;» & quot; скобки i>, но OP хочет некоторую строку & lt; с углом & gt; скобки I>
– Ross Bradbury
16 June 2011 в 15:31
Существуют методы, которые избегают escape-последовательностей ^
.
Вы можете использовать переменные с задержкой расширения. Ниже представлен небольшой демонстрационный скрипт
@echo off
setlocal enableDelayedExpansion
set "line=<html>"
echo !line!
. Или вы можете использовать цикл FOR / F. Из командной строки:
for /f "delims=" %A in ("<html>") do @echo %~A
Или из пакетного сценария:
@echo off
for /f "delims=" %%A in ("<html>") do echo %%~A
Причина, по которой эти методы работают, состоит в том, что как замедленное расширение, так и расширение переменной FOR происходят после того, как специальные операторы, такие как <
, >
, &
, |
, &&
, ||
разобраны. См. . Как интерпретатор сценариев Windows (CMD.EXE) анализирует сценарии? для получения дополнительной информации.
sin3.14 указывает, что для труб может потребоваться несколько экранов . Например:
echo ^^^<html^^^>|findstr .
Труды причин требуют нескольких экранов, потому что каждая сторона канала выполняется в новом CMD-процессе, поэтому строка обрабатывается несколько раз. См. . Почему задержка с расширением заканчивается, когда внутри блок кода кода? для объяснения многих неудобных последствий реализации канала Window.
Существует еще один способ избежать множественных экранов при использовании трубы. Вы можете явно создать свой собственный CMD-процесс и защитить одиночный побег с помощью кавычек:
cmd /c "echo ^<html^>"|findstr .
Если вы хотите использовать технику с задержкой расширения, чтобы избежать побегов, то есть еще больше сюрпризов (вы не можете если вы являетесь экспертом по дизайну CMD.EXE, но нет официальной документации MicroSoft, которая объясняет этот материал)
Помните, что каждая сторона канала выполняется в своем собственном процессе CMD.EXE , но процесс не наследует отложенное состояние расширения - по умолчанию он отключен. Таким образом, вы должны явно создать экземпляр собственного процесса CMD.EXE и использовать параметр / V: ON, чтобы включить замедленное расширение.
@echo off
setlocal disableDelayedExpansion
set "line=<html>"
cmd /v:on /c echo !test!|findstr .
Обратите внимание, что замедленное расширение выключено в родительском пакетном скрипте.
Но все ад разрывается, если в родительском скрипте включено замедленное расширение. Ниже показано not :
@echo off
setlocal enableDelayedExpansion
set "line=<html>"
REM - the following command fails
cmd /v:on /c echo !test!|findstr .
Проблема заключается в том, что !test!
расширяется в родительском скрипте, поэтому новый процесс CMD пытается разобрать незащищенные <
и >
.
Вы можете избежать !
, но это может стать сложным, потому что это зависит от того, цитируется ли !
или нет.
Если не указано , тогда требуется двойной escape:
@echo off
setlocal enableDelayedExpansion
set "line=<html>"
cmd /v:on /c echo ^^!test^^!|findstr .
Если указано, то используется один побег:
@echo off
setlocal enableDelayedExpansion
set "line=<html>"
cmd /v:on /c "echo ^!test^!"|findstr .
Но есть удивительный трюк, который позволяет избежать всех экранов - левая сторона трубы препятствует преждевременному расширению родительского скрипта !test!
:
@echo off
setlocal enableDelayedExpansion
set "line=<html>"
(cmd /v:on /c echo !test!)|findstr .
Но я полагаю, что даже это не бесплатный обед, потому что парсерный парсер вводит дополнительное (возможно, нежелательное) пространство в конец, когда используются круглые скобки.
Aint batch scripting fun; -)
Правда, официальный escape-символ - ^
, но будьте осторожны, потому что иногда вам нужны три символа ^
. Это просто иногда :
C:\WINDOWS> echo ^<html^>
<html>
C:\WINDOWS> echo ^<html^> | sort
The syntax of the command is incorrect.
C:\WINDOWS> echo ^^^<html^^^> | sort
<html>
C:\WINDOWS> echo ^^^<html^^^>
^<html^>
. Один из трюков из этой бессмыслицы состоит в том, чтобы использовать команду, отличную от echo
, для вывода и цитаты с двойными кавычками:
C:\WINDOWS> set/p _="<html>" <nul
<html>
C:\WINDOWS> set/p _="<html>" <nul | sort
<html>
Обратите внимание, что это не будет сохранять начальные пробелы в тексте приглашения.
^^^
также необходимы для удаления команд в консоли Azure DOS / Kudu.
– lionello
13 February 2017 в 06:46
Экранирование скобок ala unix тоже не работает:
echo some string \ & lt; с углом \> скобки >> myfile.txt
blockquote>Обратная косая черта будет считаться началом абсолютного пути.
echo \
работает, как и ожидалось. - Но да, "\ & quot; был бы неправильным выбором для символа escape-командной строки, поскольку каждая команда / программа, которая нуждалась в пути или имени файла, вы должны были бы ввести `\` вместо этого.
– BrainSlugs83
16 September 2014 в 20:06
Чтобы использовать специальные символы, такие как «>» в Windows с эхом, перед этим вам нужно поместить специальный escape-символ.
Например,
echo A->B
не будет работать, так как '>' должен быть экранирован '^':
echo A-^>B
См. также escape-последовательностей .
Имеется короткий командный файл, который печатает базовый набор специального символа и их escape-последовательности.
echo some string ^< with angle ^> brackets >>con
приводит к: некоторой строке & lt; с углом & gt; скобки I> – Ross Bradbury 16 June 2011 в 15:33