Felix Riesterer: Wieso wird die txt Datei nicht geöffnet?

Beitrag lesen

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.