Heim Web-Frontend js-Tutorial Einführungs-Tutorial zum Hochladen von PHP-Dateien (Erklärung mit Beispielen)_Grundkenntnisse

Einführungs-Tutorial zum Hochladen von PHP-Dateien (Erklärung mit Beispielen)_Grundkenntnisse

May 16, 2016 pm 04:52 PM
php 入门教程 文件上传

一、文件上传

为了让客户端的用户能够上传文件,我们必须在用户界面中提供一个表单用于提交上传文件的请求。由于上传的文件是一种特殊数据,不同于其它的post数据,所以我们必须给表单设置一个特殊的编码:

复制代码 代码如下:


以上的enctype属性,你可能不太熟悉,因为这常常会被忽略掉。但是,如果http post请求中既有常规数据,又包含文件类数据的话,这个属性就应该显示加上,这样可以提高针对各种浏览器的兼容性。

接下来,我们得向表单中添加一个用于上传文件的字段:

复制代码 代码如下:


上述文件字段在各种浏览器中可能表现会有所不同。对于大多数的浏览器,上述字段都会被渲染成一个文本框加上一个浏览按钮。这样,用户既可以自行输入文件的路径到文本框中,也可以通过浏览按钮从本地硬盘上选择所要上传的文件。但是,在苹果的Safari中,貌似只能使用浏览这种方式。当然,你也可以自定义这个上传框的样式,使它看起来比默认的样式优雅些。

下面,为了更好的阐述怎么样处理文件上传,举一个完整的例子。比如,以下一个表单允许用户向我的本地服务器上上传附件:

复制代码 代码如下:

请上传你的附件:






提示:可以通过php.ini中的upload_max_filesize来设置允许上传文件的最大值。另外,还有一个post_max_size也可以用来设置允许上传的最大表单数据,具体意思就是表单中各种数据之和,所以你也可以通过设置这个字段来控制上传文件的最大值。但是,注意后者的值必须大于前者,因为前者属于后者的一部分表单数据。

Einführungs-Tutorial zum Hochladen von PHP-Dateien (Erklärung mit Beispielen)_Grundkenntnisse
 

Abbildung 1. In Firefox angezeigtes Upload-Formular

Wenn dieses Formular abgeschickt wird, wird die http-Anfrage an upload.php gesendet. Um genau zu zeigen, welche Informationen in upload.php verfügbar sind, drucke ich sie in upload.php aus:

Code kopieren Code wie folgt :

header('Content-Type: text/plain');
print_r($_FILES);


Lassen Sie uns unten ein Experiment durchführen Klicken Sie auf das obige Formular, um ein Logo dieses Blogs auf meinen lokalen Server www.360weboy.me/upload.php hochzuladen und zu sehen, welche Informationen in upload.php ausgegeben werden:
Kopieren Sie den Code Der Code lautet wie folgt:
Array
                                                                                            [Name] => Junge .jpg
[Typ] => > [tmp_name] => D:xampptmpphp1168.tmp
[error] =&g t;                                                                             > )

)



Das Obige ist Alle Informationen über die aktuell hochgeladene Datei im globalen Array, nachdem die Datei hochgeladen wurde. Können wir jedoch garantieren, dass diese Informationen sicher sind? Was passiert, wenn der Name oder andere Informationen manipuliert wurden? Wir müssen immer wachsam gegenüber Informationen von Kunden sein!

Teile der spezifischen http-Anfrage
Um den Datei-Upload besser zu verstehen, müssen wir prüfen, welche spezifischen Informationen in der vom Kunden gesendeten http-Anfrage enthalten sind. Der Anhang, den ich zuvor hochgeladen habe, ist das Logo dieses Blogs. Da es sich um ein Bild handelt, ist es für uns nicht geeignet, das obige Experiment durchzuführen. Also habe ich eine test.text-Textdatei erneut hochgeladen, die insbesondere den folgenden Inhalt enthält:


Code kopieren

Der Code ist wie folgt folgt: 360w 360 Tage Life Of A Web Boy
Okay. Wenn ich nun diese Textdatei hochlade, wird sie in upload.php ausgegeben:



Kopieren Sie den Code

