Φόρτωση Φακέλων του PHP

Με το PHP, μπορείτε να ανεβάσετε αρχεία στο διακομιστή.

Δημιουργία φόρμας ανάρτησης αρχείων

Η επιτρεπόμενη ανάρτηση αρχείων από τους χρήστες μέσω της φόρμας είναι πολύ χρήσιμη.

Παρακαλώ δείτε την παρακάτω φόρμα HTML για την ανάρτηση αρχείων:

<html>
<body>
<form action="upload_file.php" method="post"
enctype="multipart/form-data">
<label for="file">Όνομα Αρχείου:</label>
<input type="file" name="file" id="file" /> 
<br />
<input type="submit" name="submit" value="Submit" />
</form>
</body>
</html>

Παρακαλώ σημειώστε τις παρακάτω πληροφορίες σχετικά με αυτή τη φόρμα:

Η ιδιότητα enctype του ετικέτας <form> καθορίζει ποιον τύπο περιεχομένου θα χρησιμοποιηθεί κατά την υποβολή της φόρμας. Όταν η φόρμα χρειάζεται δεδομένα σε μορφή βίντεο, όπως το περιεχόμενο αρχείων, χρησιμοποιήστε "multipart/form-data".

Η ιδιότητα type="file" του ετικέτας <input> καθορίζει ότι η είσοδος θα πρέπει να χειριστεί ως αρχείο. Για παράδειγμα, όταν προεπισκοπείτε στον περιηγητή, θα δείτε ένα κουμπί περιήγησης δίπλα στην ετικέτα είσοδος.

Σημείωση:Η επιτρεπόμενη ανάρτηση αρχείων από τους χρήστες είναι ένα τεράστιο κίνδυνο ασφαλείας. Επιτρέψτε μόνο σε αξιόπιστους χρήστες να εκτελούν την ενέργεια ανάρτησης αρχείων.

Δημιουργία σενάριου ανάρτησης αρχείων

Το αρχείο "upload_file.php" περιέχει κώδικα για την ανάρτηση αρχείων:

<?php
if ($_FILES["file"]["error"] > 0)
  {
  echo "Error: " . $_FILES["file"]["error"] . "<br />";
  }
else
  {
  echo "Upload: " . $_FILES["file"]["name"] . "<br />";
  echo "Type: " . $_FILES["file"]["type"] . "<br />";
  echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
  echo "Stored in: " . $_FILES["file"]["tmp_name"];
  }
?>

Με τη χρήση της παγκόσμιας μάζας δεδομένων του PHP $_FILES, μπορείς να αποστείλεις αρχεία από το υπολογιστή του πελάτη στον απομακρυσμένο διακομιστή.

Ο πρώτος παράμετρος είναι το input name του φόρμας, η δεύτερη παραμέτρος μπορεί να είναι "name", "type", "size", "tmp_name" ή "error". Ωστόσο, όπως αυτό:

  • $_FILES["file"]["name"] - Το όνομα του αρχείου που αποστείλεται
  • $_FILES["file"]["type"] - Ο τύπος του αρχείου που αποστείλεται
  • $_FILES["file"]["size"] - Το μέγεθος του αρχείου που αποστείλεται σε bytes
  • $_FILES["file"]["tmp_name"] - Ο όνομα της προσωρινής αντιγράφου του αρχείου που αποθηκεύεται στον διακομιστή
  • $_FILES["file"]["error"] - Κώδικας σφάλματος που προκαλείται από την αποστολή αρχείου

Αυτό είναι ένα πολύ απλό τρόπος αποστολής αρχείων. Για λόγους ασφαλείας, θα πρέπει να προσθέσεις περιορισμούς για τι χρήστες έχουν δικαίωμα να αποστείλουν αρχεία.

Περιορισμοί αποστολής αρχείων

Σε αυτό το σενάριο, προσθέσαμε περιορισμούς για την αποστολή αρχείων. Ο χρήστης μπορεί να αποστείλει μόνο αρχεία .gif ή .jpeg, και ο όγκος πρέπει να είναι μικρότερος από 20 kb:

<?php
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 20000))
  {
  if ($_FILES["file"]["error"] > 0)
    {
    echo "Error: " . $_FILES["file"]["error"] . "<br />";
    }
  else
    {
    echo "Upload: " . $_FILES["file"]["name"] . "<br />";
    echo "Type: " . $_FILES["file"]["type"] . "<br />";
    echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
    echo "Stored in: " . $_FILES["file"]["tmp_name"];
    }
  }
else
  {
  echo "Invalid file";
  }
?>

Σημείωση:Για το IE, η αναγνώριση του τύπου αρχείου jpg πρέπει να είναι pjpeg, για το Firefox πρέπει να είναι jpeg.

Αποθήκευση του φορτωμένου αρχείου

Ο παραπάνω παράδειγμα δημιουργεί μια προσωρινή αντιγραφή του αρχείου που έχει φορτωθεί στον προσωρινό φάκελο του PHP του διακομιστή.

Αυτή η προσωρινή αντιγραφή αρχείου θα εξαφανιστεί όταν ο κώδικας του σενάριου ολοκληρωθεί. Για να αποθηκεύσουμε το αρχείο που έχεις φορτώσει, πρέπει να το αντιγράψουμε σε μια άλλη τοποθεσία:

<?php
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 20000))
  {
  if ($_FILES["file"]["error"] > 0)
    {
    echo "Return Code: " . $_FILES["file"]["error"] . "<br />";
    }
  else
    {
    echo "Upload: " . $_FILES["file"]["name"] . "<br />";
    echo "Type: " . $_FILES["file"]["type"] . "<br />";
    echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
    echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />";
    if (file_exists("upload/" . $_FILES["file"]["name"]))
      {
      echo $_FILES["file"]["name"] . " already exists. ";
      }
    else
      {
      move_uploaded_file($_FILES["file"]["tmp_name"],
      echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
      echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
      }
    }
  }
else
  {
  echo "Invalid file";
  }
?>

Ο κώδικας παρακάτω ελέγχει αν το αρχείο υπάρχει ήδη, και αν δεν υπάρχει, το αντίγραφο του αρχείου αντιγράφεται στον καθορισμένο φάκελο.

Σημείωση:Αυτός ο παράδειγμα αποθηκεύει το αρχείο σε νέο φάκελο με το όνομα "upload".