Не се качва - пак проблеми с upload

misho

Registered
Вече уж всичко е наред по upload скрипта, но има още за дооправяне. Проблема е, че кото избера по-голям по обем файл (около 2МВ или повече) файла не се качва. Не е от ограничението за размера на файла, защото проблема идва още преди да се достигне проверката. Всъщност ми изписва Не е избран файл за качване! при тази проверка. :?

Код:
if (!is_uploaded_file($file_tmp)) //Ако не е избран файл за качване
 {$errors.="Не е избран файл за качване!<br />"; $error[] = "yes";}
 
С move_uploaded_file няма ли да кача файла? Трябва od въведа дестинация, но каква?
Код:
<input type="file" name="filetoupload">
$file_tmp = $_FILES['filetoupload']['tmp_name']; 
$file_name = $_FILES['filetoupload']['name'];
Всъщност това същата работа ли ще ми свърши?
Код:
if (empty($file_tmp)) //Ако не е избран файл за качване
 {$errors.="Не е избран файл за качване!<br />"; $error[] = "yes";}
 
а с по-малки качва ли се ?

ако да виж в php.ini да ли е разрешено да се качва повече
upload_max_filesize 2M 2M Обиновенно е толкова :) направи го на повече
 
Да, с малките няма проблеми. В php.ini нямаше никакво ограничение. Сложих php_value upload_max_filesize 10M, но няма промяна. :?
 
if (empty($_FILES['myfile']['tmp_name'])) { // ако не е избрал файл
{$errors.="Не сте избрал файл!<br />"; $error[] = "yes";}
}
Всъщност това е проверката ,дали си избрал файл за качване.
А тази проверка трябва да е
if (!is_uploaded_file($file_tmp)) //Ако файлът не е качен на сървъра
{$errors.="Избраният файл не можа да се качи!<br />"; $error[] = "yes";}
 
Ами той няма кака да е качен, тъй като аз го качвам, едва след като мине тази и другите проверки (за размер и име).

edit:
Дори с това ми казва, че не е избран файл:
Код:
 if (empty($file_tmp)) //Ако не е избран файл за качване
 {$errors.="Не е избран файл за качване!<br />"; $error[] = "yes";}
 
Давай им на променливите едно echo ,виж коя липсва ,виж къде липсва и така нататък , с тези 2/3 реда код не се вижда нищо сгрешено ,може да е по-нагоре/надолу в кода :idea:
 
Проблемът е точно от настройките на PHP.
Създай си някакъв файл със съдържание:

Код:
<? 
phpinfo();
?>

и разгледай следните параметри:

* file_uploads
* upload_max_filesize
* max_input_time
* memory_limit
* max_execution_time
* post_max_size

upload_max_filesize най-вероятно ще е 2 MB, а post_max_size - 8 MB.

Можеш да пробваш с ini_set('max_upload_filesize', 8388608); , където 8388608 е 8 MB.

Съмнява ме в php.ini да нямаш подобна опция, но ако нямаш можеш да опиташ с php_value upload_max_filesize 10M, който трябва да напъхаш в .htaccess, а не във PHP файла.
 
