Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php]podmiana czesci pliku/zmiennej
Forum PHP.pl > Forum > Przedszkole
Gesior.pl
Pisze skrypt który ma zamieniać fragment pliku na inny fragment i zapisywać plik. Fragment przykładowego pliku:
  1. ...
  2. soul="0" maxdepotitems="1000" lastlogin="1187549183">
  3.  <spawn x="439" y="574" z="7"/>
  4.  <temple x="1000" y="1000" z="7"/>
  5.  <health now="855" max="855" food="0"/>
  6.  <mana now="830" max="830" spent="1567"/>
  7. ...

Skrypt ma zamieniać "<spawn x="439" y="574" z="7"/>" (kazdy plik ma inne pozycje x,y,z) na wpis z innymi losowymi pozycjami, losowanie pozycji i generowanie wpisu mam już zrobione, ale nie wiem jak w zmiennej odszukać i zamienić konkretny fragment pliku. Czyli jaką funkcją mogę zamienić fragment zaczynający sie od
  1. <spawn x=

a kończący się na najbliższym
  1. />

chciałbym zamienić fragment pomiędzy lub razem z tymi kawałkami na wartość innej zmiennej. Przeglądałem wszystkie funkcje z "replace" na php.net, ale nie rozumiem składni typu "[[:alpha:]]+://[^<>[:space:]]+[[:alnum:]/]", więc jakby ktoś mógł mi napisać co w jakiej funkcji wpisać byłbym bardzo wdzięczny.
Czy da się jakoś ustawić atrybuty pliku w PHP? Dokładniej ustawić "Tylko do odczytu" lub wyłączyć "Tylko do odczytu"?
Kod który narazie napisałem:
  1. <?PHP
  2. //ustawienia
  3. $playersdir = "players";
  4. $spawn1x = "5";
  5. $spawn1y = "5";
  6. $spawn1z = "5";
  7. $zasieg1 = "2";
  8. $spawn2x = "55";
  9. $spawn2y = "55";
  10. $spawn2z = "7";
  11. $zasieg2 = "6";
  12. $spawnPRVx = "1";
  13. $spawnPRVy = "1";
  14. $spawnPRVz = "1";
  15. $zasiegPRV = "2";
  16. //ustalenie katalogu w ktorym sa pliki
  17. $d = opendir($playersdir) or die($php_errormsg);
  18. while (false !== ($fs = readdir($d))) {
  19. if ($fs != ".") {
  20. if ($fs != "..") {
  21. //ustalenie nazwy konkretnego pliku
  22. $filename = $playersdir."/".$fs;
  23. //pobranie zawartosci pliku do zmiennej $plik
  24. $open = fopen($filename,'r');
  25. $plik = fread($open,filesize($filename));
  26. //ustalenie konto do sprawdzenia
  27. $konto1 = "account=\"1\"";
  28. $konto2 = "account=\"2\"";
  29. $konto1 = stripslashes($konto1);
  30. $konto2 = stripslashes($konto2);
  31. //sprawdzanie numeru konta w pliku
  32. //jesli konto 1
  33. $numerkonta1 = strpos($plik, $konto1);
  34. if(!empty($numerkonta1)) {
  35. //losowanie pozycji dla konkretnego gracza
  36. $ujemnyzasieg = 0 - $zasieg1;
  37. $rand1 = mt_rand($ujemnyzasieg, $zasieg1);
  38. $rand2 = mt_rand($ujemnyzasieg, $zasieg1);
  39. $spawnx = $spawn1x + $rand1;
  40. $spawny = $spawn1y + $rand2;
  41. //skrypt przemieniajacy ustawienia w teksty dla konta 1
  42. $spawnpoz = "<spawn x=".$spawnx."\" y=\"".$spawny."\" z=\"".$spawn1z."\">";
  43. }
  44. //jesli konto 2
  45. $numerkonta2 = strpos($plik, $konto2);
  46. if(!empty($numerkonta2)) {
  47. echo "konto 2";
  48. //losowanie pozycji dla konkretnego gracza
  49. $ujemnyzasieg = 0 - $zasieg2;
  50. $rand1 = mt_rand($ujemnyzasieg, $zasieg2);
  51. $rand2 = mt_rand($ujemnyzasieg, $zasieg2);
  52. $spawnx = $spawn2x + $rand1;
  53. $spawny = $spawn2y + $rand2;
  54. //skrypt przemieniajacy ustawienia w teksty dla konta 2
  55. $spawnpoz = "<spawn x=".$spawnx."\" y=\"".$spawny."\" z=\"".$spawn2z."\">";
  56.  
  57.  
  58. }
  59. //jesli konto PRV
  60. if(empty($numerkonta1)) {
  61. if(empty($numerkonta2)) {
  62. echo "priv/gm";
  63. //losowanie pozycji dla konkretnego gracza
  64. $ujemnyzasieg = 0 - $zasiegPRV;
  65. $rand1 = mt_rand($ujemnyzasieg, $zasiegPRV);
  66. $rand2 = mt_rand($ujemnyzasieg, $zasiegPRV);
  67. $spawnx = $spawnPRVx + $rand1;
  68. $spawny = $spawnPRVy + $rand2;
  69. //skrypt przemieniajacy ustawienia w teksty dla konta PRV
  70. $spawnpoz = "<spawn x=".$spawnx."\" y=\"".$spawny."\" z=\"".$spawnPRVz."\">";
  71.  
  72.  
  73. }
  74. }
  75. //zamykanie pliku w trybie odczytu
  76. fclose($open) or die($php_errormsg);
  77. //otwieranie pliku w trybie zapisu
  78. $uchwyt = fopen($filename, 'a+');
  79. //znalezc <spawn x= do /> i podmienic na $spawnpoz?
  80.  
  81. //zapis pliku
  82. fwrite($uchwyt, $plik);
  83. //ustawienie w trybie tylko do odczytu?
  84.  
  85. //zamykanie pliku do zapisu
  86. fclose($open) or die($php_errormsg);
  87. }
  88. }
  89. }
  90. ?>
AxZx
moze takie cos pomoze?
  1. <?php
  2. $string = preg_replace("@<spawn x=\"[0-9]+\" y=\"[0-9]+\" z=\"[0-9]+\"/>@", $na_co_zmienic, $string_do_zmiany);
  3. ?>
Gesior.pl
Wielkie dzięki!
Działa tak jak chciałem.
Może mi ktoś jeszcze powiedzieć czy da się zmienić "atrybuty" pliku z skryptu PHP (tak samo na windows i linux czy inne komendy trzeba uzywac). Przed otworzeniem chce zmienić pliki z "Tylko do odczytu" do jakiegos trybu w którym będę mógł zapisywać, a po zapisie chce móc je znowu ustawić tylko do odczytu.
drPayton
http://www.php.net/manual/en/function.chmod.php
Co do różnic między unix/winda:Ja osobiście nie próbowałem, ale w komentarzach do ww funkcji ktoś napisał tak:
Cytat
chmod isnt supposed to work on windows, but 0777 seems to clear the read only flag, and 0444 seems to set the read only flag.

Spróbuj i napisz czy to prawda winksmiley.jpg
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.