Der Code lautet wie folgt: Array ( [attachment] => Array
(
[name] => test.tx t
       [type] => text/plain
                                                                                                                                                                               — 🎜>         . )

                                                                                               
Sehen wir uns die http-Post-Anfrage an, die von gesendet wurde der entsprechende Browser (ich habe einige optionale Header weggelassen):




Code kopieren


Der Code lautet wie folgt:


POST /upload.php HTTP/1.1
Host: www.360weboy.me
Referrer: http://www.360weboy.me/
multipart/form-data ; border=-----------24464570528145
Inhaltslänge: 234

----- -------------------------24464570528145
Content-Disposition: form-data; filename="test.txt". "
Inhaltstyp: Text/Plain

360weboy

360days

Life Of A Web Boy
----------- -- ----------------24464570528145--

Es gibt mehrere Felder im obigen Anfrageformat, auf die wir achten müssen, nämlich Name, Dateiname und Inhaltstyp: Sie stellen jeweils den Feldnamen des Upload-Dateifelds im Formular dar – Anhang, den Namen der vom Benutzer von der lokalen Festplatte hochgeladenen Datei – test.txt, und das hochgeladene Dateiformat – text/ plain (stellt eine Textdatei dar). Dann sehen wir unten eine leere Zeile, die den spezifischen Inhalt der hochgeladenen Datei darstellt.

2. Sicherheitsverbesserung
Um die Sicherheit beim Datei-Upload zu erhöhen, müssen wir den tmp_name und die Größe im globalen Array $_FILES überprüfen. Um sicherzustellen, dass die Datei, auf die tmp_name verweist, tatsächlich die Datei ist, die der Benutzer gerade auf den Client hochgeladen hat, und nicht auf etwas wie /etc/passwd verweist, können Sie die Funktion is_uploaded_file() in PHP verwenden, um eine Beurteilung zu treffen:

Code kopieren Der Code lautet wie folgt:


$filename = $_FILES[' attachment']['tmp_name'];

if (is_uploaded_file($filename)) {
/* Ist eine hochgeladene Datei */
}

In In einigen Fällen kann es sein, dass der Inhalt der erfolgreich hochgeladenen Datei dem Benutzer angezeigt wird, nachdem der Benutzer die Datei hochgeladen hat. Daher ist die Überprüfung des obigen Codes besonders wichtig.

Eine weitere Sache, die überprüft werden muss, ist der MIME-Typ der hochgeladenen Datei, bei dem es sich um das oben erwähnte Typfeld des Ausgabearrays in upload.php handelt. Was ich im ersten Beispiel hochgeladen habe, ist ein Bild, daher ist der Wert von $_FILES['attachment']['type'] 'image/jpeg'. Wenn Sie vorhaben, auf der Serverseite nur Bilder vom Mime-Typ wie image/png, image/jpeg, image/gif, image/x-png und image/p-jpeg zu akzeptieren, können Sie zur Überprüfung Code ähnlich dem folgenden verwenden (Geben Sie einfach ein Beispiel. Beispiele, spezifische Codes, wie z. B. Fehlerberichte usw., sollten dem Mechanismus in Ihrem System folgen):

Code kopieren Der Code lautet wie folgt:
                                                                                                                                                                        Who ,
                                                                                                                                                                                                                                             Allow_mimes)) {
DIE ('Leider ist das Dateiformat, das Sie hochgeladen haben ungenau; wir akzeptieren nur Bilddateien.');
Wie Sie sehen, haben wir sichergestellt, dass der MIME-Typ der Datei den serverseitigen Anforderungen entspricht. Es reicht jedoch nicht aus, böswillige Benutzer daran zu hindern, andere schädliche Dateien hochzuladen, da dieser böswillige Benutzer vom Mime-Typ getarnt werden kann. Der Benutzer hat beispielsweise ein JPG-Bild erstellt, schädlichen PHP-Code in die Metadaten des Bildes geschrieben und es dann als Datei mit der Endung „php“ gespeichert. Wenn diese schädliche Datei hochgeladen wird, besteht sie die serverseitige MIME-Typprüfung erfolgreich und wird als Bild betrachtet, und der darin enthaltene gefährliche PHP-Code wird ausgeführt. Die spezifischen Bildmetadaten ähneln den folgenden:
Kopieren Sie den Code Der Code lautet wie folgt:


Dateiname: image.jpg
Dateigröße: 182007 Bytes
Dateidatum: 2012:11:27 7:45:10
Auflösung: 1197 x 478
Kommentar: passthru( $_POST['cmd ']); __halt_compiler();

Wir können sehen, dass PHP-Code zum Kommentarfeld der Bildmetadaten hinzugefügt wurde. Daher liegt es auf der Hand, dass eine notwendige Überprüfung der Erweiterung der hochgeladenen Datei durchgeführt werden muss, um das Auftreten ähnlich gefährlicher Situationen zu verhindern. Der folgende Code erweitert den vorherigen Code zur Überprüfung des Mime-Typs:
Kopieren Sie den Code Der Code lautet wie folgt:


            $allow_mimes = array(
            'image/png' => image/gif' => '.gif',
'image/jpeg' => '.jpg ',
'image/pjpeg' => '.jpg'
);

$image = $_FILES['attachment'];

if(!array_key_exists( $image['type'], $allow_mimes )) {
die('Entschuldigung, Sie haben es hochgeladen. Das Dateiformat ist nicht korrekt; wir akzeptieren nur Bilddateien.');
                                                                                                                                                             , 0, strrpos($image ['name'], '.'));

                                                                                                                                                                                   🎜>
// Weiterverarbeitung der hochgeladenen Datei 🎜>
Durch den obigen Code stellen wir sicher, dass auch wenn Wenn die Metadatei des hochgeladenen Bildes PHP-Code enthält, wird die Bilddatei mit dem Suffix „Datei mit dem Namen Bildformat“ umbenannt, sodass der darin enthaltene PHP-Code nicht ausgeführt wird. Der obige Code hat keine negativen Auswirkungen auf normal hochgeladene Bilder.

Wenn Sie nach der Durchführung der oben genannten Schritte zur Verbesserung der Sicherheit nur die hochgeladene Datei in einem bestimmten Verzeichnis speichern möchten, können Sie dazu die Standardfunktion move_uploaded_file von PHP verwenden:




Code kopieren

Der Code lautet wie folgt:


$tmp_filename = $_FILES['attachment']['tmp_name ']; $filename = '/path/to/attachment.txt'; if (move_uploaded_file(tmp_filename, $filename)) { /* $temp_filename im temporären Verzeichnis gespeichert Laden Sie die Datei hoch und dann erfolgreich Speichern Sie es in der Datei attachment.txt im entsprechenden Verzeichnis */       }
   
Möglicherweise möchten Sie auch die Größe der hochgeladenen Datei begrenzen, dann können Sie die Dateigrößenfunktion verwenden Ermitteln Sie die Größe der hochgeladenen Datei und führen Sie die weitere Verarbeitung nach der Beurteilung durch. Dies wird hier nicht näher erläutert, sodass Sie es selbst herausfinden können.

Okay, lasst uns hier erst einmal aufhören, über das Hochladen von Dateien zu schreiben. Ich hoffe, dieser Einführungsartikel ist hilfreich für Sie.
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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 bringt mehrere neue Funktionen, Sicherheitsverbesserungen und Leistungsverbesserungen mit einer beträchtlichen Menge an veralteten und entfernten Funktionen. In dieser Anleitung wird erklärt, wie Sie PHP 8.4 installieren oder auf PHP 8.4 auf Ubuntu, Debian oder deren Derivaten aktualisieren. Obwohl es möglich ist, PHP aus dem Quellcode zu kompilieren, ist die Installation aus einem APT-Repository wie unten erläutert oft schneller und sicherer, da diese Repositorys in Zukunft die neuesten Fehlerbehebungen und Sicherheitsupdates bereitstellen.

7 PHP-Funktionen, die ich leider vorher nicht kannte 7 PHP-Funktionen, die ich leider vorher nicht kannte Nov 13, 2024 am 09:42 AM

Wenn Sie ein erfahrener PHP-Entwickler sind, haben Sie möglicherweise das Gefühl, dass Sie dort waren und dies bereits getan haben. Sie haben eine beträchtliche Anzahl von Anwendungen entwickelt, Millionen von Codezeilen debuggt und eine Reihe von Skripten optimiert, um op zu erreichen

So richten Sie Visual Studio-Code (VS-Code) für die PHP-Entwicklung ein So richten Sie Visual Studio-Code (VS-Code) für die PHP-Entwicklung ein Dec 20, 2024 am 11:31 AM

Visual Studio Code, auch bekannt als VS Code, ist ein kostenloser Quellcode-Editor – oder eine integrierte Entwicklungsumgebung (IDE) –, die für alle gängigen Betriebssysteme verfügbar ist. Mit einer großen Sammlung von Erweiterungen für viele Programmiersprachen kann VS Code c

Erklären Sie JSON Web Tokens (JWT) und ihren Anwendungsfall in PHP -APIs. Erklären Sie JSON Web Tokens (JWT) und ihren Anwendungsfall in PHP -APIs. Apr 05, 2025 am 12:04 AM

JWT ist ein offener Standard, der auf JSON basiert und zur sicheren Übertragung von Informationen zwischen Parteien verwendet wird, hauptsächlich für die Identitätsauthentifizierung und den Informationsaustausch. 1. JWT besteht aus drei Teilen: Header, Nutzlast und Signatur. 2. Das Arbeitsprinzip von JWT enthält drei Schritte: Generierung von JWT, Überprüfung von JWT und Parsingnayload. 3. Bei Verwendung von JWT zur Authentifizierung in PHP kann JWT generiert und überprüft werden, und die Funktionen und Berechtigungsinformationen der Benutzer können in die erweiterte Verwendung aufgenommen werden. 4. Häufige Fehler sind Signaturüberprüfungsfehler, Token -Ablauf und übergroße Nutzlast. Zu Debugging -Fähigkeiten gehört die Verwendung von Debugging -Tools und Protokollierung. 5. Leistungsoptimierung und Best Practices umfassen die Verwendung geeigneter Signaturalgorithmen, das Einstellen von Gültigkeitsperioden angemessen.

Wie analysiert und verarbeitet man HTML/XML in PHP? Wie analysiert und verarbeitet man HTML/XML in PHP? Feb 07, 2025 am 11:57 AM

Dieses Tutorial zeigt, wie XML -Dokumente mit PHP effizient verarbeitet werden. XML (Extensible Markup-Sprache) ist eine vielseitige textbasierte Markup-Sprache, die sowohl für die Lesbarkeit des Menschen als auch für die Analyse von Maschinen entwickelt wurde. Es wird üblicherweise für die Datenspeicherung ein verwendet und wird häufig verwendet

PHP -Programm zum Zählen von Vokalen in einer Zeichenfolge PHP -Programm zum Zählen von Vokalen in einer Zeichenfolge Feb 07, 2025 pm 12:12 PM

Eine Zeichenfolge ist eine Folge von Zeichen, einschließlich Buchstaben, Zahlen und Symbolen. In diesem Tutorial wird lernen, wie Sie die Anzahl der Vokale in einer bestimmten Zeichenfolge in PHP unter Verwendung verschiedener Methoden berechnen. Die Vokale auf Englisch sind a, e, i, o, u und sie können Großbuchstaben oder Kleinbuchstaben sein. Was ist ein Vokal? Vokale sind alphabetische Zeichen, die eine spezifische Aussprache darstellen. Es gibt fünf Vokale in Englisch, einschließlich Großbuchstaben und Kleinbuchstaben: a, e, ich, o, u Beispiel 1 Eingabe: String = "TutorialPoint" Ausgabe: 6 erklären Die Vokale in der String "TutorialPoint" sind u, o, i, a, o, ich. Insgesamt gibt es 6 Yuan

Erklären Sie die späte statische Bindung in PHP (statisch: :). Erklären Sie die späte statische Bindung in PHP (statisch: :). Apr 03, 2025 am 12:04 AM

Statische Bindung (statisch: :) implementiert die späte statische Bindung (LSB) in PHP, sodass das Aufrufen von Klassen in statischen Kontexten anstatt Klassen zu definieren. 1) Der Analyseprozess wird zur Laufzeit durchgeführt.

Was sind PHP Magic -Methoden (__construct, __Destruct, __call, __get, __set usw.) und geben Sie Anwendungsfälle an? Was sind PHP Magic -Methoden (__construct, __Destruct, __call, __get, __set usw.) und geben Sie Anwendungsfälle an? Apr 03, 2025 am 12:03 AM

Was sind die magischen Methoden von PHP? Zu den magischen Methoden von PHP gehören: 1. \ _ \ _ Konstrukt, verwendet, um Objekte zu initialisieren; 2. \ _ \ _ Destruct, verwendet zur Reinigung von Ressourcen; 3. \ _ \ _ Call, behandeln Sie nicht existierende Methodenaufrufe; 4. \ _ \ _ GET, Implementieren Sie den dynamischen Attributzugriff; 5. \ _ \ _ Setzen Sie dynamische Attributeinstellungen. Diese Methoden werden in bestimmten Situationen automatisch aufgerufen, wodurch die Code -Flexibilität und -Effizienz verbessert werden.

See all articles