heiko: session / header / application problem

Beitrag lesen

Hallo,

Danke fuer die Beschreibung.

außerdem kann man auch seine einträge in excel öffnen (sprich es werden alle einträge des users aus der db rausgeholt und in ein excel-sheet eingetragen)

Was heisst das konkret?
Schreibst Du eine "physische" Datei und laesst
dann deren Inhalt durch die export.php "fliessen"?
Oder sendet das Skript export.php die Daten direkt?

hm.. also das export.php bekommt ja folgenden header mitgeteilt
header("Content-Type: application/vnd.ms-excel");

der inhalt ist dann im prinzip eine html tabelle die durch php gefüllt wird

In welchem Format? CSV?

also html

dazu wird die export.php aufgerufen die so aussieht:
$fileName ="DB-Inhalt".date('dmy');
Kleiner Tip: Zwecks Sortierbarkeit u.s.w. wuerde
ich den Dateinamen eher in umgekehrter Reihenfolge
aufbauen: ymd oder Ymd.

ok, danke!

header("Content-Type: application/vnd.ms-excel");
header("Content-Transfer-Encoding: base64\n");
header("Content-Disposition: attachment; filename="".$fileName.".xls"");
?><html>.....
     ^^^^^
Was macht jetzt hier das <html>?
Schickst Du etwa eine HTML-Seite, nachdem Du gesagt hast,
jetzt kaeme eine Excel-Tabelle?
(Kann sein, dass das geht. Kenne die HTML-Faehigkeiten
von Excel nicht. ;-)

das klappt prima!

Was schickst Du alles, d.h. worin besteht die
eigentliche Ausgabe des Skripts?
(Die ersten paar Zeilen duerften uns zum Verstaendnis reichen).

wie gesagt dass ist im pur html...
<html><head>
   <meta http-equiv=Content-Type content="text/html; charset=windows-1252">
<meta name=ProgId content=Excel.Sheet>
<meta name=Generator content="Microsoft Excel 10">
<!--[if gte mso 9]><xml>
 <o:DocumentProperties>
....
excel-style und weiterer müll
....
</head>
 <body><table border=1 cellpadding=2 cellspacing=0 bordercolor='#000000'><tr bgcolor='#FFCC00'>
    <td> </td>
....

unter https hingegen popt das fenster auf: Dateidownload ..und jetzt steht dateiname: export.php also nicht mal die variable "$fileName" wird erkannt... wenn ich auf ok klicke kommt eine warnmeldung export.php konnte nicht gefunden werden entweder....

Ich kenne mich mit dem MS IE leider nicht aus, kann also
nur mutmassen, warum er sich (aufgrund von Einstellungen)
bei HTTP und HTTPS unterschiedlich verhaelt, z.B. dass er

  • keine Cookies akzeptiert,
  • keine 302-Weiterleitungen ausfuehrt
  • auf Vorschlaege (Content-... Header) anders/nicht reagiert
    Was weiss ich...

wenn ich nur das session_start stehenlasse und die if abfrage herausnehme funktioniert es auch nicht... wenn ich session_start auch weglasse funktioniert es >>also liegt es an dem session_start!?

Ich kann mir leider daraus keinen Reim machen.

Was schickt das Skript denn als HTTP-Head?
Ist der jetzt von dem Script, das die Ausgabe machen sollte,
das Du oben export.php genannt hast?

ich habe den beginn des scriptes kopiert...da ich bei dem tool doch keine usernamen und pw mit übergeben kann ...?!

jetzt aber im https verzeichnis:

An error occured I/O error: http error no host given
302 Found
X-Powered-By: PHP/4.3.4
Set-Cookie: PHPSESSID=4b2fcc15ef6d77511874a70321f3d968; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Server: Apache/1.3.27 (Linux/SuSE) mod_python/2.7.8 Python/2.1.1 PHP/4.3.4 mod_perl/1.26 PHP-CGI/0.1b
Connection: close
Location: http:///www/webXXX/html/XXX/index.php
Pragma: no-cache
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Date: Fri, 12 Mar 2004 08:51:35 GMT
Content-Type: text/html

_Dessen_ HEAD waere interessant, und zwar, wenn es ueber
HTTPS abgerufen wird.

302 Found

Also eine Umleitung.

ja...aber nur weil ich doch die user-angaben nicht mit übergeben kann!!??? jetzt habe ich die if abfrage auskommentiert...

200 OK
Content-Disposition: attachment; filename="EMEA Forecast 120304.xls"
X-Powered-By: PHP/4.3.4
Content-Transfer-Encoding: base64
Set-Cookie: PHPSESSID=844898699e226697301e7429efe769ff; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Server: Apache/1.3.27 (Linux/SuSE) mod_python/2.7.8 Python/2.1.1 PHP/4.3.4 mod_perl/1.26 PHP-CGI/0.1b
Connection: close
Pragma: no-cache
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Date: Fri, 12 Mar 2004 08:53:49 GMT
Content-Type: application/vnd.ms-excel

Dann duerften die darauf folgenden Content-Dingsbums Header
_dieses_ Skripts nicht mehr interessant/zutreffend sein, sondern
diejenigen des Skripts, auf das umgeleitet wird.

=> Ich vermute, Du solltest beim Fall, dass Du die Leute umleiten willst,
nach dem Umleitungs-header() ein exit; einbauen.
Steht uebrigens auch im Manual zu header()!

if ($_SESSION['Login'] != "true" OR !$_SESSION['Login'] OR $_SESSION["Master"] != 1)
 {
 header("Location: https://".$DOCUMENT_ROOT.$Home_URL."/index.php");
 exit;
 }

Ganz korrekt (nach HTTP/1.1) sollten uebrigens nach einem 30x-Head
noch ein paar Zeilen HTML mit einem klickbaren Link zur
neuen URL folgen.
In Opera kann man Umleitungen ausschalten, dann wird
ebendieses HTML dann angezeigt.

aber doch nur client seitig?! über header läuft das doch schon auf dem server ab, oder?!

Der Content-Type einer Umleitung waere dann also text/html.

Content-Disposition: attachment; filename="DB-Inhalt 110304.xls"
Wo kommt dieser Leerschlag her? ---------------------> ^

Das folgende ist dann der Head der Seite, auf die
Umgeleitet wird:

200 OK
[...]
Content-Type: text/html
Server: Apache/1.3.27 (Linux/SuSE) mod_python/2.7.8 Python/2.1.1 PHP/4.3.4 mod_perl/1.26 PHP-CGI/0.1b

So, ich muss auf den Weg.
Heute hoerst Du nicht mehr von mir. Morgen wieder.
Hoffe, Du kommst weiter.

Ach ja, das Tool von Schroeppl ist auch ganz praktisch.
Damit kannst Du nicht nur den HEAD, sondern (wenn Du
GET waehlst) auch die ersten paar Zeilen der eigentlichen
Ausgabe des Skripts sehen.
http://www.schroepl.net/cgi-bin/http_trace.pl

HTH, mfg + gute Nacht
Thomas

hast du vielleicht ne idee für nen ganz anderen ansatz?
inhalt in eine temp. variable schreiben per header neue seite aufrufen, die die variable ausgibt und löscht?

mir geht es darum dass die ausgabe nur von dem korrekt eingeloggten user vorgenommen werden kann...also ein anderer user nicht einfach export.php eingeben kann und ein ergenis bekommt..deshalb brauche ich die session_start...

ohne session_start und if abfrage funzt es ja prima auch bei https...

grüße und 1000 dank

heiko