ecriture d'url

Mammouth du PHP | 1311 Messages

03 août 2005, 12:09

salut
tout d'abort je precise que j'ai pas chercher sur le forum(acces tres tres limité)
voila j'ai plusieurs problemes
le premier c'est l'enregistrement d'une url, mon probleme vient du type d'oblique à utiliser (/ ou \) pour passer sur toutes les machines (unix et win) à priorie ce serait les obliques / mais elles ne marche pas sous firefox et windows (voir code ci dessous )
le deuxieme est comment recupere le chemin du dossier ou le sript s'execute
$_SERVEUR['script_Name'].'/./';
et le troisieme vient du tuto sur l'upload j'ai des problemes apparement avec la fonction
    $dest_fichier = preg_replace('/([^.a-z0-1]+)/i', '_', $dest_fichier);
elle coupe parfois (1 fois sur 3)les noms des fichers exemple :
IMG1209 devient IMG1_


voici le code ou l'on retrouve les erreurs
if(isset($_FILES['fichier']) and isset($_POST['send']))
{
  // params
  unset($erreur);
  $largeur="150";// en pixel
  $extensions_ok = array('png', 'gif', 'jpg', 'jpeg');
  $taille_max = 1000000;
  $dest_dossier ='E:/essai template/eurotrading/developpement/site/gallerie/'.$_POST['theme'];
  // vérifications
  if( !in_array( substr(strrchr($_FILES['fichier']['name'], '.'), 1), $extensions_ok ) )
  {
  $erreur='format';
	header('location:'.$_SERVER['PHP_SELF'].'?erreur='.$erreur);
  }
  elseif( file_exists($_FILES['fichier']['tmp_name']) 
          and filesize($_FILES['fichier']['tmp_name']) > $taille_max)
  {
  $erreur='taille';
	header('location:'.$_SERVER['HTTP_REFERER'].'?erreur='.$erreur);
  }
  // copie du fichier
  if(!isset($erreur))
  {
    $dest_fichier = basename($_FILES['fichier']['name']);
    // formatage nom fichier
    // enlever les accents
    $dest_fichier = strtr($dest_fichier, 'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ', 'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
    // remplacer les caracteres autres que lettres, chiffres et point par _
    $dest_fichier = preg_replace('/([^.a-z0-1]+)/i', '_', $dest_fichier);
	//verifiaction du dossier theme
	if(!is_dir($dest_dossier))
		{mkdir($dest_dossier,0770);}
	else
    // copie du fichier
    {move_uploaded_file($_FILES['fichier']['tmp_name'], $dest_dossier.'/'.$dest_fichier);}
	//creation de la miniature
	//ouverture du l'image originale
	//retourne le type de l'image
	$typesource=substr(strrchr($_FILES['fichier']['name'], '.'), 1);
	if($typesource=='jpeg' or $typesource=='jpg' )
			$miniature= imagecreatefromjpeg($dest_dossier.'/'.$dest_fichier);
	elseif($typesource=='png')
			$miniature= imagecreatefrompng($dest_dossier.'/'.$dest_fichier);
	else
	{
		$erreur='format';
		header('location:'.$_SERVER['HTTP_REFERER'].'?erreur='.$erreur);
	}
	if($miniature == "" )
	{
		$erreur='creation';
			header('location:'.$_SERVER['HTTP_REFERER'].'?erreur='.$erreur);
	}else{
		if(!is_dir($dest_dossier.'/miniature'))//ouverture du repertoire miniature
			mkdir($dest_dossier.'/miniature',0770);
		//recuperation des proportions
		$imagex=imagesx($miniature);
		$imagey=imagesy($miniature);
		$ratio=$imagex/$imagey;
		$largeurdestination=$largeur;
		$hauteurdestination=$largeur/$ratio;
		$im = imagecreatetrueColor($largeurdestination, $hauteurdestination)  
		or die ("Erreur lors de la création de l'image"); 
		imagecopyresampled($im,$miniature,0,0,0,0, $largeurdestination, $hauteurdestination, $imagex, $imagey); 
		if($typesource=='jpeg' or $typesource=='jpg' )
				imagejpeg($im, $dest_dossier.'/miniature/'.$dest_fichier);
		elseif($typesource=='png')
				imagepng($im,$dest_dossier.'/miniature/'.$dest_fichier);
	}
		//enregitrement base de donnée
	if(isset($erreur))
			{header('location:'.$_SERVER['HTTP_REFERER'].'?erreur='.$erreur);}
	else{
		$conn=mysql_connect('localhost','root','') or die ("erreur:".mysql_error());
		$db=mysql_select_db('gallerie',$conn) or die ("erreur:".mysql_error());
		
		$theme=addslashes($_POST['theme']);
		$descriptif=addslashes($_POST['descriptif']);
		$commentaire=addslashes($_POST['commentaire']);
		$urlphoto=addslashes($dest_dossier.'/'.$dest_fichier);
		$urlminiature=addslashes($dest_dossier.'/miniature/'.$dest_fichier);
		$query1='INSERT INTO photo (urlphoto,urlminiature,theme,descriptif) VALUES ("'.$urlphoto.'","'.$urlminiature.'","'.$theme.'","'.$descriptif.'")';
		$res1=mysql_query($query1) or die ("erreur:".mysql_error());
		$query2='SELECT idphoto from photo order by idphoto desc limit 0,1';
		$res2=mysql_query($query2) or die ("erreur:".mysql_error());
		$resultat=mysql_result($res2,0,'idphoto');
		$query3='INSERT INTO commentaire (commentaire,idphoto) VALUES ("'.$commentaire.'","'.$resultat.'")';
		$res3=mysql_query($query3) or die ("erreur:".mysql_error());
		mysql_close();
		}
  }
}
merci

Mammouth du PHP | 19672 Messages

03 août 2005, 12:40

SAlut,
pour le problème des obliques, ça ne dépend pas du navigateur ni même du système client mais du système serveur puisque, si j'ai à peu près suivi ce que tu veux faire, les images seront sur le serveur et c'est à partir de là que ton script va les récupérer pour les afficher dans les pages. Ceci dit, on utilise le "/".

Pour le problème avec preg_replace, l'expression régulière n'est pas sensée couper quoi que ce soit mais remplacer tout caractère non alpphanumérique par un trait de soulignement "_". Si tu as des noms de fichiers dont les remplacement affectent des caractères alphanumériques, c'est peut-être que certains de ces caractères sont envoés avec le mauvais encodage ? ou alors il y a un espace dans le nom...?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 63 Messages

03 août 2005, 12:43

le deuxieme est comment recupere le chemin du dossier ou le sript s'execute
$dir = dirname(__FILE__);

Mammouth du PHP | 1311 Messages

03 août 2005, 12:47

apres quelques teste le probleme des oblique serait du html ou de la config du client (car l'affichage des photo fonctionne bien sous ie)
pour le probleme de chemin c'est aussi resolu
et je voudrai savoir si il y a un moyen de s'assurer qu'aucune entete soient envoyé

Eléphant du PHP | 63 Messages

03 août 2005, 14:09

La bufférisation de sortie devrait te permettre de t'assurer que rien n'est envoyé tant que tu ne le souhaites pas.

Mammouth du PHP | 1311 Messages

03 août 2005, 21:24

merci je vais regarder ca