Rozpoczynamy pracę z plikami – uczymy się je uploadować. Na początek nauczymy się tworzyć poprawny formularz i sprawdzać go. Do dzieła!
Na początek tworzymy plik akcji naszego formularza:
echo $_SERVER['REQUEST_METHOD'];
echo "<br>";
echo $_SERVER['CONTENT_TYPE'] ?? "No content type";
echo "<br>";
Teraz w innym pliku formularz zgadzający się w action z naszym plikiem:
<form action="http://localhost/sometry/contenttype1.php" method="GET">
<input type="text" name="name" id="name">
<input type="submit" value="Send GET">
</form>
Oto co wówczas nam się wyświetli:
//url - http://localhost/sometry/contenttype1.php?name=asdasd
//method - GET
//content type - No content type
Ok, teraz formularz z metodą POST:
<form action="http://localhost/sometry/contenttype1.php" method="POST">
<input type="text" name="name" id="name">
<input type="submit" value="Send POST">
</form>
Odpowiedź jaką dostaniemy:
//url - http://localhost/sometry/contenttype1.php
//method - POST
//content type - application/x-www-form-urlencoded
Teraz piszemy formularz, który potrafi obsługiwać pliki:
<form action="http://localhost/sometry/contenttype1.php" method="POST" enctype="multipart/form-data">
<input type="text" name="name" id="name">
<input type="submit" value="Send POST MULTIPART">
</form>
Nasza odpowiedź:
//url - http://localhost/sometry/contenttype1.php
//method - POST
//content type - multipart/form-data; boundary=----WebKitForm(...)
Możemy zatem napisać metodę, która sprawdza, czy formularz ma odpowiedni content-type do przesyłania plików:
function formUsesMultipart(){
if($_SERVER['REQUEST_METHOD'] !== 'POST')
return false;
if(!isset($_SERVER['CONTENT_TYPE']) )
return false;
return str_starts_with($_SERVER['CONTENT_TYPE'], "multipart/form-data; boundary=");
}
I sprawdzać za pomocą tej metody, czy formularz (sam w sobie na razie niczego nie wysyłający jako plik) ma dobrze ustawiony enctype:
echo $_SERVER['REQUEST_METHOD'];
echo "<br>";
echo $_SERVER['CONTENT_TYPE'] ?? "No content type";
echo "<br>";
var_dump(formUsesMultipart());
Więcej materiałów w lekcjach następnych.