Условно вставить изображение в PHPWord doc в Xataface
На моем веб-сайте xataface есть действие, которое использует PHPWord для создания письма. Я пытаюсь подписать письмо с изображением подписи, но я не хочу просто хранить файл изображения на сервере. Я хочу, чтобы он был создан из PHP, чтобы я мог выполнять некоторые проверки прав доступа и отображать подпись только для "людей или страниц, которым разрешено это видеть".
Моей первой идеей было создание файла PHP, в котором изображение было бы встроено в виде данных и теоретически может отображать подпись, если запрос поступает через xataface, или пустое изображение того же размера, если это не так, но этот файл PHP не 't в контексте Xataface, поэтому он не может сказать, кто вошел в систему:-(Это работает - изображение правильно в документе, просто я не могу контролировать, кто может его видеть.
Затем я попытался обернуть функциональность вышеупомянутого PHP в обработчик действия, а затем с помощью $section->addMemoryImage("http://localhost/site/index.php?-action=sigfile");
в моем сценарии, который генерирует документ PHPWord, но в журнале PHP появляется "неподдерживаемый тип изображения" (без использования обработчика).
Я также попытался поместить только "код рабочего изображения" в templates / sigfile.html, но он также получает "неподдерживаемый тип изображения" (если я перейду прямо к файлу PHP, он будет работать. Если я оберну его в любой материал xataface это не так)
Единственное, что у меня есть - это использование какого-то "скрытого ключа", например, PHPWord doc $section->addMemoryImage("http://localhost/site/sig.php?a=1&b=2&c=3");
и сценарий просто ищет b=2
- остальное только шум, но это вряд ли безопасно...
Другая идея заключается в том, чтобы php записал образ на диск (на стороне сервера), использовал его и затем удалил. Не уверен, насколько это безопасно.
Я упускаю какой-то простой способ сделать это?
1 ответ
На вашем месте я бы написал изображение во временное хранилище непосредственно перед вызовом addMemoryImage(). Тогда просто укажите местный путь. Затем удалите изображение, когда это можно сделать безопасно... в зависимости от того, как работает PHPWord, это может быть сразу после вызова addMemoryImage () или после некоторого более позднего шага рендеринга.
Ваша цель использования http:// url будет работать, если вы передадите идентификатор сеанса как часть URL. см. здесь для деталей об этом
Таким образом, он будет использовать тот же сеанс. ОДНАКО, вам нужно остерегаться тупиков, если вы делаете это, потому что PHP-сессии блокируются... только один запрос может получить доступ к данной сессии за раз. Поэтому вам нужно будет сначала закрыть сеанс в первом действии, прежде чем делать фоновый запрос.
Гораздо проще просто записать изображение во временное хранилище и удалить, когда закончите.