#php #curl #dompdf
#php #curl #dompdf
Вопрос:
Я использую этот код для генерации QR-кода и его отображения:
<?php
$aux = 'qr_img0.50j/php/qr_img.php?';
$aux .= 'd=Textamp;';
$aux .= 'e=Hamp;';
$aux .= 's=4amp;';
$aux .= 't=P';
?>
<img width="250" src="<?php echo $aux; ?>" />
Он генерирует и отображает его без проблем,
но я не хочу его отображать, а загружаю в «dompdf» (генератор PHP PDF).
Я обнаружил, что не могу предоставить dompdf переменную «$aux» («<img src=’$aux’ />»). Переменная возвращает правильную строку, но dompdf не может ее отобразить (вероятно, из-за того, что это PHP-файл).
Я придумал file_get_contents, но, к моему удивлению, он вернул пустой файл.
Я использовал:
file_put_contents('tempqr.png', file_get_contents($qrc));
Это не из-за неправильных разрешений, потому что…
когда я ввел весь путь URL, он успешно «скопировал» файл (http://localhost:2180/work/qr_img0.50j/php/qr_img.php ?…), но я думаю, что это ненадежное решение из-за порта и прочего, что может меняться со временем. Я установил cURL, и та же проблема сохраняется: он отображается только с полным URL-адресом. Я попытался fopen «прочитать» изображение в буфер, и буфер остался пустым.
Может быть, кто-нибудь может помочь мне (и другим читателям), чтобы заставить эти две функции загружать файл (возможно, без всей ненадежности http?).
Или, может быть, есть другой способ генерировать изображения из «qr_img0.50j» без вызова php, которого я не знал…
Ответ №1:
Dompdf (начиная с версии 0.6.1) больше не будет анализировать PHP в вашем документе. Вам нужно будет сделать это перед передачей документа в Dompdf. Вероятно, самый простой способ сделать это — отобразить изображение и вставить его в документ в качестве uri данных.
Возможно, вам придется изменить свой QR-генератор для работы в этом потоке, если он не предназначен для выполнения из командной строки. В идеале это была бы просто вызываемая функция, что я и предполагал для примера.
С Dompdf 0.7.x:
<?php
// require dompdf autoloader, then ...
using DompdfDompdf;
$image = qr_img('Text', 'H', '4', 'P'); // assumine PNG output
$html = '<img width="250" src="data:image/png;base64,' . base64_encode($image) . '" />';
$dompdf = new Dompdf();
$dompdf->load_html($html);
$dompdf->render();
$dompdf->stream();
?>
К вашему сведению, та же проблема относится и к file_get_contents
. Он не анализирует PHP файла. Его можно использовать только для получения самого файла.
Независимо от конкретного метода, который вы используете для получения файла, результаты зависят от источника. Файлы, извлеченные из локальной файловой системы, не будут проанализированы на PHP. Файлы, полученные через веб-сервер, будут.
Комментарии:
1.Спасибо за это, я попробую, но не могли бы вы объяснить мне, почему
file_get_contents
работает с полным URL, учитывая, что эта команда не анализирует PHP (но у нее был)…2. Если вы предоставляете полный URL-адрес, то вы фактически извлекаете файл с веб-сервера. Веб-сервер проанализирует PHP перед отправкой вам файла… таким образом, вы получаете изображение. Если вы получите файл из локальной файловой системы, файл не будет проанализирован, и вы получите исходный код PHP, а не обработанный вывод.
3. Это имеет смысл… Но откуда вы взяли
qr_img('Text', 'H', '4', 'P');
?4. Я только что создал эту функцию. Вам нужно будет найти наилучший способ создания вашего изображения, поскольку вы не можете просто получить доступ к скрипту как есть через
exec
. Вам нужно будет написать функцию для его генерации.