Ergebnis 1 bis 15 von 15
  1. #1
    Johannes1984 ist offline Jungspund
    registriert
    04-02-2010
    Beiträge
    17

    Webserver und Javascript: Zugriff verweigert auf Dateipfad von <input type="file">

    Hallo,

    in einem HTML-Formular habe ich ein File-Eingabefeld (<input type="file">), mit dessen vom Benutzer ausgewählten Dateipfad ich in Javascript diese Datei öffne (window.open( ) ).

    Normalerweise klappt das auch gut, nur wenn ich das HTML-Formular über localhost, also den Apache-Webserver von Xampp starte, klappt das Öffnen nicht mehr. Ich bekomme dann von Javascript die Meldung "Zugriff verweigert". Vermutlich hat dies etwas mit Domaingrenzen oder so zu tun, genaueres konnte ich dazu aber nicht herausfinden.
    Das ganze muss ich leider auch über einen Webserver starten, weil ich mit der Webseite auch PHP-Operationen durchführen will, und PHP braucht ja als Umgebung einen Webserver.

    Ich glaube, der Zugriff würde funktionieren, wenn ich die zu öffnende Datei in htdocs (dem standard-localhost-Ordner) speichern würde und den Dateipfad aus dem File-Eingabefeld als String mit Javascript verändern würde, sodass so etwas wie file://localhost/dateiname.txt oder http://localhost/dateiname.txt übrig bleiben würde.
    Allerdings könnte ich dann wirklich nur Dateien laden, die unter htdocs gespeichtert sind und nicht Daten von irgendeinem anderen Ort auf dem PC. Und was ist, wenn der Standard-localhost-Ordner auf einem anderen Rechner auf einen anderen Ordner als htdocs verweist und ich das HTML-Formular dort auch gerne verwenden würde? Dann funktioniert das mit dem Dateipfad ändern auch nicht mehr. Und ich kann in Javascript bestimmt auch nicht abfragen, welches der eingestellte localhost-Ordner des Webservers ist, oder?


    Kurz gesagt möchte ich mit Javascript auf einem Webserver auf alle Dateien des Rechners zugreifen können bzw. wenn das nicht geht, wenigstens über den Standard-localhost-Ordner (den ich dann aber über Javascript irgendwie abfragen können müsste).
    Ich würde mich freuen, wenn mir da jemand weiterhelfen kann.

  2. #2
    ein schlauer ist offline Lounge-Member
    registriert
    18-08-2004
    Beiträge
    14.671

    AW: Webserver und Javascript: Zugriff verweigert auf Dateipfad von <input type="file"

    Ich verstehe nicht wo das Problem steckt. Du kannst Dateien von deinem lokalen Rechner hochladen wohin du willst und was hier JS machen soll geht aus deinem Posting nicht klar hervor. Mit window.open() kannst du jede erreichbare x-beliebige Resource aufrufen.

  3. #3
    Bieber ist offline König
    registriert
    10-12-2007
    Ort
    Erfurt
    Beiträge
    964

    AW: Webserver und Javascript: Zugriff verweigert auf Dateipfad von <input type="file"

    Zitat Zitat von Johannes1984 Beitrag anzeigen

    Kurz gesagt möchte ich mit Javascript auf einem Webserver auf alle Dateien des Rechners zugreifen können
    Das geht zum Glück nicht, sonst könnte ja jeder Webseitenbetreiber die Daten deines Rechners auslesen! Mir ist noch nicht so ganz klar wo die Dateien nun liegen sollen die du öffnen möchtest...
    crazy

    Schach online: Lust auf eine Partie Schach gegen mich? Einfach kostenlos auf onlineschach.eu registrieren und den Bieber suchen.

  4. #4
    Johannes1984 ist offline Jungspund
    registriert
    04-02-2010
    Beiträge
    17

    AW: Webserver und Javascript: Zugriff verweigert auf Dateipfad von <input type="file"

    Mir ist noch nicht so ganz klar wo die Dateien nun liegen sollen die du öffnen möchtest...
    Es liegt alles auf einem Rechner auf der gleichen Festplatte.
    Der Webserver liegt auf C:\xampp\...
    Die Dateien, die ich laden will, liegen irgendwoanders auf C:, z.B. C:\Johannes\Dateien\datei1.txt

    Ohne Nutzung eines Webservers funktioniert alles super, nur beim Starten über localhost nicht mehr.
    Hier mal der Javascript-Code:
    Code:
    function holedateiname() {	
    var dateiname = document.form.forminhalt.value.toString();
    var a = window.open(dateiname, "");					// Fenster öffnen
    var b = a.document.getElementsByTagName("body")[0].innerHTML.toString();	// Inhalt herauslesen, in einen String konvertieren
    a.close();
    Die Fehlermeldung kommt bei window.open( ), und ich glaube, sie kommt, weil der Dateipfad nicht mit localhost beginnt, keine Ahnung.

    Und der zugehörige HTML-Code-Ausschnitt:
    HTML-Code:
    <form name="form" action="" method="post" enctype="multipart/form-data">
    Textdatei zur Animation auswählen <input name="forminhalt" id="forminhalt" type="file" />	
    </form>
    <button type="button" id="Textdateibutton" name="Text_3" onclick="javascript: holedateiname()">Textdatei laden</button>

  5. #5
    Avatar von kkapsner
    kkapsner ist offline Super Moderator
    registriert
    28-03-2008
    Beiträge
    17.760

    AW: Webserver und Javascript: Zugriff verweigert auf Dateipfad von <input type="file"

    Das Ganze wird wegen der SOP nicht funktionieren - du musst die Datei irgendwie auf den Server laden (abschicken des Formulars) und von dort kannst sie dann mit JS holen.

  6. #6
    Johannes1984 ist offline Jungspund
    registriert
    04-02-2010
    Beiträge
    17

    AW: Webserver und Javascript: Zugriff verweigert auf Dateipfad von <input type="file"

    Ok, bloß wie kann ich nach dem Abschicken des Formulares von Javascript bzw. window.open() auf die Datei auf dem Server zugreifen?
    Ich hab mir mal folgendes überlegt: Ich habe eine Datei Formular.html, die das Dateiupload-Feld und die function für das abschicken enthält:
    HTML-Code:
    <html>
    <head>
    
    	<script language="JavaScript">
    		function abschicken() {
    			document.form.submit();
    		
    		}
    	</script>
    
    </head>
    <body>
    
    	<form name="form" action="server.php" method="post" enctype="multipart/form-data">
    		Textdatei zur Animation auswählen <input name="forminhalt" id="forminhalt" type="file" />
    	</form>
    
    	<button type="button" id="Textdateibutton" name="Text_3" onclick="javascript: abschicken()">Textdatei laden</button>
    
    </body>
    </html>
    Das Formular wird dann an den Server bzw. die Datei server.php geschickt:
    PHP-Code:
    <html>
    <head>
        <?php
            header
    ("Content-Type: text/javascript");
        
    ?>

        <script type="JavaScript">
            window.open(<?php echo $_POST["forminhalt"];?>, "");
        </script>
        
    </head>
    <body></body>
    </html>
    Das heißt, der Dateipfad, den der Benutzer im file-Feld bestimmt hat, müsste jetzt auf dem Server sein. Ich hab mich dann gefragt, wie ich auf die Datei des file-Feldes von Javascript mit window.open() zugreifen kann. Ich dachte, es geht vielleicht ähnlich wie bei einer PHP-Variable, wozu ich die folgende Webseite gefunden habe:
    http://webdesign.weisshart.de/blog.php?p=109
    Das heißt, ich füge oben den Header ein, damit PHP weiß, ich will Javascript-Operationen durchführen. Diese Operation ist dann die Aktion window.open()

    Allerdings hat das gar nicht geklappt, ich bekomme nämlich eine Fehlermeldung:
    Warning: Cannot modify header information - headers already sent by (output started at D:\Programme\xampp\htdocs\Johannes_Fischer\Testordner\server.php:3) in D:\Programme\xampp\htdocs\Johannes_Fischer\Testordner\server.php on line 4

    Wegen dem D: braucht ihr euch nicht zu wundern, das ist jetzt ein anderer PC, wo Webserver und Dateien auf Laufwerk D: liegt (ich hatte vorher ja was von C: erzählt)

    Ich frage mich jetzt eben, wie ich nach dem Abschicken des Formulars an eine PHP-Datei von Javascript mit window.open() auf die anfangs vom Benutzer im File-Feld bestimmte Datei zugreifen kann. Weiß jemand Rat?

  7. #7
    Avatar von Junkee[]
    Junkee[] ist offline Lounge-Member
    registriert
    08-05-2009
    Ort
    Leonberg
    Beiträge
    3.169

    AW: Webserver und Javascript: Zugriff verweigert auf Dateipfad von <input type="file"

    Du musst den Header vor alles anderen senden.

  8. #8
    Avatar von Albu
    Albu ist offline Foren-Gott
    registriert
    04-07-2001
    Beiträge
    13.501

    AW: Webserver und Javascript: Zugriff verweigert auf Dateipfad von <input type="file"

    Zitat Zitat von Johannes1984 Beitrag anzeigen
    Weiß jemand Rat?
    Ich verstehe irgendwie nicht, was Du mit dieser komischen Konstruktion überhaupt erreichen willst.
    Fakt ist, Du hast da so ein paar Grundlagen nicht verstanden / noch nicht realisiert. Sprich: das Internet funktioniert ein bißchen anders, als Du Dir vorstellst.
    1. Get people to play Space Taxi
    2. Sell real estates on neptun
    3. Profit!

    IE is not a browser, it is a scream.


    Outside of a dog, a book is man's best friend. Inside of a dog, it's too dark to read.

  9. #9
    Avatar von kkapsner
    kkapsner ist offline Super Moderator
    registriert
    28-03-2008
    Beiträge
    17.760

    AW: Webserver und Javascript: Zugriff verweigert auf Dateipfad von <input type="file"

    1. Für das Abschicken von Formularen gibt es <input type="submit"> - dafür brauchst du kein JS.
    2. Der Dateiname interessiert dich doch gar nicht - du willst doch den Inhalt der Datei haben - und genau diesen kannst du wegen der SOP nicht auslesen wenn du die Datei mit window.open öffnest (mal abgesehen davon, dass der Pfad zur Datei gar nicht zum Server übertragen wird...)
    3. Deswegen solltest du einfach den Inhalt der Datei, der ja übertragen wird und für den auch das <input type="file"> gedacht ist ausgeben - dann kannst du mit JS damit machen, was du willst.
    4. Dein HTML ist wirklich grausam: keine DocType, invalide und nicht einmal konsequent invalide...
    5. Du solltest dich dringend mit den Grundlagen der von dir benutzten Funktionen/Technologien beschäftigen.

    PS: was du mit dem header wirklich bewirken wolltest ist mir wirklich nicht klar.

  10. #10
    Johannes1984 ist offline Jungspund
    registriert
    04-02-2010
    Beiträge
    17

    AW: Webserver und Javascript: Zugriff verweigert auf Dateipfad von <input type="file"

    Eigentlich brauche ich ja nur den Dateiinhalt als String, daher sollte ich besser die Javascript-Funktion window.open() auslassen; Stattdessen will ich die Datei jetzt über PHP an den Server schicken, dort den Dateiinhalt als String auslesen und diesen als Variable an Javascript übergeben.
    Ich hab da schon einiges rumprobiert, aber leider bekomme ich nur Fehlermeldungen

    Die Datei Formular.html enthält jetzt 2 Button: Einer ist für das Senden der Datei an den Server (function abschicken() ) gedacht, den man zuerst anklickt, damit die Datei auf dem Server vorliegt.
    Formular.html:
    HTML-Code:
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    
    	<script type="text/javascript" src="Formular_js.php"></script>
    	<script language="JavaScript">
    		function abschicken() {
    			document.form.submit();
    		
    		}
    	</script>
    
    </head>
    <body>
    
    	<form name="form" action="server.php" target="_blank" method="post" enctype="multipart/form-data">
    		Textdatei zur Animation auswählen <input name="forminhalt" id="forminhalt" type="file" />
    	</form>
    
    	<button type="button" onclick="javascript: abschicken()">Datei an den Server schicken</button>
    	<button type="button" onclick="holedateiname()">Dateiinhalt als String ausgeben</button>
    
    </body>
    </html>
    Geschickt wird die Datei an server.php:
    PHP-Code:
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
        <?php
            $datei 
    $_FILES["forminhalt"]["tmp_name"];
            
    $dateistring file_get_contents($datei);
        
    ?>
    </head>
    <body></body>
    </html>
    Der Dateiinhalt soll hier an die Variable $dateistring gegeben werden.
    Schließlich soll der 2.Button in der Formular.html geklickt werden. Dabei soll dann die function holedateiname() aus der Datei Formular_js.php aufgerufen werden:
    HTML-Code:
    <?php
    header('Content-Type: text/javascript');
    include("server.php");
    ?>
    
    
    <script language="JavaScript">
    
    	function holedateiname() {
    	
    		var dateiinhalt = unescape("<?php echo rawurlencode($dateistring); ?>");
    		alert(dateiinhalt);
    	
    	}
    
    </script>

    Die vorher vom Server erzeugte Variable $dateistring soll hier an die Javascript-Variable dateiinhalt übergeben werden. Da ich auch noch Leerzeichen und Zeilenumbrüche in der Datei habe, werden als Dekodierungs- und Entkodierungsfunktionen rawurlencode() und unescape() verwendet.

    Jetzt zu den Fehlern:

    (1) Bereits beim Start von Formular.html über den Webserver bekomme ich die Meldung, dass ein Syntaxfehler in Formular_js.php in Zeile 1 vorliegt. Warum? Ist der header nicht richtig formuliert? Oder darf ich die <script>-Tags in der kombinierten Datei aus Javascript und PHP nicht verwenden?Ich kann mir das nicht erklären.

    (2) Nach dem Senden an den Server und dem Anklicken des zweiten Buttons wird nicht der Dateiinhalt als String ausgegeben, sondern es kommt die Fehlermeldung "Objekt erwartet" in Zeile 21 von Formular.html (das ist die Zeile mit dem zweiten Button). Was bedeutet diese Fehlermeldung?


    4. Dein HTML ist wirklich grausam: keine DocType, invalide und nicht einmal konsequent invalide...
    5. Du solltest dich dringend mit den Grundlagen der von dir benutzten Funktionen/Technologien beschäftigen.

    PS: was du mit dem header wirklich bewirken wolltest ist mir wirklich nicht klar.
    Ich hab jetzt eine DocType hinzugefügt. Normalerweise verwende ich schon eine, ich dachte nur, dass ich sie für das kleine Dateibeispiel nicht unbedingt brauche, sorry.
    Und ich gebe euch Recht, ich bin noch kein Experte zum Thema Webtechnologien. Ich kenne mich beispielsweise mit HTML, VRML und Javascript einigermaßen ganz gut aus, bei PHP habe ich aber bisher nur einige Tutorials durchgemacht. Und die Schwierigkeit ist für mich meistens, dass ich nicht weiß, wie ich mehrere Webtechnologien verbinde, z.B. eben Übergaben von Javascript zu PHP und umgekehrt. Leider wird dazu auch in Tutorials und Büchern nicht so viel erklärt. Aber ich lerne immer gerne dazu
    Und mit dem Header will ich bezwecken, dass PHP weiß, dass sich Javascript-Code im Dokument befindet. Sonst wird doch der Javascript-Code nicht ausgeführt, oder?

    Wenn jemand weiß, was ich in meinen Codes falsch gemacht habe, und mir helfen könnte, würde ich mich freuen.

  11. #11
    Avatar von kkapsner
    kkapsner ist offline Super Moderator
    registriert
    28-03-2008
    Beiträge
    17.760

    AW: Webserver und Javascript: Zugriff verweigert auf Dateipfad von <input type="file"

    Da gibt es einiges, was du falsch machst:
    1. Überleg' dir, wann Formular_js.php geladen wird.
    2. In einer JS-Datei darf nur valides JS stehen - kein HTML
    3. PHP merkt sich nicht einfach so Variablen über verschiedene Skriptaufrufe.

    Aber dann will ich mich mal aufraffen und dein Problem lösen:

    Hauptdatei:
    Code:
    <!DOCTYPE html>
    <html>
    <head>
    	<title>localer TXT-Zugriff</title>
    </head>
    <body>
    	<form name="form" action="server.php" target="hiddenFrame" method="post" enctype="multipart/form-data">
    		Textdatei zur Animation ausw&auml;hlen <input name="forminhalt" type="file"><br>
    		<button type="submit">Datei an den Server schicken und Inhalt ausgeben</button>
    	</form>
    	<iframe name="hiddenFrame" style="display: none;" src="" onload="if(this.contentWindow.fileContent) alert(this.contentWindow.fileContent);"></iframe>
    </body>
    </html>
    server.php
    PHP-Code:
    <!DOCTYPE html>
    <html>
    <head>
        <title>Hilfsseite</title>
        <script type="text/javascript">
            var fileContent = "<?php     echo str_replace(
                array(
    "\n""\r"'"'),
                array(
    "\\n""\\r"'\\"'),
                
    file_get_contents($_FILES["forminhalt"]["tmp_name"])
            ); 
    ?>";
        </script>
    </head>
    <body></body>
    </html>
    funktioniert... lesen, verstehen, verwenden!

  12. #12
    Johannes1984 ist offline Jungspund
    registriert
    04-02-2010
    Beiträge
    17

    AW: Webserver und Javascript: Zugriff verweigert auf Dateipfad von <input type="file"

    Vielen Dank, kkapsner, das klappt ja tatsächlich perfekt

    Mein Hauptproblem war ja, dass ich nicht wusste, wie ich PHP und Javascript zusammen in einer Datei unterbringe. Jetzt weiß ich, dass man PHP einfach ins Javascript einer HTML-Umrandung schreibt. Danke, werde ich mir merken.

    Ansonsten wusste ich nicht, dass ich die PHP-Funktion str_replace() benötige und dass PHP und Javascript wohl einen Unterschied bei der Anzahl der Slashes hinsichtlich \n und \r macht, darauf wäre ich nicht gekommen. Aber vielleicht fehlen mir dazu auch noch etwas die PHP-Grundlagen. Ich hab mir aber ein Buch dazu besorgt, das werde ich am Wochenende mal durcharbeiten.

    Da gibt es einiges, was du falsch machst:
    1. Überleg' dir, wann Formular_js.php geladen wird.
    2. In einer JS-Datei darf nur valides JS stehen - kein HTML
    3. PHP merkt sich nicht einfach so Variablen über verschiedene Skriptaufrufe.
    Dass sich PHP die Variablen nicht merkt, bis ich die function holedateiname() aufrufe, wusste ich auch nicht. Ich hatte vorher angenommen, dass der PHP-Code in Formular_js.php ausgeführt wird, sobald ich die Javascript-Funktion aufrufe, in der dieser vorkommt. Da hab ich jetzt auch was neues gelernt. Also ich merk schon, ich sollte vielleicht noch etwas mehr über PHP nachlesen.

    Trotzdem hab ich mit dieser Funktion auch schon einiges gelernt und ich bedanke mich bei allen, die mich unterstützt haben

  13. #13
    Avatar von kkapsner
    kkapsner ist offline Super Moderator
    registriert
    28-03-2008
    Beiträge
    17.760

    AW: Webserver und Javascript: Zugriff verweigert auf Dateipfad von <input type="file"

    In einer PHP-Datei kannst du PHP schreiben wann immer du willst - das stört den Ablauf im Browser gar nicht, da dieser davon gar nichts mitbekommt... wegen serverseitgier/clientseitiger Programmierung (wenn dir das nicht klar ist solltest du dir das mit ein paar geziehlten Suchanfragen bei der Suchmaschine deines Vertrauens klar machen).

    str_replace braucht man hier, weil in der Datei ja Zeilenumbrüche und " vorkommen könnten. Diese würden dann invaliden JS-Code produzieren => man muss sie maskieren: einen Zeilenumbruch durch ein \n bzw. \r und ein " durch ein \" - dass die Backslashes doppelt sind liegt daran, dass man sie ja im PHP auch maskieren muss...

    Zum Laden der Formular_js.php - woher soll der Browser wissen, dass die Funktion dort abgelegt ist? Kann er nicht => er läd' alle Dateien sofort...

    Freut mich, wenn ich beim Lernen helfen konnte.

  14. #14
    Johannes1984 ist offline Jungspund
    registriert
    04-02-2010
    Beiträge
    17

    AW: Webserver und Javascript: Zugriff verweigert auf Dateipfad von <input type="file"

    ok, ich habs verstanden, danke

  15. #15
    Avatar von kkapsner
    kkapsner ist offline Super Moderator
    registriert
    28-03-2008
    Beiträge
    17.760

    AW: Webserver und Javascript: Zugriff verweigert auf Dateipfad von <input type="file"

    Bitte, gern geschehen.

Ähnliche Themen

  1. Input-Type "File" Ordner auswählen
    Von slosd im Forum Allgemeines
    Antworten: 15
    Letzter Beitrag: 02-01-2007, 23:06
  2. input type="file" zurücksetzen?
    Von Elvis67 im Forum JavaScript
    Antworten: 1
    Letzter Beitrag: 21-04-2005, 21:57
  3. "input type=file" direkt anzeigen
    Von Toxictype im Forum Serverseitige Programmierung
    Antworten: 12
    Letzter Beitrag: 27-08-2004, 20:46
  4. <input type="file"...>
    Von kasimir83 im Forum Allgemeines
    Antworten: 2
    Letzter Beitrag: 15-05-2003, 21:57
  5. input type="file" accept="klappt nicht!"
    Von riddler im Forum Allgemeines
    Antworten: 0
    Letzter Beitrag: 04-05-2001, 15:44

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •