Проблем със upload система

amgcompany

Registered
Здравейте,реших да си направя една системка за качване на снимки.И като си избера снимката и като натисна submita снимката ми се качва,но ми излиза и това :
Strict Standards: Only variables should be passed by reference in D:xampp2\xampp\htdocs\upload\upload.php on line 13
Strict Standards: Only variables should be passed by reference in D:xampp2\xampp\htdocs\upload\upload.php on line 18
А ето го и кода на съответните редове :
PHP:
13:
if (in_array(strtolower(end(explode(".", $_FILES['pic']['name']))), $ex_pic))
18:
$exp_pic = end(explode(".", $_FILES['pic']['name']));
 
Ок ето ти го готово цялото парче код.
PHP:
$var = explode(".",$_FILES['pic']['name']);
$var = end($var);
$var = strtolower($var);
if (in_array($var, $ex_pic)){
$exp_pic = $var;
}
 
пробвай така:

PHP:
$arr = explode(".",$_FILES['pic']['name']);
$var = (count($arr)>=1) ? strtolower($arr[count($arr)-1]) : "";
if (in_array($var, $ex_pic)){
    $exp_pic = $var;
}
 
Пак не става ето целия код ако ще помогне
PHP:
	if(isset($_POST['dai']) && !empty($_FILES['pic']['name']))
					{
					
						if(in_array(strtolower(end(explode(".",$_FILES['pic']['name']))),$exp_pic))
						{
							if($_FILES['pic']['size']>0 && $_FILES['pic']['size'] <=($pic_size * 2048))
							{
								$file_copy = preg_replace("/([\/])+/", "\\1", $file_copy."/");
								$ex_pic = end(explode(".",$_FILES['pic']['name']));
								$new_name_pic = new_name($ex_pic);
								
								while(file_exists($file_copy.$new_name_pic)) {$new_name_pic = new_name($exp);}
								
								if(@copy($_FILES['pic']['tmp_name'], $file_copy.$new_name_pic))
								{
									mysql_query("INSERT INTO pics SET user='$id',avatar='$file_copy.$new_name_pic'") or die(mysql_error());
									header("location:upload.php?id=$id");
								}
							}
							else
							{
								$error = "Много голям размер";
							}
						}
						else
						{
							$error = "Грешно разширение";
						}
					}
 
Сложи преди
if(in_array(strtolower(end(explode(".",$_FILES['pic']['name']))),$exp_pic))

едно
print_r($_FILES);

и дай резултата
Също пусни и формата, с която ги качваш (<form> </form>)
 
Array ( [pic] => Array ( [name] =>snimka.jpg [type] => image/jpeg [tmp_name] => D:\xampp\tmp\php568C.tmp [error] => 0 [size] => 431463 ) )
Strict Standards: Only variables should be passed by reference in D:\xampp\htdocs\site\pages\upload.php on line 64

Strict Standards: Only variables should be passed by reference in D:\xampp2\xampp\htdocs\site\pages\upload.php on line 69
HTML:
				<form enctype="multipart/form-data" method="post">
				
					<input type="file" name="pic"/><br/>
					<input type="submit" name="dai" value="Качи снимката"/>
					
				</form>
Config.php

PHP:
$exp_pic = array("jpeg","gif","png","jpg");
	$pic_size = 1000;
	$file_copy = "pics/";
 
Я виж така дали ще стане:



PHP:
      if(isset($_POST['dai']) && !empty($_FILES['pic']['name']))
                                        {
                                        
                                                if(in_array(strtolower(explode(".",$_FILES['pic']['name'])),$exp_pic))
                                                {
                                                        if($_FILES['pic']['size']>0 && $_FILES['pic']['size'] <=($pic_size * 2048))
                                                        {
                                                                $file_copy = preg_replace("/([\/])+/", "\\1", $file_copy."/");
                                                                $ex_pic = end(explode(".",$_FILES['pic']['name']));
                                                                $new_name_pic = new_name($ex_pic);
                                                                
                                                                while(file_exists($file_copy.$new_name_pic)) {$new_name_pic = new_name($exp);}
                                                                
                                                                if(@copy($_FILES['pic']['tmp_name'], $file_copy.$new_name_pic))
                                                                {
                                                                        mysql_query("INSERT INTO pics SET user='$id',avatar='$file_copy.$new_name_pic'") or die(mysql_error());
                                                                        header("location:upload.php?id=$id");
                                                                }
                                                        }
                                                        else
                                                        {
                                                                $error = "Много голям размер";
                                                        }
                                                }
                                                else
                                                {
                                                        $error = "Грешно разширение";
                                                }
                                        }
 
Уф - много съм зле:

if(in_array(strtolower(explode(".",$_FILES['pic']['name'])),$exp_pic))

го смени с:
if(in_array(strtolower(pathinfo( $_FILES['pic']['name'], PATHINFO_EXTENSION )),$exp_pic))


и да я затваряме тая дискусия
 
Стига с тоя end бе човек. Предаване на параметри с указател е нечистоплътна практика - мани я тая функция. Това не сработи ли:

if(in_array(strtolower(pathinfo( $_FILES['pic']['name'], PATHINFO_EXTENSION )),$exp_pic))
 
Това работи ама аз нали с онзи ред взимам разширенито на снимката и като го махна то се получава ето така:
PHP:
                                                if(in_array(strtolower(pathinfo( $_FILES['pic']['name'], PATHINFO_EXTENSION )),$exp_pic))
                                                {
                                                        if($_FILES['pic']['size']>0 && $_FILES['pic']['size'] <=($pic_size * 2048))
                                                        {
                                                                $file_copy = preg_replace("/([\/])+/", "\\1", $file_copy."/");
                                                                
                                                                $new_name_pic = new_name($exp_pic);
                                                                
                                                                while(file_exists($file_copy.$new_name_pic)) {$new_name_pic = new_name($exp);}
                                                                
                                                                if(@copy($_FILES['pic']['tmp_name'], $file_copy.$new_name_pic))
                                                                {
                                                                        mysql_query("INSERT INTO pics SET user='$id',avatar='$file_copy.$new_name_pic'") or die(mysql_error());
																		$error = "Снимката беше качена успшно";
                                                                }
                                                        }
И в папката не ми се появява снимката докато одеве ми се появяваше.
 
Ей така си вземи разширението:
$extension = strtolower(pathinfo( $_FILES['pic']['name'], PATHINFO_EXTENSION ));

и след това можеш да го проверяваш с:

if (in_array($extension,$exp_pic))
 

Back
Горе