2016-08-23 71 views
0

我的xataface網站有一個使用PHPWord創建字母的操作。我試圖用簽名圖像簽署信件,但我不想只將圖像文件保存在服務器上。我希望它是從PHP創建的,因此我可以執行一些權限檢查,並僅向「允許查看它的人員或頁面」顯示簽名。有條件地在Xataface中的PHPWord文檔中插入圖像

我的第一個想法是創建一個具有圖像內嵌數據的PHP文件,理論上可以在請求通過xataface顯示簽名時顯示簽名,或者如果沒有顯示相同大小的空白圖像, PHP文件不在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()調用之後立即執行,或者可能會在稍後執行一些步驟後執行。

如果您將會話ID作爲URL的一部分傳遞,那麼使用http:// url的目標將會有效。 see here for details on that

這樣它會使用同一個會話。但是,如果你這樣做,你需要小心死鎖,因爲PHP會話是鎖定的......一次只有一個請求可以訪問給定的會話。因此,在進行後臺請求之前,您需要先在第一個操作中關閉會話。

只需將圖像寫入臨時存儲並在完成時刪除就容易多了。

+0

謝謝Steve(史蒂夫?)。這是我的想法之一,但我認爲可能有一個更聰明的方法。使用xataface動作幾乎奏效,但圖像不被識別,所以我猜測一些動作會混淆gd圖像或PHP字。 – John3136