Heim > Backend-Entwicklung > PHP-Tutorial > Detaillierte Erklärung des Datei-Uploads in PHP

Detaillierte Erklärung des Datei-Uploads in PHP

墨辰丷
Freigeben: 2023-03-28 13:18:02
Original
6474 Leute haben es durchsucht

Beherrschen Sie die Technologie zum Hochladen von PHP-Dateien wirklich? Dieser Artikel hat relevante Informationen zum Hochladen von PHP-Dateien für alle zusammengestellt. Interessierte Freunde können darauf verweisen. Zunächst möchte ich feststellen, dass dieses Kapitel viel Inhalt hat und relativ schwierig ist . Man muss eine Einstellung haben, mit sich selbst zu kämpfen. Verpassen Sie nicht die Feinheiten, sondern üben Sie mehr und mehr.

Lernen ist wie das Besteigen eines Berges. Man muss sich zunächst ein kleines Ziel setzen und dann beharrlich höher klettern, um schließlich den Gipfel zu erreichen.

Bitte beachten Sie die beiden oben genannten Ratschläge sorgfältig


1. Beschreibung meiner Vorbereitungen.


Editor: sublime text3 (welcher Editor Sie verwenden, hängt von Ihren Vorlieben ab)
Server-Build: Verwenden Sie phpstudy2014, um den Server zu erstellen. Die Serverdatei wird in der WWW-Datei auf dem Laufwerk D meines Computers gespeichert. (Bei der Installation von phpstudy wird automatisch die WWW-Datei generiert. Sie entscheiden, auf welcher Festplatte Sie sie installieren möchten.) Führen Sie phpstudy aus und geben Sie „localhost“ in die Adressleiste des Browsers ein, um auf Dateien auf dem Server zuzugreifen.
Der Prozess des Hochladens von Dateien: Der Browser lädt die Datei auf den Client hoch, klickt auf „Senden“, die Datei wird zur Verarbeitung an eine PHP-Datei auf dem Server gesendet und die PHP lädt die Datei hoch. Speichern Sie die Datei auf dem Server.

2. Erstellen Sie ein Formular

Bitte sehen Sie sich meinen HTML-Code an

enctype

In der Syntax des Form-Elements gibt EncType das Format der übermittelten Daten an. Das Enctype-Attribut gibt den Codierungstyp an, den der Browser beim Zurücksenden von Daten an den Server verwendet. Es gibt drei Arten von Enctype:

1. application/x-www-form-urlencoded: Formulardaten werden als Name/Wert-Paare codiert. Dies ist ein Standard-Codierungsformat.

2. Multipart/Formulardaten: Formulardaten werden als Nachricht codiert und jedes Steuerelement auf der Seite entspricht einem Teil der Nachricht.
3. Text/Plain: Die Formulardaten werden im Klartext codiert, ohne jegliche Steuerelemente oder Formatierungszeichen.
Ergänzung (sehen Sie sich einfach um): Das enctype-Attribut von ORM ist die Codierungsmethode. Es gibt zwei häufig verwendete: application/x-www-form-urlencoded und multipart/form-data. Der Standardwert ist application/x -www-form. -urlencoded. Wenn die Aktion get ist, verwendet der Browser die Kodierungsmethode x-www-form-urlencoded, um die Formulardaten in eine Zeichenfolge umzuwandeln (Name1=Wert1&Name2=Wert2...), hängt die Zeichenfolge dann an das Ende der URL an und teilt sie auf es mit ?, und lädt diese neue URL. Wenn die Aktion „Post“ ist, kapselt der Browser die Formulardaten in den http-Body und sendet sie dann an den Server. Wenn kein type=file-Steuerelement vorhanden ist, verwenden Sie einfach die Standardanwendung/x-www-form-urlencoded. Wenn jedoch type=file vorhanden ist, werden multipart/form-data verwendet. Der Browser unterteilt das gesamte Formular in Steuereinheiten und fügt jedem Teil Inhaltsdisposition (Formulardaten oder Datei), Inhaltstyp (Standard ist Text/Plain), Name (Steuerelementname) und andere Informationen hinzu und fügt Trennzeichen hinzu (Grenze).

Ein bisschen schwer zu verstehen.

Kurz gesagt, merken Sie sich zwei Sätze: Wenn im Eingabe-Tag type=file steht, dann enctype=multipart/form-data. Wenn kein type=file vorhanden ist, wird im Allgemeinen application/x-www-form-urlencoded verwendet.

