Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Erläuterung des PHP-Datei-Uploads und Beispiele für mehrere Datei-Uploads

Detaillierte Erläuterung des PHP-Datei-Uploads und Beispiele für mehrere Datei-Uploads

伊谢尔伦
伊谢尔伦Original
2017-06-24 15:09:021663Durchsuche

In der PHP-Programmentwicklung ist Datei-Upload eine sehr häufig verwendete Funktion und gehört auch zu den notwendigen Fähigkeiten für PHP-Programmierer. Glücklicherweise ist die Implementierung der Datei-Upload-Funktion in PHP viel einfacher als in Sprachen wie Java und C#.

Um PHP zur Implementierung der Datei-Upload-Funktion zu verwenden, schreiben wir zunächst zwei PHP-Dateien: index.php und upload.php. Unter anderem wird die Seite index.php verwendet, um die Formularanforderung zum Hochladen von Dateien einzureichen, und die Seite upload.php wird verwendet, um die hochgeladene Datei zu empfangen und entsprechend zu verarbeiten.

Schreiben wir zunächst eine einfache index.php-Datei. Da es sich hauptsächlich um HTML-Code handelt, gehe ich nicht näher auf den detaillierten Code der index.php-Seite ein wie folgt:

<?php
//设置编码为UTF-8,以避免中文乱码
header(&#39;Content-Type:text/html;charset=utf-8&#39;);
?>
<!DOCTYPE html>
<html>
<head>
  <title>文件上传表单页面</title>
</head>
<body>
<form action="upload.php" method="post" enctype="multipart/form-data">
文件1:<input name="upload_file1" type="file" /><br/>
文件2:<input name="upload_file2" type="file" /><br/>
<input type="submit" value="上传" />
</form>
</body>
</html>

Da das HTTP-Protokoll ursprünglich entwickelt wurde, unterstützte es die Datei-Upload-Funktion nicht. Der Standardwert des Verschlüsselungsattributs des Formulars lautet application/x-. www-form-urlencoded, das nur für die allgemeine Formularanfrage verwendet werden kann. Wenn das übermittelte Formular Dateien enthält, die hochgeladen werden müssen, müssen wir den enctype-Attributwert in multipart/form-data ändern, um die Funktion zum Hochladen von Dateien zu implementieren. Darüber hinaus muss der Wert des Methodenattributs post sein.

Als nächstes schreiben wir weiter den Code für die Datei upload.php.

<?php
//设置编码为UTF-8,以避免中文乱码
header(&#39;Content-Type:text/html;charset=utf-8&#39;);
$first_file = $_FILES[&#39;upload_file1&#39;]; //获取文件1的信息
$second_file = $_FILES[&#39;upload_file2&#39;]; //获取文件2的信息$upload_dir = &#39;D:/upload/&#39;;  //保存上传文件的目录//处理上传的文件1
if ($first_file[&#39;error&#39;] == UPLOAD_ERR_OK){
  //上传文件1在服务器上的临时存放路径
  $temp_name = $first_file[&#39;tmp_name&#39;];
  //上传文件1在客户端计算机上的真实名称
  $file_name = $first_file[&#39;name&#39;];
  //移动临时文件夹中的文件1到存放上传文件的目录,并重命名为真实名称
  move_uploaded_file($temp_name, $upload_dir.$file_name);
  echo &#39;[文件1]上传成功!<br/>&#39;;
}else{
  echo &#39;[文件1]上传失败!<br/>&#39;;
}

//处理上传的文件2
if ($second_file[&#39;error&#39;] == UPLOAD_ERR_OK){
  //上传文件2在服务器上的临时存放路径
  $temp_name = $second_file[&#39;tmp_name&#39;];
  //上传文件2在客户端计算机上的真实名称
  $file_name = $second_file[&#39;name&#39;];
  //移动临时文件夹中的文件2到存放上传文件的目录,并重命名为真实名称
  move_uploaded_file($temp_name, $upload_dir.$file_name);
  echo &#39;[文件2]上传成功!<br/>&#39;;
}else {
  echo &#39;[文件2]上传失败!<br/>&#39;;
}
?>

Wenn in PHP die vom Browser-Client übermittelte Formularanforderung eine hochgeladene Datei enthält, speichert PHP die hochgeladene Datei vorübergehend in einem temporären Verzeichnis (in Windows-Betriebssystemen ist das temporäre Standardverzeichnis im Allgemeinen C :/Windows/Temp) und dann werden die relevanten Informationen der hochgeladenen Datei in der superglobalen Variablen $_FILES gespeichert. Daher müssen wir die hochgeladenen Dateiinformationen nur über das Array $_FILES abrufen und dann entsprechende Verarbeitungsvorgänge daran durchführen. Schauen wir uns als Nächstes die Details der Verwendung der Funktion print_r() zur Ausgabe der superglobalen Variablen $_FILES an, wenn zwei Bilddateien A.gif und B.gif über den Browser hochgeladen werden:

Array ( [upload_file1] => Array ( 
 [name] => A.gif (客户端上传时的真实文件名称)
 [type] => image/gif (文件的类型)
 [tmp_name] => C:\Windows\Temp\php9803.tmp (文件上传到PHP服务器后临时存放的路径)
 [error] => 0 (错误信息,0表示没有错误)
 [size] => 87123 (文件大小,单位为字节)
 )
    [upload_file2] => Array (
 [name] => B.gif
 [type] => image/gif
 [tmp_name] => C:\Windows\Temp\php9813.tmp
 [error] => 0
 [size] => 93111
 )
)

in Im obigen Beispiel lauten die Parameternamen der beiden von uns hochgeladenen Dateien upload_file1 und upload_file2. Jetzt lassen wir mehrere Dateien im Formular denselben Parameternamen upload_file verwenden und übermitteln die beiden gerade hochgeladenen Dateien in Form von Parameterarrays erneut zum Hochladen. Zu diesem Zeitpunkt müssen wir die beiden Dateifelder auf der Seite index.php in den folgenden HTML-Code ändern:

  • Datei 1: f79491b13560766ea857bd7cbe4135d3076402276aae5dbec7f672f8f4e5cc81

  • Datei 2: a146556286116ba7938f6ab5f879a934076402276aae5dbec7f672f8f4e5cc81

Außerdem müssen wir auch aktualisieren Nehmen Sie auf der Seite „upload.php“ entsprechende Änderungen vor:

<?php
//设置编码为UTF-8,以避免中文乱码
header(&#39;Content-Type:text/html;charset=utf-8&#39;);
$fileArray = $_FILES[&#39;upload_file&#39;];//获取多个文件的信息,注意:这里的键名不包含[]

$upload_dir = &#39;D:/upload/&#39;; //保存上传文件的目录
foreach ( $fileArray[&#39;error&#39;] as $key => $error) {
  if ( $error == UPLOAD_ERR_OK ) { //PHP常量UPLOAD_ERR_OK=0,表示上传没有出错
    $temp_name = $fileArray[&#39;tmp_name&#39;][$key];
    $file_name = $fileArray[&#39;name&#39;][$key];
    move_uploaded_file($temp_name, $upload_dir.$file_name);
    echo &#39;上传[文件&#39;.$key.&#39;]成功!<br/>&#39;;
  }else {
    echo &#39;上传[文件&#39;.$key.&#39;]失败!<br/>&#39;;
  }
}
?>

In ähnlicher Weise verwenden wir die Funktion print_r(), um die Details der superglobalen Variablen $_FILES im obigen Beispiel anzuzeigen:

Array ( 
 [upload_file] => Array ( 
 [name] => Array ( 
  [0] => A.gif
  [1] => B.gif  
  ) 
 [type] => Array ( 
  [0] => image/gif
  [1] => image/gif  
  ) 
 [tmp_name] => Array (
  [0] => C:\Windows\Temp\php87B9.tmp
  [1] => C:\Windows\Temp\php87BA.tmp
  ) 
 [error] => Array ( 
  [0] => 0
  [1] => 0  
  ) 
 [size] => Array ( 
  [0] => 87123
  [1] => 93111  
  )
 )
)

Anmerkung 1: In der Standardkonfiguration von PHP tritt ein Fehler auf, wenn die hochgeladene Dateigröße einen bestimmten Bereich überschreitet. Bitte lesen Sie die Lösung für das Problem, wie Sie die Größenbeschränkung von PHP-hochgeladenen Dateien ändern können, am Ende Artikel.
Hinweis 2: Der oben unter Verarbeitung von Dateien hochgeladene PHP-Code ist nur ein einfaches Einführungsbeispiel und kann nicht direkt als formaler Code verwendet werden, da es viele Sicherheitsfaktoren gibt, die zusätzliche Aufmerksamkeit erfordern und nicht berücksichtigt wurden, wie z B.: Dateityp, Dateigröße, doppelte Namen hochgeladener Dateien usw.
Hinweis 3: Wenn der hochgeladene Dateiname chinesische Zeichen enthält, kann dies dazu führen, dass der Dateiname unleserlich ist. Zu diesem Zeitpunkt müssen Sie die Funktion iconv () verwenden, um die Codierung des Dateinamens zu konvertieren.

Zuvor haben wir gelernt, wie man PHP zum Implementieren des Datei-Uploads und des Hochladens mehrerer Dateien verwendet. Unter der Standardkonfiguration von PHP erhalten wir jedoch die folgende Fehlermeldung, wenn die hochgeladene Dateigröße einen bestimmten Grenzwert überschreitet:

Warning: POST Content-Length of 625523488 bytes exceeds the limit of 8388608 bytes in Unknown on line 0
上述错误信息的大致意思是,我们使用POST请求提交的数据大小超过了服务器的最大限制数(8388608字节=8MB)。

出现上述错误的原因是,在PHP的配置文件php.ini中,默认存在如下配置信息(在php.ini中,行首的分号";"表示当前行是注释,不会生效):

;脚本解析输入数据(类似 POST 和 GET)允许的最大时间,单位是秒。 它从接收所有数据到开始执行脚本进行测量的。 
max_input_time = 60

;允许客户端单个POST请求发送的最大数据
post_max_size = 8M

;是否开启文件上传功能
file_uploads = On

;文件上传的临时存放目录(如果不指定,使用系统默认的临时目录)
;upload_tmp_dir =

;允许单个请求上传的最大文件大小
upload_max_filesize = 2M

;允许单个POST请求同时上传的最大文件数量
max_file_uploads = 20

Wie wir aus den obigen Konfigurationsinformationen ersehen können, handelt es sich um die Standardkonfigurationsinformationen von PHP ist der „Übeltäter“, der dazu führt, dass der PHP-Datei-Upload darauf hinweist, dass die Dateigröße den Grenzwert überschreitet. Der Autor hat die chinesischen Anmerkungsinformationen zu jeder Befehlsoption in den obigen Konfigurationsinformationen bereitgestellt. Sie können die Konfigurationsdatei php.ini entsprechend Ihren tatsächlichen Anforderungen ändern.

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung des PHP-Datei-Uploads und Beispiele für mehrere Datei-Uploads. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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