Philip: Bild aus anderer Webseite einbinden, und auf existenz überprüfen

Ich möchte aus einer anderen Homepage ein Bild einfügen, aber vorher überprüfen ob es auch da, bzw. geladen wurde.

$filename= fopen("https://de.wikipedia.org/wiki/Wikipedia:Hauptseite#/media/File:Friedrich_Bergius_(1884-1949)_Chemist_of_Heidelberg_Wellcome_L0003155.jpg", "r");
	
	

		if (file_exists($filename))
				{
				echo'<img src="'.$filename.'" >';
				}
			else
				{
				echo 'nix';

				}

Aber irgendwas mache ich da falsch, und eine Fehlermeldung bekomme ich auchnicht .

Kann mir da jemannd auf die Sprünge helfen?

Philip

  1. Hallo Philip,

    einmal abgesehen von rechtlichen Problemen, die Du Dir damit einfangen könntest: Lies doch zunächst die Doku zu fopen. Vielleich wird dann einiges klarer.

    Grüße, Martl

  2. Tach!

    Ich möchte aus einer anderen Homepage ein Bild einfügen, aber vorher überprüfen ob es auch da, bzw. geladen wurde.

    Es kann sein, dass dein Server es abfragen kann, das muss aber nicht zwingend auch für den Browser deiner Besucher gelten. Und außerdem haben die bereits den Mechanismus eingebaut, nichts anzuzeigen, wenn sie nichts laden können.

    $filename= fopen("https://de.wikipedia.org/wiki/Wikipedia:Hauptseite#/media/File:Friedrich_Bergius_(1884-1949)_Chemist_of_Heidelberg_Wellcome_L0003155.jpg", "r");
    
    		if (file_exists($filename))
    

    Aber irgendwas mache ich da falsch,

    fopen() liefert keinen Dateinamen sondern ein Handle auf die Datei, mit dem man Lese- und Schreibfunktionen aufrufen kann. Oder ein false, wenn die Datei nicht geöffnet werden kann.

    file_exists() kann nicht mit dem http/https-Wrapper verwendet werden. Das PHP-Handbuch sagt:

    As of PHP 5.0.0, this function can also be used with some URL wrappers. Refer to Supported Protocols and Wrappers to determine which wrappers support stat() family of functionality.

    Folgt man dem Link zu den Supported Protocols and Wrappers und dort weiter zu http://, sieht man unter "Supports stat()" ein No.

    und eine Fehlermeldung bekomme ich auchnicht .

    Da wird wohl die Anzeige der Fehlermeldungen deaktiviert sein.

    dedlfix.

  3. Hello,

    Ich möchte aus einer anderen Homepage ein Bild einfügen, aber vorher überprüfen ob es auch da, bzw. geladen wurde.

    • Was soll denn eingebunden werden, wenn das Bild nicht ladbar war von deinem Webserver aus?
    • Würdest Du das Bild auch mit deiner Domain in der URL ausliefern wollen, oder nur direkt mit der des ursprünglichen Speicherortes?

    WEnn die rechtlichen Fragen geklärt sind, könntest Du dir für die betroffenen Bilder Proxy-Requests aufbauen, die sie vom ursprünglichen Speicherort holen, prüfen und dann "on-the-fly" (am einfachsten mit Zwischenspeicherung auf deinem Webserver) ausliefern. Dann sieht der "Kunde" aber deine Domain in der URL.

    Liebe Grüße
    Tom S.

    --
    Es gibt nichts Gutes, außer man tut es
    Andersdenkende waren noch nie beliebt, aber meistens diejenigen, die die Freiheit vorangebracht haben.
  4. Hallo Philip,

    vielleicht hilft es, wenn du erst einmal beschreibst, warum du überprüfen möchtest, ob ein Bild verfügbar, bzw. ladbar ist. Vielleicht gibt es ja einen besseren / anderen Ansatz für deine Aufgabenstellung.

    Ich vermute einfach mal, dass du ein fremdes Bild in deine Website einbinden möchtest. Dazu gilt es erst einmal zu beachten, dass du das Bild vom Rechtlichen her auch einbinden darfst. Bei dem von dir als Beispiel verwendetem Bild ist das kein Problem (→ Wikipedia, CreativeCommons-Lizenz). Für Bilder von Wikipedia kannst du dir mit dem Lizenzhinweisgenerator ganz einfach einen passenden Lizenzhinweis erzeugen lassen. Zum Beispiel den hier:

    Wellcome Images, <a href="https://commons.wikimedia.org/wiki/File:Friedrich_Bergius_(1884-1949)_Chemist_of_Heidelberg_Wellcome_L0003155.jpg">Friedrich Bergius (1884-1949) Chemist of Heidelberg Wellcome L0003155</a>, <a href="https://creativecommons.org/licenses/by/4.0/legalcode">CC BY 4.0</a>
    

    Dann kommt noch die Frage, ob die das Bild von der originalen Quelle referenzierst oder ob du es auf deinem eigenen Webspace hinterlegst und dann darauf verlinkst. Letzteres ist Ersterem vorzuziehen, Hotlinking wird nicht gerne gesehen und einige verhindern das auch.

    Dann würde dein HTML etwa so aussehen:

    <figure>
      <img src="pfad_zum_bild/Friedrich_Bergius.jpg" alt="Portrait von Friedrich Bergius">
      <figcaption>
        Friedrich Bergius<br>
        <small>Wellcome Images, <a href="https://commons.wikimedia.org/wiki/File:Friedrich_Bergius_(1884-1949)_Chemist_of_Heidelberg_Wellcome_L0003155.jpg">Friedrich Bergius (1884-1949) Chemist of Heidelberg Wellcome L0003155</a>, <a href="https://creativecommons.org/licenses/by/4.0/legalcode">CC BY 4.0</a></small>
     </figcaption>
    </figure>
    

    Falls das Bild vom Browser des Nutzers nicht geladen werden konnte, wird dem Nutzer der Alternativ-Text des Bildes „Portrait von Friedrich Bergius“ angezeigt. Dieser ist auch für Menschen nötig, die das Bild nicht sehen können, aber natürlich dennoch gerne wissen möchten, was darauf abgebildet ist.

    Gruß
    Julius