Ergebnis 1 bis 19 von 19

Thema: Mit PHP Daten in einen nicht öffentlichen Ordner schreiben

  1. #1
    Contao-Nutzer
    Registriert seit
    23.05.2012.
    Beiträge
    89

    Frage Mit PHP Daten in einen nicht öffentlichen Ordner schreiben

    Hallo zusammen,
    ich möchte gerne Daten in eine CSV Datei schreiben. Das mache ich mit PHP und das funktioniert soweit auch. Sogar mein erster Gehversuch mit Ajax ist an der Stelle geglückt.

    Allerdings soll die CSV Datei auf keinen Fall für jeden über den Webbrowser erreichbar sein. Mein Zielordner csv-daten liegt in /files/. Also /files/csv-daten/
    Es klappt alles so wie es soll, wenn ich den Ordner csv-daten öffentlich mache. Das will ich aber nicht.

    Ich habe versucht die Zugriffsrechte direkt auf dem Server für den Ordner zu ändern, ohne den Ordner im Contao Backend public zu schalten. Das funktioniert leider auch nicht.

    Ich bin nicht wirklich fit mit PHP. Gibt es eine Möglichkeit direkt im PHP die Rechte für diesen Ordner mitzugeben? Oder irgendwas alternatives? Ich will im Backend für den Redakteur die Möglichkeit behalten ohne FTP an den Ordner zu kommen. Deshalb sollte mein Order möglichst in /files liegen.

    Irgendeine Idee oder ein Schubser in die richtige Richtung?

    Vielen Dank.
    Markus

  2. #2
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.063
    Partner-ID
    10107

    Standard

    Mach den Ordner doch einfach nicht öffentlich? Das beeinträchtigt ja dein PHP Script nicht.

  3. #3
    Contao-Nutzer
    Registriert seit
    23.05.2012.
    Beiträge
    89

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Mach den Ordner doch einfach nicht öffentlich? Das beeinträchtigt ja dein PHP Script nicht.
    Aber genau das funktioniert ja leider nicht.
    Ist der Haken „öffentlich“ nicht gesetzt, werden keine Daten geschrieben.
    Setze ich den Haken, funktioniert alles einwandfrei. Gerade noch mehrmals hin und her getestet.

  4. #4
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.063
    Partner-ID
    10107

    Standard

    Dann stimmt etwas mit deinem PHP Script nicht. Beschreibe, was du und dein PHP Script macht, genauer. Bist du dir sicher, dass du überhaupt in den richtigen Ordner schreibst? Also den Ordner files/ deiner Contao Installation und nicht bspw. den Ordner web/files/.

  5. #5
    Contao-Nutzer
    Registriert seit
    23.05.2012.
    Beiträge
    89

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Dann stimmt etwas mit deinem PHP Script nicht. Beschreibe, was du und dein PHP Script macht, genauer. Bist du dir sicher, dass du überhaupt in den richtigen Ordner schreibst? Also den Ordner files/ deiner Contao Installation und nicht bspw. den Ordner web/files/.
    Die Daten gehen in den richtigen Ordner. Also nicht im web/files (der ja meinem Verständnis nach nur eine Umleitung auf den /files/ eine Ebene höher ist.

    Zuerst lege ich die Datei an, falls sie nicht existiert. Dieser Schritt funktioniert schon nicht, wenn der Ordner nicht öffentlich ist – wohl aber, wenn der Ordner öffentlich ist:
    PHP-Code:
    <?php
    $file 
    'files/csv-daten/daten.csv';
     
    //Use the function is_file to check if the file already exists or not.
    if(!is_file($file)){
        
    //Some simple example content.
        
    $contents ''.PHP_EOL;
        
    //Save our content to the file.
        
    file_put_contents($file$contents);
    }
    ?>

    Im Javascript baue ich mir die Daten in einer Variable zusammen, die da reinsollen:
    HTML-Code:
    		
    			$.ajax({
    				type: "POST",
    				url: "/write.php",
    				data: {dataset: dataset},
    				error: function(XMLHttpRequest, textStatus, errorThrown) {
    					alert("Some error occured");
    				}
    			});
    Die write.php, die die Daten entgegennimmt und schreiben soll, sieht so aus:
    PHP-Code:
    <?PHP
        $dataset 
    $_POST['dataset'];
        
    $filename 'daten.csv';
        @ 
    $fp fopen("files/csv-daten/".$filename'a+');
        if (!
    $fp){
            echo 
    'Cannot write to file';
            exit;
        }else{
            
    $outputstring  $dataset.PHP_EOL;
            
    fwrite($fp$outputstring);
        }
    ?>

  6. #6
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.063
    Partner-ID
    10107

    Standard

    Du schreibst in den falschen Ordner. Deinem Code nach liegt deine PHP Datei im Ordner web/, und da du in deinem PHP Script eine relative Pfadangabe verwendest schreibst du in den Ordner web/files/.

    Du solltest stattdessen lieber einen richtigen Controller umsetzen.

  7. #7
    Contao-Nutzer
    Registriert seit
    23.05.2012.
    Beiträge
    89

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Du schreibst in den falschen Ordner. Deinem Code nach liegt deine PHP Datei im Ordner web/, und da du in deinem PHP Script eine relative Pfadangabe verwendest schreibst du in den Ordner web/files/.

    Du solltest stattdessen lieber einen richtigen Controller umsetzen.
    Huch, das hört sich kompliziert an. Hast Du einen Link mit mehr Infos? Ist der Controller dann Contao-spezifisch oder was PHP-spezifisches?

    Danke für die Hilfe bisher!

  8. #8
    Wandelndes Contao-Lexikon Avatar von tab
    Registriert seit
    22.10.2013.
    Beiträge
    10.076
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Und der Ordner /web/files ist mitnichten ein Link auf den Ordner /files. Das wäre ja völlig sinnlos.

  9. #9
    Contao-Nutzer
    Registriert seit
    23.05.2012.
    Beiträge
    89

    Standard

    Zitat Zitat von tab Beitrag anzeigen
    Und der Ordner /web/files ist mitnichten ein Link auf den Ordner /files. Das wäre ja völlig sinnlos.
    Per FTP ist aber eindeutig zu sehen, dass die Daten in /files geschrieben werden und nicht in /web/files. Das dürfte ja nicht so sein, wenn Du und Spooky recht haben, oder?

    Edit: Vielleicht liegt es auch am FTP Programm, aber der Ordner /web/files scheint 1:1 den Ordner /files zu spiegeln. Mit Dutzenden Dateien, die übers Backend hochgeladen wurden. Sieht für mich nach einer Weiterleitung aus

  10. #10
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.063
    Partner-ID
    10107

    Standard

    Zitat Zitat von Markus1982 Beitrag anzeigen
    Per FTP ist aber eindeutig zu sehen, dass die Daten in /files geschrieben werden und nicht in /web/files. Das dürfte ja nicht so sein, wenn Du und Spooky recht haben, oder?
    Ja, weil du den Ordner öffentlich geschalten hast. Dadurch wird ein Symlink für web/files/csv-daten/ angelegt, der auf files/csv-daten/ zeigt. Wenn dein PHP Script nun in web/files/csv-daten/ Daten schreibt, dann sind diese Daten tatsächlich in files/csv-daten/.

  11. #11
    Contao-Nutzer
    Registriert seit
    23.05.2012.
    Beiträge
    89

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Ja, weil du den Ordner öffentlich geschalten hast. Dadurch wird ein Symlink für web/files/csv-daten/ angelegt, der auf files/csv-daten/ zeigt. Wenn dein PHP Script nun in web/files/csv-daten/ Daten schreibt, dann sind diese Daten tatsächlich in files/csv-daten/.
    Mmh, ja macht Sinn. Mache ich den Ordner im Backend wieder nicht öffentlich, verschwindet der über FTP auch in /web/files, bleibt aber in /files erhalten.

    Kann ich mit PHP nicht irgendwie direkt aus dem /web-Verzeichnis raus in Verzeichnisse/Dateien eine Ebene höher schreiben?

  12. #12
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.063
    Partner-ID
    10107

    Standard

    Klar kannst du. Du könntest einfach ../files/… verwenden. Aber wie gesagt wäre es besser, wenn du das sauber als Controller umsetzt

  13. #13
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.063
    Partner-ID
    10107

    Standard

    Dein Script, so wie du jetzt es gemacht hast, ist außerdem relativ gefährlich.

  14. #14
    Contao-Nutzer
    Registriert seit
    23.05.2012.
    Beiträge
    89

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Klar kannst du. Du könntest einfach ../files/… verwenden. Aber wie gesagt wäre es besser, wenn du das sauber als Controller umsetzt
    Tatsächlich, so einfach. ../files/usw. funktioniert.
    Das es nun alles tut, was es soll, reicht mir ja eigentlich aus. Mich interessiert aber wirklich, wieso der Controller? Welche Vorteile bringt mir das?

  15. #15
    Contao-Nutzer
    Registriert seit
    23.05.2012.
    Beiträge
    89

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Dein Script, so wie du jetzt es gemacht hast, ist außerdem relativ gefährlich.
    In wiefern? Weil die write.php öffentlich zugänglich ist? Die kann ich ja vielleicht auch in einen nicht öffentlichen Ordner schieben, oder? Aber vermutlich kann das Javascript dann nicht mehr darauf zugreifen?

  16. #16
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.063
    Partner-ID
    10107

    Standard

    Nein, weil man mit $_POST allerhand Dinge rein schreiben könnte.

  17. #17
    Contao-Nutzer
    Registriert seit
    23.05.2012.
    Beiträge
    89

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Nein, weil man mit $_POST allerhand Dinge rein schreiben könnte.
    Wären GET oder PUT besser? Ich dachte POST wäre das Mittel der Wahl mit Ajax?

    Edit: Laut https://www.ionos.de/digitalguide/we...g/get-vs-post/ sollte ich bei der Wahl zwischen POST und GET wohl eher POST wählen.
    Aber ich könnte die Daten vorm Schreiben noch mal validieren und filtern oder sowas? Falls Du das meinst.
    Geändert von Markus1982 (21.08.2020 um 13:41 Uhr)

  18. #18
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.063
    Partner-ID
    10107

    Standard

    Zitat Zitat von Markus1982 Beitrag anzeigen
    Aber ich könnte die Daten vorm Schreiben noch mal validieren und filtern oder sowas? Falls Du das meinst.
    Ja, das meine ich.

  19. #19
    Contao-Nutzer
    Registriert seit
    23.05.2012.
    Beiträge
    89

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Ja, das meine ich.
    Vielen Dank für Deine Hilfe. Das Validieren kriege ich hin

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

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