Error PHP - Only variables should be passed by reference

Discutii despre script-uri si coduri PHP-MySQL, precum si lucru cu XML in PHP.
cadou
Mesaje: 328

Error PHP - Only variables should be passed by reference

Am modificat un cod de upload (am adaugat o redimensionare) dar si inainte si dupa modificati primesc o eroare.

Cod: Selectaţi tot

session_start();

if(isset($_SESSION['nume']))
{
$savefolder = 'poza-profil';
$max_size = 5000;
$allowtype = array('jpg', 'jpeg');

$rezultat = '';
// Daca este primit din formular un fisier valid
if(isset($_FILES['myfile']))
{ // daca nu e selectat nici un fisier sa dea eroare
if($_FILES['myfile']['name'] == '')
{ $rezultat = '<img src=/imagini/stare-error.png> <font color=red>Alege o poza!</font>'; }

// daca e selectat fisieru, spor la incarcat 
else if(strlen($_FILES['myfile']['name'])  > 2) 
{ 
if(isset($_FILES['myfile'])) {
  // Verifica daca fisierul are tipul de extensie permis
  $type = end(explode(".", strtolower($_FILES['myfile']['name'])));
  if (in_array($type, $allowtype)) {
    // Verifica daca fisierul are marimea permisa
	if ($_FILES['myfile']['size']<=$max_size*1000) {
      // Daca nu sunt erori in procesul de copiere
      if ($_FILES['myfile']['error'] == 0) {
	    // Seteaza locatia si numele pt. incarcare pe server
		$id = $_SESSION['id'];
		$folder = 'poza-profil/';
		$thefile = $folder . $id. '.0.'. $type;
// redimensionare poza // 
function fn_resize($image_resource_id,$width,$height) {
$target_width =1000;
$target_height =1000;
$target_layer=imagecreatetruecolor($target_width,$target_height);
imagecopyresampled($target_layer,$image_resource_id,0,0,0,0,$target_width,$target_height, $width,$height);
return $target_layer;
}

$source_properties = getimagesize($_FILES['myfile']['tmp_name']);
list($width, $height) = getimagesize($_FILES['myfile']['tmp_name']);
    $file_width=$width;
    $file_height=$height;
if($source_properties[0] > 1000 AND $source_properties[1] > 1000) {   
$image_resource_id = imagecreatefromjpeg($_FILES['myfile']['tmp_name']);  
$target_layer = fn_resize($image_resource_id,$source_properties[0],$source_properties[1]);

if(!imagejpeg($target_layer, $thefile))
{
          $rezultat = '<img src=/imagini/stare-error.png>
            Sa intamplat ceva, nu stiu ce este, revin-o peste cateva minute pentru a 
            schimba poza de profil! Daca problema persista contacteaza-ne!';
}
        else {
          // Returneaza succes
		  $rezultat = '<img src=/imagini/stare-succes.png>
<font color=green>Poza ta de profil a fost incarcata cu succes, aceasta va aparea pe site dupa ce o va 
aproba un administrator al site-ului, daca aceasta respecta Termenii si conditiile site-ului!</font>';
        }


}
// end redimensionare poza //		
      }
    }
  }
  else { $rezultat = '
  <br><font color=red> <img src=/imagini/stare-error.png> 
  Fisierul <font color=blue>'. $_FILES['myfile']['name']. '</font> 
  nu are tipul de extensie permis, se accepta doar format .jpg sau .jpeg de maxim 5 MB</font>'; }
}
}
} 
}
// daca e delogat sa dea eroare //
else
{
$rezultat = '<img src=/imagini/stare-error.png> <font color=red>Pentru a schimba poza de profil trebuie sa fi logat pe site. Reincarca aceasta pagina !!!</font>';
}

// Codeaza cu 'urlencode()' variabila $rezultat si o returneaza in 'onload', intr-un tag BODY
$rezultat = urlencode($rezultat);
echo '<body onload="parent.doneloading(\''.$rezultat.'\')"></body>';
Dar primesc un error_log in folderul in care am fisierul de upload la linia 21, aceasta linie este:

Cod: Selectaţi tot

  $type = end(explode(".", strtolower($_FILES['myfile']['name'])));
 
In pagina de upload nu primesc eroare, codul merge ok, incarca, face ce trebuie, numai ca se creaza un fisier denumit error_log si imi spune asa:

Cod: Selectaţi tot

PHP Strict Standards:  Only variables should be passed by reference in /.../.../up.php on line 21 

MarPlo Mesaje: 4343
Incearca asa, schimba linia de cod:

Cod: Selectaţi tot

$type = end(explode(".", strtolower($_FILES['myfile']['name'])));
Cu acest cod:

Cod: Selectaţi tot

$ar_fname = explode('.', strtolower($_FILES['myfile']['name']));
$type = end($ar_fname);

cadou Mesaje: 328
Multumesc Marplo !!!
Done :) :) :)