FTP script aanpassen

Status
Niet open voor verdere reacties.

swallav

Terugkerende gebruiker
Lid geworden
19 jul 2007
Berichten
1.482
Ik gebruik dit ftp script voor mensen die dingen kunnen uploaden naar mijn pagina. Het probleem is alleen dat je nu de files zo groot als je wil kan uploaden. Dit wil ik niet. Ik wil er zorgen dat mensen niet meer dan 2 mb kunnen uploaden. Daarnaast wil ik ook dat je niet meer beperkt bent tot alleen foto's en de overige extensies die in het script staan. Elke file moet mogelijk zijn. Nu is mijn vraag. Hoe doe ik dit. Hier is mijn script

Code:
<?php
$ftp_server = 'CENSUUR'';
$ftp_port   = 21;
$ftp_user   = 'CENSUUR';
$ftp_pass   = 'CENSUUR';
$uploaddir  = '/New directory/New directory/'; # relative to FTP login/root dir
$allowed    = array('jpg','jpeg','gif','pdf'); # lower case
$max_size   = 1024 * 1024;

# No edits beyond this line 
if ($_SERVER['REQUEST_METHOD'] != 'POST') {
  header('Location: /index.html/');
  exit;
}
$passive  = isset($_POST['passive'])  ? true : false;
if (isset($_FILES['userfile'])) {
  $connection = @ftp_connect($ftp_server,$ftp_port) or die('Connectie gefaald!');
  if (@ftp_login($connection,$ftp_user,$ftp_pass)) {
    ftp_pasv($connection,$passive);
    foreach ($_FILES['userfile']['error'] as $i => $error) {
      if ($error == 0 && $_FILES['userfile']['size'][$i] <= $max_size) {
        $file_ext  = pathinfo($_FILES['userfile']['name'][$i],PATHINFO_EXTENSION);
        $file_name = basename($_FILES['userfile']['name'][$i],'.'.$file_ext);
        if (in_array(strtolower($file_ext),$allowed)) {
          $new_base = $_FILES['userfile']['name'][$i];
          $t = 1;
          $list = ftp_nlist($connection,$uploaddir);
          while (in_array($new_base,$list)) {
            $new_base = $file_name.'['.$t.'].'.$file_ext;
            $t++;
          }
          if (ftp_put($connection,$uploaddir.$new_base,$_FILES['userfile']['tmp_name'][$i],FTP_BINARY)) {
            echo 'Succesvolle upload van '.$_FILES['userfile']['name'][$i].'<br>'."\n"; 
		header("Refresh: 0.1; URL=/~i8912/login/een/ftpserver/desk.html);
          }
        }
      }
    }
  }
  else {
    echo 'Er is een fout opgetreden. Neem contact op met swallav@gmail.com';
  }
  ftp_close($connection);
}
?>

Bij behorende html maar ik denk niet dat deze nodig is

Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
  <head>
    <title>
      File Uploader
    </title>
  </head>
  <body background="/~i8912/foto/DSOTM.jpg">
    <form action="ftp_upload.php" method="post" enctype="multipart/form-data">
<pre>
<font size="18" color="red" face="times new roman">
De maximale grote van een bestand is 2048 kb!
</font>
<input type="file" name="userfile[]"></br>
<input type="submit" value="Upload">
</pre>
    </form>
  </body>
</html>

Daarnaast heb ik nog een vraag. Hoe veilig is deze methode? Hoe makkelijk is het password van de ftp op te vragen en hoe kan ik dit (indien nodig) veiliger maken. Alvast bedankt voor de moeite.
 
PHP:
<?php
$ftp_server = 'CENSUUR';
$ftp_port   = 21;
$ftp_user   = 'CENSUUR';
$ftp_pass   = 'CENSUUR';
$uploaddir  = '/New directory/New directory/'; # relative to FTP login/root dir
$allowed    = array('jpg','jpeg','gif','pdf'); # lower case
$max_size   = 1024 * 1024;

# No edits beyond this line 
if ($_SERVER['REQUEST_METHOD'] != 'POST') {
  header('Location: /index.html/');
  exit;
}
$passive  = isset($_POST['passive'])  ? true : false;
if (isset($_FILES['userfile'])) {
  $connection = @ftp_connect($ftp_server,$ftp_port) or die('Connectie gefaald!');
  if (@ftp_login($connection,$ftp_user,$ftp_pass)) {
    ftp_pasv($connection,$passive);
    foreach ($_FILES['userfile']['error'] as $i => $error) {
      if ($error == 0 && $_FILES['userfile']['size'][$i] <= $max_size) {
        $file_ext  = pathinfo($_FILES['userfile']['name'][$i],PATHINFO_EXTENSION);
        $file_name = basename($_FILES['userfile']['name'][$i],'.'.$file_ext);
        $new_base = $_FILES['userfile']['name'][$i];
        $t = 1;
        $list = ftp_nlist($connection,$uploaddir);
        while (in_array($new_base,$list)) {
          $new_base = $file_name.'['.$t.'].'.$file_ext;
          $t++;
        }
        if (ftp_put($connection,$uploaddir.$new_base,$_FILES['userfile']['tmp_name'][$i],FTP_BINARY)) {
          echo 'Succesvolle upload van '.$_FILES['userfile']['name'][$i].'<br>'."\n"; 
	  header("Refresh: 0.1; URL=/~i8912/login/een/ftpserver/desk.html);
        }
      }
    }
  }
  else {
    echo 'Er is een fout opgetreden. Neem contact op met swallav@gmail.com';
  }
  ftp_close($connection);
}
?>

Volgens regel 21 zouden bestanden groter dan 1MB geweigerd moeten worden. Weet je zeker dat grotere bestanden wel geaccepteerd worden?

En om alle typen bestanden toe te laten moet regel 24 (in jouw code) eruit, evenals de sluit-bracket op regel 36. Je code wordt dan zoals ie nu hierboven staat.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan