Andreas Nagel: Wieso wird die txt Datei nicht geöffnet?

Hallo zusammen

auf meiner Seite soll es auch Links geben die txt Dateien öffnen und auch als solche markiert sind. Dafür setze ich ein eigen kreiertes Attribut namens Datei, so dass ich auch in dem Eigenschaftenformular zugriff darauf habe und zum öffnen dieses auslese. Und um das Ganze auszulösen verwende ich ajax, das eine php Datei öffnet, mit der sich dann damit die Datei öffnen lassen sollte:

	$.ajax({
	type: "POST",
	url: "Open.php",
	data: { Datei: encodeURIComponent(Link.getAttribute("Datei")) },
	success: function() {}
	});

Und dann kann ich auch die Zeile success: function() {} mit dem data und alert vervollständigen, so dass ich eine Rückmeldung von folgendem Code aus der Datei erhalte:

$Datei = urldecode($_REQUEST['Datei']);

system($Datei);

Und ich vervollständige den Code mit echo "$Datei"; und erhalte dann als Rückmeldung genau so wie gewünscht die zu öffnende Datei zurück. Kopiere das, füge es in das Startmenü ein, drücke die Eingabetastte und habe stets die Datei vor mir! Doch wieso oftmals nicht, zb. mit Umlauten oder mit Abständen? Lasse ich das utf8_decode und urldecode weg, kann man auch nix met dem Text der Message anfangen. Und Windows öffnet ja auch die Datei!

Also woran liegt das bitte? Und schonmal vielen Dank für alle Bemühungen und ich würde mich freuen wenn das wieder funktionieren würde!

