ugrás a tartalomhoz

Gondjaim a vannak a file-ba mentessel

Moyo · 2006. Már. 17. (P), 16.22
Keszitek egy honlapot, elhelyeztem benne egy szamlalot ami szamolja a latogatok szamat. Ez PHP-be van irva szepen ki is irja azt az erteket ami a kezdo ertek(*.txt-be van tarolva). De a az ertek+1-et mar nem irja bele a file-ba es igy mindig a kezdo erteket irja ki.
Mi lehet a gond???
Valahol be lehet allitani azt hogy a *.txt legyen irhato es olvashato is(rw)??
Koszonom elore is a segitseget
 
1

Gondold végig...

tiku I tikaszvince · 2006. Már. 17. (P), 17.19
Gondold végig hogy mik a lépések.
  • Jön a látogató (elindul a programod).
  • Megnyitod írásra-olvasásra (r+) az értéket tároló txt.
  • A tartalmához hozzáadsz egyet
  • az új értéket megjeleníted
  • az új értéket wisszaírod a fájlba
  • bezárod a fájlt

"Ennyi meg egy bambi"

TikuVoltam
4

Meg igy sem megy

Moyo · 2006. Már. 17. (P), 22.32
Mindent megprobaltam de mostmr egyaltalan nem megy.
Szerinted helyes a kod:
<?php
$File = "szamol.txt";
chmod($File, 0755);
if (file_exists($File))
{
$fp = fopen($File,"r+");
$num = fread($fp, filesize($File));
$db = ord($num);
$db = $db + 1;
echo("Látogatók száma: <B>" . $db . "</B>.");
fwrite($fp, $db);
fclose($fp);
}
?>
5

ord minek?

tiku I tikaszvince · 2006. Már. 18. (Szo), 10.23
Az az ord minek kell? Hogy nem megy? Van hibaüzenet? Mi mindent próbáltál?

Azt is próbáltad, hogy egyszer megnyitod a szamol.txt-t csak olvasásra, elteszed a tartalmát, bezárod, megnyitod megint írásra, és visszaírod az egyel növelt értéket ($db = (int)$num+1;)?
6

ord minek?

tiku I tikaszvince · 2006. Már. 18. (Szo), 10.23
Az az ord minek kell? Hogy nem megy? Van hibaüzenet? Mi mindent próbáltál?

Azt is próbáltad, hogy egyszer megnyitod a szamol.txt-t csak olvasásra, elteszed a tartalmát, bezárod, megnyitod megint írásra, és visszaírod az egyel növelt értéket ($db = (int)$num+1;)?
8

kölcsönös kizárás

Hodicska Gergely · 2006. Már. 19. (V), 23.08
"Ennyi meg egy bambi"

És ha többen használják, akkor ez a megközelítés simán rossz eredményre vezethet. Ilyen esetekben meg kell valósítani, hogy a közösen használt erőforrást ne tudja két kiszolgáló folyamat egyszerre olvasni/írni.


Felhő
9

Igaz

tiku I tikaszvince · 2006. Már. 20. (H), 08.06
...bár ez a "szövegfájlba írjuk a látogatók számát" sem egy modern filozófia :)
Talán az 5. hozzászólásban vázolt módszerrel a közös használat is elkerülhető.

TikuVoltam
10

Ez mit oldana meg?

Hodicska Gergely · 2006. Már. 20. (H), 11.44
Jön két script, kiolvassák az aktuális értéket (ugyanazt!). Majd visszaírják az megnövelt értéket. A két látogatásból így egy lett.


Felhő
11

megint igaz

tiku I tikaszvince · 2006. Már. 20. (H), 13.54
Megint igazad van! De ha minden eshetőségre fel szeretnénk készülni, akkor hagyuk a francba a szöveges fájlt és szedjünk elő egy adatbázist. Ahol minden lapletöltéskr beszúrunk egy sort a statisztika táblába. Így látogatások számát a rekordok számával kapjuk meg.
Ez így már jó megoldásnak? vagy adjunk a kérdezőnek "egy lézerszikét kenyérvágáshoz"? Mindekettővel fel lehet szeletelni a kenyeret... :)

TikuVoltam
13

mikor mire van szükség

Hodicska Gergely · 2006. Már. 20. (H), 14.53
akkor hagyuk a francba a szöveges fájlt és szedjünk elő egy adatbázist.

A szöveges fájlnak is megvan a létjogozultsága. Pl. cache-eléskor is jól jöhet. Ilyenkor is figyelni kell a kölcsönös kizárásra, de itt csak az írást kell szinkronizálni, ami jelen esetben egy kis trükkel (fájlátnevezés) meg lehet könnyedén oldani.

egy lézerszikét kenyérvágáshoz

Ha most neki épp csak látogatók számának tárolása lenne a fontos, akkor csak emiatt DB-t használni lenne a "lézerszike".


Felhő
2

Jogok?

janoszen · 2006. Már. 17. (P), 18.07
Lehet, hogy nincs joga a PHPnak fájlba írni?

- Linux alatt CHmod. Azt hiszem, a PHP a webszerver jogosultságaival fut.
- Windows alatt elvileg nincs gond.
3

win

Fekete Ferenc GDA · 2006. Már. 17. (P), 19.06
windows alatt is lehet gond. Ha ott sincs írási joga, akkor ott sem, tud fájlba írni. De az is lehet,h a script-el van gond.
7

írásjog

Nigi · 2006. Már. 18. (Szo), 11.27
nemrég szivtam én is a hasonlóan. a könyvtarnak is adj írási jogot és gondjaid megoldódnak
12

x

Fekete Ferenc GDA · 2006. Már. 20. (H), 14.33
igen. és windowson file szintű és hálózati jogot is ki kell osztani, amiből egyenesen adódna kaz effektív jogok:) na, nem is olyan rossz az a win, mi?:)
De webszervert azért ne csináljunk belőle.
14

mégez

breakline · 2006. Már. 20. (H), 15.37

<?php
($logfile a file neve pl. valami, a kiterjesztés itt html volt)
if (file_exists("logs/" . $logfile . ".html"))  
  {
  if ($file = fopen ("logs/" . $logfile . ".html",'a'))
   {
    flock($file,2);
    $output="akármi";
    fwrite($file,"$output");
    flock($file,3);  
    fclose($file);
   }
  }
?>
ezt ugyan logolásra írtam, de lehet valamit használhatsz belőle, bár itt nem olvassa ki a régi adatot

üdv
BL
15

Az egyszerű meglodás :D

Anonymous · 2006. Május. 10. (Sze), 16.12
Halihó!
Itt egy elég rövid megoldás a gondodra, régen én is ezt használtam, csak az óta már adatbázisban tárolom az ilyen adatokat (is)...

$file = "counter.tmp";
$handle = fopen($file, "r");
$counter = fread($handle, filesize($file));
fclose($handle);
$counter++;
$handle = fopen($file, "w");
fwrite($handle, $counter);
fclose($handle);

ennyi. a $counter változó tartalmazza a számod, ezt utána egy echoba bedobod, akkor a kiírás is meg van oldva. Lényegében így a fájlodban egyetlen egy szám fog szerepelni. De kezdésként írj bele egy nullát vagy egyet (vagy ha csalni akarsz akkor pl 43526-ot :D)

üdv: eXeCUTor
16

Hibás megoldás

Anonymous · 2006. Május. 10. (Sze), 16.41
Ha jól látom ebben sincs megoldva, hogy egyszerre többen ne próbáljanak/tudjanak ugyan abba a fájlba írni.