【问题标题】:Conditionally insert image in PHPWord doc in Xataface有条件地在 Xataface 的 PHPWord 文档中插入图像
【发布时间】:2016-08-23 07:57:10
【问题描述】:

我的 xataface 网站有一个使用 PHPWord 创建字母的操作。我正在尝试使用签名图像签署这封信,但我不想只将图像文件保留在服务器上。我希望它是从 PHP 创建的,所以我可以进行一些权限检查,并且只向“允许查看它的人或页面”显示签名。

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

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

我也尝试将“工作图像代码”放入模板/sigfile.html,但这也得到“不支持的图像类型”(如果我直接进入 PHP 文件,它可以工作。如果我将它包装在任何它没有的 xataface 东西)

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

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

我错过了一些简单的方法吗?

【问题讨论】:

    标签: php phpword xataface


    【解决方案1】:

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

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

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

    将图像写入临时存储并在完成后删除要容易得多。

    【讨论】:

    • 感谢史蒂夫(史蒂夫?)。这是我的一个想法,但我在想可能有更聪明的方法。使用 xataface 动作几乎可以工作,但无法识别图像,所以我猜测动作会混淆 gd 图像或 PHP 字。
    猜你喜欢
    • 2012-11-25
    • 2019-06-13
    • 1970-01-01
    • 2023-03-24
    • 2018-05-28
    • 1970-01-01
    • 1970-01-01
    • 2011-07-11
    • 1970-01-01
    相关资源
    最近更新 更多