Autor | Zpráva | ||
---|---|---|---|
phpcko Profil * |
#1 · Zasláno: 16. 1. 2014, 22:40:51
Dobrý den,
Na webu používám skript, který slouží jako počítadlo určitých akcí na webu. $dollarsx = file_get_contents("../../totalR.txt"); $fp = fopen ("../../totalR.txt", "w"); fwrite ($fp, $dollarsx+1); fclose ($fp); Zapisuje se tam často i přes tisíc zápisů +1 za den, ale už dvakrát se mi stalo, že se číselná hodnota v souboru vynulovalo a začalo se počítat od znovu. Čím to může být? |
||
Jan Tvrdík Profil |
#2 · Zasláno: 16. 1. 2014, 22:42:29
phpcko:
„Čím to může být?“ Tím, že ten skript není thread safe. |
||
Davex Profil |
Viz
• Atomicita operací • Atomické operace se soubory • Atomické operace ještě jednou Nejvhodnější by bylo použít na to počítání databázi, která to řeší sama. |
||
phpcko Profil * |
#4 · Zasláno: 17. 1. 2014, 00:54:53 · Upravil/a: phpcko
Děkuji za rady. Nestačilo by použít file_put_contents místo Fopen? file_put_contents by mělo být rychlejší...
Jde mi tedy především o to aby se soubor nevynuloval, když by občas byly dva zápisy +1 najednou a jeden se ignoroval tak to není takový problém. |
||
juriad Profil |
#5 · Zasláno: 17. 1. 2014, 01:08:01
phpcko:
Tím si nepomůžeš. Viz komentář http://cz1.php.net/manual/en/function.file-put-contents.php#82934 |
||
Časová prodleva: 6 dní
|
|||
Zelináč Profil * |
#6 · Zasláno: 22. 1. 2014, 13:08:07
Mám obdobný problém a výše uvedené odkazy mne nepomohly :(
Chtěl bych pomocí file_put_contents(); ukládat textový soubor text.log ke kterému může kdykoliv přistupovat jiná aplikace. Soubor text.log bych potřeboval několikrát denně přepsat aktuálními daty a potřebuji vědět jak to mám ošetřit aby nedošlo k nějaké kolizi, kdyby čtecí aplikace začala číst v době kdy je soubor text.log právě aktualizován a není ještě "kompletně uložen".... aby počkala až bude dokončen zápis…. Jak nato? Děkuji |
||
Alphard Profil |
#7 · Zasláno: 22. 1. 2014, 13:17:32
Použil bych hotové řešení z Nette doc.nette.org/cs/2.1/atomicity.
|
||
Zelináč Profil * |
#8 · Zasláno: 22. 1. 2014, 13:33:47 · Upravil/a: Zelináč
to mi ale za boha nefunguje!
Warning: file_put_contents(safe://test.txt) [function.file-put-contents]: failed to open stream: Invalid argument in ..... Kvůli této jediné funkci přeci nebudu nasazovat celý framework? To nejde řešit v prostém PHP na několik řádků kódu? |
||
DJ Miky Profil |
#9 · Zasláno: 22. 1. 2014, 13:48:46
Třída
SafeStream z Nette nezávisí na žádné jiné třídě, můžeš ji použít klidně samostatně bez zbytku frameworku. Jenom nezapomeň protokol zaregistrovat (SafeStream::register(); ).
|
||
Zelináč Profil * |
#10 · Zasláno: 22. 1. 2014, 14:25:25
Díky, ala na localhostu mi to nefachá:
$finale="Nějaký text a tak...."; require("SafeStream.php"); SafeStream::register(); file_put_contents('safe://a.txt', $finale); : Warning: rename(C:\xampp\htdocs\www\a.txt~~0.631266138493.tmp,C:\xampp\htdocs\www\a.txt) [function.rename]: File exists in C:\xampp\htdocs\www\SafeStream.php on line 160 |
||
Jan Tvrdík Profil |
#11 · Zasláno: 22. 1. 2014, 14:49:41
Zelináč:
Nemáš náhodou PHP starší než 5.3.0? |
||
Zelináč Profil * |
#12 · Zasláno: 22. 1. 2014, 15:33:48
https://github.com/nette/nette/releases/download/v2.0.14/NetteFramework-2.0.14-PHP5.2.zip
Toto jsem stáhnul a na web-serveru (5.2.17) mi to už jede :). Akorát na localhostu nikoliv (5.2...) ale to nevadí......... Takže děkuji. |
||
Časová prodleva: 11 let
|
0