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.