Rename de fichier impossible.

Eléphanteau du PHP | 45 Messages

16 sept. 2008, 16:30

Objectifs : Je veux créer une image à la volée avec GD ('test.png') avec une police de caractères sélectionnée
('$file' soit ici a.ttf). Puis faire n'importe quelle manipulation du fichier '$file' exemple dans ce cas un rename. Or j'ai comme réponse :
Warning: rename(a/a.ttf,test/new.ttf) [function.rename]: Permission denied.
Avec :

<?php
class A
{
	function Create_preview_png($file)
	{
		$save  = 'test.png';
		$im    = imagecreate(600,71);
		$white = imagecolorallocate($im, 255,255,255);
		$black = imagecolorallocate($im, 0,0,0);
		imagettftext($im, 20, 0, 10, 45, $black, 'test/'.$file, 'Ceci est un test');
		imagepng($im,$save,5);
		imagedestroy($im);
		unset($im);
		unset($white);
		unset($black);
		self::Affichage_preview();
	}
	
	function Affichage_preview()
	{
		echo'<img src="test.png" width="600" height="71">';
	}
}
$t = new A();
$t->Create_preview_png('a.ttf');

rename('test/a.ttf','test/new.ttf');
?>

Je dois oublier de détruire une variable ou quelque chose comme cela, j'avourais que là je séche, si vous aviez une piste ?

Merci par avance !

Mammouth du PHP | 1353 Messages

16 sept. 2008, 16:48

Bonjour,

Peut etre un probleme de CHMOD dans le dossier test, avec le droit de créer mais pas de modifier ?
Tell me and I forget. Teach me and I remember. Involve me and I learn.

Eléphanteau du PHP | 45 Messages

16 sept. 2008, 17:03

Bonjour,

Peut etre un probleme de CHMOD dans le dossier test, avec le droit de créer mais pas de modifier ?
Bonjour à toi, non je suis formel pas de problème de CHMOD, j'ai trouvé la ligne qui casse les noisettes ! Il suffit de la commentée pour que cela fonctionne.

class A
{
	function Create_preview_png($file)
	{
		$save  = 'test.png';
		$im    = imagecreate(600,71);
		$white = imagecolorallocate($im, 255,255,255);
		$black = imagecolorallocate($im, 0,0,0);
		//imagettftext($im, 20, 0, 10, 45, $black, 'test/'.$file, 'Ceci est un test');
		imagepng($im,$save,5);
		imagedestroy($im);
		unset($im);
		unset($white);
		unset($black);
		self::Affichage_preview();
	}
	
	function Affichage_preview()
	{
		echo'<img src="test.png" width="600" height="71">';
	}
}
$t = new A();
$t->Create_preview_png('test/a.ttf');

rename('test/a.ttf','test/new.ttf');


Ceci fonctionne, mais par contre je ne peux plus écrire dessus... Peut être libérer la mémoire de imagettftext, mais comment ?

Alors je viens de trouver une solution :

class A
{
	function Create_preview_png($file)
	{
		$save  = 'test.png';
		$im    = imagecreate(600,71);
		$white = imagecolorallocate($im, 255,255,255);
		$black = imagecolorallocate($im, 0,0,0);
                // Il faut passer imagettftext() dans une variable pour pouvoir la détruire pas la suite !
		$a     = imagettftext($im, 20, 0, 10, 45, $black, 'test/'.$file, 'Ceci est un test');
		imagepng($im,$save,5);
		imagedestroy($im);
		unset($a);
		unset($im);
		unset($white);
		unset($black);
		self::Affichage_preview();
	}
	
	function Affichage_preview()
	{
		echo'<img src="test.png" width="600" height="71">';
	}
}
$t = new A();
$t->Create_preview_png('test/a.ttf');

rename('test/a.ttf','test/new.ttf');


Voilà c'était pas bien compliqué en fait !