Zum Inhalt springen
  • 0

PHP Image aus unterverzeichnis einfügen


baroac

Frage

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' >";

Unbenannt.png

Link zu diesem Kommentar
Auf anderen Seiten teilen

4 Antworten auf diese Frage

Empfohlene Beiträge

  • 0

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. 
Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 0
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önnen

Vielen Dank für die große Hilfe
Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 0

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 von Martin Gasse
Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Diese Frage beantworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...