Najpierw formularz do przesyłania:
(plik wybierz.html)<form action='upload.php' method='post' encType='multipart/form-data'> <input type='file' name='obraz'>
Potem skrypt, który przetwarza dane formularza
(plik upload.php)<?php
function error_msg($ciag)
{
echo\"<script>
var komunikat = \"$ciag\";
alert(komunikat);
history.go(-1);
</script>\"
}
if(!isset($_FILES['obraz']['tmp_name'])) error_msg('nie przesłano pliku');
$nazwapliku1 = $_FILES['obraz']['name'];
$nazwapliku = strtolower($nazwapliku1);
$rozszerzenie = strstr($nazwapliku, '.');
if($rozszerzenie !='jpg' &&
$rozszerzenie !='jpeg'&&
$rozszerzenie !='gif') error_msg('złe rozszerzenie');
if(file_exists(\"katalog_z_obrazami/$nazwapliku1\")) error_msg('taki plik już istnieje');
if(!move_uploaded_file($_FILES['obraz']['tmp_name'], \"katalog_z_obrazami/$nazwapliku1\") )
error_msg('błąd przy zapisie pliku')
else echo \"wszystko ok\";
php?>
Pisałem ten skrypt u qzyna, nie mając przy sobie książek ani swoich skryptów, z których czasami korzystam, i do tego na szybko, dlatego nie gwarantuję że wszystko będzie ok. Kiedy jutro będe w domq to zedytuje tego posta jakby coś było nie tak. Z uwagami też piszcie:)
Oto opis działania skryptu:
Wiadomo najpierw potrzebny nam jest formularz z obsługą uploadu plików dlatego do znacznika
<form> dodałem
encType='multipart/form-data' który na to pozwala.
Następnie w pliku
upload.php definiuje funkcje
error_msg(), która wyświetla okno w języku javascript, po naciśnięciu
'ok' wracamy o 1 do tyłu w historii. Funkcja ta będzie służyć to wyświetlania różnych komunikatów, przyda sie nie tylko w tym skrypcie. Nastepnie sprawdzam czy przesłano jakikolwiek plik, potem za pomocą
strtolower() zmieniam wielkość liter na małe (na systemach LINUX wielkość liter ma znaczenie). Za pomocą
strstr() urywam rozszerzenie pliku i sprawdzam czy jest to
'jpg',
'jpeg' albo '
gif'. Później sprawdzam czy dany pliku już nie został uploadowany, jeśli nie to go zapisuje. W razie błędu wyświetlam odpowiedni komunikat. To chyba na tyle, wszystko powinno działać, chociaż zawsze jakaś literówka może sie pojawić. Jeżeli znajdziecie błąd, to poprawie posta;)