Lecture de Fichier

Shamann
Invité n'ayant pas de compte PHPfrance

19 sept. 2006, 23:38

Bonjour,
J'ai un souci avec un script php que je n'arrive pas à faire.

Mon PB :
------------>
J'ai un fichier Data.php de ce type :

Debut

A
B
C

Fin


Ce que je veux que Mon Script Php fasse :

1 - J'aimerais qu'il me copie TOUT le fichier Data.php SAUF les X dernieres lignes dans un fichier temp.
2 - qu'il rajoute des données ($donnees ="D";) dans temp
3 - Quil rajoute les X dernieres lignes dans temp
4 - Qu 'il efface data.php et quil renome temp en data.php

Voila si vous avez des idees plus simple dite le moi.

Merci.

Eléphant du PHP | 451 Messages

20 sept. 2006, 08:20

Bonjour,

Je ne l'ai pas encore utilisée mais je pense que la fonction file() qui te retourne le contenu d'un fichier dans un tableau devrait te permettre de faire ce que tu veux.
Quand tu auras utilisé cette focntion, tu devrais disposer d'un tableau avec une ligne du fichier par case du tableau. La fonction count() te premettra de connaitre le nombre N de lignes, tu pourras donc écrire les N-X lignes dans temp, rajouter tes données, puis écrire la fin.

Pour le reste, regardes unlink() et rename().

Bonne continuation,
Jpaul
J'essaye d'aider : parfois je fais des erreurs, on me les corrige et j'apprends un peu plus. Super ce forum :)

ViPHP
ViPHP | 3607 Messages

20 sept. 2006, 10:36

Bonjour,
je ne pense pas qu'il soit nécessaire de passer par un fichier temp...
Tu récupères simplement le contenu de data dans un tableau, lignes par lignes...
ensuite tu récupère ta donnée "D" que tu insère au milieu du tableau avant les x dernières lignes...
Tu as donc le contenu de ton ficheir dans le tableau, ensuite il te suffit de réécrire dans le fichier data le contenu de ton tableau

Shamann
Invité n'ayant pas de compte PHPfrance

20 sept. 2006, 20:48

Oki,

Je test tout ca et jvous tiens o jus.

Merci pour l'info des commandes :)

Shamann
Invité n'ayant pas de compte PHPfrance

20 sept. 2006, 21:28

Bon j'ai tester de renvoyer tout dans un tableau.
mais je ne vois et ne Sais pas faire pour la suite.

Si vous pouviez me guider en etant plus explicite ca seré cool =)


Merci

Shamann
Invité n'ayant pas de compte PHPfrance

20 sept. 2006, 21:56

Ce qui pourrait m'aider seré un equivalent de
Tail et head sous unix
et l'équivalent de redirection >>

Invité
Invité n'ayant pas de compte PHPfrance

21 sept. 2006, 11:52

Salut,
J'ai bricolé un truc vite fait :
function send_header () {
print "<!doctype html public \"-//w3c//dtd html 4.0 transitional//en\">";
print "<html>";
print "<head>";
print "   <meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-1\">";
print "<META HTTP-EQU=\"pragma\" CONTENT=\"no-cache\"> ";
print "<META HTTP-EQU=\"Cache-Control\" CONTENT=\"no-cache\"> ";
print "<META HTTP-EQUIV=\"Expires\" CONTENT=\"Tue, 20 Aug 1996 14:25:27 GMT\"> ";
print "   <meta name=\"Generator\" content=\"Microsoft Word 97\">";
print "   <meta name=\"Template\" content=\"C:\PROGRAM FILES\MICROSOFT OFFICE\OFFICE\html.dot\">";
print "   <meta name=\"GENERATOR\" content=\"Mozilla/4.7 [en] (Win98; I) [Netscape]\">";
print "   <title>Compte Cafeti&egrave;re de l'&eacute;quipe maintenance</title>";
print "</head>";
print "<body link=\"#0000FF\" vlink=\"#800080\">";
}

function send_footder () {
print "</body>";
print "</html>";
}

Function InsertInFile($FileName, $line, $InsertString) {
$fp = fopen("MyTmpFile.txt", 'w');
$Tableau=file($FileName);
$l=0;
  while ($l<$line) {
    fwrite($fp, $Tableau[$l]);
    $l++;
  }
  fwrite($fp, $InsertString);
  while ($l<count($Tableau)) {
    fwrite($fp, $Tableau[$l]);
    $l++;
  }
  fclose($fp);)
  unlink($FileName);
  rename("MyTmpFile.txt", $FileName)
}

send_header();
// On va insérer 2 lignes (truc + bidule) dans le fichier test.txt après la ligne 3
InsertInFile("test.txt", 3, "Truc\r\nBidule\r\n"); // \r\n pour windows sur unix \n devrait suffire
send_footder();
En espérant que ça pourra t'aider.
Bonne chance

