justus Posted April 23, 2004 Report Share Posted April 23, 2004 Ir skripts kurš labo txt failu ar tam padotajiem datiem, es gribēju zināt kas notiek ja to skriptu darbina vairaku juzeri, reizē vai vins netiek bojāts? Link to comment Share on other sites More sharing options...
Venom Posted April 23, 2004 Report Share Posted April 23, 2004 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 More sharing options...
justus Posted April 23, 2004 Author Report Share Posted April 23, 2004 un ar faila lasīšanu izmantojot file() vai file_get_contents() tur jau problēmu nekādu nav, vai arī var rasties? Link to comment Share on other sites More sharing options...
Aleksejs Posted April 23, 2004 Report Share Posted April 23, 2004 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 More sharing options...
justus Posted April 23, 2004 Author Report Share Posted April 23, 2004 (edited) 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 April 23, 2004 by justus Link to comment Share on other sites More sharing options...
Aleksejs Posted April 23, 2004 Report Share Posted April 23, 2004 Un uz to pirmo, kura dēļ tiek veidots lock fails gaidīs? Link to comment Share on other sites More sharing options...
justus Posted April 23, 2004 Author Report Share Posted April 23, 2004 (edited) nu nezinu gan :huh: :huh: :huh: Edited April 23, 2004 by justus Link to comment Share on other sites More sharing options...
Venom Posted April 24, 2004 Report Share Posted April 24, 2004 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 More sharing options...
Recommended Posts