Unindefined index

Mammouth du PHP | 725 Messages

28 févr. 2012, 05:13

upload simple en php, ne renvois aucune erreur, sauf "failed":
<?php
// auth Ext
$authExt = array('png', 'gif', 'jpg', 'jpeg');
$authExtList = implode(', ',$authExt);
$uploadTo = $path2avatars.'/';
echo $uploadTo.'<br />';
$maxAvatarSize = '100000';

 	if(IsSet($_POST['submitAvatar']))
 	{

$avatarName = basename($_FILES['avatarFile']['name']);
$avatarTmp  = basename($_FILES['avatarFile']['tmp_name']);
$avatarSize = basename($_FILES['avatarFile']['size']);
$avatarType = basename($_FILES['avatarFile']['type']);
$avatarError = basename($_FILES['avatarFile']['error']); // list error codes

$AvatarExt = pathinfo($_FILES['avatarFile']['name'], PATHINFO_EXTENSION); // get file extension
//echo $AvatarExt.'<br />';
$AvatarExt = strtolower($AvatarExt);
//echo $AvatarExt.'<br />';
//echo 'avatar size: '.$avatarSize.'<br />';

//$RegexAllow = '/[a-zA-Z0-9]/';
if(!in_array($AvatarExt, $authExt))
{
	$fileError[] = 'ext non autorise: '.$authExtList;
}
	
	switch($avatarError)
	{
		case 1:
		$fileError[] = 'vol';
		break;
		
		case 2:
		$fileError[] = 'vol';
		break;
		
		case 3:
		$fileError[] = 'partiel';
		break;
		
		case 4:
		$fileError[] = 'vide';
		break;
		
		case 6:
		$fileError[] = 'tmp invalid';
		break;
		
		case 7:
		$fileError[] = 'ecriture disk';
		break;
		
		case 6:
		$fileError[] = 'ext';
		break;
		
		
	}
	
	if(IsSet($fileError) && (is_array($fileError) && count($fileError > 0)))
	{
		foreach($fileError as $fK=>$fV)
		{
			echo $fV.'<br />';
		}
	}
	else
		 
	 $avatarUpload = move_uploaded_file($avatarTmp, $uploadTo.$avatarName);
	 
	 if($avatarUpload)
	 {
	 	        echo "success";
            } else {
            	echo 'failed';
	}

}
}

?>

<form name="formAvatar" method="POST" action="<?php echo $current_url; ?>" enctype="multipart/form-data">
<input type="hidden" name="MAX_FILE_SIZE" value="<?php echo $maxAvatarSize; ?>" />
photo
<input type="file" name="avatarFile" class="avatarFile" />
<input type="submit" name="submitAvatar" class="submitAvatar" value="Envoyer" />
<br />
100 KB, <?php echo $authExtList; ?>.
</form>

ViPHP
xTG
ViPHP | 7331 Messages

28 févr. 2012, 10:52

Si filename n'est pas valide, rien ne se passe, et move_uploaded_file() retournera FALSE.
Si filename est un fichier téléchargé, mais que pour une raison quelconque, il ne peut être déplacé, rien ne se passe, et move_uploaded_file() retourne FALSE. De plus, une alerte sera affichée.
Donc si aucun warning c'est que $avatarTmp est invalide.
Affiches ce qu'il y a dans $AvatarError, car vu que tu n'as pas de default dans ton switch il est possible que tu ais oublié un cas.

Mammouth du PHP | 725 Messages

28 févr. 2012, 11:52

echo $avatarError retourne 0 et print_r retourne
Array ( [avatarFile] => Array ( [name] => 419659_311818595533498_100001160796473_815789_178108306_n.jpg [type] => image/jpeg [tmp_name] => /var/log/tmp/phpJWxGNW [error] => 0 [size] => 14489 ) ) failed

Mammouth du PHP | 725 Messages

28 févr. 2012, 12:12

j'ai mis:
$avatarTmp  = $_FILES['avatarFile']['tmp_name'];
j'ai enleve le basename et ca marche, est ce le code est correct?

ViPHP
xTG
ViPHP | 7331 Messages

28 févr. 2012, 12:35

Ah bah oui j'avais pas tilté pour le basename()...
Si tu utilises cette fonction tu ne gardes que le nom du fichier... Et tu perds son emplacement...
Donc vouloir transférer un fichier temporaire sans en connaitre l'emplacement cela ne peut pas se faire. :P

Mammouth du PHP | 725 Messages

28 févr. 2012, 13:04

Ah bah oui j'avais pas tilté pour le basename()...
Si tu utilises cette fonction tu ne gardes que le nom du fichier... Et tu perds son emplacement...
Donc vouloir transférer un fichier temporaire sans en connaitre l'emplacement cela ne peut pas se faire. :P
merci a vous