jus2: HTML durch PHP downloaden

Hi,

Ich habe jetzt schon eine weile gesucht, aber nichts gefunden.
Ich habe eine PHP datei, die einen script ausführt und am schluss eine HTML datei zum download anbietet.
Mein problem ist, dass ich für ne "html-download-php" kein tab mit javascript machen kann, da ab und zu ein popup blocker zuschlägt und ich meinen bisherigen download code nicht verwenden kann, da er den content-type der PHP ändert:

  
$Datei = "user_backup/".$_SESSION["user"]["userid"]."/backup.info";  
$Dateiname = basename($Datei);  
$Größe = filesize($Datei);  
header("Content-Type: application/force-download");  
header("Content-Disposition: attachment; filename=".$Dateiname);  
header("Content-Length: $Größe");  
readfile($Datei);  

Viele Grüße, jus2

  1. Hi,

    Ich habe eine PHP datei, die einen script ausführt und am schluss eine HTML datei zum download anbietet.
    Mein problem ist, dass ich für ne "html-download-php" kein tab mit javascript machen kann, da ab und zu ein popup blocker zuschlägt und ich meinen bisherigen download code nicht verwenden kann, da er den content-type der PHP ändert:

    Und was daran soll jetzt das Problem sein?

    MfG ChrisB

    --
    RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
    1. Hi,

      Das Proble daran ist, dass nicht DIESE PHP die Download datei ist, sondern einen Code ausführt, der Benutzereinstellungen ändert.

      Viele Grüße, jus2

      1. Hi,

        Das Proble daran ist, dass nicht DIESE PHP die Download datei ist, sondern einen Code ausführt, der Benutzereinstellungen ändert.

        Das macht das Problem, welches du hast, immer noch nicht klarer.

        Kannst du es bitte endlich mal deutlich und nachvollziehbar beschreiben?

        MfG ChrisB

        --
        RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
        1. Grüße,
          ich vermute mal willkürlich, dass er den downloaddialog statt der anzeige der html datei erzwingen will.
          MFG
          bleicher

          --
          __________________________-

          FirefoxMyth
          1. Hi,

            ich vermute mal willkürlich, dass er den downloaddialog statt der anzeige der html datei erzwingen will.

            dadurch ist noch nicht erklärt, was der OP mit Tabs, JavaScript und Popup-Blockern am Hut hat.

            Cheatah

            --
            X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
            X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
            X-Will-Answer-Email: No
            X-Please-Search-Archive-First: Absolutely Yes
            1. Hi,

              okok, ich hab zwar schon einmal einen längeren text geschrieben, aber egal...
              ich bitte euch, die sinfreigkeit nebensache sein zu lassen.
              du klickst auf backup, wodurch die benutzerdaten aus dem ordner user/1/ in den ordner user_backup/1/ kopiert werden.
              Zusätzlich erstellt er eine txt datei, in der der username, die mail adresse, der timecode (zeitpunkt des backups) usw. steht.
              Als weiteres erstellt er eine HTML datei mit automatischer weiterleitung auf eine PHP auf dem server, die anhand des backups den benutzer wiederherstellen kann.
              Die HTML soll der benutzer jetzt herunterladen können, um seinen Account selbstständig wiederherzustellen.

              Viele Grüße, jus2

              1. Hi,

                okok, ich hab zwar schon einmal einen längeren text geschrieben, aber egal...

                Die Länge deiner Texte ist uns egal - so lange du uns die relevanten Informationen lieferst, und uns das Problem nachvollziehbar beschreibst.

                Die HTML soll der benutzer jetzt herunterladen können, um seinen Account selbstständig wiederherzustellen.

                Ja, schön ... was du *erreichen* willst, wissen wir schon längst.

                Aber wo dein P-R-O-B-L-E-M dabei liegt, das wissen wir immer noch nicht.

                MfG ChrisB

                --
                RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
                1. Hi,

                  Weil der PHP code nicht korrekt weiter ausgeführt wird, nachdem der content-type geändert wurde!

                  Viele Grüße, jus2

                  1. Hi,

                    Weil der PHP code nicht korrekt weiter ausgeführt wird, nachdem der content-type geändert wurde!

                    Und was genau bedeutet „nicht korrekt weiter ausgeführt wird“ ...?

                    *Begreife* doch jetzt bitte *endlich*, dass wir dir nicht weiter helfen *können*, so lange deine „Problembeschreibung“ nach wie vor im wesentlichen „funzt nich“ lautet!

                    Bitte berücksichtige die Tipps für Fragende.

                    MfG ChrisB

                    --
                    RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
                    1. Hi,

                      Die datei wird zwar zum download angeboten, allerdings wird die seite, die im hintergrund läuft nicht mehr neu geladen.
                      Warum genau weiß ich auch nicht.
                      Bevor jetzt wieder jemand meckert möchte ich hinzufügen, dass ich 15 jahre alt bin und noch kein meister in php bin.

                      Viele Grüße, jus2

                      1. Hi,

                        Die datei wird zwar zum download angeboten, allerdings wird die seite, die im hintergrund läuft nicht mehr neu geladen.

                        Natürlich wird sie das nicht, wieso sollte sie denn auch?

                        Der Browser hat eine Ressource angefordert, und vom Server mitgeteilt bekommen, dass diese nichts enthält, was er direkt darstellen kann/soll, sondern dass er bitte einen „Speichern unter“-Dialog anbieten soll.
                        Warum sollte sich jetzt an der Seite, die *vorher* schon dargestellt wurde, dadurch irgendwas ändern?

                        Es ist nicht möglich, einem Browser zwei neue, unterschiedlich zu behandelnde Ressourcen in der Antwort auf *einen* Request unterzuschieben.

                        Wenn du willst, dass die Seite „neu geladen“ wird, dann musst du das *zuerst* machen. Im „neuen“ HTML-Code, den du dabei an den Browser schickst, kannst du dann dafür sorgen, dass dieser *anschließend* noch einen zweiten Request macht - bspw., in dem du per Meta-Refresh auf die Adresse verweist, unter der die Download-Ressource angesprochen wird. (Natürlich solltest du noch einen expliziten Link darauf als Fallback anbieten, weil Meta-Refresh deaktiviert sein kann.)

                        Bevor jetzt wieder jemand meckert möchte ich hinzufügen, dass ich 15 jahre alt bin und noch kein meister in php bin.

                        PHP-Meister oder nicht, darum geht es hier nicht. Sondern darum, dass du eine ziemliche Ewigkeit gebraucht hast, um uns erst mal zu erklären, was *eigentlich* dein Problem ist - bis gerade eben war das glaube ich niemandem hier klar.
                        Berücksichtige beim nächsten Mal also bitte von Anfang an, dass kein Mensch hier wissen kann, was auf deinem System abläuft, wenn du es uns nicht klar und deutlich beschreibst. Und schreibe dir bitte hinter die Ohren, dass „funzt nich“ - womit du hier im Threadverlauf *mehrfach* angekommen bist, *trotz* expliziter mehrfacher Nachfragen und Bitten, dass du dich bitte klarer ausdrücken sollst - absolut ganz und gar überhaupt keine brauchbare Problembeschreibung darstellt.

                        MfG ChrisB

                        --
                        RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
                        1. Hi,

                          PHP-Meister oder nicht, darum geht es hier nicht. Sondern darum, dass du eine ziemliche Ewigkeit gebraucht hast, um uns erst mal zu erklären, was *eigentlich* dein Problem ist - bis gerade eben war das glaube ich niemandem hier klar.
                          Berücksichtige beim nächsten Mal also bitte von Anfang an, dass kein Mensch hier wissen kann, was auf deinem System abläuft, wenn du es uns nicht klar und deutlich beschreibst. Und schreibe dir bitte hinter die Ohren, dass „funzt nich“ - womit du hier im Threadverlauf *mehrfach* angekommen bist, *trotz* expliziter mehrfacher Nachfragen und Bitten, dass du dich bitte klarer ausdrücken sollst - absolut ganz und gar überhaupt keine brauchbare Problembeschreibung darstellt.

                          Entschuldige bitte, aber wie kann ich mein Problem beschreiben, wenn ich nicht wirklich weiß, woher es kommt.

                          Ich wollte doch nur, dass die PHP datei ganz normal abläuft, eine normale HTML rückgabe an den browser sendet, und zusätzlich eine HTML datei vom Server zum download anbietet.

                          Viele Grüße, jus2

                          1. Hi,

                            Entschuldige bitte, aber wie kann ich mein Problem beschreiben, wenn ich nicht wirklich weiß, woher es kommt.

                            Das absolut Mindeste, was du hinbekommen solltest, ist uns erst mal verständlich zu beschreiben, was du *erreichen* willst.

                            Ich wollte doch nur, dass die PHP datei ganz normal abläuft, eine normale HTML rückgabe an den browser sendet, und zusätzlich eine HTML datei vom Server zum download anbietet.

                            Und warum bitte konntest du uns *das* nicht gleich von Anfang an *so* beschreiben, anstatt irgendwas davon zu erzählen, dass, Original-Wortlaut, „er den content-type der PHP ändert“ und ähnlichen Blödsinn?

                            Anyway, wie sich dein Vorhaben umsetzen lässt, habe ich dir in der vorherigen Antwort beschrieben.

                            MfG ChrisB

                            --
                            RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
                            1. Hi,

                              Ich habe es bereits kurz vor deinem letzten post selbst gelöst gehabt, auf die ähnliche weise wie du gesagt hast.

                              PHP datei erstellt eine HTML rückgabe, die einen javascript enthält, der eine andere PHP Seite aufruft, die nur dafür zuständig ist, die HTML zum Download anzubieten.

                              So funktioniert das dann auch.

                              Vielen Dank für die Hilfe, jus2

  2. Hallo,

    Ich habe eine PHP datei, die einen script ausführt und am schluss eine HTML datei zum download anbietet.

    soweit kann ich folgen - abgesehen davon, dass es *das* Script heißt, nicht *der*.

    Mein problem ist, dass ich für ne "html-download-php" kein tab mit javascript machen kann, da ab und zu ein popup blocker zuschlägt und ich meinen bisherigen download code nicht verwenden kann, da er den content-type der PHP ändert:

    Könntest du das bitte nochmal in verständlichen Worten und Sätzen formulieren?

    $Größe = filesize($Datei);

    Sind Umlaute in PHP-Variablennamen zulässig? Wäre mir neu, aber ich bin mir nicht ganz sicher.

    header("Content-Type: application/force-download");

    Aber "application/force-download" ist kein gültiger MIME-Typ, dessen bin ich mir sicher. Vielleicht meintest du stattdessen application/octet-stream.

    So long,
     Martin

    --
    Man gewöhnt sich an allem, sogar am Dativ.
    Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
    1. Sind Umlaute in PHP-Variablennamen zulässig? Wäre mir neu, aber ich bin mir nicht ganz sicher.

      Mein letzter Stand ist, dass es zwar erlaubt ist, das Script aber auf nem Server mit ner anderen Zeichenkopierung evtl. nicht mehr läuft.

      Ist also in jedem Fall ne ganz schlechte Idee.

      1. Hi,

        Also.. ich habe ne kleine Spielerei programmiert.
        Das Script erstellt ein txt file, indem diverse Userdaten stehen.
        Die Datei dient als backup auf dem server.
        Jetzt gibt es eine HTML Datei, die als "Installer-Starter" fungiert.
        Du öffnest sie und du wirst auf eine PHP datei auf dem Server weitergeleitet, die dann anhand der Informationen aus der txt einen Benutzer in der Datenbank erstellt.
        jetzt gibts diese Backup funktion, die die txt und die Installer.html erstellt.
        Danach soll die Installer.html als download angeboten werden, dass der user selbstständig seinen Account wiederherstellen kann.
        nur leider werden html dateien ja immer im browser angeizeigt, wodurch dann sofort die "Installation" des Users beginnen würde.

        Ich hatte ja gesagt, dass das nur ne Spielerei ist ^^

        Dass mot dem Umlaut ist mir nicht aufgefallen, wird sofort geändert

        Viele Grüße, jus2

        1. Hallo,

          Also.. ich habe ne kleine Spielerei programmiert.
          Das Script erstellt ein txt file, indem diverse Userdaten stehen.
          Die Datei dient als backup auf dem server.
          Jetzt gibt es eine HTML Datei, die als "Installer-Starter" fungiert.
          Du öffnest sie und du wirst auf eine PHP datei auf dem Server weitergeleitet, die dann anhand der Informationen aus der txt einen Benutzer in der Datenbank erstellt.
          jetzt gibts diese Backup funktion, die die txt und die Installer.html erstellt.
          Danach soll die Installer.html als download angeboten werden, dass der user selbstständig seinen Account wiederherstellen kann.

          fürs Protokoll: Die Sinnhaftigkeit deines Vorgehens erkenne ich bisher noch nicht. Aber das ist deine Sache.

          nur leider werden html dateien ja immer im browser angeizeigt

          Nein. Nur wenn sie mit dem Content-Type text/html ausgeliefert werden. Oder wenn sie von einem kaputten Browser wie dem IE abgerufen werden, der dem MIME-Type keine große Beachtung schenkt und stattdessen lieber selbst die Daten analysiert und versucht zu raten, was das sein könnte.

          Ciao,
           Martin

          --
          Die letzten Worte des Hardware-Bastlers:
          Das Netzkabel lass ich wegen der Erdung lieber dran.
          Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
          1. Hi,

            Nein. Nur wenn sie mit dem Content-Type text/html ausgeliefert werden. Oder wenn sie von einem kaputten Browser wie dem IE abgerufen werden, der dem MIME-Type keine große Beachtung schenkt und stattdessen lieber selbst die Daten analysiert und versucht zu raten, was das sein könnte.

            Gebe ich den MIME Type in der Installer.html an (der datei, die herunter geladen werden soll)?
            wenn ja, ich gehe davon aus, in den meta tags. aber sowas hab ich niergens gefunden.

            Viele Grüße, jus2

            1. Hi,

              Gebe ich den MIME Type in der Installer.html an (der datei, die herunter geladen werden soll)?

              Dateien sind in HTTP uninteressant. Es geht um Ressourcen, und nur diese haben auch einen MIME-Type. Sie werden von demjenigen Server verschickt, der vom Client angesprochen wurde.

              wenn ja, ich gehe davon aus, in den meta tags.

              Dort können Angaben stehen, die nur dann beachtet werden, wenn der Server sie nicht mitschickt.

              Cheatah

              --
              X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
              X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
              X-Will-Answer-Email: No
              X-Please-Search-Archive-First: Absolutely Yes
              1. Hi,

                und wie bekomme ich dann hin, dass die PHP, deren content-type nicht geändert werden soll, eine datei zum download anbietet?

                Viele Grüße, jus2

                1. Hi,

                  und wie bekomme ich dann hin, dass die PHP, deren content-type nicht geändert werden soll, eine datei zum download anbietet?

                  eine PHP-Datei *hat* keinen Content-Type (es ist schließlich eine Datei), sie *erzeugt* einen. Und den hast Du im Griff.

                  Cheatah

                  --
                  X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
                  X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
                  X-Will-Answer-Email: No
                  X-Please-Search-Archive-First: Absolutely Yes
                  1. Hi,

                    Wollen wir jetzt um formalitäten meiner FRageweise diskutieren oder verrät mir einer wie ich mein problem löse?

                    Viele Grüße, jus2

                    1. Hi,

                      Wollen wir jetzt um formalitäten meiner FRageweise diskutieren oder verrät mir einer wie ich mein problem löse?

                      Zum x-ten verflixten Mal: Wir können dir nicht sagen, wie dein Problem zu lösen ist, solange du es nicht für uns *nachvollziehbar* beschreibst.

                      Und ja, die Formalitäten sind diskussionswürdig, weil eine recht hohe Wahrscheinlichkeit besteht, dass genau darin dein Problem liegt - dass du genauso schludrig, wie du mit den korrekten Begrifflichkeiten umgehst, auch „programmierst“.

                      MfG ChrisB

                      --
                      RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
                      1. Hi!

                        Und ja, die Formalitäten sind diskussionswürdig, weil eine recht hohe Wahrscheinlichkeit besteht, dass genau darin dein Problem liegt - dass du genauso schludrig, wie du mit den korrekten Begrifflichkeiten umgehst, auch „programmierst“.

                        Ergänzend: Die korrekten Begriffe zu verwenden, heißt verstanden zu haben, wofür genau sie stehen und wodurch sie sich von anderen Begriffen unterscheiden, beziehungsweise die Dinge, die damit benannt werden. Das ist essenziell für eine effektive und effiziente Kommunikation.

                        Vielleicht zum Verständnis: Das was der Weberver ausliefert, ist eine Ressource. Das kann eine Datei im Dateisystem sein, aber auch die von einem Script erzeugte Ausgabe. Beiden gemein ist, dass der Client/Browser für eine solche Ressource in den HTTP-Headern den Content-Type genannt bekommt. Den kann einerseits der Webserver aus der Endung einer Datei oder einem anderen Merkmal ermitteln. Andererseits kann auch PHP den Content-Type für die vom Script erzeugte Ausgabe dem Webserver mitteilen, auf dass er den zusammen mit der Ausgabe an den Client sendet.

                        Ob und wenn ja welchen Content-Type eine Datei (wie beispielsweise das PHP-Script) hat, ist nur für das Betriebssystem interessant, das die Datei öffnen muss. Üblicherwiese spielt da ein Content-Type eine untergeordnete bis gar keine Rolle. Da ist dann lediglich über die Dateiendung eine Verknüpfung zu verarbeitenden Programmen konfiguriert. Die Programme kennen ihre eigenen Wege, sich um den Inhalt kümmern. Ihnen jedenfalls steht kein HTTP-Header mit einer Content-Type-Information zur Verfügung.

                        Zusammenfassend: Der Content-Type ist für die Ausgabe interessant, nicht für die Datei des Scripts, das sie erzeugt.

                        Was das eigentliche Problem ist, kann ich nicht nachvollziehen. Das Stück Code im OP scheint mir soweit in Ordnung zu sein. Der nicht offiziell definierte Name für den Content-Type stellt üblicherweise kein Problem dar. Die Browser bieten eigentlich daraufhin die Ressource zum Download an. application/octet-stream sollte das gleiche bewirken, nur dass der Name standardisiert ist.

                        Lo!

                        1. Hi,

                          Das funktioniert ja auch soweit, nur wird der php code nicht mehr richtig ausgeführt / die eig. seite neu geladen, wenn der content-type geändert ist.

                          Viele Grüße, jus2

                          1. Hi!

                            Das funktioniert ja auch soweit, nur wird der php code nicht mehr richtig ausgeführt / die eig. seite neu geladen, wenn der content-type geändert ist.

                            Und jetzt das Ganze bitte nachvollziehbar. Zeig dein derzeitiges Script, das soweit zusammengekürzt ist, dass das Problem grad noch auftritt, aber alles andere weg ist. Für PHP hast du das ja schon im OP veröffentlicht, nun noch bitte den HTML-Teil für den Browser. Welchen Browser verwendest du zum Testen? Und nenne bitte die Schritte zum Nachvollziehen. Schau dir dabei auch die HTTP-Header von Request und Response an. Dazu gibt es für jeden Browser eingebaute (meist über F12 erreichbar) oder nachrüstbare Tools (beispielsweise die livehttpheaders-Extension für den Firefox).

                            Lo!

                            1. Hi,

                              Das problem ist, dass meine PHP datei die HTML datei zum download aufruft und dann nur der downloaddialog auf geht.
                              Die seite, die im eig. Fenster geladen werde soll, lädt allerdings nicht, da ja die HTML aus download aufgerufen wurde.

                              Ich verwende den Firefox.

                              Entschuldige bitte, wenn ich nicht über euer fachvokabular verfüge.

                              Viele Grüße, jus2

                              1. Hi!

                                Nachvollziehbar heißt, dass du ganz genau beschriebst, was du tust, was passiert, was passieren soll.

                                Das problem ist, dass meine PHP datei die HTML datei zum download aufruft und dann nur der downloaddialog auf geht.
                                Die seite, die im eig. Fenster geladen werde soll, lädt allerdings nicht, da ja die HTML aus download aufgerufen wurde.

                                Wenn ich das richtig verstanden habe, klickst du auf einen Link, der auf dein PHP-Script verweist. Browser schickt einen Request, Script startet. Als Reaktion auf den Link-Klick soll sowohl die aktuelle Seite geändert werden als auch ein Download starten. Also so, wie das beispielsweise bei SourceForge der Fall ist. Richtig soweit?

                                Entschuldige bitte, wenn ich nicht über euer fachvokabular verfüge.

                                Entschuldigungen bringen dich fachlich nicht weiter. Wenn du die Begriffe nicht kennst, kannst du trotzdem versuchen, für Außenstehende nachvollziehbar zu beschreiben.

                                Lo!

                                1. Hi!

                                  Wenn ich das richtig verstanden habe, klickst du auf einen Link, der auf dein PHP-Script verweist. Browser schickt einen Request, Script startet. Als Reaktion auf den Link-Klick soll sowohl die aktuelle Seite geändert werden als auch ein Download starten. Also so, wie das beispielsweise bei SourceForge der Fall ist. Richtig soweit?

                                  Wenn ja, dann ist die Antwort ja schon da.

                                  Lo!

                                  1. Hi,

                                    Wenn ja, dann ist die Antwort ja schon da.

                                    Ja, das ist die Lösung, die ich kurz bevor sie kam selber erarbeitet hatte :)

                                    »»Entschuldigungen bringen dich fachlich nicht weiter. Wenn du die Begriffe nicht kennst, kannst du trotzdem versuchen, für Außenstehende nachvollziehbar zu beschreiben.

                                    Dann wäre es nur von Vorteil, wenn die Außenstehenden es auch so formulieren, dass der Fragensteller das auch versteht (Wenn er schon schreibt, dass er über Fachbegriffe nicht verfügt)

                                    Viele Grüße, jus2

                                    1. Hi!

                                      Entschuldigungen bringen dich fachlich nicht weiter. Wenn du die Begriffe nicht kennst, kannst du trotzdem versuchen, für Außenstehende nachvollziehbar zu beschreiben.
                                      Dann wäre es nur von Vorteil, wenn die Außenstehenden es auch so formulieren, dass der Fragensteller das auch versteht (Wenn er schon schreibt, dass er über Fachbegriffe nicht verfügt)

                                      Ja, das wäre ideal. Nur ist es nicht so, dass du keine Fachbegriffe kennst. Welche sollen dann gemieden werden und welche kennst du bereits? Die Frage kannst nur du beantworten, nicht aber ich im Moment der Antwort. Drei Lösungswege: Ich verwende gar keine Fachwörter und umschreibe umständlich alles. Da mir das nicht gefällt und du dabei keine Fachbegriffe kennenlernst, ist dieser Weg kein gescheiter. Ich verwende Fachwörter und erkläre sie jedesmal. Das wäre ideal für alle lernwilligen Einsteiger. Für alle anderen ist es nicht sehr effizient zu lesen, wenn sie zum x-ten Mal die Erläuterung zu lesen bekommen und für mich auch sehr umständlich zu schreiben. Zudem wirst du irgendwann den Begriff kennen und auch keine Beschreibung mehr benötigen. Der dritte Weg ist, ich schreibe unter Verwendung von Fachbegriffen und wenn du als Leser einen nicht kennst, informierst du dich selbständig darüber oder fragst nach, was er bedeutet. Ideal wäre, wenn du dich selbst informierst und erst bei Verständnisschwierigkeiten nachfragst. Ja, das ist ein mühseliger Prozess, aber den hat jeder durch, der Fachwissen angesammelt hat. Und wenn meine Erfahrung und meine Glaskugel mir sagt, dass es Verständnisprobleme gegen könnte, kann ich auch schon im Voraus versuchen, Erklärungen einzubauen. Das wird sich aber meist auf weniger gebräuchliche Begriffe beschränken, denn die allgemein üblichen kann man recht schnell nachschlagen.

                                      Lo!

          2. Moin!

            Nein. Nur wenn sie mit dem Content-Type text/html ausgeliefert werden. Oder wenn sie von einem kaputten Browser wie dem IE abgerufen werden, der dem MIME-Type keine große Beachtung schenkt und stattdessen lieber selbst die Daten analysiert und versucht zu raten, was das sein könnte.

            Das Verhalten des IE ist wohldokumentiert und entspricht bei weitem nicht dem Szenario, das du hier formuliert hast. "Raten" findet nur bei ganz bestimmten, eindeutig beschreibbaren Mime-Typangaben statt, und zwar bei jenen, die in der Vergangenheit gern mal von Serveradmins fehlkonfiguriert wurden.

            - Sven Rautenberg

            1. Hallo,

              Nein. Nur wenn sie mit dem Content-Type text/html ausgeliefert werden. Oder wenn sie von einem kaputten Browser wie dem IE abgerufen werden, der dem MIME-Type keine große Beachtung schenkt und stattdessen lieber selbst die Daten analysiert und versucht zu raten, was das sein könnte.
              Das Verhalten des IE ist wohldokumentiert ...

              wo und seit wann?

              und entspricht bei weitem nicht dem Szenario, das du hier formuliert hast. "Raten" findet nur bei ganz bestimmten, eindeutig beschreibbaren Mime-Typangaben statt, und zwar bei jenen, die in der Vergangenheit gern mal von Serveradmins fehlkonfiguriert wurden.

              Ah ja. Dann gib mal einem IE ein HTML-Dokument, sende dazu aber den Content-Type text/plain. Ein anständiger Browser stellt nur noch den Quellcode dar, er behandelt die Daten tatsächlich als Plain Text. Der IE dagegen erkennt an den ersten paar Bytes (vermutlich am <html>-Tag), dass es wohl HTML sein soll und interpretiert es entsprechend. Den angegebenen Content-Type ignoriert er geflissentlich.

              Es sei denn, das sei mit IE8 irgendwann repariert worden - ich habe das Phänomen lange nicht mehr getestet.

              Ciao,
               Martin

              --
              Butterkeksverteiler zu werden ist vermutlich eine der wenigen beruflichen Perspektiven, die sich noch bieten, wenn man einen an der Waffel hat.
                (wahsaga)
              Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
              1. Hi!

                Nein. Nur wenn sie mit dem Content-Type text/html ausgeliefert werden. Oder wenn sie von einem kaputten Browser wie dem IE abgerufen werden, der dem MIME-Type keine große Beachtung schenkt und stattdessen lieber selbst die Daten analysiert und versucht zu raten, was das sein könnte.
                Das Verhalten des IE ist wohldokumentiert ...
                wo und seit wann?

                In der MSDN. Suchen bei google.com nach "IE content-type", erstes Suchergebnis. Wie lange das schon da steht, steht nicht dabei, ist aber nicht erst seit gestern.

                Was kaputt ist, ist die Frage. Wenn du Fehlerkorrekturversuche als kaputtes Verhalten definierst, sind alle Browser kaputt. Zudem ist die Frage, ob Fehlermelden oder Korrekturversuch besser ist, wohl sowieso nicht eindeutig zu beantworten. Die Sinn des IE-Handeln ist, fehlerhaft angegebene MIME-Types stillschweigend zu korrigieren. Da ein Computer aber nicht die wahre Intention hinter einem Konstrukt erkennen kann, fallen dann auch solche Kollateralschäden an. Und Hand aufs Herz, dieses Verhalten ist doch häufiger als Hass-Vorwand verwendet worden, als dass es wirklich jemanden behindert hat.

                Es sei denn, das sei mit IE8 irgendwann repariert worden - ich habe das Phänomen lange nicht mehr getestet.

                IE9

                Lo!

              2. Moin!

                und entspricht bei weitem nicht dem Szenario, das du hier formuliert hast. "Raten" findet nur bei ganz bestimmten, eindeutig beschreibbaren Mime-Typangaben statt, und zwar bei jenen, die in der Vergangenheit gern mal von Serveradmins fehlkonfiguriert wurden.

                Ah ja. Dann gib mal einem IE ein HTML-Dokument, sende dazu aber den Content-Type text/plain. Ein anständiger Browser stellt nur noch den Quellcode dar, er behandelt die Daten tatsächlich als Plain Text. Der IE dagegen erkennt an den ersten paar Bytes (vermutlich am <html>-Tag), dass es wohl HTML sein soll und interpretiert es entsprechend. Den angegebenen Content-Type ignoriert er geflissentlich.

                "text/plain" zählt der IE zu den "verdächtigen" Mime-Typen, die einer Inhaltsanalyse unterzogen und ggf. korrigiert dargestellt werden.

                Ebenso gehört "application/octet-stream" dazu.

                Während ersterer Mime-Typ noch einigermaßen verständlich als "verdächtig" mit Autokorrektur nachvollziehbar sein kann, ist letzterer dafür verantwortlich, dass man keinen expliziten Download mit diesem "verdächtigen" Mime-Typ realisieren kann und auf Konstruktionen wie "Datei zippen" oder andere, ungültige bzw. besser selbstdefinierte Mime-Typen zurückgreifen muss. "application/force-download" ist definitiv ungültig, weil er einen offiziell klingenden Subtyp hat, der aber nicht registriert ist. Der IE kennt den aber nicht und er ist deshalb auch nicht in der Liste verdächtiger Mime-Typen enthalten.

                Die nach RFC-Lage korrekte Lösung wäre mindestens, "application/x-force-download" zu verwenden. Gesehen habe ich auch schon "application/x-ms-download" - kommt alles beides aufs Selbe raus: Unbekannter, nicht "verdächtig" gelisteter Mime-Typ im IE.

                Es sei denn, das sei mit IE8 irgendwann repariert worden - ich habe das Phänomen lange nicht mehr getestet.

                http://msdn.microsoft.com/en-us/library/ms775147(v=vs.85).aspx

                - Sven Rautenberg

                1. Hallo,

                  Dann gib mal einem IE ein HTML-Dokument, sende dazu aber den Content-Type text/plain. Ein anständiger Browser stellt nur noch den Quellcode dar, er behandelt die Daten tatsächlich als Plain Text. Der IE dagegen erkennt an den ersten paar Bytes (vermutlich am <html>-Tag), dass es wohl HTML sein soll und interpretiert es entsprechend. Den angegebenen Content-Type ignoriert er geflissentlich.
                  "text/plain" zählt der IE zu den "verdächtigen" Mime-Typen, die einer Inhaltsanalyse unterzogen und ggf. korrigiert dargestellt werden.
                  Ebenso gehört "application/octet-stream" dazu.

                  ja, und das finde ich sehr verwerflich. Denn das sind beides Content-Types, die sehr konkret sind und die man ja nicht "aus Spaß" einfach mal so einsetzt.

                  Während ersterer Mime-Typ noch einigermaßen verständlich als "verdächtig" mit Autokorrektur nachvollziehbar sein kann, ist letzterer dafür verantwortlich, dass man keinen expliziten Download mit diesem "verdächtigen" Mime-Typ realisieren kann und auf Konstruktionen wie "Datei zippen" oder andere, ungültige bzw. besser selbstdefinierte Mime-Typen zurückgreifen muss.

                  Ja, ich weiß. :-(

                  Es sei denn, das sei mit IE8 irgendwann repariert worden - ich habe das Phänomen lange nicht mehr getestet.
                  http://msdn.microsoft.com/en-us/library/ms775147(v=vs.85).aspx

                  Danke, hab ich inzwischen auch gelesen. Also immer noch nicht gefixt.

                  Ciao,
                   Martin

                  --
                  Liebet eure Feinde - vielleicht schadet das ihrem Ruf.
                  Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
      2. Hi!

        Sind Umlaute in PHP-Variablennamen zulässig? Wäre mir neu, aber ich bin mir nicht ganz sicher.

        Ja. Variablennamen müssen diesen RegEx-Ausdruck erfüllen: [a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*. Damit sind alle Umlaute in den Kodierungen ISO-8859-x und UTF-8 abgedeckt. Der selbe Ausdruck gilt für Funktions- und Klassennamen.

        Mein letzter Stand ist, dass es zwar erlaubt ist, das Script aber auf nem Server mit ner anderen Zeichenkopierung evtl. nicht mehr läuft.

        Eine Zeichenkodierung des Servers (was auch immer du darunter konkret verstehst) spielt beim Script keine Rolle. PHP (<6) liest den Inhalt der Datei byteweise, ohne Mehrbyte-Kodierungen zu berücksichtigen. Nur wenn gleiche Umlaute unterschiedlich kodiert sind, sind sie nicht gleich. Das kann bei anders kodierten zu inkludierenden Dateien der Fall sein, was aber ein Problem des Erstellers ist, wenn er nicht auf Konsistenz achtet. Wenn alles nach ISO-8859-1 oder alles nach UTF-8 kodiert ist, kann es prinzipbedingt keine Probleme geben. Weiterhin kann es ein Problem werden, bei Scripten, Scriptsammlungen oder Frameworks, die man in eigene Projekte einbinden will, wenn die Kodierungen nicht stimmen. Wenn man, wie eigentlich üblich, englische Bezeichner nimmt, hat man das Problem jedoch nicht.

        Ist also in jedem Fall ne ganz schlechte Idee.

        Ich wüsste nicht, warum Umlauten eine ganz schlechte Idee sein sollten und nicht etwa Inkonsitenzen zwischen den Kodierungen verschiedener Dateien. "In jedem Fall" stimmt auch nicht, siehe oben.

        Lo!

        1. @@dedlfix:

          nuqneH

          Wenn […] alles nach UTF-8 kodiert ist, kann es prinzipbedingt keine Probleme geben.

          Doch.

          Qapla'

          --
          Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
          (Mark Twain)
          1. Hi!

            Wenn […] alles nach UTF-8 kodiert ist, kann es prinzipbedingt keine Probleme geben.
            Doch.

            OK, kombinierte und nichtkombinierte Zeichen. Dass die einer zusammenmischt halte ich für eher unwahrscheinlich.

            Lo!

            1. Hello,

              Wenn […] alles nach UTF-8 kodiert ist, kann es prinzipbedingt keine Probleme geben.
              Doch.

              OK, kombinierte und nichtkombinierte Zeichen. Dass die einer zusammenmischt halte ich für eher unwahrscheinlich.

              Das ist durchaus nicht unwahrscheinlich. Man muss ja mit seinem Editor die Datei nur im falschen Modus öffnen und sich dann nach dem Öffnen dazu entschließen, sie anders wieder abzuspeichern.
              Ähnlich unsinnige aber durchaus wahrscheinliche Möglichkeiten bieten die Umwandlungsfunktionen von PHP.

              Liebe Grüße aus dem schönen Oberharz

              Tom vom Berg

              --
               ☻_
              /▌
              / \ Nur selber lernen macht schlau
              http://bergpost.annerschbarrich.de
              1. Hi,

                Doch.

                OK, kombinierte und nichtkombinierte Zeichen. Dass die einer zusammenmischt halte ich für eher unwahrscheinlich.

                Das ist durchaus nicht unwahrscheinlich. Man muss ja mit seinem Editor die Datei nur im falschen Modus öffnen und sich dann nach dem Öffnen dazu entschließen, sie anders wieder abzuspeichern.

                Und in welchem Modus ändert welcher dir bekannte Editor Zeichen in der genannten Weise?

                Ähnlich unsinnige aber durchaus wahrscheinliche Möglichkeiten bieten die Umwandlungsfunktionen von PHP.

                An welcher Stelle?

                MfG ChrisB

                --
                RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
                1. Hi,

                  Also mein PSPad ändert garnichts und alle andere Programme die ich bisher gesehen habe auch nicht.

                  Aber um auf nummer sicher zu gehen nehme ich ä ö ü usw. raus :)

                  Viele Grüße, jus2

                  1. Hi,

                    Also mein PSPad ändert garnichts und alle andere Programme die ich bisher gesehen habe auch nicht.

                    Dein PSPad und alle anderen Programme ändern beim Tastendruck "ä" den Inhalt der zu speichernden Datei durch ein oder zwei Bytes, abhängig von den Einstellungen zu dieser Datei, und fügt eventuell am Anfang noch drei weitere Bytes hinzu. Dass Du dies nicht siehst, ist der Zweck der Änderungen.

                    Cheatah

                    --
                    X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
                    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
                    X-Will-Answer-Email: No
                    X-Please-Search-Archive-First: Absolutely Yes
                2. Hello,

                  Und in welchem Modus ändert welcher dir bekannte Editor Zeichen in der genannten Weise?

                  Ok, das will ich jetzt nicht behaupten, dass einer ein ä in "a <Rückschritt> <Punkte>" ändert. Ich hatte das afuf die Codierung bezogen (UTF-8 versa ISO).

                  Aber trotzdem werde ich das nachher mal mit vi/vim oder ähnlichen Editoren ausprobieren, ob man es nicht "aus Versehen" provozieren kann.

                  Aber vermutlich hast Du Recht, dass das nicht unbemerkt passieren wird, schon gar nicht bei unixoiden Programmen. Da kommt fast immer eine Warnung.

                  Liebe Grüße aus dem schönen Oberharz

                  Tom vom Berg

                  --
                   ☻_
                  /▌
                  / \ Nur selber lernen macht schlau
                  http://bergpost.annerschbarrich.de
              2. Hi!

                Doch.
                OK, kombinierte und nichtkombinierte Zeichen. Dass die einer zusammenmischt halte ich für eher unwahrscheinlich.

                'tschuldigung, korrekt muss das heißen precomposed characters (z.B. ä) und combining characters (z.B. a plus extra ¨), also auf deutsch vielleicht vorkombinierte Zeichen und kombinierende Zeichen.

                Das ist durchaus nicht unwahrscheinlich.

                Es geht hier nicht um unterschiedliche Kodierungen sondern um zwei Möglichkeiten der Darstellung des selben Zeichens unter Unicode. Mir ist bis jetzt nur ein System unter die Finger gekommen, das das macht: Apple (OSX). Das speichert Dateinamen mit diakritischen Zeichen auf und an lateinischen Buchstaben in der kombinierten Form auf den USB-Stick, auf dass ein Windows sie nicht richtig entziffern kann. Aber das Dateisystem ist nochmal wieder eine andere Baustelle als die Inhalte von Dateien.

                Editoren, die sowas machen, bin ich noch nicht begegnet. Die hauptsächlich für die Entwicklung verwendeten Systeme werden sich sicherlich hüten, da anders vorzugehen als die anderen.

                Man muss ja mit seinem Editor die Datei nur im falschen Modus öffnen und sich dann nach dem Öffnen dazu entschließen, sie anders wieder abzuspeichern.

                Wie gesagt, ich kenne keinen Editor, der Umlaute und Konsorten unter UTF-8 in der Form Grundbuchstabe plus Tüdelchen als extra Zeichen speichert.

                Lo!

                1. @@dedlfix:

                  nuqneH

                  'tschuldigung, korrekt muss das heißen precomposed characters (z.B. ä) und combining characters (z.B. a plus extra ¨)

                  „Decomposed character“ wäre das Gegenstück zu „precomposed character“; „combining character“ ist nur ein Teil davon.

                  also auf deutsch vielleicht vorkombinierte Zeichen und kombinierende Zeichen.

                  Hm, ich hab das einfach mit „zusammengesetzt“ und „getrennt“ übersetzt.

                  Editoren, die sowas machen, bin ich noch nicht begegnet.

                  Laut verlinktem Artikel macht Dreamweaver das. Nicht, dass man dem schon begegnet sein müsste. ;-)

                  Qapla'

                  --
                  Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
                  (Mark Twain)
    2. Hi,

      Aber "application/force-download" ist kein gültiger MIME-Typ, dessen bin ich mir sicher. Vielleicht meintest du stattdessen application/octet-stream.

      "application/force-download" funktioniert aber.

      Viele Grüße, jus2

      1. Hi,

        "application/force-download" funktioniert aber.

        wie hast Du das nachgewiesen? Oder anders gefragt: Wenn Du nicht mal wusstest, dass das falsch ist, wie willst Du dann sicherstellen, dass Deine Behauptung auch außerhalb Deiner Laborbedingungen stimmt?

        Cheatah

        --
        X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes