8791 sujets

Développement web côté serveur, CMS

Basé sur l'expérience Wordpress, lors de l'installation le système vérifie l'existence du fichier wp-config-sample.php avant de lancer l'installation. Lorsque les informations de connexion sont entrées et validées alors un fichier wp-config.php est créé avec les informations du formulaire.

Je suppose donc qu'une copie du fichier est effectuée puis que les informations par défaut sont remplacées. Voir ci-dessous.

// ** MySQL settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define('DB_NAME', 'wordpress');

/** MySQL database username */
define('DB_USER', 'root');

/** MySQL database password */
define('DB_PASSWORD', 'root');

/** MySQL hostname */
define('DB_HOST', 'localhost');


Est-ce bien comment ça que ça fonctionne?

Si j'essaie de reproduire la même chose j'arrive à copier le fichier mais pas à remplacer les valeurs.

Copie du fichier = OK

<?php
// Let's copy config-sample.php and rename to config.php
$configfilesample = "../config-sample.php";
$configfile = "../config.php";

copy($configfilesample,$configfile);


Après je suppose qu'il faut ouvrir le fichier = Oui/Non?
$fh = fopen($configfile, 'w') or die("Can't open file");


Et enfin écrire dessus (rechercher et remplacer) = Marche pas

$dbname = "('DB_NAME', 'wordpress')";
str_replace("wordpress", "AAAAAAA", $dbname);

fclose($fh);


Le bout de code au complet

<?php
// Let's copy config-sample.php and rename to config.php
$configfilesample = "../config-sample.php";
$configfile = "../config.php";

copy($configfilesample,$configfile);

$fh = fopen($configfile, 'w') or die("Can't open file");

$dbname = "('DB_NAME', 'wordpress')";
str_replace("wordpress", "AAAAAAA", $dbname);

fclose($fh);
<?


Et vous comment vous feriez pour accomplir ce genre de chose?
a écrit :
Et vous comment vous feriez pour accomplir ce genre de chose?

1 - Lecture du fichier avec file_get_contents
2 - Rechercher/remplacer à base d'expressions régulières (preg_replace)
3 - Enregistrement du nouveau fichier avec file_put_contents
Genre ça


<?php
	$text = file_get_contents('config-sample.php');

	file_put_contents('config.php', preg_replace('/wordpress/', 'ceci', $text));
?>

Modifié par wind (09 Dec 2010 - 15:21)
- Plus simple
- Plus élégant
- Ça fonctionne
- Que demander de plus?

Ah oui existe-t-il un moyen de cibler la valeur présente d'une variable et de la remplacer. Exemple:
define('DB_NAME', 'nom de la db'); 


Comment cibler 'DB_NAME' et remplacer sa valeur actuelle 'nom de la db'. L'idée c'est d'avoir quelque chose plus flexible si 'nom de la db' évolue dans le temps.

wind et QuentinC merci bien pour vos solutions.
Modifié par olimart (10 Dec 2010 - 00:28)
Non ça ça ne fonctionne pas car ça remplace le "nom de la variable".

Idéalement j'aimerai tester si je peux écrire sur le répertoire avant de procéder.

if --> pas les droits d'écriture sur le dossier
echo "Vérifiez l'accès en écriture sur le dossier"
else file_put_contents('config.php', preg_replace('/wordpress/', ceci, $text));

Mais la question est existe-t-il une commande pour tester l'écriture sur un répertoire?

wind a écrit :

file_put_contents('config.php', preg_replace('/wordpress/', DB_NAME, $text));


?
Ce que tu peux faire :

- Vérifier si tu à les droits sur le dossier is_writable

Avec cette même fonction vérifier si tu a les droits sur le fichier.

is_writable te retourne false si tu n'a pas les droits OU si le fichier/dossier n'existe pas.
Merci bien. Du coup se pose encore une autre question. Si je reprends mon exemple wordpress.
J'ai besoin de déterminer le dossier dans lequel je me trouve. Par défaut il s'appelle wordpress mais si je le renomme. Comment déterminer le dossier racine de mon installation? le fichier config se trouve à la racine mais les fichiers d'installation dans un dossier.

Je pense que c'est cette fonction ci-dessous mais je ne suis pas sur de la comprendre totalement, notamment __FILE__


/** Absolute path to the WordPress directory. */
if ( !defined('ABSPATH') )
	define('ABSPATH', dirname(__FILE__) . '/');


wind a écrit :
Ce que tu peux faire :

- Vérifier si tu à les droits sur le dossier is_writable

Avec cette même fonction vérifier si tu a les droits sur le fichier.

is_writable te retourne false si tu n'a pas les droits OU si le fichier/dossier n'existe pas.
Quand je remplace "DB_NAME" par $servername (ou $_POST["dbserver"]) alors DB_NAME est remplacé par du vide. Tout le texte est là, le remplacement se fait au bon endroit mais c'est vide.

Des idées?

[quote=wind]

file_put_contents('config.php', preg_replace('/wordpress/', DB_NAME, $text));

Modifié par olimart (10 Dec 2010 - 00:34)