2013-05-15 59 views
2

我想從客戶端發送的base64代碼在我的服務器上傳目錄中創建一個圖像。下面的代碼相同:PNG圖像正在從base64_decode保存時被裁剪

<?php 
    $dataURI = $_REQUEST['dataURI']; 

    $dataURI = str_replace('data:image/png;base64,', '', $dataURI); 
    $dataURI = str_replace(' ', '+', $dataURI); 

    $data = base64_decode($dataURI); 

    // $filename = UPLOAD_DIR . uniqid() . '.png'; 
    $filename = UPLOAD_DIR . 'saved-image' . '.png'; 

    $status = file_put_contents($filename, $data); 

?> 

圖像被成功創建,但由於某種原因圖像被裁剪爲一半(水平)。誰能告訴我,這有什麼問題?

以下是原始和保存/創建的映像:

原始圖像

創建的圖像

+1

可能被截斷的字符串長度? –

+1

@Luke說什麼 - 你如何提交給服務器?不要使用'$ _REQUEST' - 顯式選擇其中一種方法,在這種情況下請確保它是'$ _POST',因爲它有更高的限制。 – Emissary

+0

謝謝。將嘗試它並在這裏發佈。 – ggauravr

回答

1

您是通過HTTP參數讓你的數據。這些實際上可以在大小的限制(如Apache的默認的。此限制Web服務器之間變化,通常可以在你的服務器配置PE設置。

還要注意的是PHP在php.ini一個post_max_size默認爲2MB

+0

@Martin ..感謝您的信息。但在我的php.ini文件中的限制被發現是8M ..將檢查出Apache配置,如果有的話。 – ggauravr

1

你可能有一些問題,編碼:

$dataURI = str_replace(' ', '+', $dataURI); 

貌似這裏試圖撤消更換+即發生某處 - 大多數可能有人urldecoded的/正斜槓也一部分的base64符號集,所以我懷疑你的+符號也搞砸了。

我會做的是仔細追蹤這些數據的來源並觀察所做的轉換。

+0

他沒有撤銷'+',而是用'+'替換了一個空格。看到php.net:'混合str_replace(混合$搜索,混合$替換,混合$ subject [,int和$ count])' –

+0

換句話說:在執行代碼之前,用base64符號'+'代替一個空間 - 最有可能的一些urldecoding。他用str_replace來解決這個問題,但沒有真正探究更深的原因,爲什麼這是必要的。 –

+0

@PaulDixon ..正如你所說我沒有深入瞭解爲什麼這樣做..只是學習的東西,並從一些博客得到的片段。但切換該行代碼不會影響創建的圖像。 – ggauravr

0

確認您正在寫入文本文件而不是數據庫。我最近試圖解決這個問題。事實證明,我設置爲text的數據庫列類型不夠大,無法存儲圖像。我的圖像像你的圖像回來看起來。我切換到longtext,並解決了我的問題。