2015-06-22 6 views
6

Auf meiner lokale Entwicklung ich den Code verwenden, unten gezeigt, die perfekt funktioniert,Laravel 5 -> getRealPath() Doenst zeigen richtiger Wert

aber wenn ich die Seite meines Shared-Hosting alles hochgeladen hat gut funktioniert, außer meinem Datei-Upload . Ich bestimmt schon, dass das Problem ->getRealPath() ist beteiligt, wenn ich dd();, dass ich diesen Weg bekommen: /data/sites/web/christophvhbe/tmp

, die nicht auf meinem Hosting existiert. Aber ich habe gefunden, wo die temporären Bilder auf meinem Hosting gespeichert sind, das ist in der tmp/ befindet sich hier: http://gyazo.com/e0199718324119109a4ff66321414e12.

Wie kann ich den ->getRealPath() Wert auf den richtigen Wert ändern?

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

Ich verwende das Image/intervention Paket, um Bilder hochzuladen und zu speichern.

Antwort

3

Wahrscheinlichkeiten sind die Wurzel Ihres Kontos ist /data/sites/web/christophvhbe, und das getRealPath ist völlig korrekt (was Sie in FTP sehen, ist wahrscheinlich chrooted). Als Ergebnis ist Ihr $imagePath eigentlich das Problem.

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

Oder, noch besser, verwenden Sie die Laravel base_path und/oder public_path Helfer so, wenn Sie jemals die Pfade, wenn ändern Hosting-Arbeit hält sie ändern:

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

Wenn Sie Ihre Fehlerprotokolle konsultieren, ich Ich wette, Sie finden Berechtigungen Fehler beim Erstellen einer Datei im Verzeichnis /images des Servers, die auf Shared Hosting Sie nicht in der Lage sein werden, zu erstellen oder zuzugreifen.

+0

was Sie vorschlagen, ist das eigentliche Problem, public_path() und getRealPath sind überhaupt nicht korrekt. Der tatsächliche Pfad zum Bilderordner lautet: www.christophvh.be/images/producten/img.png. Aber das ist nicht das, was es sagt, es versucht, auf eine temporäre Karte zuzugreifen. welches Bild/Intervention verwendet, um das ursprüngliche Bild vorübergehend zu speichern, denke ich. Ich weiß, wo die richtige temporäre Karte ist, aber ich weiß nicht, wie ich darauf zugreifen soll, weil sie höher ist als mein www-Ordner. gezeigt in der Verbindung, die ich oben notierte – Christophvh

+0

So, wenn ich Ihre Methode verwende, erhalte ich diesen Fehler: NotWritableException in Image.php Zeile 138: Kann Bilddaten in Pfad (/ data/sites/web/christophvhbe/laravel nicht schreiben /public/images/producten/1434939947-thosiba.png) – Christophvh

+0

Pfad und URL sind völlig verschiedene Dinge und Sie sollten den Unterschied verstehen. Mit meiner Methode haben Sie den richtigen ** Pfad **. Sie bekommen jetzt ein anderes Problem, nämlich dass der Webserver nicht in das Verzeichnis 'laravel/public/images' schreiben kann. Sie können seine Berechtigungen auf '777' mit' chmod' einstellen, oder wenn Ihr Host die Verwendung von ACLs und/oder 'chown' erlaubt, können Sie dem Webserver auf diese Weise Zugriff gewähren. Wenden Sie sich an Ihren Host, wenn Sie Hilfe benötigen - was Sie tun können, variiert von Host zu Host. Sie sollten auch erwägen Shared Hosting zu entfernen, wenn Sie Laravel laufen. – ceejayoz