2012-09-23 31 views
1

我正在使用MySQL數據庫來保存一些字體。我需要使用自定義字體家族文本創建圖像。我使用SplTempFileObject處理setfont程序方法,但這裏是imagick說:SplTempFileObject和Imagick

Fatal error: Uncaught exception 'ImagickDrawException' with message 'The given font is not found in the ImageMagick configuration and the file ($_SERVER['DOCUMENT_ROOT]php:/temp) is not accessible' 

(當然$ _ SERVER [「DOCUMENT_ROOT」]是真正的價值,我只是取代它):)

任何解決方案或我必須保存文件系統中的字體?

下面是代碼:

$image = new \Imagick(); 
$draw = new \ImagickDraw(); 

$temp = new \SplTempFileObject(); 
$temp->fwrite($font->getFile()->getContent()); 

$image->newImage(550, 50, "black"); 
$draw->setFont($temp); 

$字體是從數據庫數據。我認爲這個問題是因爲ImagickDraw :: setFont()相對於DOC ROOT搜索字體。

+0

哪些呢的var_dump(is_dir($ _ SERVER [ 'DOCUMENT_ROOT'] 'PHP:/ TEMP'。))輸出? – artragis

+0

您可以添加顯示的代碼是否使用'SplTempFileObject' – Baba

+0

@artragis否它不是dir。而且它不應該。我想說的是,imagick相對於文檔根目錄搜索字體。 – CappY

回答

0

我認爲你的問題來自你的地址的錯誤。 當你說"/".$temp->getFileName()根據文檔你沒有得到路徑。 因此,如果您還沒有找到路徑,那麼您的前導「/」會說「從服務器根目錄」。不酷。

您可以使用getRealPath做你想做的。

3

該問題是由SplTempFileObject引起的,每次默認使用內存中緩存2MB。 \SplTempFileObject->getFileName()將返回php://temp \SplTempFileObject->getFileInfo()將返回一個空的對象/文件指針 \SplTempFileObject->getRealPath()將始終返回一個空字符串!

如果你想PHP寫文件系統中的一個真正的文件,你必須提供內存限制0的結構參數,但你仍然不會得到有效的SplFileInfo也將pathName也不文件名就比其他php://temp/maxmemory:0

是:這是奇怪的,遠離「一個簡單的界面」,用於創建臨時文件..

的詳細信息,請看看http://php.net/manual/spltempfileobject.construct.php

回去後,使用舊tempfile()tempnam()。我的解決方案:的

代替 $file = new \SplTempFileObject();

我用 $file = new \SplFileObject(tempnam(sys_get_temp_dir(), rand()), 'w+');

+0

添加了一個錯誤報告:https://bugs.php.net/bug.php?id = 64811 –