Перейти к содержимому



  • Закрытая тема Тема закрыта

Загрузка файла на сервер

#1 surfer

surfer
  • Заблокированные
  • 1 956 сообщений
  • Репутация: 71
0

Отправлено 11 Декабрь 2010 - 06:25

в php.ini

; Maximum allowed size for uploaded files.
upload_max_filesize = 28M

загружаю файл больше 8М и меньше 28М
он не выдает ошибку на этапе проверки:
  if(($_FILES['file']['size']<8192000))

и как ни странно выполняется
	echo 'Отладочная информация:';
print_r($_FILES);
print "</pre>";

выдавая Array хотя по логике он вообще до этого кода не должен дойти
а он просто подряд исполняется

фрагмент upload.php

if(($_FILES['file']['error']==0))
{
// устанавливаем максимально допустимый размер загружаемого файла
// (можно предусмотреть задание в конфигурацинном файле, т.е. в ручную).
if(($_FILES['file']['size']<8192000))
{
// устанавливаем папку загрузки
$uploaddir = '../../doc/';
// устанавливаем имя файла
$uploadfile = $uploaddir . basename($_FILES['file']['name']);
echo '<pre>';

if (move_uploaded_file($_FILES['file']['tmp_name'], $uploadfile))
{
echo "Файл успшно загружен.";
}
else
{
echo "Ошибка загрузки загрузки.";
}

echo 'Отладочная информация:';
print_r($_FILES);
print "</pre>";
}
else
{
echo "Размер принятого файла превысил максимально допустимый размер администратором сайта.";
}

 

 

  • 0

#2 gaaarfild

gaaarfild
  • Пользователь
  • 596 сообщений
  • Репутация: 0

Отправлено 11 Декабрь 2010 - 17:08

Кроме этого параметра есть еще параметр не помню точно, как-то так
max_post_size = 2mb.
Вот его тоже поправь.
  • 0

#3 marker

marker
  • Пользователь
  • 52 сообщений
  • Репутация: 0

Отправлено 11 Декабрь 2010 - 17:15

Пользуйтесь табуляцией TAB в редакторе, чтобы понимать в какой части кода что находиться.
if(( $_FILES['file']['error'] == 0 )){
if(( $_FILES['file']['size']<8192000 )){

$uploaddir = '../../doc/';
$uploadfile = $uploaddir . basename( $_FILES['file']['name'] );

echo '<pre>';

if( move_uploaded_file( $_FILES['file']['tmp_name'], $uploadfile ) ){
echo "Файл успшно загружен.";
}else{
echo "Ошибка загрузки загрузки.";
}

echo 'Отладочная информация:';
print_r($_FILES);
print "</pre>";

}else{
echo "Размер принятого файла превысил максимально допустимый размер администратором сайта.";
}
}

Если бы Отладочная информация выдавалась в после оператора else тогда бы только при превышении размера это информация выводилась в браузер.
А то что вы написали Файл успешно загружен еще не означает что код не будет продолжать выполняться.

Размер принятого файла превысил максимально допустимый размер администратором сайта

Это из раздела Юмор, какой плохой администратор превысил допустимый размер. :)
  • 0

#4 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 11 Декабрь 2010 - 22:50

marker, вы невнимательно прочитали, спрашивают почему файл размером больше 8мб проходит условие ограничения по размеру.
surfer, подебаж:
выведи на экран для себя значение $_FILES['file']['size'], соответствует ли оно действительности. Всё же это просто проверяется. Раз условие не выполняется, значит $_FILES['file']['size'] имеет невалидное значение.
  • 0

#5 surfer

surfer
    Topic Starter
  • Заблокированные
  • 1 956 сообщений
  • Репутация: 71

Отправлено 11 Декабрь 2010 - 23:28

дык думаю что апач падает щас систему переустановил попробую чо буит :)
  • 0

#6 marker

marker
  • Пользователь
  • 52 сообщений
  • Репутация: 0

Отправлено 12 Декабрь 2010 - 00:14

операционную систему? :rolleyes:
извиняюсь за оффтоп

з.ы.: если бы мне при столкновении с проблемой постоянно переустанавливать ос все бы закончилось суицидом.


  • 0

#7 surfer

surfer
    Topic Starter
  • Заблокированные
  • 1 956 сообщений
  • Репутация: 71

Отправлено 12 Декабрь 2010 - 05:05

surfer, подебаж:
выведи на экран для себя значение $_FILES['file']['size'], соответствует ли оно действительности. Всё же это просто проверяется. Раз условие не выполняется, значит $_FILES['file']['size'] имеет невалидное значение.

я же в первом посте писал, что выдает Array() и все, а почему не могу понять
  • 0

#8 marker

marker
  • Пользователь
  • 52 сообщений
  • Репутация: 0

Отправлено 12 Декабрь 2010 - 10:40

print_r( $_FILES );

  • 0

#9 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 12 Декабрь 2010 - 13:16

surfer, правильно говорят, только лучше ещё добавить в pre, сразу увидим разницу:

1) Загрузка одного файла - в одиночной форме записи имени:
форма
<form action='' method='post' enctype='multipart/form-data'>
<input type='file' name='file'>
<input type='submit' value='Загрузить'>
</form>

