Du befindest Dich im Archiv vom ABAKUS Online Marketing Forum. Hier kannst Du Dich für das Forum mit den aktuellen Beiträgen registrieren.

Aus PHP wird HTML: header()

Ajax, Hijax, Microformats, RDF, Markup, HTML, PHP, CSS, MySQL, htaccess, robots.txt, CGI, Java, Javascript usw.
Southmedia
PostRank 10
PostRank 10
Beiträge: 7322
Registriert: 20.07.2003, 19:56

Beitrag von Southmedia » 02.04.2004, 19:54

DER J.,

du meinst also die Proxies die wir angesprochen haben. Clientseitige Scripts hat eigentlich niemand angesprochen... aber du magst Recht haben, für Mozilla gibts da passende Plugins die das übernehmen - für den IE aber auch (siehe andere Postings hier irgendwo...).

Anzeige von ABAKUS

von Anzeige von ABAKUS »

Content Erstellung von ABAKUS Internet Marketing
Ihre Vorteile:
  • einzigartige Texte
  • suchmaschinenoptimierte Inhalte
  • eine sinnvolle Content-Strategie
  • Beratung und Umsetzung
Jetzt anfragen: 0511 / 300325-0

pfuchs
PostRank 4
PostRank 4
Beiträge: 170
Registriert: 11.07.2003, 21:27
Wohnort: München

Beitrag von pfuchs » 05.04.2004, 17:26

Hallo,,
ich habe das Script wie von Southmedia gepostet eingebunden

Leider bekomme ich dann als Last-Modified: Thu, 01 Jan 1970 00:00:00 ausgegeben. woran liegt denn das bzw. wie könnte ich das ändern?

Der Rest sieht gut aus:
HTTP/1.1 200 OK
Date: Mon, 05 Apr 2004 16:19:08 GMT
Server: Apache/1.3.29 (Unix)
ETag: "56b2735cd9dbc8c9c56c8b5a209dde78"
X-Powered-By: PHP/4.2.3
Last-Modified: Thu, 01 Jan 1970 00:00:00 GMT
Transfer-Encoding: chunked
Content-Type: text/html
Besten Dank für Tipps!

Peter

Southmedia
PostRank 10
PostRank 10
Beiträge: 7322
Registriert: 20.07.2003, 19:56

Beitrag von Southmedia » 05.04.2004, 17:35

Du musst die Funktion doConditionalGet() dann natürlich mit einem passenden Timestamp aufrufen.

Beispiel:

Code: Alles auswählen

$timestamp = mktime(12,30,15,2,22,2004);
doConditionalGet($timestamp);
Das setzt das Datum der Seiten für den 22.02.2004, 12:30 Uhr 15 Sekunden fest.

WICHTIG: Monat und Tag erwarten einstellige Eingaben wenn möglich (1. bis 9.), keine führende Null angeben.
Zuletzt geändert von Southmedia am 09.04.2004, 15:57, insgesamt 2-mal geändert.

Anzeige von ABAKUS

von Anzeige von ABAKUS »

SEO Consulting bei ABAKUS Internet Marketing
Erfahrung seit 2002
  • persönliche Betreuung
  • individuelle Beratung
  • kompetente Umsetzung

Jetzt anfragen: 0511 / 300325-0.


pfuchs
PostRank 4
PostRank 4
Beiträge: 170
Registriert: 11.07.2003, 21:27
Wohnort: München

Beitrag von pfuchs » 06.04.2004, 07:39

Hallo Jan,

danke habe ich gemacht - klappt.

Beste Grüsse, Peter
Zuletzt geändert von pfuchs am 06.04.2004, 08:20, insgesamt 1-mal geändert.

Southmedia
PostRank 10
PostRank 10
Beiträge: 7322
Registriert: 20.07.2003, 19:56

Beitrag von Southmedia » 09.04.2004, 14:51

In einem zweiten Thread hat sich nun ein neues Problem herauskristallisiert:

Wenn der Tag (im Timestamp) eine einstellige Zahl ist (zB heute) wurde mit der alten Funktion auch nur eine einstellige Zahl an den Header übergeben, und der mochte das gar nicht. Es kam immer "Jan, 01 1970..." als Datum zurück.

Die Lösung war nun

Code: Alles auswählen

$last_modified = substr(date('r', $timestamp), 0, -5).'GMT';
durch

Code: Alles auswählen

$last_modified = gmdate("D, d M Y H:i:s", $timestamp).' GMT';
zu ersetzen, hier wird das Datum zweistellig ausgegeben und das Problem somit vermieden.

Dem ursprünglichen Author des Scriptes habe ich das auch mitgeteilt, mal schauen ob eine Reaktion kommt. Auf die Lösung brachte mich übrigens indirekt der Kollege Marius Schmidt. Danke an dieser Stelle.

Maschenka
PostRank 3
PostRank 3
Beiträge: 98
Registriert: 19.11.2004, 16:38

