Собственно, полноценный скрипт, который можно скачать (для ленивых:), я не делал, но подробно опишу что и как.
Итак, написана функция загрузки файлов
<? function uploadfile($file,$updir,$dims,$tmpfile) { global $dim; // сделаем расширение файла доступным за пределами функции $name=(strrev($file)); //делаем реверс строки $file=explode("." , $name,2); // разбиваем ее на две части - после точки и до точки $dim = $file[0]; // получаем реверсивное расширение файла (т.е. наоборот, jpg =gpj) $dim=strtolower((strrev($dim)));// делаем нижний регистр, и реверс, чтобы получить читаемое расширение $name=(strrev($file[1]));// получаем читаемое имя файла, может пригодится if (!@in_array($dim, $dims)) {//проверяем а не пытается ли кто нибудь закачать скрипт вместо фото return 2; // неверное расширение файла } else { if(move_uploaded_file($tmpfile,$updir.$name.'.'.$dim)) // если все ок { global $file_name; // делаем глобальную переменную $file_name= date("Y-n-j-H-i-s").'_file_'.rand(1,1000).'.'.$dim;// делаем уникальное имя для файла rename($updir.$name.'.'.$dim, $updir.$file_name ); //переименовать return 1; // все ок файл загружен } else { return 0; // не удалось загрузить файл, возможно права на папку неверно прописаны } } } ?>
Как видите, функция возвращает три варианта ответа:
-1 все ок, файл успешно загружен
-2 была попытка загрузить файл с расширением. которое не предусмотрено нами
-3 не удалось загрузить файл по причине, например, невозможности писать в папку – надо поиграться с правами
Далее создаем форму
<form id="form1" name="form1" enctype="multipart/form-data" method="post" action=""> <label for="kvitancia">Выберите файл для загрузки</label> <input type="file" name="file" id="file" /> <br /> <br /> <label> <input type="submit" name="go" id="go" value="Отправить" /> </label> </form>
теперь используем функцию по отправке формы
if (!empty($_FILES['file']['name'])) { if (uploadfile($_FILES['file']['name'],'./docs/',array('jpg','gif','png','jpeg'),$_FILES['file']['tmp_name'])==1) { $info = 'загружено'; } elseif(uploadfile($_FILES['file']['name'],'docs',array('jpg','gif','png','jpeg'),$_FILES['file']['tmp_name'])==0) { $info = 'Не удалось загрузить'; } elseif(uploadfile($_FILES['file']['name'],'docs',array('jpg','gif','png','jpeg'),$_FILES['file']['tmp_name'])==2) { $info = 'Неверный тип файла '. $dim; } }
В этом коде мы проверяем, какой ответ получен при использовании функции, и выводим соответствующее сообщение. Немного распишу что тут где
Рассмотрим описание функции
uploadfile($file,$updir,$dims,$tmpfile)
$file – имя файла, записанное в переменную $_FILES, в нашем случае $_FILES[‘file’][‘name’] – где file это имя поля для загрузки в форме, а name – имя загружаемого этим полем файла.
$updir – директория, в которую будет загружаться файл.
$dims – массив с расширениями, разрешенными к использованию, формат написания array(‘jpg’,’gif’,’png’,’jpeg’)
$tmpfile – имя временного файла на сервере (после загрузки файла на сервер он вначале попадает во временную папку, и ему назначается другое имя), в нашем случае $_FILES[‘file’][‘tmp_name’], где file это имя поля для загрузки в форме, а tmp_name – имя файла на сервере.
Есть вопросы? Тут рядом комментарии )