#php #laravel #http-headers
#php #laravel #http-заголовки
Вопрос:
Я пытаюсь использовать функции рисования фигур PHP с помощью фреймворка Laravel, но у меня возникли некоторые проблемы.
Итак, я просто чтобы проверить это, в основном просто скопировал пример из php.net и использовал его в закрытии и тестовом маршруте.
Route::get('maptest', function()
{
$image = imagecreatetruecolor(200, 200);
$red = imagecolorallocate($image, 227, 32, 32);
imagefilledrectangle($image, 100, 80, 50, 25, $red);
header('Content-Type: image/png');
imagepng($image);
imagedestroy($image);
});
выполнение этого способа работает нормально.
проблема в том, что я добавляю a Controller
и a View
в микс. Когда я устанавливаю заголовки, а что нет, и создаю a Response
, я получаю маленький значок сломанного изображения в верхнем левом углу окна, и на странице вообще ничего не загружается.
вот как я устанавливаю заголовки. (Я знаю, что это опубликовано повсюду, но ни одно из решений, которые я мог найти, похоже, не сработало для меня.)
public function show($id)
{
$user = User::find($id);
$view = View::make('profile/home', ['user' => $user]);
$response = Response::make($view, 200);
$response->header('Content-type', 'image/png');
return $response;
}
Итак, результат приведенного выше кода (внутри моего контроллера) дает мне небольшой значок сломанного изображения в верхнем левом углу окна.
Комментарии:
1. Почему вы устанавливаете значение
Content-type
toimage/png
, когда вы даже не выводите изображение?2. я, это происходит в представлении профиля / дома
3. Это не так. Вы выводите HTML в браузер. Не файл изображения. Что произойдет, если вы закомментируете строку, в которой вы задаете
Content-type
заголовок? Вы видите HTML-страницу?4. да, я вижу HTML, если я это прокомментирую. я думаю, я спрашиваю, где я должен установить заголовок для изображения, потому что, если я не установлю заголовок, функция imagepng() (в представлении) просто выводит кучу случайных символов.
5. Не вызывайте
imagejpeg()
в своем представлении. Вызовите его где-нибудь в другом месте (например, в вашем контроллере), захватите выходные данные с помощью выходного буфера и закодируйте их в base64. Оттуда вы можете просто использоватьimg
HTML-тег со строкой base64 в качестве источника изображения. Другим решением было бы иметь другой контроллер, который выводит только изображение, а затемimg
указывает ваш тег на этот контроллер.