• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Bestimmte Dateien zulassen, den rest blocken

Doopanga

Neues Mitglied
HI
hab nen neues Problem (jetzt aber das wirklich letzte^^)

Ich hab hier ne while abfrage, ob bestimmte Dateinamen erlaubt sind....
Code:
<?php

  $datei[] = "Datei.txt";
  $datei[] = "datei.pdf";
  $datei[] = "hallo.docx";


  $i = 0;
  $anzahl = count($datei);
  while ($i < $anzahl) {

    if ($datei[$i] == $_FILES["file"]["name"]) {
     
      break;
    }
    $i++;
  }

?>
DEn code hab ich ausm Internet, da ich sowas garnicht schreiben kann....
Das funktioniert aber nicht so wie ich möchte, da er glaub ich nicht weiß was er machen soll, wenn er keine der o.g. dateien findet.....
Wie kann mans umschreiben, das es seinen Zweck erfüllt?
Danke schonmal für eure hilfe....
 
Inwiefern sollen die Dateinamen denn erlaubt sein?
Das Skript bricht nämlich einfach die Schleife ab, wenn der Dateiname stimmt.

mfg furien
 
Ja also das Skript sollte eigentlich das Lesen des php COdes fortsetzen, wenn der Dateiname übereinstimmt.
Alternativ soll es wirklich abbrechen und einen Fehler absenden...(der Fehlerbericht ist erstmal nicht wichtig....)

Jetzt wo du es sagst macht break wohl einen Abbruch?
 
Ja, break; bricht eine Schleife ab.
Wie wärs denn so:
PHP:
<?php

  $datei = array("Datei.txt","datei.pdf","hallo.docx");


  $i = 0;
  $anzahl = count($datei);
  while ($i < $anzahl) {
      if ($datei[$i] == $_FILES["file"]["name"]) {
      $i++;
      break;
      }
      else die("Datei nicht zugelassen!");
  }
  

?>
Damit wird, sofern die Datei nicht erlaubt ist das Skript abgebrochen.
Wenn sie jedoch erlaubt ist, geht man aus der Schleife und das Skript läuft danach normal weiter.
 
PHP: in_array - Manual gibt es für solche Tests.

PHP:
<?php

$datei = array("Datei.txt","datei.pdf","hallo.docx");

if (in_array($_FILES["file"]["name"], $datei)) {
    // in Array vorhanden    
} else {
    // nicht in Array vorhanden
}
 
Boa ich bin total happy :9
sieht schonmal echt gut aus. ich kanns morgen erst ausprobieren.

Wo ist denn der Unterschied zwischen den beiden?
Bei dem von Furien kann ich weitere if variablen einfügen ohne auf weiteres zu achten, also gleich nach dem letzten "}",
bei dem von mermshaus muss ich noch vor else die weiteren if funktionen einbauen...(?)

Sonst gibs keinen Unterschied oder?

Oder auch so(?):
Code:
<?php 

$datei = array("Datei.txt","datei.pdf","hallo.docx"); 

if (in_array($_FILES["file"]["name"], $datei)) { 
    // in Array vorhanden     
} else die{ 
    // nicht in Array vorhanden
 
Ich würde sagen, die allerleichteste und kürzeste
Lösung ist folgende:
PHP:
 <?php 
  
//Array datei anlegen
$datei = array("Datei.txt","datei.pdf","hallo.docx"); 
  

// Wenn kein Eintrag vom array Datei im array $_FILES["file"]["name"] ist,  beende das Skript durch die
if (!in_array($_FILES["file"]["name"], $datei)) die("Datei nicht erlaubt."); 

//weiterer Code

?>
 
Furiens Code aus #4 ist zudem nicht ganz richtig. "Bugreport":

PHP:
<?php

$_FILES["file"]["name"] = 'hallo.docx';

$datei = array("Datei.txt","datei.pdf","hallo.docx");


$i      = 0;
$anzahl = count($datei);

while ($i < $anzahl) {
    if ($datei[$i] == $_FILES["file"]["name"]) {
        $i++;
        break;
    } else
        die("Datei nicht zugelassen!");
}

Ausgabe: "Datei nicht zugelassen!"

Besser wäre etwa so:

PHP:
$i      = 0;
$anzahl = count($datei);
$found  = false;

while ($i < $anzahl) {
    if ($datei[$i] == $_FILES["file"]["name"]) {
        $found = true;
        break;
    }

    $i++;    
}

if (!$found) {
    die("Datei nicht zugelassen!");
}

Aber noch besser mit in_array (zum Beispiel auch so wie in #7).
 
Zuletzt bearbeitet:
Der Code aus #4 funktioniert nur dann,

- wenn der Dateiname der hochgeladenen Datei nicht in der Liste enthalten ist oder
- wenn der Dateiname der hochgeladenen Datei der erste Eintrag in der Liste ist.
 
Zurück
Oben