[Résolu] remplacer le début d'un fichier

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [Résolu] remplacer le début d'un fichier

par neeteex » 17 mai 2009, 10:22

Le problème, c'est que je n'ai pas encore trouvé le moyen d'effacer simplement.

Encore un essai brutal et infructueux :
	$restore = fopen('restore.php', 'r+');
	$tab=file('restore.php');  // récupère le contenu
	file_put_contents('restore.php', $text); // efface le fichier pour mettre la config seulement
	
	fseek ($restore, 0, SEEK_END) ; // place le pointeur à la fin

	for ($i = 50 ;  $i<1050 ; $i ++ ) // écrit 1000 lignes à partir de la ligne 50
		 fputs ($restore, $tab[$i]) ;

	fclose($restore);
Je vais faire un nouveau test avec preg_replace, que je mettrai ici.

EDIT :

EXCELLENT,

Après bien des essais j'ai construit ma regex en utilisant un commentaire :
$text = "<?php\n".'$config = '. var_export($new_config, true) . ";//config file should not be changed manually ?>" ;

$subject = file_get_contents ('restore.php') ;
$replacement = $text;
$pattern = "#^<\?php.*;//config file should not be changed manually \?>#s"; 

$restore = preg_replace ($pattern, $replacement, $subject, $limit=1); // remplacement
file_put_contents('restore.php', $restore); // écrit le tout dans restore.ph
Résolu, merci Calimero :D

par Calimero » 16 mai 2009, 22:49

Soit tu réécris tout le fichier, soit tu poses dans ton fichier des balises qui te serviront à marquer l'espace effaçable, que tu attraperas via une expression régulière.

Attention au choix des balises cependant, il ne faudrait pas qu'elles se retrouvent au milieu de ton tableau généré ;-)

[Résolu] remplacer le début d'un fichier

par neeteex » 16 mai 2009, 22:42

Bonjour,

Je me heurte à un problème qui ressemble à un problème de débutant mais... je commence pourtant à me débrouiller normalement :oops:

J'écris la config d'une appli dans un fichier. Cette config est un tableau, écrit grace à la fonction var_export(). Le hic, c'est que la config ne fait pas toujours le même nombre de lignes, et encore moins de caractères. Du coup le plus simple serait de réserver une trentaine de lignes pour l'écrire. Mais si je vois très bien comment écrire des lignes, je ne trouve rien d'efficace pour "effacer" car la fonction fputs() ajoute en insertion.

Mon dernier essai aura été le suivant :
<?php
	$text = "<?php\n".'$config = '. var_export($new_config, true) . ';' ;// la config est là

	$text .= file_get_contents ("restore.php", $offset= -500); // ajoute le reste du fichier

	file_put_contents('restore.php', $text); // remplace le tout dans le fichier

?>
J'ai aussi touillé du côté de file() et fputs() mais sans succès...

Vous feriez comment ? :?: