Heim  >  Artikel  >  Backend-Entwicklung  >  PHP nutzt umfassend Array-Funktionen, um mehrere Datei-Uploads zu erreichen

PHP nutzt umfassend Array-Funktionen, um mehrere Datei-Uploads zu erreichen

黄舟
黄舟Original
2017-05-04 11:46:362629Durchsuche

In der PHP-Programmentwicklung ist das Hochladen von Dateien 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#. Im Folgenden kombinieren wir spezifische Codebeispiele, um detailliert vorzustellen, wie Funktionen zum Hochladen von Dateien und zum Hochladen mehrerer Dateien über PHP implementiert werden.

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 zur Übermittlung allgemeiner Formulare 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 über die hochgeladene 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:

文件1:<input name="upload_file[]" type="file" /><br/>
文件2:<input name="upload_file[]" type="file" /><br/>

Darüber hinaus müssen wir auch entsprechende Änderungen an der Seite upload.php vornehmen :

<?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;;
    }
}
?>

Ähnlich 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			
			)
		)
)

Hinweis 1: In die Standardkonfiguration von PHP Wenn die hochgeladene Dateigröße einen bestimmten Bereich überschreitet, tritt ein Fehler auf

Hinweis 2: Der obige PHP-Code zur Verarbeitung von Datei-Uploads ist nur ein einfaches Einführungsbeispiel und kann nicht Da es viele Sicherheitsfaktoren gibt, die zusätzliche Aufmerksamkeit erfordern und nicht berücksichtigt wurden, z. B. Dateityp, Dateigröße und doppelte Namen hochgeladener Dateien usw.

Hinweis 3: Wenn der hochgeladene Dateiname chinesische Schriftzeichen enthält, kann es zu verstümmelten Dateinamen kommen. Zu diesem Zeitpunkt müssen Sie die Funktion iconv() verwenden, um die Codierung des Dateinamens zu konvertieren


【Verwandte Tutorial-Empfehlungen】

1. Relevante Themenempfehlungen: „PHP-Array (Array)



Das obige ist der detaillierte Inhalt vonPHP nutzt umfassend Array-Funktionen, um mehrere Datei-Uploads zu erreichen. 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