Also nochmals Danke Gruß Andreas

  1. Hallo Andreas Nagel,

    auf meiner Seite soll es auch Links geben die txt Dateien öffnen und auch als solche markiert sind. Dafür setze ich ein eigen kreiertes Attribut namens Datei, so dass ich auch in dem Eigenschaftenformular zugriff darauf habe und zum öffnen dieses auslese. Und um das Ganze auszulösen verwende ich ajax, das eine php Datei öffnet, mit der sich dann damit die Datei öffnen lassen sollte:

    Warum verlinkst du nicht einfach eine txt-Datei?

    Bis demnächst
    Matthias

    --
    Wenn eine Idee nicht zuerst absurd erscheint, taugt sie nichts. (Albert Einstein)
    1. Jo Hallo

      und es ist ja so, daß ich mehrere Gründe habe, Dateien nicht mit einem Link zu öffnen:

      Ich verwende ein Eigenschaften oder auch das Neu Formular, mit diesem ich dann angeben kann, dass es sich darum handelt eine Datei zu öffnen. Und damit wird dieser Link auf meiner Seite als solches markiert und ich kann auch zusätzlich zu einem Link eine txt Datei öffnen, um darin Informationen speichern zu können. Und es liesen sich damit ja auch alle Dateien in deren Programmen öffnen lassen.

      Aber schonmal Danke Gruß Andreas

      1. Hallo Andreas Nagel,

        und es ist ja so, daß ich mehrere Gründe habe, Dateien nicht mit einem Link zu öffnen:

        Ich verwende ein Eigenschaften oder auch das Neu Formular, mit diesem ich dann angeben kann, dass es sich darum handelt eine Datei zu öffnen. Und damit wird dieser Link auf meiner Seite als solches markiert und ich kann auch zusätzlich zu einem Link eine txt Datei öffnen, um darin Informationen speichern zu können. Und es liesen sich damit ja auch alle Dateien in deren Programmen öffnen lassen.

        Ich verstehe leider nicht, was du mit damit sagen möchtest, noch was dein Ziel ist.

        Bis demnächst
        Matthias

        --
        Wenn eine Idee nicht zuerst absurd erscheint, taugt sie nichts. (Albert Einstein)
  2. auf meiner Seite soll es auch Links geben die txt-Dateien öffnen

    	$.ajax({
    	type: "POST",
    	url: "Open.php",
    	data: { Datei: encodeURIComponent(Link.getAttribute("Datei")) },
    	success: function() {}
    	});
    
    $Datei = urldecode($_REQUEST['Datei']);
    
    system($Datei);
    

    Wenn du dir mal die Beschreibung von system() anschaust, wirst du feststellen, dass du damit keine Textdateien öffnest, sondern Befehle ausführst.

    Doch wieso oftmals nicht, zb. mit Umlauten oder mit Abständen?

    Umlaute sind eh immer eine Sache für sich, bis vor nicht allzu langer Zeit waren die entweder gar nicht vorgesehen (ASCII-Zeichensatz) oder deren Definition überlappte sich mit jener anderer Zeichen (allen voran die 15 ISO-Zeichensätze).

    Dieses Grundproblem fällt nicht auf, solange mit den Umlauten nur systemintern hantiert wird, also mindestens auf demselben Rechner, meist auch noch auf gleichen Betriebssystemversionen mit gleicher Ländereinstellung. Sobald sie aber dieses geschlossene System verlassen, muss irgendwie die Kodierung mitgeschleppt werden – und speziell bei URLs ist dafür keine Möglichkeit vorgesehen. Der Umlaut bzw. das Sonderzeichen wird vom Sendenden in eine Zahl umgewandelt und der Empfänger kann nur raten, was es mit dieser Zahl auf sich haben könnte.

    Insofern: Finger weg von Sonderzeichen in URLs.

    Die "Abstände" (ich vermute, du meinst Leerzeichen) sind sehr wahrscheinlich ein anderes Problem: Wie oben schon geschrieben, führst du mit system() eine Befehlszeile aus. system("dir c:") öffnet nicht die Datei namens "dir c:", sondern führt den Befehl dir aus, der dann den Inhalt des Verzeichnisses c:\ anzeigt.

    Verwende readfile(), um eine Textdatei auszugeben.

    1. Hallo,

      Verwende readfile(), um eine Textdatei auszugeben.

      und zur Info, per http-Request kann man txt-Dateien auch direkt laden, da muss kein php dazwischen.

      Gruß
      Jürgen

      1. Verwende readfile(), um eine Textdatei auszugeben.

        und zur Info, per http-Request kann man txt-Dateien auch direkt laden

        … aber nicht die für alle Welt interessanten Dateien wie .htaccess oder /etc/password.

      2. Hallo

        es ist so, dass ich eine Textdatei in Windows Nodepad - Editor - öffnen will und darin auch bearbeiten können will. Und ich versuchte es mal mit fopen und will aber überhaupt nicht damit zurecht kommen. Die Datei will absolut nicht gestartet werden, mit dann der Info Resource id #3.

        Danke Gruß Andreas

        1. Hallo

          Mit dem Befehl system startete ich damals notepad und damit die Dateien. Und ich wunderte mich eh, dass damit auch Dateien geöffnet werden. Und ich versuchte es mal mit fopen und will aber überhaupt nicht damit zurecht kommen. Die Datei will absolut nicht, mit der Info Resource id #3, gestartet werden. Ich bräuchte also eine Auskunft zu fopen. Webseiten dazu hatte ich bereits angeschaut und mit verschiedenen Schreibweisen ausprobiert.

          Aber auf jeden Fall schonmal Danke.

          Gruß Andreas

        2. Hallo Andreas,

          es ist so, dass ich eine Textdatei in Windows Nodepad - Editor - öffnen will und darin auch bearbeiten können will. Und ich versuchte es mal mit fopen und will aber überhaupt nicht damit zurecht kommen. Die Datei will absolut nicht gestartet werden, mit dann der Info Resource id #3.

          ich frage mal nach, vielleicht habe ich dich ja falsch verstanden:

          Du willst mit notepad eine Datei öffnen, die auf dem Webserver liegt?

          Wo versuchst du es mit fopen?

          Warum soll die Datei gestartet werden, und wo soll die Datei gestartet werden?

          Was hat das alles mit Javascript zu tun?

          Gruß
          Jürgen

          1. Hallo Jürgen

            Danke und die Situation ist folgende: Ich nutze die Seite lokal als meine Startseite oder auf dem USB Stick mit meiner Linksammlung, wie auch all mögliche Daten dazu. Und eine Textdatei soll lokal gestartet werden und kann einmal Informationen, sowie auch Infos zu dem angeklickten Link beinhalten kann.

            Und es ist egal ob ich fopen("c:\ oder ("c:\ oder (c:// ...oder wie auch immer eingebe. Und ich las schonmal irgendwas mit von wegen not a stream to ("c:... Es will nicht!

            Schade, aber schonmal danke an Dich

            Gruß Andreas

            1. Hallo,

              Danke und die Situation ist folgende: Ich nutze die Seite lokal als meine Startseite oder auf dem USB Stick mit meiner Linksammlung, wie auch all mögliche Daten dazu. Und eine Textdatei soll lokal gestartet werden und kann einmal Informationen, sowie auch Infos zu dem angeklickten Link beinhalten kann.

              Und es ist egal ob ich fopen("c:\ oder ("c:\ oder (c:// ...oder wie auch immer eingebe. Und ich las schonmal irgendwas mit von wegen not a stream to ("c:... Es will nicht!

              dann erklär doch bitte endlich mal, was du da genau tust. Bisher sprichst du in Rätseln und gibst nur Bruchstücke an Informationen, die aber für Außenstehende nicht genügen, um dein Gesamt-Szenario zu verstehen.

              So long,
               Martin

              1. Hallo Martin

                und ich verstehe nicht was du da willst. Denn ich hatte doch alles beschrieben und das um das es ja eigentlich ging wurde ja schon gelöst. Ich solle nicht den Befehl system verwenden und dann versuchte ich es mit fopen. Und was willst Du von mit noch an Informationen= Denn das es mir um das Öffnen von Textdateien in notepad geht sollte doch auf jeden Fall jetzt bekannt sein. Vielleicht schreibe ich ja zu viel dazu und schildere damit mein Szenario.

                Danke Gruß Andreas

            2. Hallo,

              also eine HTML-Datei mit einer Linkliste, die von einem Datenträger in deinem PC aufgerufen wird. OK, nur welche Rolle soll da die Text-Datei spielen? Ist das evtl. eine Batch-Datei? Und wo kommt da das ominöse fopen ins Spiel?

              Gruß
              Jürgen

            3. Hallo Jürgen

              Danke und die Situation ist folgende: Ich nutze die Seite lokal als meine Startseite oder auf dem USB Stick mit meiner Linksammlung, wie auch all mögliche Daten dazu.

              Würde ich nicht so machen. Der Stick kann verloren gehen und was dann!?

              1. Tach,

                Würde ich nicht so machen. Der Stick kann verloren gehen und was dann!?

                greift die FDE.

                mfg
                Woodfighter

    2. Ok Hallo

      Es steht in der Zeile zum auslesen der Datei ja auch utf8_decode, das ich vergessen hatte und in der Message steht alles so wie es sein soll. Also auch die Abstände, mit dem ich die Leerzeilen meinte.

      Aber auf jeden Fall vielen Dank Gruß Andreas

  3. $Datei = urldecode($_REQUEST['Datei']);
    
    system($Datei);
    

    Das ist aber ziemlich gefährlich. Was wenn ich Dir sowas

    del /S /F /Q *
    

    sende?

    Das ist noch die harmloseste Methode Dich zu ärgern:

    echo 'Der Betreiber dieser Seite kannn nicht der klügste sein.' > index.html
    

    geht nämlich auch. Und glaube nicht, dass Du mich mit Javascript davon abhalten kannst:

    https://curl.haxx.se/docs/manual.html

    1. Mit einer billigen Zuordnungstabelle ist das überhaupt kein Problem mehr.

  4. Lieber Andreas,

    auf meiner Seite

    wo ist diese Seite? Gibt es sie im Internet, oder nur auf Deinem lokalen Testsystem (Windows-PC)?

    soll es auch Links geben die txt Dateien öffnen

    Wo sollen die Dateien geöffnet werden? Auf dem Webserver im Internet, oder auf Deinem lokalen Windows-PC?

    und auch als solche markiert sind.

    Was meinst Du mit "markiert"? Der Link auf Deiner Seite hat eine spezielle Markierung (wie ist die technisch umgesetzt?), oder die Datei hat einen speziellen Inhalt, der sie markiert?

    Dafür setze ich ein eigen kreiertes Attribut namens Datei,

    Tust Du das auf HTML-Ebene? Damit erzeugst Du vielleicht "kaputtes" HTML. Je nach verwendetem HTML-Dialekt (nutzt Du HTML5?) muss der Browser das ignorieren, da es ungültiges Markup ist.

    so dass ich auch in dem Eigenschaftenformular zugriff darauf habe und zum öffnen dieses auslese.

    Wo ist dieses "Eigenschaftenformular"? Meinst Du den Eigenschaften-Dialog des Windows-Kontextmenüs, wenn Du im Dateiexplorer auf die Datei rechtsklickst? Oder sprichst Du von einer bestimmten Seite Deiner Web-Anwendung? Oder meinst Du einen JavaScript-Mechanismus auf Deiner Seite?

    Und um das Ganze auszulösen verwende ich ajax, das eine php Datei öffnet, mit der sich dann damit die Datei öffnen lassen sollte:

    Du willst also auf dem Server eine Datei öffnen lassen, was Du mit einem HTTP-Request auslöst (ob das ein AJAX-Call oder eine manuell in die Adresszeile des Browsers eingegebene URL ist, spielt keine Rolle, denn dahinter steht immer ein HTTP-Request!), um dann auf dem Server was mit der Datei zu tun?

    data: { Datei: encodeURIComponent(Link.getAttribute("Datei")) },

    Du machst tatsächlich Dein HTML kaputt? Warum? Warum kannst Du keinen Klassennamen stattdessen vergeben? Oder ein data-Attribut? Und Du meinst wohl die Umlautproblematik (JavaScript kennt intern nur UTF-8!) dadurch zu lösen, dass Du den Dateinamen in ein eigenes Attribut schreibst? Da wäre ein data-Attribut besser:

    <a data-filename="datei.txt" href=".....">Klicktext</a>
    

    Und dann kann ich auch die Zeile success: function() {} mit dem data und alert vervollständigen, so dass ich eine Rückmeldung von folgendem Code aus der Datei erhalte:

    Was genau möchtest Du denn vom Webserver als Antwort auf Deinen Request erhalten? Den Klartext-Inhalt einer Textdatei?

    system($Datei);

    Du willst also auf dem Webserver (im Internet!) etwas ausführen lassen. Bist Du sicher, dass das genau das ist, was Du zu erreichen suchst?

    Und ich vervollständige den Code mit echo "$Datei"; und erhalte dann als Rückmeldung genau so wie gewünscht die zu öffnende Datei zurück.

    Du meinst, in Deinem Browser wird dann der Textinhalt der Datei angezeigt?

    Kopiere das, füge es in das Startmenü ein, drücke die Eingabetastte und habe stets die Datei vor mir!

    Startmenü? Was hat das Startmenü mit der Antwort eines Webservers zu tun? Und was kann Dein Windows-System mit einer Antwort anfangen, die von einem Server im Internet kommt? Oder verwechselst Du den Kontext Deines lokalen Testservers damit, dass das später auch so aus dem Internet sein wird?

    Mir scheint, Du missbrauchst einen lokalen Testserver dazu, Funktionalitäten bereitzustellen, die eigentlich der Dateiexplorer bieten soll. Du erstellst Dir eine Art Linkliste auf Dateien, mit denen Du gerne spielen willst. Aber anstatt ein Verzeichnis mit Verknüpfungen anzulegen, baust Du Dir eine lokale Webserverseite dafür.

    Doch wieso oftmals nicht, zb. mit Umlauten oder mit Abständen? Lasse ich das utf8_decode und urldecode weg, kann man auch nix met dem Text der Message anfangen. Und Windows öffnet ja auch die Datei!

    <sarkasmus>Du wirst wahrscheinlich ein BIOS-Update benötigen und Deine eigenen Dateien in einen VeraCrypt-Container verschieben müssen, bevor Dein Webserver mit PHP7 bei tageslicht das Wetter vorhersagen kann</sarkasmus>

    Also woran liegt das bitte? Und schonmal vielen Dank für alle Bemühungen und ich würde mich freuen wenn das wieder funktionieren würde!

    Es ist erstaunlich, dass da überhaupt etwas so funktioniert hat, wie Du das anscheinend erwartest. Leider ist aus Deiner Beschreibung wie meinen Vorgängern auch mir nicht klar, was da vorher wie funktioniert hat. Möglicherweise ist ein Software-Update schuld, das schlimmsten Unsinn mit verbesserten Sicherheitsmechanismen nun wirksam verhindert, was vorher noch zugelassen wurde.

    Mein Verdacht ist, dass Du bei einem Klick auf eine Textdatei erreichen möchtest, dass diese nicht im Browser dargestellt, sondern mit dem unter Deinem System für Textdateien registrierten Standard-Programm direkt geöffnet werden soll. Da scheiterst Du aber an einer absichtlich vorhandenen Sicherheitseinstellung: Dateien aus dem Web dürfen nur mit ausdrücklicher Zustimmung des Benutzers auf dessen System geöffnet werden. Dazu braucht es immer eine Form von Bestätigung in Form eines Dialogs, sei es ein OK-Button oder ein "speichern unter"-Dialog. Mit PHP könntest Du erreichen, dass Deinem Browser das tatsächliche Dateiformat "verheimlicht" wird, sodass er Dich beim Benutzen des Links fragt, ob Du die Datei speichern, oder ausführen willst. Dazu kannst Du mit PHP den "Content-Type"-Header passend verändern, bevor Du den Dateiinhalt an den Browser sendest.

    Liebe Grüße,

    Felix Riesterer.