$file_temp е празна, а $file_size е 0. :?
Код:
$site_link = $settings['index_url']; //Лйнк към сайта ви, където се намира ъплоад формата (отзад не слагайте /) 
		$upload_dir = "img/obiavi/"; //Може да се смени с друга папка , която вие си пожелаете 
		$size_bytes = 4194304; //Големината на файла в bytes 
		$size_echo = $size_bytes/1048576;
		$size_echo = number_format($size_bytes, 2);
		$extlimit = "yes"; //Да има ли ограничение за формата на файла (yes/no) 
		$limitedext = array(".gif",".jpg",".png",".jpeg"); //Разрешени файлове за качване 
		$ext = strrchr($file_name,'.'); //Вземане на разширението на файла
		
		if (!is_dir("$upload_dir")) //Дали папката в която ще се качват файловете съществува или не
			{echo "Грешка: Папката <b>($upload_dir)</b> не съществува";} 
		if(isset($_POST['uploadform'])) // Когато полето на формата е попcлнена, тогава ще се качват нещата
			{ 
			 $file_tmp = $_FILES['filetoupload']['tmp_name']; 
			 $file_name = $_FILES['filetoupload']['name']; 
			 //Взимане на размера на файла 
			 $file_size = $_FILES['filetoupload']['size'];
	 
			 if (empty($file_tmp)) //Ако не е избран файл за качване
				{$errors.="Не е избран файл за качване!<br />"; $error[] = "yes";}
			 else
				{
				 if ($file_size > $size_bytes) //Проверява дали файла не е прекалено голям
					{
					 $file_size = $file_size/1048576;
					 $file_size = number_format($file_size, 2);
					 $errors .= 'Файлът е твърде голям ('.$file_size.' MB). Трябва да бъде под <b>'.$size_echo.'</b> MB.<br />'; $error[] = "yes";
					}
				 $ext = strrchr($file_name,'.'); //Вземане на разширението на файла
				 if (($extlimit == "yes") && (!in_array(strtolower($ext),$limitedext))) //Ако има ограничение за формата на файла и ако формата не е сред позволените
					{$errors.="Можете да качвате само изображения (.gif, . jpg, .png, .jpeg).<br />"; $error[] = "yes";} 
		 
				 // Задаване на ново име на файла
				 $file_name = str_replace(' ', '_', $file_name); //На мястото на интервала (space) се слага "_"
				 $rand = rand(0000,9999);
				 $new_file_name = $rand.$file_name;
				 $new_file_name = md5($new_file_name);

				 // Ако не желаем да променяме името
				 //$new_file_name = $file_name;

				 if(file_exists($upload_dir.$new_file_name)) //Проверка, дали няма файл с такова име. Ако има, шифроваме името още веднъж, за да избегнем съвпадения на имената
					{$new_file_name = md5($new_file_name);}
				}
			 if (empty($code))
				{$errors.='<b>Потвърдителен код:</b> полето е празно<br />'; $error[] = "yes";}
			 if (!empty($code))
				{
				 if(md5($code).'a4xn' == $_COOKIE['tntcon'])
					{setcookie('tntcon','');}
				 else {$errors.='<b>Потвърдителен код:</b> кода не съвпада<br />'; $error[] = "yes";} 
				}
		
			 if (!empty($error))
				{$result = '<center><div style="width: 660px; border: 1px solid #ff8c8c; background-color: #f5d5d5; padding: 5px;" align="left">'.$errors.'<br /><a href="'.$_SERVER[PHP_SELF].'" title="Върни се назад!"><b>Назад</b></a></div></center>';}

			 if (sizeof($error) == 0 || !in_array("yes",$error))
				{
				 //Вземане на URL адрес към снимката
				 $photo_url = $site_link.$upload_dir.$new_file_name.$ext; 
				 
				 // Мести оригиналния файл на съвъра
				 move_uploaded_file($file_tmp,$upload_dir.$new_file_name.$ext);
				 
				 // Оразмерява качения файл и го замества с новия
				 require_once 'functions.php';
				 $img = new Image($site_link.$upload_dir.$new_file_name.$ext);
				 
				 if ( $img->IsValidImage() )
					{
					 // Картинката е валидна
					 // Оразмерява я до максимално зададените размери, като запазва пропорциите. Параметрите са ширина, височина и дали да запази снимката, ако е с по-малки от зададените размери.
					 $img->ReiszeProportional(800, 600, true);
					 // Записва картинката под същото име и формат. Втори пъръметър - формат (jpg). Има и трети параметър - качество.
					 $img->Save('img/obiavi/'.$new_file_name.$ext, IMAGETYPE_JPEG);
					}
				else // невалидна картинка
					{echo 'Има грешка при качването на файла.';}
				
				// Показва снимката и дава лйнк 
			    $result = '
					 <center>
					  <a href="'.$settings['index_url'].'obiavi_add.php?photo_url='.$photo_url.'" target="_self" title="Добави снимката към обявата!">
					  <img src="'.$photo_url.'" border="0" alt="Натиснете тук, за да добавите снимката към Вашата обява!" /></a><br /><br />
					  <a href="'.$settings['index_url'].'obiavi_add.php?photo_url='.$photo_url.'" target="_self" title="Добави снимката към обявата!"><strong>Добави файла към обявата!</strong></a><br /><br />
					 </center>';				  
				}
			}
		else // Ако формата не е попълнена
			{
			 // Проверяване на всички наши заявки (да не се надвишава големината и да е един от избраните типове файлове от нас)
			 for ($i = 0; $i < count($limitedext); $i++)
				{
				 if (($i<>count($limitedext)-1))
					{$commas = ", ";}
				 else
					{$commas = "";}
				 list($key, $value) = each($limitedext);
				 $all_ext .= $value.$commas;
				}
?>
		<form action="" enctype="multipart/form-data" method="POST">
         <table class="table" cellpadding="0" cellspacing="0" width="680">	  
		  <tr><td id="td"><input type="file" name="filetoupload"></td></tr>
		  <tr><td id="td"><img src="validate.php?<?php echo rand(0,9999);?>" alt="" width="50" height="24" style="text-align: absbottom;" /> <i style="font-size: 10px; color: #ff0000;">(задължително поле)</i><br /><input type="text" class="input" id="input" name="code" title="Въведете потвърдителния код!" /></td></tr>
		  <tr><td id="td"><br /><b style="color: #FF0000;">Внимание!</b> Чрез тази страница можете да качвате снимки на птици, които да използвате в обявата си. Моля, не злоупотребявайте!</tr></td>     
		  <tr><td><br /><input type="submit" name="uploadform" class="googlesearch_button" value="Качи"></tr></td>
		 </table>
  		</form>
		<?php
			}// Крлай на else
		
		if(isset($_POST['uploadform']))
			{echo $result;}
		?>
 