Beim Hochladen von Dateien müssen die Daten bestimmte Transformationen durchlaufen, bevor sie auf den Server hochgeladen werden können. Der Unterschied zwischen application/x-www-form-urlencoded und multipart/form-data ist die Konvertierungskodierungsmethode.

3. Erstellen Sie eine PHP-Datei, um die hochgeladenen Dateien zu verarbeiten.

Der Effekt nach dem Hochladen der Datei ist wie folgt:


Jede hochgeladene Datei hat ein Name, Typ, Größe, tmp_name und andere Informationen. Nachdem die Datei hochgeladen wurde, werden die dateibezogenen Informationen in der Array-Variablen FILES gespeichert. _FILES["myfile"]["name"] entspricht dem Zugriff auf ein mehrdimensionales Array. FILES ruft zunächst die vom Eingabeformular namens myfile hochgeladenen Dateidaten ab und greift dann auf Name, Typ, Größe, Fehler und andere Daten zu. _FILES["myfile"]["error"] wird verwendet, um Situationen zu behandeln, in denen Dateien nicht normal hochgeladen werden, z. B. wenn die Größenbeschränkung für hochgeladene Dateien überschritten wird. Wenn FILES["myfile"]["error"]=0, bedeutet dies, dass die Datei normal hochgeladen wird. _FILES["myfile"]["error"]>0 bedeutet, dass die Datei nicht normal hochgeladen wurde.

FILES[“myfile”][“error”]=1 Die hochgeladene Datei überschreitet das Serverlimit, z. B. die Größe des Serverspeichers. _FILES["myfile"]["error"]=2 überschreitet das Browserlimit zum Hochladen $_FILES["myfile"]["error"]=3 Nur ein Teil der Datei wird hochgeladen


FILES["myfile " ]["error"]=4 Es wurde keine Datei hochgeladen. _FILES["myfile"]["error"] kann auch 5, 6, 7 oder 8 sein. Ich werde hier nicht auf Details eingehen. Beachten Sie jedoch, dass ein Fehler beim Hochladen vorliegt, wenn der Wert größer als 0 ist die Datei.

Upload-Limit

Normalerweise begrenzt der Server die Größe oder Art der vom Server hochgeladenen Dateien. Wir fügen Einschränkungen für den hochgeladenen Dateicode hinzu, basierend auf dem oben genannten PHP-Code.
Machen Sie sich zunächst mit der Verwendung mehrerer Funktionen vertraut:
explode()Die Funktion wird zum Teilen von Zeichenfolgen verwendet. Zum Beispiel: explosion(".","aaa.HTML") Teilen Sie dies an der Punktposition. Die Zeichenfolge wird in zwei Zeichenfolgen unterteilt, „aaa“ und „HTML“, und diese beiden Zeichenfolgen werden der Reihe nach im selben Array gespeichert.
end()Den Wert des letzten Elements im Array abrufen.
in_array()Suchen Sie ein Element im Array, um zu sehen, ob es existiert. Es gibt true zurück, wenn es existiert, und false, wenn es nicht existiert.

<?php
//第一步:明确服务器规定上传至服务器的文件类型。这里我们只允许上传以下类型的图片。
$allowedExts = array("gif", "jpeg", "jpg", "png");// 允许上传的图片后缀
//第二部:获取上传的文件名称,通过explorde()函数将其分割成字符串形式的数组。
$temp = explode(".", $_FILES["myfile"]["name"]);
echo $_FILES["file"]["size"];

