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.