2015-06-22 28 views
6

在我的地方發展我使用的代碼如下所示,其中工程完美,laravel 5 - > getRealPath()doenst顯示正確的值

,但是當我上傳的網站,我的共享主機的一切,除了我的文件上傳工作得很好。我已經確定該問題涉及 ->getRealPath(),當我dd();,我得到這個路徑: /data/sites/web/christophvhbe/tmp

這並不在我的主機存在。但是我發現臨時圖像存儲在我的主機上,位於tmp/位於:http://gyazo.com/e0199718324119109a4ff66321414e12

如何將->getRealPath()的值更改爲正確的值?

$fileName = time() . '-' . $request->file('foto')->getClientOriginalName(); 
$product->foto = $fileName; 
$product->save(); 

$imagePath = '/images/producten/'. $fileName; 

$image = Image::make($request->file('foto')->getRealPath())->fit(300)->save($imagePath); 

我使用的是Image/intervention包來上傳和存儲圖像。

回答

3

您的帳戶的根目錄是/data/sites/web/christophvhbe,並且getRealPath是完全準確的(您在FTP中看到的可能是chrooted)。因此,您的$imagePath實際上是問題所在。

$imagePath = '/data/sites/web/christophvhbe/images/producten/'. $fileName; 

或者,更好的是,使用Laravel的base_path和/或public_path助手,所以如果你改變託管它保持工作的路徑是否發生變化:

$imagePath = public_path() . '/images/producten/' . $fileName; 

如果您諮詢您的錯誤日誌,我我敢打賭你會發現試圖在服務器的/images目錄中創建一個文件的權限錯誤,這個目錄在共享主機上絕對不能創建或訪問。

+0

你提出的是實際問題,public_path()和getRealPath根本不準確。 圖片文件夾的實際路徑是:www.christophvh.be/images/producten/img.png。但這不是它所說的,它試圖訪問一個臨時地圖。該圖像/干預用於臨時存儲我認爲的原始圖像。我知道正確的臨時地圖在哪裏,但我不知道如何訪問它,因爲它比我的www文件夾更高。顯示在我發佈在頂部的鏈接 – Christophvh

+0

因此,如果我使用你的方法,我得到這個錯誤: NotWritableException in Image.php line 138: 無法將圖像數據寫入路徑(/ data/sites/web/christophvhbe/laravel /public/images/producten/1434939947-thosiba.png) – Christophvh

+0

路徑和URL是完全不同的東西,你應該明白它們的區別。使用我的方法,你有正確的**路徑**。你現在遇到了一個不同的問題,那就是web服務器無法寫入'laravel/public/images'目錄。您可以使用'chmod'將其權限調整爲'777',或者如果您的主機允許使用ACL和/或chown,則可以以這種方式訪問​​Web服務器。如果您需要幫助,請諮詢您的主機 - 您可以做的事情因主機而異。如果您要運行Laravel,您還應該考慮下載共享主機。 – ceejayoz