2015-06-22 11 views
6

Na moim lokalnego rozwoju używam poniższy kod, który działa idealnie,laravel 5 -> getRealPath() doenst pokaz prawidłowa wartość

ale kiedy przesłanych witrynę do mojego dzielonego hostingu wszystko działało w porządku z wyjątkiem mojego przesłanie pliku . I już ustalone, że problem jest z udziałem ->getRealPath(), kiedy dd(); że dostanę tę ścieżkę: /data/sites/web/christophvhbe/tmp

Które nie istnieje na moim hostingu. Ale znalazłem, gdzie tymczasowe obrazy są przechowywane na moim hosting, który jest w tmp/ znajduje się tutaj: http://gyazo.com/e0199718324119109a4ff66321414e12.

Jak zmienić wartość ->getRealPath() na prawidłową?

$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); 

Używam pakietu Image/intervention do przesyłania i przechowywania zdjęć.

Odpowiedz

3

Prawdopodobnie głównym źródłem konta jest /data/sites/web/christophvhbe, a numer getRealPath jest całkowicie dokładny (to, co widzisz na FTP, prawdopodobnie jest to chrooted). W rezultacie Twój problem to $imagePath.

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

Albo, jeszcze lepiej, korzystać laravel za base_path i/lub public_path pomocników, więc jeśli kiedykolwiek zmienić hosting utrzymuje pracy czy ścieżki zmienić:

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

Jeśli konsultować swoje logi błędów, I” Założę się, że znalazłeś błędy uprawnień, próbując utworzyć plik w katalogu serwera /images, który na współdzielonym hostingu zdecydowanie nie będziesz mógł utworzyć ani uzyskać dostępu.

+0

to, co sugerujesz, to prawdziwy problem, public_path() i getRealPath nie są dokładne. rzeczywistą ścieżką do folderu z obrazami jest: www.christophvh.be/images/producten/img.png. Ale to nie jest to, co mówi, próbuje uzyskać dostęp do tymczasowej mapy. który obraz/interwencja używa do tymczasowego przechowywania oryginalnego obrazu, który myślę. Wiem, gdzie jest właściwa mapa tymczasowa, ale nie wiem, jak uzyskać do niej dostęp, ponieważ jest ona wyższa niż mój folder www. pokazany w linku, który opublikowałem na górze – Christophvh

+0

Więc jeśli używam twojej metody, otrzymuję ten błąd: NotWritableException w Image.php linii 138: Nie można zapisać danych obrazu do ścieżki (/ data/sites/web/christophvhbe/laravel /public/images/producten/1434939947-thosiba.png) – Christophvh

+0

Ścieżka i adres URL to zupełnie inne rzeczy i powinieneś zrozumieć różnicę. Używając mojej metody, masz poprawną ** ścieżkę **. Pojawia się teraz inny problem, ponieważ serwer internetowy nie może pisać w katalogu 'laravel/public/images'. Możesz dostosować jego uprawnienia do '777' za pomocą' chmod', lub jeśli twój host zezwala na używanie list ACL i/lub 'chown' możesz dać dostęp do serwera w ten sposób. Skonsultuj się z twoim hostem, jeśli potrzebujesz pomocy - to, co możesz zrobić, zależy od hosta. Powinieneś także rozważyć rezygnację z dzielonego hostingu, jeśli zamierzasz uruchomić Laravel. – ceejayoz