$extension = end($temp);   // end函数用于获取数组中最后一个元素的值。
//第三步:列出上传文件需要满足的条件
if ((($_FILES["myfile"]["type"] == "image/gif")
|| ($_FILES["myfile"]["type"] == "image/jpeg")
|| ($_FILES[myfile"]["type"] == "image/jpg")
|| ($_FILES["myfile"]["type"] == "image/pjpeg")
|| ($_FILES["myfile"]["type"] == "image/x-png")
|| ($_FILES["myfile"]["type"] == "image/png"))
&& ($_FILES["myfile"]["size"] < 204800)  // 小于 200 kb
&& in_array($extension, $allowedExts))
  //in_array表示在$allowedExts数组中查找$extension这个字符串
{
  if ($_FILES["myfile"]["error"] > 0)
  {
    echo "错误:: " . $_FILES["myfile"]["error"] . "<br>";
    //举个例子服务器空间不足,文件只能上传部分就会出现错误。
  }
  else
  {
    echo "上传文件名: " . $_FILES["myfile"]["name"] . "<br>";
    echo "文件类型: " . $_FILES["myfile"]["type"] . "<br>";
    echo "文件大小: " . ($_FILES["myfile"]["size"] / 1024) . " kB<br>";
    echo "文件临时存储的位置: " . $_FILES["myfile"]["tmp_name"] . "<br>";
  }
}
else
{
  echo "非法的文件格式";
}
?>
Nach dem Login kopieren

4. Speichern Sie die hochgeladene Datei

Nachdem die Datei hochgeladen wurde, wird sie an einem temporären Speicherort gespeichert . Es verschwindet, wenn das Skript endet. Wenn wir es dauerhaft auf dem Server speichern möchten, müssen wir es an einem anderen Ort speichern.
. file_exists(“upload/”. FILES[“file”][“name”]) prüft, ob die Datei oder das Verzeichnis existiert. .moveuploadedfile(_FILES["file"]["tmp_name"], "upload/" . $_FILES["myfile"]["name"]);Verschieben Sie die hochgeladene Datei vom temporären Speicherort in den Serverbereich.

<?php
//第一步:明确服务器规定上传至服务器的文件类型。这里我们只允许上传以下类型的图片。
$allowedExts = array("gif", "jpeg", "jpg", "png");// 允许上传的图片后缀
//第二部:获取上传的文件名称,通过explorde()函数将其分割成字符串形式的数组。
$temp = explode(".", $_FILES["myfile"]["name"]);
echo $_FILES["myfilefile"]["size"];
$extension = end($temp);   // end函数用于获取数组中最后一个元素的值。
//第三步:列出上传文件需要满足的
if ((($_FILES["myfile"]["type"] == "image/gif")
|| ($_FILES["myfile"]["type"] == "image/jpeg")
|| ($_FILES["myfile"]["type"] == "image/jpg")
|| ($_FILES["myfile"]["type"] == "image/pjpeg")
|| ($_FILES["myfile"]["type"] == "image/x-png")
|| ($_FILES["myfile"]["type"] == "image/png"))
&& ($_FILES["myfile"]["size"] < 204800)  // 小于 200 kb
&& in_array($extension, $allowedExts))//in_array表示在$allowedExts数组中查找$extension这个字符串
{
  if ($_FILES["myfilefile"]["error"] > 0)
  {
    echo "错误:: " . $_FILES["myfile"]["error"] . "<br>";
  }
  else
  {
    echo "上传文件名: " . $_FILES["myfile"]["name"] . "<br>";
    echo "文件类型: " . $_FILES["myfile"]["type"] . "<br>";
    echo "文件大小: " . ($_FILES["myfile"]["size"] / 1024) . " kB<br>";
    echo "文件临时存储的位置: " . $_FILES["myfile"]["tmp_name"] . "<br>";

    // 判断当期目录(即www文件夹中)下的 upload 目录(自己创建,名字自取)是否存在该文件
    // 如果没有 upload 目录,你需要创建它,upload 目录权限为 777
    if (file_exists("upload/" . $_FILES["myfile"]["name"]))
    {
      echo $_FILES["myfile"]["name"] . " 文件已经存在。 ";
    }
    else
    {
      // 如果 upload 目录不存在该文件则将文件上传到 upload 目录下
      move_uploaded_file($_FILES["myfile"]["tmp_name"], "upload/" . $_FILES["file"]["name"]);//
      echo "文件存储在: " . "upload/" . $_FILES["myfile"]["name"];
    }
  }
}
else
{
  echo "非法的文件格式";
}
?>
Nach dem Login kopieren

Das Obige ist der gesamte Inhalt dieses Artikels, ich hoffe, dass er für das Studium aller hilfreich sein wird.


Verwandte Empfehlungen:

So kombinieren Sie zwei Fotos der Vorder- und Rückseite eines Personalausweises mit PHP zu einem Bild

PHP verwendet die SWOOLE-Erweiterung, um die geplante Synchronisierung von MySQL-Daten zu implementieren

PHP-Zusammenfassung des Objektwissens

Das obige ist der detaillierte Inhalt vonDetaillierte Erklärung des Datei-Uploads in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage