8792 sujets

Développement web côté serveur, CMS

Bonjour à tous !

Alors voilà je vous explique ma requête Smiley biggrin

Je suis en train de développer un petit script pour un cms et c'est l'installation qui me pose problème.
En effet je souhaiterais via un fichier d'install que les fonction d'upload par défaut de tous les modules du cms soient remplacées par un include tout bête qui inclura a la place ma nouvelle fonction d'upload.

Voilà le code mis au point:
<?php
$ncontent = '<?php balibalo("nk_secure/function_upload.php"); ?>';
$ncontent = str_replace("balibalo","include", $ncontent);

if (file_exists("nuked.php"))
{
	$dir = opendir("modules");
	
	while ($module = readdir($dir))
	{
		$filename = "modules/" . $module . "/index.php";
			
			if (file_exists($filename))
			{
				chmod ($filename, 0777);
					
				if (is_writable($filename))
				{
				
                                        [#red]Code recherché pour realiser ce que je veux[/#]
						
					echo "Module " . $module . " patché avec succès !<br />";
				}
				else
				{
					echo "Erreur lors de l'écriture dans le fichier index.php du module " . $module . " !<br />";
				}
				
				chmod ($filename, 0644);
			}
			else
			{
			echo "Le fichier index.php du module " . $module . " est mal installé<br />";
			}
	}
	
	closedir($dir);
	
	unlink("install.php");
}
else
{
	echo "Vous devez placer install.php à coté de nuked.php !";
}

?>


Donc en gros ce que je voudrait c'est une explication sur comment faire pour que dans mon install php recherche dans $filename le bout de code php suivant afin de le remplacer par mon $ncontent, soit une include toute bête:
$content = '
<?php
	$filename = "' . $_FILES['fichiernom']['name'] . '";
	$filesize = "' . $_FILES['fichiernom']['size'] . '";
	
	if ($filename != "" && $filesize <= 100000)
	{	
            $f = explode(".", $filename);
            $end = count($f) - 1;
            $ext = $f[$end];

            if ($ext == "jpg" || $ext == "jpeg" || $ext == "JPG" || $ext == "JPEG" || $ext == "gif" || $ext == "GIF" || $ext == "png" || $ext == "PNG")
            {
		$url_avatar = "upload/User/" . time() . "." . $ext;
		move_uploaded_file("' . $_FILES['fichiernom']['tmp_name'] . '", $url_avatar) or die ("<br /><br /><div style=\"text-align: center;\"><b>Upload file failed !!!</b></div><br /><br />");
		@chmod ($url_avatar, 0644);
            }
            else
            {
		bliblibli "<br /><br /><div style=\"text-align: center;\">" . _BADFILEFORMAT . "</div><br /><br />";
		redirect("index.php?file=User&op=edit_account", 5);
		closetable();
		footer();
		exit();
            }	

	}
	else if ($filename != "")
	{
		bliblibli "<br /><br /><div style=\"text-align: center;\">" . _FILETOOBIG . "</div><br /><br />";
		redirect("index.php?file=User&op=edit_account", 5);
		closetable();
		footer();
		exit();
	}
	else if ($avatar != "")
	{
            $ext = strrchr($avatar, '.');
            $ext = substr($ext, 1);

            if (!eregi(".php", $avatar) && !eregi(".htm", $avatar) && (eregi("jpg", $ext) || eregi("jpeg", $ext) || eregi("gif", $ext) || eregi("png", $ext)))
            {
		$url_avatar=$avatar;
            }
            else
            {
		bliblibli "<br /><br /><div style=\"text-align: center;\">" . _BADFILEFORMAT . "</div><br /><br />";
		redirect("index.php?file=User&op=edit_account", 5);
		closetable();
		footer();
		exit();
            }
	}
	else
	{
            $url_avatar = "";
	}
?>';
$content = str_replace("bliblibli","echo", $content);


Et ce quelque soit la ligne ou il se trouve dans $filename.

Je sais faire un remplacement tout bete via str_replace mais dans ce cas il faudrait pouvoir remplacer carrément tout un bout de code contenant sauts de ligne et php, donc c'est ca qui me pose problème.

J'aurais aimé si possible une réponse accompagnée d'un exemple Smiley biggol

Merci à ceux qui prendrons un moment pour m'aider Smiley cligne
Modifié par T!GeR (27 Jun 2006 - 12:07)
Administrateur
tu peux utiliser preg_replace('/texteàremplacer/ism',$remplacement,$source), mais je pense que la méthode n'est pas idéale.

il serait plus pratique de définir des fonctions à l'avance et de les appeler dans certains cas en fonction de la configuration. remplacer des bouts de code dans les scripts est un peu bancal à mon goût (avis personnel).
Moi se que j'ai du mal à digérer ses de fair des upload 'car le fichier peut être écrit'

le teste tombe dénue au vue de l'objectif...

ensuite ton bout de ocde n'est pas une fonction.

si tu inclue direct ta page ce code s'éexécutera.. mais je pense que tu ne veux pas que l'autre aprtie du fichie rs'exécute c ça ?

en ce cas fait un fichier en deux parties avec un DEFINE

IF (CMS_INSTALED):

//code du fichier en question
else:

//ta fonction upload
endif;


pour le reste "éxécuter" du code à la voler c'est eval() qu'il faut utiliser.
Hello T!GeR et bienvenue sur Alsacréations Smiley smile ,

Je crains bien que ce sujet n'ait aucun rapport avec ce qui est attendu dans ce salon Smiley ohwell
A moins que je me trompe (ce qui est possible), ta question n'a strictement aucun lien avec les Standards.

Je vais donc fermer ce sujet (si tu as des soucis, explique-moi tout par Message Prive) et t'orienter vers les forums PHP généralistes évoqués dans le lien que je t'ai donné.