Shamann
Invité n'ayant pas de compte PHPfrance

21 sept. 2006, 13:27

:)

C'est super ca marche super bien.
Merci beaucoup pour le code j'ai appris des choses.

J'ai juste un souci :p ^^

Ici on ajoute des données APRES la ligne 3, serait possible d'en ajouter AVANT les 3 ou dernieres lignes .... :)

Merci pour tout.


Shamann.

Eléphant du PHP | 451 Messages

21 sept. 2006, 14:43

Salut,
ben il suffit juste de compléter la fonction que je t'ai proposée en lui ajoutant un paramètre optionnel.
prenons h pour head (à partir du début)
et b pour bottom (avant la fin)

Heu... tu peux remplacer h par d pour début et b par f pour fin (je te laisse adapter)...

ca donne :
Function InsertInFile($FileName, $line, $InsertString, $from="h") {
$fp = fopen("MyTmpFile.txt", 'w');
$Tableau=file($FileName);
$l=0;
  switch ($from) {
    case "b":
    case "B":
      $limit=count($Tableau)-$line;
      break;
    default:
    case "h":
    case "H":
      $limit=$line;
      break;
  }
  
  while ($l<$limit) {
    fwrite($fp, $Tableau[$l]);
    $l++;
  }
  fwrite($fp, $InsertString);
  while ($l<count($Tableau)) {
    fwrite($fp, $Tableau[$l]);
    $l++;
  }
  fclose($fp);
  unlink($FileName);
  rename("MyTmpFile.txt", $FileName);
}
Pour mettre 3 lignes avant la fin :
InsertInFile("test.txt", 3, "Truc\r\nBidule\r\n", "B");
Jpaul
J'essaye d'aider : parfois je fais des erreurs, on me les corrige et j'apprends un peu plus. Super ce forum :)

Shamann
Invité n'ayant pas de compte PHPfrance

21 sept. 2006, 23:48

Merchi beaucoup :)

Ca marche impec :D

Té trop fort :wink:

A+

Shamann.

Code : Tout sélectionner

<?php function send_header () { print "<!doctype html public \"-//w3c//dtd html 4.0 transitional//en\">"; print "<html>"; print "<head>"; print " <meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-1\">"; print "<META HTTP-EQU=\"pragma\" CONTENT=\"no-cache\"> "; print "<META HTTP-EQU=\"Cache-Control\" CONTENT=\"no-cache\"> "; print "<META HTTP-EQUIV=\"Expires\" CONTENT=\"Tue, 20 Aug 1996 14:25:27 GMT\"> "; print " <meta name=\"Generator\" content=\"Microsoft Word 97\">"; print " <meta name=\"Template\" content=\"C:\PROGRAM FILES\MICROSOFT OFFICE\OFFICE\html.dot\">"; print " <meta name=\"GENERATOR\" content=\"Mozilla/4.7 [en] (Win98; I) [Netscape]\">"; print " <title>Compte Cafeti&egrave;re de l'&eacute;quipe maintenance</title>"; print "</head>"; print "<body link=\"#0000FF\" vlink=\"#800080\">"; } function send_footder () { print "</body>"; print "</html>"; } Function InsertInFile($FileName, $line, $InsertString, $from="h") { $fp = fopen("MyTmpFile.txt", 'w'); $Tableau=file($FileName); $l=0; switch ($from) { case "b": case "B": $limit=count($Tableau)-$line; break; default: case "h": case "H": $limit=$line; break; } while ($l<$limit) { fwrite($fp, $Tableau[$l]); $l++; } fwrite($fp, $InsertString); while ($l<count($Tableau)) { fwrite($fp, $Tableau[$l]); $l++; } fclose($fp); unlink($FileName); rename("MyTmpFile.txt", $FileName); } send_header(); InsertInFile("test.txt", 10, "truc\r\nbidule\r\n", "B"); send_footder();

Shamann
Invité n'ayant pas de compte PHPfrance

22 sept. 2006, 00:35

Bonjour,

dans l'exemple nous avons ca :

Code : Tout sélectionner

InsertInFile("test.txt", 10, "truc\r\nbidule\r\n", "B");
Dans mon cas pratique, je recupère le mot "truc et bidule" dans une variable via un formulaire.

J'ai tester ces differentes méthode mais en vain ...

Code : Tout sélectionner

InsertInFile("test.txt", 10, $data, "B");

Code : Tout sélectionner

InsertInFile("test.txt", 10, $_POST['data'], "B");

Merci de vos conseils :p


Shamann

Shamann
Invité n'ayant pas de compte PHPfrance

22 sept. 2006, 00:53

J'ai trouvé :roll:

InsertInFile("test.txt", 10, "$data\r\n", "B");

j'avais fait une erreur dans mon formulaire aussi :roll: