Ik heb een file::write methode gemaakt en gebruik ik al enige tijd in mijn code. echter bij mijn parser kwam die soms in de problemen. Hij voegde dan karakters toe aan het eind van het bestand (in het geval van mijn parser is dat .php). Hierdoor gaat het parsen fout omdat dan het bestand niet ingeladen kan worden (parse error).Nu gaat ie single threaded redelijk tot goed, maar als ik de parser multithreaded wil aansturen gaat het vaak fout en niet altijd, met dezelfde code.Nu heb ik ook een file::put methode gemaakt die file_put_contents uitvoerd, daarbij gaat het wel altijd goed.Nu is mijn vraag, wat zou ik kunnen verbeteren aan mijn code waardoor die wel multithreaded goed gaat.
Wat ik al gevonden of geprobeerd heb
file:write file::put laten uitvoeren.
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
| /** * @throws FileWriteException * @bug may write wrong files in Parse:Build:write in a multithreading situation . solution use file::put */ public static function write($url='', $data=''){ $url = (string) $url; $data = (string) $data; $resource = @fopen($url, 'w'); if($resource === false){ return $resource; } flock($resource, LOCK_EX); for ($written = 0; $written < strlen($data); $written += $fwrite) { $fwrite = fwrite($resource, substr($data, $written)); if ($fwrite === false) { break; } } flock($resource, LOCK_UN); fclose($resource); if($written != strlen($data)){ throw new FileWriteException('File.write failed, written != strlen data....'); } else { return $written; } } |
Wat ik al gevonden of geprobeerd heb
file:write file::put laten uitvoeren.