Dateiupload + Änderung in Datei

  • geschlossen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Dateiupload + Änderung in Datei

    Also... Ich möchte ein Uploadformular erstellen. Der Benutzer soll darin etwas hochladen können. Der Inhalt dieser Datei wird gelesen und bestimmte Ausdrücke darin werden ersetzt. So wird z.B. aus "Clsn2 =" "Clsn2:". Dann soll die DAtei wieder zum Download angeboten werden. Nach einem Tag soll die Datei dann automatisch gelöscht werden.

    Mit Texteingabe und JS habe ich so etwas ähnliches schon gschafft, möchte es aber gerne mit PHP und Dateiupload schaffen.
    Habe da auch schon angefangen, ist aber glaube ich noch nicht so das wahre...

    PHP-Quellcode

    1. <form enctype="multipart/form-data" action="index.php" method="POST">
    2. <input type="hidden" name="MAX_FILE_SIZE" value="30000" />
    3. <input name="userfile" type="file" />
    4. <input type="submit" name="submit" value="Upload File" />
    5. </form>
    6. <?php
    7. if ( $_POST['submit'] ) {
    8. $website_dir = "/var/httpd/public/";
    9. $uploaded_file = $_FILES['userfile']['tmp_name'];
    10. $handle = fopen($uploaded_file);
    11. $contents = fread ($handle, filesize ($filename));
    12. $contents = $str_replace("Clsn2 =", "Clsn2:", $contents);
    13. fclose($handle);
    14. move_uploaded_file($uploaded_file, $website_dir . 'temp.txt');
    15. print '<a href="temp.txt">download the file</a>';
    16. }
    Alles anzeigen


    Mir wurde auch das hier empfohlen um damit dann fread etc. zu ersetzen:

    PHP-Quellcode

    1. header('Content-Description: File Transfer');
    2. header('Content-Type: application/octet-stream');
    3. header('Content-Length: '.filesize($_FILES['file1']['tmp_name']));
    4. header('Content-Disposition: attachment; filename="'.$_FILES['file1']['name'].'"');
    5. readfile($_FILES['file1']['tmp_name']);



    Ich bin nicht so der Profi in php und hoffe, dass mir hier jemand helfen kann...
  • Das hier kann man und sollte/muss man etwas abändern:

    Am besten in sowas wie:
    index.php

    PHP-Quellcode

    1. <form enctype="multipart/form-data" action="index.php" method="POST">
    2. <input type="hidden" name="MAX_FILE_SIZE" value="3000000" />
    3. <input name="userfile" type="file" />
    4. <input type="submit" name="submit" value="Upload File" />
    5. </form>
    6. <?php
    7. include('global.php'); //Wir machen mal alles in eine globale Seite
    8. if ( $_POST['submit'] ) {
    9. $uploaded_file = $_FILES['userfile']['tmp_name'];
    10. switch($_FILES['userfile']['error']) {
    11. case 1:
    12. case 2:
    13. die('Die Datei war leider zu gro&szlig;!');
    14. break;
    15. case 3:
    16. die('Die Datei wurde nur teilweise hochgeladen!');
    17. break;
    18. case 4:
    19. die('Es wurde gar keine Datei hochgeladen!');
    20. break;
    21. case 0:
    22. break;
    23. default:
    24. die('Es ist ein unbekannter Fehler beim Upload aufgetreten');
    25. break;
    26. }
    27. if(empty($uploaded_file)) die('Es wurde gar keine Datei hochgeladen!');
    28. $contents = file_get_contents($uploaded_file); //Datei komplett einlesen
    29. $contents = str_replace("Clsn2 =", "Clsn2:", $contents); //Da kommt kein $ vor str_replace(..); ;)
    30. @unlink($uploaded_file); // brauchen wir nicht mehr, das @, damit bei Fehlern der User nicht genervt wird
    31. $dateiname = uniqid('temp').'.txt'; //Wir machen mal einen schönen einzigartigen Dateinamen
    32. $handle = fopen($files_dir . $dateiname,'w'); //Wir öffnen am besten gleich die Zieldatei
    33. fputs($handle, $contents); //Neuer Inhalt rein da in die Datei
    34. fclose($handle); //Und zu damit
    35. //Nun nur noch dem Benutzer nen Link geben
    36. echo '<a href="download.php?file='.$dateiname.'">Laden!!!!!!</a>';
    37. }
    38. ?>
    Alles anzeigen


    Dann zur download.php

    PHP-Quellcode

    1. <?php
    2. include('global.php'); //Wir machen mal alles in eine globale Seite
    3. $datei = $files_dir . strtr($_GET['file'],'/\\','__'); //Wir wollen ja nicht, dass der Benutzer mit / und \ den Pfad wechselt und sich irgendwas ansieht, was er nicht soll
    4. if(!file_exists($datei) || is_dir($datei)) die('FEHLER'); //Wenns die Datei nicht gibt oder der Benutzer ein Verzeichnis angegeben hat, können wir das ja nicht ausgeben
    5. header('Content-Type: application/octet-stream'); //octet-stream sagt dem Browser: nicht anzeigen, zum Download anbieten, egal, was drin steht
    6. header('Content-Length: '.filesize($datei)); //Gibt dem Browser die Dateigröße mit, damit er den Fortschritt anzeigen kann
    7. header('Content-Disposition: attachment; filename="'.$_GET['file'].'"'); //Sagt dem Browser, wie die Datei heißen soll
    8. readfile($datei); //Und nun geben wir die Datei aus
    9. ?>


    Zu guter letzt: Die global.php:

    PHP-Quellcode

    1. <?php
    2. $website_dir = '/var/httpd/public/';
    3. $files_dir = $website_dir.'files/'; //files Unterordner, damit wir nicht das Hauptverzeichnis zuspammen, den natürlich dann noch erstellen per FTP oder sonstwie ;)
    4. //Nun suchen wir nach zu alten Dateien und kloppen die weg
    5. $dirhandle = opendir($files_dir); //Wir öffnen das Verzeichnis
    6. $time = time(); //Einmal den aktuellen Timestamp einlesen
    7. $maxdiff = 60*60*2; //Maximales Alter in Sekunden (2 Stunden hier)
    8. $maxtime = $time - $maxdiff; //So alt ist also die älteste erlaubte Datei
    9. while($file = readdir($dirhandle)) { //Und durchlaufen alle Dateien
    10. $cfile = $files_dir.$file; //Aktueller Dateiname eben mit Pfad, damit man drauf zugreifen kann
    11. if(is_dir($cfile)) continue; //Verzeichnisse sind egal
    12. if(filectime($cfile) < $maxtime) unlink($cfile); //Wenn die Datei älter ist als die älteste erlaubte, weg damit
    13. }
    14. ?>
    Alles anzeigen