在 Xataface 的 PHPWord 文档中有条件地插入图像

Conditionally insert image in PHPWord doc in Xataface

我的 xataface 网站有一个使用 PHPWord 创建字母的操作。我正在尝试用签名图像签署这封信,但我不想只将图像文件保留在服务器上。我希望它是从 PHP 创建的,这样我就可以进行一些权限检查,并且只显示 "people or pages who are allowed to see it".

的签名

我的第一个想法是创建一个 PHP 文件,其中包含内联图像作为数据,理论上,如果请求来自 xataface,则可以显示签名,或者如果请求来自 xataface,则可以显示相同大小的空白图像没有,但是这个 PHP 文件不在 Xataface 上下文中,所以它不能告诉谁登录了:-( 它确实有效 - 图片在文档中是正确的,只是我无法控制谁可以看到它。

接下来我尝试将上述 PHP 的功能包装到动作处理程序中,然后 在生成 PHPWord 文档的脚本中使用 $section->addMemoryImage("http://localhost/site/index.php?-action=sigfile");,但在 PHP 日志中得到一个 "unsupported image type"(没有进入处理程序)。

我也尝试过将 "working image code" 放入 templates/sigfile.html,但它也会得到 "unsupported image type"(如果我直接进入 PHP 文件它工作。如果我把它包装在任何 xataface 东西它不)

我唯一能做的就是使用一些 "hidden key" 例如PHPWord 文档 $section->addMemoryImage("http://localhost/site/sig.php?a=1&b=2&c=3"); 并且脚本只是在寻找 b=2 - 其余的只是杂音,但这并不安全...

另一个想法是 php 将图像写入磁盘(服务器端),使用它然后删除。不确定那有多安全。

我是否遗漏了一些简单的方法?

如果我是你,我会在你调用 addMemoryImage() 之前将图像写入临时存储。然后只引用本地路径。 然后在安全的情况下删除图像...取决于 PHPWord 的工作方式,可能在 addMemoryImage() 调用之后立即删除,也可能在稍后的渲染步骤之后删除。

如果您将会话 ID 作为 URL 的一部分传递,您使用 http:// url 的目标将会实现。 see here for details on that

这样它将使用相同的会话。但是,如果这样做,您需要提防死锁,因为 PHP 会话正在锁定......一次只能有一个请求访问给定会话。因此,在发出后台请求之前,您需要先在第一个操作中关闭会话。

只需将图像写入临时存储并在完成后删除就容易多了。