_PHP_ каза:
Проблемът е точно от настройките на PHP.
Създай си някакъв файл със съдържание:

Код:
<? 
phpinfo();
?>

и разгледай следните параметри:

* file_uploads
* upload_max_filesize
* max_input_time
* memory_limit
* max_execution_time
* post_max_size

upload_max_filesize най-вероятно ще е 2 MB, а post_max_size - 8 MB.

Можеш да пробваш с ini_set('max_upload_filesize', 8388608); , където 8388608 е 8 MB.

Съмнява ме в php.ini да нямаш подобна опция, но ако нямаш можеш да опиташ с php_value upload_max_filesize 10M, който трябва да напъхаш в .htaccess, а не във PHP файла.
Прав си, точно такива са настройките. Но когато сложиш php_value upload_max_filesize 10M в .htaccess файла ми докара грешка 500.
 
Код:
<FilesMatch ФАЙЛЪТ.html> 
 php_value post_max_size "40M" 
 php_value upload_max_filesize "160M" 
</FilesMatch>

Я виж така дали няма да е по-добре? Пъхай в .htaccess и имай в предвид, че ако стане трябва да съобразиш всеки един от параметрите, които написах горе, с останалите.

EDIT: Както казах опитай и с това:

Код:
ini_set('meemory_limit', '96M');
ini_set('post_max_size', '64M');
ini_set('upload_max_filesize', '64M');

В php файла го навираш.
 
Я виж какво ти записва в error log-a на apache.

EDIT: Пробвай с:

Код:
<IfModule mod_php5.c>
php_value upload_max_filesize 100M
php_value post_max_size 100M
</IfModule>

Зависи каква версия на PHP използваш(4 или 5).
Това горе ще промени ограничението на 100 MB, както предполагам знаеш :)

Пробва ли 2-рия вариант, който ти дадох?

Можеш да напишеш това:

Код:
SecFilterScanPOST Off

в .htaccess, но не ти го препоръчвам. Ще изключи проверката на mod_security за POST-овете.
 
Със всички тези, без най-последното (което не съм изпробвал) няма промяна и phpinfo() показва, че максималния размер е 2МВ. :lol:
Това е в error_log:
Код:
[19-Jan-2010 23:18:57] PHP Warning:  Cannot modify header information - headers already sent by (output started at ***upload.php:42) in ***upload.php on line 148
На 42-ри ред започва HTML кода, а 148-ми е последния от тези редове:
Код:
if (!empty($code))
 {
   if(md5($code).'a4xn' == $_COOKIE['tntcon'])
    {setcookie('tntcon','');}
   else {$errors.='<b>Потвърдителен код:</b> кода не съвпада<br />'; $error[] = "yes";} 
 }
 
Този лог за друга грешка пее. Нека я оставим настрана нея.
Значи казваш, че нямаш това: upload_max_filesize в php.ini?
XAMPP ли използваш?
 
_PHP_ каза:
Този лог за друга грешка пее. Нека я оставим настрана нея.
Значи казваш, че нямаш това: upload_max_filesize в php.ini?
XAMPP ли използваш?
Видях си другата грешка. :)
А файла е качен на хостинга ми. В php.ini нямаше upload_max_filesize. Добавих следния ред, но въпреки това phpinfo() ми показва, че ограничението си остава 2MB. :lol:
Код:
upload_max_filesize 10M
 
Най-после си открих грешката (не без чужда помощ). Пропуснал съм едно =. Че и никой друг не забеляза. :D
upload_max_filesize = 10M

Благодаря за помощта! :)
 

Back
Горе