Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Einführung in das Hochladen von PHP-Dateien

Detaillierte Einführung in das Hochladen von PHP-Dateien

黄舟
黄舟Original
2017-02-27 09:24:542369Durchsuche

Lassen Sie mich zunächst feststellen, dass dieses Kapitel viel Inhalt enthält und relativ schwierig ist. Sie müssen 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 immer höher klettern, bis man den Gipfel erreicht.

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 Ihrer Präferenz ab)

Serveraufbau: Verwenden Sie phpstudy2014, um den Server zu erstellen , Server Die Datei 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 der PHP speichert die hochgeladene Datei Datei auf den Server.

2. Erstellen Sie ein Formular

Bitte sehen Sie sich meinen HTML-Code

Detaillierte Einführung in das Hochladen von PHP-Dateien

enctype
im Formular an Element In der Syntax 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 Steuerelemente oder Formatierungszeichen.

Ergänzung (sehen Sie sich einfach um): Das enctype-Attribut von ORM ist die Kodierungsmethode. Es gibt zwei häufig verwendete: application/x-www-form-urlencoded und multipart/form-data 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 Informationen wie Content-Disposition (Formulardaten oder Datei), Content-Type (Standard ist Text/Plain), Name (Steuerelementname) und Trennzeichen hinzufügen (Grenze) hinzu. .

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 bis zu einem gewissen Grad konvertiert werden, bevor sie auf den Server hochgeladen werden können. Der Unterschied zwischen application/x-www-form-urlencoded und multipart/form-data ist die Konvertierungskodierung Verfahren.

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

Detaillierte Einführung in das Hochladen von PHP-Dateien

Der Effekt nach dem Hochladen der Datei ist wie folgt:

Detaillierte Einführung in das Hochladen von PHP-Dateien

Jede hochgeladene Datei hat einen Namen und einen 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 Serverspeichergröße. _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-Beschränkungen

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 Nutzung einiger Funktionen vertraut:

Die Funktion „explodieren“ wird zum Teilen einer Zeichenfolge verwendet. Beispiel: „explodieren(“.“, „aaa.HTML“) teilt die Zeichenfolge an der Punktposition in zwei Zeichenfolgen: „aaa“ und „HTML“. werden nacheinander im selben Array gespeichert.

end() ruft den Wert des letzten Elements im Array ab.

in_array() sucht nach einem 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 "非法的文件格式";
}
?>


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 "非法的文件格式";
}
?>

Das Obige ist die detaillierte Einführung zum Hochladen von PHP-Dateien. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn).

Stellungnahme:
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