Beitrag von Maschenka » 08.01.2005, 21:03

Nachdem ich mir https://www.abakus-internet-marketing.d ... -8584.html und diesen Thread hier durchgelesen habe, sind zwei Fragen aufgetaucht:
  1. Die php.ini kann ich bei meinem Provider nicht ändern, habe ich eine andere Möglichkeit, den Header "X-Powered-By: PHP/4.3.1" zu unterdrücken?
  2. Die meisten Daten meiner Webseite (Diskographie mit Alben, Liedern und Künstlern) kommen aus einer Datenbank; die meisten Seiten ändern sich nur sehr selten, allerdings wenn ich einen Eintrag in der DB hinzufüge, kann das Auswirkungen auf mehrere Seiten haben.

    Müßte ich also in jedem Datensatz jeder Tabelle ein Datum für die letzte Änderung dieses Datensatzes einfügen, und bei Generierung einer Seite werden erst all diese Datumsangaben ausgelesen und anschließend das jeweils neueste in den Header geschrieben?

bull
PostRank 9
PostRank 9
Beiträge: 2166
Registriert: 20.09.2003, 20:57
Wohnort: Vèneto

Beitrag von bull » 08.01.2005, 21:37

Zu 1:
Mal mit

Code: Alles auswählen

header unset X-Powered-By
in .htaccess probieren, sofern mod_header installiert.

Zu 2:
Fürchte ich fast.

Fridaynite
PostRank 10
PostRank 10
Beiträge: 2983
Registriert: 07.01.2004, 09:10

Beitrag von Fridaynite » 09.01.2005, 23:03

Mal mit Code:
header unset X-Powered-By
in .htaccess probieren, sofern mod_header installiert.
Gibts noch eine andere Möglichkeit?

Maschenka
PostRank 3
PostRank 3
Beiträge: 98
Registriert: 19.11.2004, 16:38

Beitrag von Maschenka » 10.01.2005, 12:29

Geht bei mir nicht. Wie gut sind denn die Chancen, daß ein Provider das auf Abfrage aktiviert, hängen da besondere Sicherheitsrisiken dran?

operator
PostRank 4
PostRank 4
Beiträge: 122
Registriert: 09.07.2004, 18:01

Beitrag von operator » 10.01.2005, 21:44

Die meisten Daten meiner Webseite (Diskographie mit Alben, Liedern und Künstlern) kommen aus einer Datenbank; die meisten Seiten ändern sich nur sehr selten
das würde mich nun auch mal interessieren, verläßt sich google
auf die header angaben oder findet ein abgleich mit dem vorhandenen
datenbestand statt?

bruko
PostRank 5
PostRank 5
Beiträge: 211
Registriert: 11.10.2003, 09:02

Beitrag von bruko » 12.01.2005, 09:37

Maschenka hat geschrieben:Geht bei mir nicht. Wie gut sind denn die Chancen, daß ein Provider das auf Abfrage aktiviert, hängen da besondere Sicherheitsrisiken dran?
all-inkl.com hat das für mich gemacht, ist allerdings ein managed Server.
Ein Sicherheitsrisiko ist das nicht, im Gegenteil es ist ein Puzzleteil zur Verschleierung von php.

Maschenka
PostRank 3
PostRank 3
Beiträge: 98
Registriert: 19.11.2004, 16:38

Beitrag von Maschenka » 16.01.2005, 09:58

Stimmt, mod_headers ist installiert, aber ein Eintrag von

Code: Alles auswählen

header unset X-Powered-By
bewirkt keine Veränderung, der Header bleibt bestehen.


Edit: Nach ein paar Versuchen kann ich feststellen, daß ich problemlos andere Header erzeugen oder löschen kann, nur diesen einen nicht.

Code: Alles auswählen

Header append Author "John P. Doe"          #funktioniert
Header append X-Favourite-Animal "Mouse"    #funktioniert
Header append X-Powered-By "Maschenka"      #funktioniert nicht

In https://www.sslug.dk/emailarkiv/teknik/ ... 00720.html habe ich den Hinweis gefunden, daß "X-Powered-By" nicht vom Apache, sondern von PHP gesetzt wird, und man solle "expose_php=Off" in der php.ini setzen, was natürlich für mich als kleinen Kunden nicht möglich ist.

Gagget
PostRank 2
PostRank 2
Beiträge: 30
Registriert: 02.08.2006, 03:57

Beitrag von Gagget » 30.08.2006, 07:49

Ich weiß dass ich hier einen ein etwas älteres Thema ausgrabe, aber...

Mir war die doConditionalGet Funktion hier vor einiger Zeit schon mal aufgefallen. Mittlerweile hab ich diese auch mal wo einsetzen können und habe dabei leider bemerkt, dass sie nicht so funktioniert wie sie sollte. Zwar wurden die Last-Modified und ETag Header gesendet, ein Header Status 304 wurde bei mir aber nie gesendet. Was ja der eigentliche Sinn sein sollte.
Da anscheinend einige die Funktion in ihrer Seite einsetzen, wundere ich mich grad ein bisschen warum dies so lange keiner bemerkt hat.

Gefunden hab ich 2 Fehler:

1. Der FireFox 1.5 sendet den ETag in "".
Da ('Etag' == '"Etag"') immer false ergibt ging das natürlich schon nicht.

2. Der Internet Explorer 6.0 sendet mit Modified Since noch ein '; length=xxx' mit.
Selber Fall, da ('GMDATE' == 'GMDATE; length=int') immer false, geht das auch nicht.

Klar, wer meckern kann der soll es auch besser machen, also ich hab die Funktion einfach mal dementsprechend abgeändert.
Jedoch mit mehr als den beiden genannten Browser Typen hab ich es bis jetzt noch nicht getestet.

Die beiden Zeilen mit den Änderungen hab ich einfach mal markiert.

Code: Alles auswählen

function doConditionalGet($timestamp) 
{
	$last_modified = gmdate("D, d M Y H:i:s", $timestamp).' GMT';
	$etag = md5($last_modified);

	header("Last-Modified: ".$last_modified);
	header('ETag: "'.$etag."\"");

	$if_modified_since = isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) ?
		stripslashes($_SERVER['HTTP_IF_MODIFIED_SINCE']) :
		false;

	$if_none_match = isset($_SERVER['HTTP_IF_NONE_MATCH']) ?		
		trim(stripslashes($_SERVER['HTTP_IF_NONE_MATCH']),'"') : // Fehler 1
		false;

	if (!$if_modified_since && !$if_none_match)		
		return;
	if ($if_none_match && $if_none_match != $etag) 	
		return; 
	if ($if_modified_since && !stristr($if_modified_since,$last_modified)) // Fehler 2
		return;

	die( header('HTTP/1.0 304 Not Modified') );
}
Ich hoffe ich konnte damit dem ein oder anderem helfen.

Gruß Gagget

Southmedia
PostRank 10
PostRank 10
Beiträge: 7322
Registriert: 20.07.2003, 19:56

Beitrag von Southmedia » 30.08.2006, 13:49

Dankeschön.

nicknolte1253
PostRank 2
PostRank 2
Beiträge: 43
Registriert: 12.12.2006, 00:05

Beitrag von nicknolte1253 » 03.05.2007, 14:06

Weiss jemand wie man zu $_SERVER['HTTP_IF_MODIFIED_SINCE'];

eine Ausgabe bekommt. Ich habe diese Servervariable abgefragt und es kam kein Ergebnis heraus.

Mein Testprogramm habe ich https://www.1und1.info/xml/order/NL0506 ... op&__lf=KK benutzt

oder kurz

Code: Alles auswählen

header('Cache-Control: must-revalidate');
$heute = gmdate('D, d M Y 00:00:00 \G\M\T', time());

if ($_SERVER['HTTP_IF_MODIFIED_SINCE'] == $heute) {
    header('HTTP/1.0 304 Not Modified');
    echo "schon da";
    exit();
}

header('Last-Modified: ' . $heute);
// Hier kommt die eigentliche Skript-Ausgabe
echo "Geburtstage am " . date('d.m.Y', time());
echo $_SERVER['HTTP_IF_MODIFIED_SINCE'];
egal ob nun die Zeit gleich oder nicht gleich war eine Servervariable gabs einfach nicht und ein 304 wurde überhaupt nie angezeigt.

Als nächstes habe ich nur versucht mit einem Einzeiler

Code: Alles auswählen

header('HTTP/1.0 304 Not Modified');
nur den 304 Not Modified zu erzeugen.

Ausgeben wurde immer ein HTTP/1.0 304 OK. Das sieht für mich so aus das zwar 304 erfolgt aber das Not Modified durch Ok überschrieben wurde.

Ich bin bei 1&1 und habe somit auch keinen exotischen Provider. Getestet wurde mit dem neusten Firefox. Da dieses Testprogramm ja wirklich die minimalste Abfrage darstellt kann es an äusseren Programmvariablen nicht liegen.

Kurz ich finde das Ganze sehr merkwürdig und so nicht nachvollziehbar.

Obwohl die vorangegangenen Codes von euch auch nach meinem Wissensstand so in Ordnung sein müssten bringt es natürlich kaum etwas wenn die Grundbedingungen wie $_SERVER['HTTP_IF_MODIFIED_SINCE']
nicht funktionieren. Und diese muss ja in irgendeiner Form vorhanden sein, da es eine Servervariable ist.

Wer hat ähnliche Erfahrungen gemacht?

Falls jemand bei 1&1 ist und einen managed Server hat bei dem es funktioniert, würde mich das sehr interessieren

Antworten
  • Vergleichbare Themen
    Antworten
    Zugriffe
    Letzter Beitrag