Июл 212011
 

Собственно, полноценный скрипт, который можно скачать (для ленивых:), я не делал, но подробно опишу что и как.
Итак, написана функция загрузки файлов

<?
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 — имя файла на сервере.

Есть вопросы? Тут рядом комментарии )

Дорогие читатели! Мною было принято решение закрыть комментарии на блоге. Теперь все обсуждения переносятся на недавно открытый форум, ввиду того, что формат сообщений там намного удобней для обсуждения. Не стесняйтесь задавать любые вопросы по тематике блога! Я всегда на связи.
Перейти на форум
.

Извините, форма комментирования закрыта в данный момент.