На моем веб-сайте 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 документ делает $section->addMemoryImage("http://localhost/site/sig.php?a=1&b=2&c=3");
и сценарий просто ищет b=2
— остальное только шум, но это вряд ли безопасно …
Другая идея заключается в том, чтобы php записал образ на диск (на стороне сервера), использовал его и затем удалил. Не уверен, насколько это безопасно.
Я упускаю какой-то простой способ сделать это?
На вашем месте я бы написал изображение во временное хранилище непосредственно перед вызовом addMemoryImage (). Тогда просто укажите местный путь.
Затем удалите изображение, когда это можно сделать безопасно … в зависимости от того, как работает PHPWord, это может быть сразу после вызова addMemoryImage () или после некоторого более позднего шага рендеринга.
Ваша цель использования http: // url будет работать, если вы передадите идентификатор сеанса как часть URL. см. здесь для деталей об этом
Таким образом, он будет использовать тот же сеанс. ОДНАКО вам нужно остерегаться взаимоблокировок, если вы делаете это, потому что PHP-сессии блокируются … только один запрос может получить доступ к данной сессии за раз. Поэтому вам нужно сначала закрыть сеанс в первом действии, прежде чем делать фоновый запрос.
Гораздо проще просто записать изображение во временное хранилище и удалить, когда закончите.
Других решений пока нет …