Kolejna nauka obsługi plików i ich uploadów w PHP. Bez zbędnych wstępów – do dzieła!
Tworzymy formularz nadający się do wysyłania plików:
<form action="http://localhost/sometry/contenttype2.php" method="POST" enctype="multipart/form-data">
<input type="file" name="myfile" id="myfile">
<input type="submit" value="Send POST MULTIPART">
</form>
Teraz tworzymy plik o nazwie takiej, jak action naszego formularza:
function moveFile($filename){
$destination = __DIR__ . "/uploads/$filename";
return move_uploaded_file($_FILES['myfile']['tmp_name'], $destination);
}
var_dump(moveFile("uploaded.png"));
//bool(true)
Klucz w tablicy files powinien odpowiadać atrybutowi name inputu plikowego. Teraz, jeżeli mamy folder uploads, nasz plik tam się znajdzie, pod nazwą uploaded.png.
Możemy napisać kolejną funkcję, która sprawdzi jego istnienie:
function existsInUploads($filename){
return file_exists(__DIR__ . "/uploads/$filename");
}
var_dump(existsInUploads('uploaded.png'));
//bool(true)
Warto zwrócić uwagę, że pliki często powinny mieć name file i tak występować:
function moveFile($filename, $file='file'){
$destination = __DIR__ . "/uploads/$filename";
return move_uploaded_file($_FILES[$file]['tmp_name'], $destination);
}
moveFile("uploaded2.png", 'myfile');
//bool(true)
Możemy jeszcze dołożyć dwie funkcje pomocnicze:
function noFileAtAll(){
return empty($_FILES);
}
function missingFile($file='file'){
return empty($_FILES[$file]);
}
Jedna sprawdza, czy są w ogóle jakieś pliki przesłane, druga czy przesłano konkretny plik o kontretnym name (input type file z formularza):
var_dump(noFileAtAll());
//bool(false)
var_dump(missingFile("myfile2"));
//bool(true)
var_dump(missingFile("myfile"));
////bool(false)
Więcej o plikach w następnej lekcji.