Nahrání souboru PHP
S PHP je snadné nahrávat soubory na server.
S lehkostí však přichází nebezpečí, takže při povolování nahrávání souborů buďte vždy opatrní!
Nakonfigurujte soubor "php.ini".
Nejprve se ujistěte, že je PHP nakonfigurováno tak, aby umožňovalo nahrávání souborů.
V souboru „php.ini“ vyhledejte file_uploads
direktivu a nastavte ji na On:
file_uploads = On
Vytvořte formulář HTML
Dále vytvořte formulář HTML, který uživatelům umožní vybrat soubor obrázku, který chtějí nahrát:
<!DOCTYPE html>
<html>
<body>
<form action="upload.php" method="post"
enctype="multipart/form-data">
Select image to upload:
<input type="file" name="fileToUpload" id="fileToUpload">
<input type="submit" value="Upload Image" name="submit">
</form>
</body>
</html>
Některá pravidla pro výše uvedený HTML formulář:
- Ujistěte se, že formulář používá metodu = "post"
- Formulář také potřebuje následující atribut: enctype="multipart/form-data". Určuje, jaký typ obsahu použít při odesílání formuláře
Bez výše uvedených požadavků nebude nahrávání souboru fungovat.
Další věci, kterých si všimnout:
- Atribut type="file" tagu <input> zobrazuje vstupní pole jako ovládací prvek pro výběr souboru s tlačítkem "Procházet" vedle ovládacího prvku vstupu
Výše uvedený formulář odešle data do souboru s názvem "upload.php", který vytvoříme jako další.
Vytvořte skript PHP pro nahrání souboru
Soubor "upload.php" obsahuje kód pro nahrání souboru:
<?php
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType =
strtolower(pathinfo($target_file,PATHINFO_EXTENSION));
// Check if image file is a actual image or fake image
if(isset($_POST["submit"])) {
$check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
if($check !== false) {
echo "File is an image - " . $check["mime"] . ".";
$uploadOk = 1;
} else {
echo "File is not an image.";
$uploadOk = 0;
}
}
?>
Vysvětlení PHP skriptu:
- $target_dir = "uploads/" - určuje adresář, kam bude soubor umístěn
- $target_file určuje cestu k souboru, který má být nahrán
- $uploadOk=1 se zatím nepoužívá (bude použito později)
- $imageFileType obsahuje příponu souboru (malá písmena)
- Dále zkontrolujte, zda je soubor obrázku skutečný obrázek nebo falešný obrázek
Poznámka: Budete muset vytvořit nový adresář s názvem "uploads" v adresáři, kde se nachází soubor "upload.php". Nahrané soubory se tam uloží.
Zkontrolujte, zda soubor již existuje
Nyní můžeme přidat některá omezení.
Nejprve zkontrolujeme, zda soubor již existuje ve složce „uploads“. Pokud ano, zobrazí se chybová zpráva a $uploadOk je nastaveno na 0:
// Check if file already exists
if (file_exists($target_file)) {
echo "Sorry, file already exists.";
$uploadOk = 0;
}
Omezit velikost souboru
Pole pro zadání souboru v našem HTML formuláři výše se jmenuje „fileToUpload“.
Nyní chceme zkontrolovat velikost souboru. Pokud je soubor větší než 500 kB, zobrazí se chybová zpráva a $uploadOk je nastaveno na 0:
// Check file size
if ($_FILES["fileToUpload"]["size"] > 500000) {
echo "Sorry, your file is too large.";
$uploadOk = 0;
}
Omezit typ souboru
Níže uvedený kód umožňuje uživatelům nahrávat pouze soubory JPG, JPEG, PNG a GIF. Všechny ostatní typy souborů zobrazí chybovou zprávu před nastavením $uploadOk na 0:
// Allow certain file formats
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
&& $imageFileType != "gif" ) {
echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed.";
$uploadOk = 0;
}
Kompletní nahrání souboru PHP skript
Kompletní soubor "upload.php" nyní vypadá takto:
<?php
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType =
strtolower(pathinfo($target_file,PATHINFO_EXTENSION));
// Check if image file is a actual image or fake image
if(isset($_POST["submit"])) {
$check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
if($check !== false) {
echo "File is an image - " . $check["mime"] . ".";
$uploadOk = 1;
} else {
echo "File is not an image.";
$uploadOk = 0;
}
}
// Check if file already exists
if (file_exists($target_file)) {
echo "Sorry, file already exists.";
$uploadOk = 0;
}
// Check file size
if ($_FILES["fileToUpload"]["size"] > 500000) {
echo "Sorry, your file is too large.";
$uploadOk = 0;
}
// Allow certain file formats
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
&& $imageFileType != "gif" ) {
echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed.";
$uploadOk = 0;
}
// Check if $uploadOk is set to 0 by an error
if ($uploadOk == 0) {
echo "Sorry, your file was not uploaded.";
// if everything is ok, try to upload file
} else {
if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
echo "The file ". htmlspecialchars( basename( $_FILES["fileToUpload"]["name"])).
" has been uploaded.";
} else {
echo "Sorry, there was an error uploading your file.";
}
}
?>
Kompletní reference souborového systému PHP
Úplnou referenci o funkcích souborového systému naleznete v naší úplné příručce souborového systému PHP .