PHP : Automodification d'un script
new morning
Messages postés
133
Statut
Membre
-
new morning Messages postés 133 Statut Membre -
new morning Messages postés 133 Statut Membre -
Bonjour,
Voici la version courte d'un script plus long qui ne marche pas : en principe, au rechargement, le contenu du tableau devrait avoir changé si ça fonctionnait comme je le souhaite. Malheureusement, il semble que la fonction var_export, qui "Retourne la représentation de la variable lorsque le paramètre return est utilisé et évalué à TRUE", renvoit bien quelque chose qui ressemble à la string "array ( 'nom' => 'charlie', 'message' => 'bonjour', )" mais qui n'est pas une string, ou du moins n'est pas interprété comme tel lorsque str_replace est censée changer la vieille valeur contre une nouvelle valeur.
Par quelle commande dois-je passer, si ce n'est pas par https://www.php.net/manual/fr/function.var-export.php ?
Mon code raccourcis :
Voici la version courte d'un script plus long qui ne marche pas : en principe, au rechargement, le contenu du tableau devrait avoir changé si ça fonctionnait comme je le souhaite. Malheureusement, il semble que la fonction var_export, qui "Retourne la représentation de la variable lorsque le paramètre return est utilisé et évalué à TRUE", renvoit bien quelque chose qui ressemble à la string "array ( 'nom' => 'charlie', 'message' => 'bonjour', )" mais qui n'est pas une string, ou du moins n'est pas interprété comme tel lorsque str_replace est censée changer la vieille valeur contre une nouvelle valeur.
Par quelle commande dois-je passer, si ce n'est pas par https://www.php.net/manual/fr/function.var-export.php ?
Mon code raccourcis :
<?php $ce_script = basename($_SERVER['PHP_SELF']); $tableau = array ( 'nom' => 'charlie', 'message' => 'bonjour', ) ; $autre_tableau = array ( 'nom' => 'paul', 'message' => 'salut', ); print_r ($tableau) ; $old = Var_export($value, true); $new = Var_export($other_value, true); $content=file_get_contents($ce_script); $modif_content = str_replace($old, $new, $content); $file2=fopen($ce_script,'w+'); fwrite($file2,$modif_content); fclose($file2); ?>
A voir également:
- PHP : Automodification d'un script
- Easy php - Télécharger - Divers Web & Internet
- Expert php pinterest - Télécharger - Langages
- Retour à la ligne php ✓ - Forum PHP
- Alert php - Forum PHP
- Retour a la ligne php ✓ - Forum PHP
2 réponses
Salut,
Au lieu de $_SERVER['PHP_SELF'], utilise la constante __FILE__
Comme ça au lieu d'essayer d'ouvrir http://domaine.com/ton_script.php, il va ouvrir /usr/local/http.../ton_script.php
Ca fait une grosse différence: par http il va ouvrir la page rendue à l'utilisateur et non le code php.
Et l'écriture ici ne peut qu'échouer puisque tu essaies d'écrire sur un fichier contenu dans une url.
Dernière chose: il est toujours lragement préférable de modifier des données plutôt que du code. Tu devrais modifier un fichier de données plutôt qu'un fichier php.
Au lieu de $_SERVER['PHP_SELF'], utilise la constante __FILE__
Comme ça au lieu d'essayer d'ouvrir http://domaine.com/ton_script.php, il va ouvrir /usr/local/http.../ton_script.php
Ca fait une grosse différence: par http il va ouvrir la page rendue à l'utilisateur et non le code php.
Et l'écriture ici ne peut qu'échouer puisque tu essaies d'écrire sur un fichier contenu dans une url.
Dernière chose: il est toujours lragement préférable de modifier des données plutôt que du code. Tu devrais modifier un fichier de données plutôt qu'un fichier php.
Comment utiliser la constante _FILE_ ? Par un define ?
Ca n'est pas lié à mon pb en tout cas : en fait ce qui se passe est que la "représentation" renvoyée par Var_export est Array ( [nom] => paul [message] => salut ) au lieu de array ( 'nom' => 'paul', 'message' => 'salut', )
La question est donc : est-ce faisable de générer une chaine correspondant à la définition initiale du tableau ?
fonction ($tableau) pour renvoyer array ( 'clef1' => 'valeur1', 'clef2' => 'valeur2', 'clef3' => 'valeur3',)
Sinon, comment ça se passe lorsque l'on travail sur un fichier de config séparé ? Le problème doit être le même non ? Il doit bien falloir remplacer des valeurs obsolètes par des valeurs nouvelles, non ?
Ca n'est pas lié à mon pb en tout cas : en fait ce qui se passe est que la "représentation" renvoyée par Var_export est Array ( [nom] => paul [message] => salut ) au lieu de array ( 'nom' => 'paul', 'message' => 'salut', )
La question est donc : est-ce faisable de générer une chaine correspondant à la définition initiale du tableau ?
fonction ($tableau) pour renvoyer array ( 'clef1' => 'valeur1', 'clef2' => 'valeur2', 'clef3' => 'valeur3',)
Sinon, comment ça se passe lorsque l'on travail sur un fichier de config séparé ? Le problème doit être le même non ? Il doit bien falloir remplacer des valeurs obsolètes par des valeurs nouvelles, non ?