Veröffentlicht 16. August 20196 j Hallo ich habe versucht über folgenden Code ein Image aus einem Unterverzeichnis im Browser anzuzeigen. Leider werden nur die Bilder angezeigt die direkt unter meinem Verzeichnis sind. Das Verzeichnis aus der ich die Bilder anzeigen möchte liegt unter /var/www/cloud_storage/ und die PHP Datei die darauf zugreifen möchte liegt unter /var/www/html/tp/test/upload/... Im Anhang befindet sich ein Bild, das was auf dem Bild zu sehen ist ist das Ergebnis meines Quellcodes. Das eine Bild was dort angezeigt wird ist das Bild welches sich direkt unter meinem Unterverzeichnis befindet (welches quasi Prioblemlos angezeigt wird). Die anderen Bilder sind die die sich im /var/www/cloud_storage Verzeichnis befinden. In den Error.logs habe ich nachgesehen. Da werden mir keine Meldungen angezeigt... Was muss ich hier machen damit die Bilder problemlos angezeigt werden können? Ich bitte um Hilfe! Vielen Dank im Voraus! Der Quellcode: $storagefile_srv01_user_verzeichnis_dokumente = $storagefile_srv01.md5($email).'/Dokumente/'; if (is_dir($storagefile_srv01_user_verzeichnis_dokumente)) { if($open = opendir($storagefile_srv01_user_verzeichnis_dokumente)) { while(($file = readdir($open)) != false) { if ($file == '.' | $file == '..') continue; echo "<img src='".$storagefile_srv01_user_verzeichnis_dokumente.$file."' width = '150' height= '150' >"; } closedir($open); } } echo "<img src='/tp/Bilder/Hintergrundbild.jpg' width = '150' height= '150' >";
17. August 20196 j Alles, was du über den Browser anzeigen lassen möchtest (in diesem Fall $storagefile_srv01_user_verzeichnis_dokumente.$file) muss über HTTP erreichbar sein. Um das zu erreichen, gibt es verschiedene Möglichkeiten: Das Verzeichnis /var/www/cloud_storage/ über HTTP verfügbar machen. Dazu musst du, je nachdem was für eine Server-Software (z.B. Apache oder nginx) du verwendest, entsprechend die Konfiguration des Webservers anpassen. Zum Beispiel machst du die Dateien darin unter "storage.domain.tld" verfügbar, dann lautet die Adresse zum Bild http://storage.domain.tld/$file. Das bringt den Nachteil mit sich, dass alle Dateien dort frei zugänglich sind. Du kopierst die abzurufenden Daten erst in ein von HTTP erreichbares Verzeichnis, dann bindest du das Bild entsprechend ein. Dann sammeln sich aber die Dateien nochmal an einer anderen Stelle an, deshalb ist das nicht zu empfehlen. Vielleicht könnte man irgendwelche Linux-Spielereien wie einen Symlink auf das cloud_storage-Verzeichnis machen, um die Dateien aus /var/www/html/... zugänglich zu machen. Du könntest ein PHP-Script "get-file.php?file=foo.bar" schreiben, das dann die Datei einliest und zurück gibt, indem es die Datei /var/www/cloud_storage/foo.bar einliest und den Inhalt einfach ausgibt. Hierbei nicht vergessen, den Content-Type header anzupssen, dass dieser zur gespeicherten Datei passt.
18. August 20196 j Autor Alles, was du über den Browser anzeigen lassen möchtest (in diesem Fall $storagefile_srv01_user_verzeichnis_dokumente.$file) muss über HTTP erreichbar sein. Um das zu erreichen, gibt es verschiedene Möglichkeiten: Das Verzeichnis /var/www/cloud_storage/ über HTTP verfügbar machen. Dazu musst du, je nachdem was für eine Server-Software (z.B. Apache oder nginx) du verwendest, entsprechend die Konfiguration des Webservers anpassen. Zum Beispiel machst du die Dateien darin unter "storage.domain.tld" verfügbar, dann lautet die Adresse zum Bild http://storage.domain.tld/$file. Das bringt den Nachteil mit sich, dass alle Dateien dort frei zugänglich sind. Du kopierst die abzurufenden Daten erst in ein von HTTP erreichbares Verzeichnis, dann bindest du das Bild entsprechend ein. Dann sammeln sich aber die Dateien nochmal an einer anderen Stelle an, deshalb ist das nicht zu empfehlen. Vielleicht könnte man irgendwelche Linux-Spielereien wie einen Symlink auf das cloud_storage-Verzeichnis machen, um die Dateien aus /var/www/html/... zugänglich zu machen. Du könntest ein PHP-Script "get-file.php?file=foo.bar" schreiben, das dann die Datei einliest und zurück gibt, indem es die Datei /var/www/cloud_storage/foo.bar einliest und den Inhalt einfach ausgibt. Hierbei nicht vergessen, den Content-Type header anzupssen, dass dieser zur gespeicherten Datei passt. So ich hab es mit dem Symlink hinbekommen, es handelt sich hierbei um User Daten ich hab die bei mir nun ins /var/www/html/tp/ Ordner verlinkt. Wie sicher ist das ? Da kommt doch keiner ausser mir daran oder? Ich will nur das die User die sich bei mir auf dem Server anmelden ins Verzeichnis zugreifen könnenVielen Dank für die große Hilfe
18. August 20196 j Hi, so wie Du es aktuell machst, wird jeder, den den Link zu dem Bild kennt, das Bild herunterladen können. Ich sehe momentan keinen Schutz in deiner Implementierung, der die Bilder nur für eingeloggte User anzeigt. Was du machen musst ist, statt im src des img-Tags den Pfad zum Bild anzugeben, muss hier ein Script angegeben werden: https://www.web-development-blog.com/archives/php-download-file-script/ Diesem Script gibst du einen Namen oder ID des Bildes an, dass du herunterladen möchtest. In diesem Script kannst du anhand einer Session oder einem gültigen Token entscheiden, ob ein benutzer das Bild herunterladen kann oder nicht. Dann brauchst du auch keinen SYM Link und öffnest nicht das Verzeichnis in die Welt via Web-Server. Schöne Grüße Martin Edit: Sehe gerade, dass @pr0gg3r diesen Vorschlag auch schon gemacht hat Bearbeitet 18. August 20196 j von Martin Gasse
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.