2014-06-05 5 views
6

überWenn ein anderer Server/Website Bild von meinem Server lädt, wie kann ich sagen?

Ich habe eine Website, wo Benutzer Bilder im Profil hochladen, damit andere Leute sie sehen können. Wenn die Leute dann jedes Bild betrachten, zeige ich das Bild in der Mitte. Über dem Bild befinden sich Informationen über den Benutzer, der das Bild hochgeladen hat. Die URL jedes Bildes würde wie folgt aussehen: http://website.com/image/id

Problem

Ich möchte den Menschen die Adresse oben Bild verwenden lassen, in einem HTML-Image-Tag (<img src="http://website.com/image/id">) auf andere/ihre eigene Website

Bis zum heutigen Tag Ich habe die Eigenschaft, dass, wenn sie "/ img" nach der URL hinzufügen (http://website.com/image/id/img) und kopieren & fügen Sie es in ein -Tag wird es funktionieren, aber wenn es möglich ist, würde ich Arbeit auf diese Weise machen, wenn ein Bild von einer geladen Benutzer würde es als normal anzeigen, aber wenn es von einem -Tag mit dieser URL geladen wird: http://website.com/image/id würde es t zeigen er Bild richtig. (Ohne HTML und mit einem "Header Image/Png").

Was ich versuchte

Wie gesagt, ich habe bereits die Möglichkeit zur Anzeige/img nach jedem Bild, so kann es verwendet und mit dem -tag auf eine Webseite eingebettet werden. Ich schaute auf $_SERVER['HTTP_REFERER'], $_SERVER['SERVER_NAME'], $_SERVER['SERVER_ADDR'], um zu sehen, ob das funktionierte. Aber das würde nicht funktionieren, weil in einem -tag es meinen Server ADDR und NAME nennt. Natürlich würde der REFERER in diesem Fall funktionieren, aber wenn ein Besucher nur ein Bild besucht und nicht die gesamte Website untersucht, würde es das Bild ohne Upload-/Dateiinformationen anzeigen.

Was dann?

Ich habe nach Fällen wie diesem gesucht, entweder gibt es keinen solchen Fall oder ich weiß nicht richtig, wonach ich suchen soll.

Kurz

brauche ich eine Möglichkeit zu erkennen, ob eine Website durch einen -tag auf einer anderen Website angezeigt wird, dann ein anderes und für die Verwendung richtiges Bild zu zeigen. Denn wenn jetzt ein Benutzer & Paste http://website.com/image/id in ein -Tag kopiert, würde es nur einen Fehler geben.

Hinweis

Ich hoffe, euch kann mir helfen, ich klar, was ich suche zu machen versucht haben, und was habe ich versucht. Wenn nicht, lass es mich wissen. Es tut uns leid, wenn einige der oben genannten falsch geschriebene Wörter, falsche Grammatik oder schlecht erklärt sind. Ich spreche kein Englisch täglich, aber ich versuche mein Bestes.

+0

Eine Option wäre, den Wert in $ _SERVER ['HTTP_ACCEPT'] zu betrachten. Wenn ein Browser ein Bild anfordert (zB durch einen '' Tag, SOLLTE er eine passende Kopfzeile senden (zB' image/* '). Allerdings kann ich nicht garantieren, dass * irgendein * Browser in dieser Hinsicht logisch ist. – Duroth

+0

Ich würde sehr skeptisch sein, dies zu tun - je nachdem, woher eine Anfrage kommt, müssen Sie unterschiedliche Inhalte bereitstellen.Wenn Sie mit der Philosophie des Webs vertraut sind, sollten Sie sich darüber im Klaren sein, was sie wollen von dir. Entweder wie du es getan hast, indem du '/ img' an die URL anhängst, oder indem du den accept-header ansiehst, wie Duroth es vorschlägt. – chiccodoro

Antwort

4

Betrachten Sie stattdessen $_SERVER['HTTP_ACCEPT'].

Die beliebtesten Browser scheinen alle einen modifizierten Header ACCEPT: zu senden, wenn Sie ein Bild anfordern.

Nehmen Sie den folgenden Code ein:

<?php 
file_put_contents('/tmp/accept_headers.txt', $_SERVER['HTTP_ACCEPT'] . PHP_EOL . '---' . PHP_EOL, FILE_APPEND); 
?> 
<img src="test.php"/> 

wo test.php ist, natürlich, die gleiche Datei, erhalte ich folgende Ergebnisse:

text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 
^ Google Chrome (Linux), direct request 
--- 
image/webp,*/*;q=0.8 
^ Google Chrome (Linux), request through <IMG> tag 
--- 
text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
^ Firefox (Linux), direct 
--- 
image/png,image/*;q=0.8,*/*;q=0.5 
^ Firefox (Linux), <IMG> 
--- 
text/html, application/xhtml+xml, */* 
^ IE 11, direct 
--- 
image/png, image/svg+xml, image/*;q=0.8, */*;q=0.5 
^ IE 11, <IMG> 
--- 

Fazit:

Lesen Sie die $_SERVER['HTTP_ACCEPT'] Wert. Wenn es mit image/ beginnt, fordert der Browser speziell ein Bild an, und die URL wird wahrscheinlich über ein HTML-Tag angefordert. Programmieren Sie Ihr Skript so, dass es in der Art antwortet.

Verwandte Themen