результат $_FILES
Array
(
	[file] => Array
		(
			[name] => index.php
			[type] => application/octet-stream
			[tmp_name] => C:\Windows\Temp\phpD261.tmp
			[error] => 0
			[size] => 273
		)
)

2) Загрузка двух файлов - каждому полю указывается отдельное имя:
форма
<form action='' method='post' enctype='multipart/form-data'>
<input type='file' name='file1'>
<input type='file' name='file2'>
<input type='submit' value='Загрузить'>
</form>

результат $_FILES
Array
(
	[file1] => Array
		(
			[name] => index.php
			[type] => application/octet-stream
			[tmp_name] => C:\Windows\Temp\phpFE90.tmp
			[error] => 0
			[size] => 273
		)

	[file2] => Array
		(
			[name] => regular.php
			[type] => application/octet-stream
			[tmp_name] => C:\Windows\Temp\phpFEA1.tmp
			[error] => 0
			[size] => 152
		)
)

3) Загрузка одного файла - имя поля в форме массива файлов:
форма
<form action='' method='post' enctype='multipart/form-data'>
<input type='file' name='file[]'>
<input type='submit' value='Загрузить'>
</form>

результат $_FILES
Array
(
	[file] => Array
		(
			[name] => Array
				(
					[0] => index.php
				)
			[type] => Array
				(
					[0] => application/octet-stream
				)
			[tmp_name] => Array
				(
					[0] => C:\Windows\Temp\phpB237.tmp
				)
			[error] => Array
				(
					[0] => 0
				)
			[size] => Array
				(
					[0] => 273
				)
		)
)

4) Загрузка двух файлов - имена полей в форме массива файлов:
форма
<form action='' method='post' enctype='multipart/form-data'>
<input type='file' name='file[]'>
<input type='file' name='file[]'>
<input type='submit' value='Загрузить'>
</form>

результат $_FILES
Array
(
	[file] => Array
		(
			[name] => Array
				(
					[0] => index.php
					[1] => regular.php
				)
			[type] => Array
				(
					[0] => application/octet-stream
					[1] => application/octet-stream
				)
			[tmp_name] => Array
				(
					[0] => C:\Windows\Temp\php1261.tmp
					[1] => C:\Windows\Temp\php1262.tmp
				)
			[error] => Array
				(
					[0] => 0
					[1] => 0
				)
			[size] => Array
				(
					[0] => 273
					[1] => 152
				)
		)
)

Посмотри разницу когда мы используем разные имена файлов (file1, file2), а когда используем форму записи массива файлов (file[])
  • 0

#10 surfer

surfer
    Topic Starter
  • Заблокированные
  • 1 956 сообщений
  • Репутация: 71

Отправлено 12 Декабрь 2010 - 16:38

вы меня за идиота считаете или читать не умеет, я же написал в таких ситуациях, т.е. при печати $_FILES
выдает:

Array
(
)

или в 4-й раз на китайском вам написать?

вот форма:
<form action="upload.php" method="post" enctype="multipart/form-data">
<p>Файл для загрузки:
<input type="file" name="file" />
<input type="submit" name="add" value="загрузить" />
</p>
</form>


вот загрузчик
<?php
// проверяем, что при загрузке был выбран файл
if(!$_FILES['file']['error'])
{
// устанавливаем максимально допустимый размер загружаемого файла
// (можно предусмотреть задание в конфигурацинном файле, т.е. в ручную).
if(($_FILES['file']['size']<8192000))
{
// устанавливаем папку загрузки
$uploaddir = '../../doc/';
// устанавливаем имя файла
$uploadfile = $uploaddir . basename($_FILES['file']['name']);
echo '<pre>';
// загружаем файл и перемещаем в заданную директорию
if(!is_resource(zip_open($_FILES['file']['tmp_name'])))
{
die("Загруженный файл не является ZIP-архивом");
}
else
{
if (move_uploaded_file($_FILES['file']['tmp_name'], $uploadfile))
{
echo "Файл успшно загружен.";
}
else
{
echo "Ошибка загрузки загрузки.";
}
}
echo 'Отладочная информация:';
print_r($_FILES);
print "</pre>";
}
else
{
echo "Размер принятого файла превысил максимально допустимый размер администратором сайта.";
}
}
else
{
echo "Ошибка загрузки загрузки: ".ErrorUpload($_FILES['file']['error']);
}

// функция определения ошибки загрузки файла
function ErrorUpload($fileerror)
{
// создаем массив ошибок
$err = array(
0=>"Ошибок не возникало, файл был успешно загружен на сервер.",
1=>"Размер принятого файла превысил максимально допустимый размер, который задан директивой upload_max_filesize конфигурационного файла php.ini.",
2=>"Размер загружаемого файла превысил значение MAX_FILE_SIZE, указанное в HTML-форме.",
3=>"Загружаемый файл был получен только частично.",
4=>"Файл не был загружен.",
6=>"Отсутствует временная папка.",
7=>"Отказ в записи файла на диск.",
8=>"Расширение PHP остановило загрузку файла."
);
// возврашаем ошибку
return $err[$fileerror];
}
?>

небольшие файлы грузит хорошо, а вот условия что указаны вверху вот такая хрень
  • 0

robot

robot
  • Пользователь PRO
  • 2 652 сообщений
  • Репутация: 85


Оформление форума – IPBSkins.ru