Jump to content
php.lv forumi

Faila redigesanas.


justus

Recommended Posts

pēc laika prioritātes

 

rediģēts nozīmē kamēr ir atvērts fopen() un nav uztaisīts fclose()

 

ja viens ieglabā un pēc tam ieglabā otrs, saglabājas otrā versija

ja viens ieglabā kamēr ieglabā otrs, atkarīgs no sistēmas - vai nu gaida kamēr saglabājās viens un tad raksta pa virsu otro utml

 

vari veidot savu sistēmu

vari lietot flock()

ja faili tiek pārrakstīti, flock nestrādā (jo būtībā faila neeksistē) un var taisīt pašam savu sys, piem:

 

pirms sāk rediģēt $file uztaisa $file.'.lock';

rediģē

saglabā

izdzēš $file.'.lock'

 

otrs pirms sākt rediģēt pārbauda, ja eksistē $file.'.lock', tad vai nu atgriež, ka šobrīd fails ir aizņemts, vai nu rekursīvi izsauc raskstīšanas procedūru kādu laiku nosnaudoties [sleep()] u.t.t.

Link to comment
Share on other sites

otrs pirms sākt rediģēt pārbauda, ja eksistē $file.'.lock', tad vai nu atgriež, ka šobrīd fails ir aizņemts, vai nu rekursīvi izsauc raskstīšanas procedūru kādu laiku nosnaudoties [sleep()]u.t.t.

Arī šajā gadījumā eksistē varbūtība, ka abi vienlaicīgi mēģina izveidot lock failu.

Link to comment
Share on other sites

bet vai nevar vienkārši

if (!$fp){
$fp=fopen('file.txt');
}
else{
fails jau ir atvērts
exit();
}

jo f-jas specifikācijā rakstīts ka var rasties probēmas

 

to Aleksejs:

jā šāda varbūtība ir, bet tā taču ir ļoti niecīga, uz to failu negaidīs jau rindā kādi 100

cilvēki

Edited by justus
Link to comment
Share on other sites

while(@fileexists($file.'.lock'))

sleep(1);

$fp=fopen($file.'.lock','w');

$fp=fopen($file,'w');

fwrite($fp,$info);

fclose($fp);

unlink($file.'.lock');

 

file() un file_get_contents() tikai nolasa info un netraucē rakstīšanai => vienkārši ja failā tieši tajā brīdī raksta, neko neatgriež

 

tas, ka uz failu atvērts fopen(), nenozīmē, ka viņš ir aizņemts citiem procesiem

$fp=fopen($file,'r');

$fpp=fopen($file,'r');

echo fread($fp,1024);

fseek($fpp,1024);

echo fread($fpp,1024);

fclose($fp);

fclose($fpp);

 

parastā gadījumā neradīs problēmu

 

iedomājies fopen operāciju kā *.txt atvēršanu ar notepadu - atvērt vairākus failus vienlaicīgi tu vari, saglabāt ar mazu laika atstarpi - arī, bet saglabāsies tās izmaiņas, "kurā notepadā" tu nospiedīsi save pēdejo reiz.

Link to comment
Share on other sites

×
×
  • Create New...