Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Как ввести ограничение по формату и размеру?


Автор: terrmann 25.10.2006, 21:51
Вот я написал код для того, чтобы загружать на сайт файлы прямо туда, где сам скрипт находится..
Код

<?
if ($_POST['upload']=='1') {
  $file=$_FILES['file'];
  move_uploaded_file($file['tmp_name'], $file['name']);
  }
?>
<html>
<head>
<title>File upload</title>
</head>
<body>
<form method="post" enctype="multipart/form-data">
<input type="hidden" name="upload" value="1">
<input type="file" name="file">
<input type="submit" value="Upload">
</form>
</body>
</html>


Но я не знаю как сделать так, чтобы были ограничения по формату (нужно только rar и txt) и по  размеру (2 Мб, допустим)... =\
Объясните, пожалуйста.

Заранее благодарен!

С уважением,
Иван.

Автор: Piphon 25.10.2006, 22:40
На клиенте:

Код

<input type="hidden" name="MAX_FILE_SIZE" value="2028">


На сервере:

$_FILES['имя_файла']['name']        - Оригинальное имя файла на клиентской машине.
$_FILES['имя_файла']['type']          - mime-тип файла, если браузер предоставил эту информацию. Пример: "image/gif".
$_FILES['имя_файла']['size']           - Размер загруженного файла в байтах.
$_FILES['имя_файла']['tmp_name'] - Временное имя файла, под которым загруженный файл был сохранён на сервере.


В твоем случае имя_файла file, проверяй значения type и size в скрипте.

Автор: SelenIT 26.10.2006, 00:19
Предельный размер upload-а ограничен в конфигурации php параметром upload_max_filesize. По умолчанию это как раз 2М smile

Автор: клоп 26.10.2006, 10:31
По размеру файла (пример для 200Kb):
Код

if($_FILES["filename"]["size"]>1024*200)
{ echo"<font color=#ee0000>Размер загружаемого файла не должен превышать 200 Кб! </font>"; exit;}


По формату:

Код

$filename = $_FILES['filename']['name'];
$filename = str_replace(" ", "_", $filename);
$file_name_arr = explode(".",$filename);
$type = end($file_name_arr);
$extensions = array("txt","csv");// перечисляем что можно грузить

if($filename == ""){ echo "Сохраните файл и загрузите его на сервер "; }
elseif(!(in_array($type, $extensions) or in_array(strtolower($type), $extensions)) ) { echo"<font color=#ee0000>Такой тип файла не подходит !!! </font>"; exit;}

Автор: Piphon 26.10.2006, 10:38
Ignat, а лучше еще и по mime(['type']).

P.S. Сори за ошибку, насчет 2028 байт ошибся.

Автор: terrmann 26.10.2006, 16:34
клоп, гм.. значит какой будет у меня текст будет ? =\
Так?

Код

<?
if ($_POST['upload']=='1') {
  $file=$_FILES['file'];
  move_uploaded_file($file['tmp_name'], $file['name']);
  }

if($_FILES["filename"]["size"]>1024*200)
{ echo"<font color=#ee0000>Размер загружаемого файла не должен превышать 200 Кб! </font>"; exit;}

$filename = $_FILES['filename']['name'];
$filename = str_replace(" ", "_", $filename);
$file_name_arr = explode(".",$filename);
$type = end($file_name_arr);
$extensions = array("txt","csv");// перечисляем что можно грузить
if($filename == ""){ echo "Сохраните файл и загрузите его на сервер "; }
elseif(!(in_array($type, $extensions) or in_array(strtolower($type), $extensions)) ) { echo"<font color=#ee0000>Такой тип файла не подходит !!! </font>"; exit;}
?>
<html>
<head>
<title>File upload</title>
</head>
<body>
<form method="post" enctype="multipart/form-data">
<input type="hidden" name="upload" value="1">
<input type="file" name="file">
<input type="submit" value="Upload">
</form>
</body>
</html>

Автор: terrmann 28.10.2006, 18:51
Ап... smile
Что то не получается у меня то, что мне написали.. одни ошибки.. smile

Автор: SelenIT 28.10.2006, 20:03
Очевидно, что нужно сначала делать проверки, и только в случае удачи закачивать файл. В простейшем виде:
Код

<?
$formats = array('txt', 'csv');
$max_size = 200;
$error = '';

if (!empty($_FILES['file'])) {
  $file=$_FILES['file'];
  if (!preg_match('/\.('.join('|', $formats).')$/i', $file['name'])) {
    $error = 'Неверный формат файла! Нужен '.join(' либо ', $formats).'!';
  }
  elseif ($file["size"]>1024*$max_size) {
    $error = 'Размер загружаемого файла не должен превышать '.$max_size.' Кб!';
  }
  else move_uploaded_file($file['tmp_name'], $file['name']);
}
?>
<html>
<head>
<title>File upload</title>
</head>
<body>
<? if ($error) { ?>
<p><font color=#ee0000><?=$error ?></font></p>
<? } ?>
<form method="post" enctype="multipart/form-data">
<input type="file" name="file">
<input type="submit" value="Upload">
</form>
</body>
</html>

Автор: клоп 28.10.2006, 20:34
Цитата(terrmann @ 26.10.2006,  16:34)
клоп, гм.. значит какой будет у меня текст будет ? =\
Так?

terrmann  те проверки, что я написал рабочие.  Поверь....

После проверки по идее у тебя должно идти:
Код

else{
copy($_FILES["filename"]["tmp_name"],"download/".$_FILES["filename"]["name"]);

где download/ папка куда все грузится

Автор: SelenIT 28.10.2006, 23:50
клоп, все-таки move_uploaded_file тут больше к месту, copy немножко для другого предназначен и при некоторых настройках хостинга может не сработать.

Автор: клоп 29.10.2006, 14:22
Цитата(SelenIT @ 28.10.2006,  23:50)
клоп, все-таки move_uploaded_file тут больше к месту, copy немножко для другого предназначен и при некоторых настройках хостинга может не сработать.

Согласен

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)