मैंatomically एक फाइल करने के लिए एक लाइन जोड़कर और इसे बनाने अगर यह
append($path, $data)
कि
- $ फ़ाइल बनाता है (प्रवेश के प्रयोजनों के लिए) एक समारोह बनाने के लिए कोशिश कर रहा हूँ मौजूद नहीं है यदि यह अस्तित्व में नहीं है और
- परमाणु रूप से $ डेटा जोड़ता है।
यह है
- समर्थन उच्च संगामिति,
- समर्थन लंबे तार और
- संभव के रूप में performant किया जाना है।
अब तक सबसे अच्छा प्रयास है:
function append($file, $data)
{
// Ensure $file exists. Just opening it with 'w' or 'a' might cause
// 1 process to clobber another's.
$fp = @fopen($file, 'x');
if ($fp)
fclose($fp);
// Append
$lock = strlen($data) > 4096; // assume PIPE_BUF is 4096 (Linux)
$fp = fopen($file, 'a');
if ($lock && !flock($fp, LOCK_EX))
throw new Exception('Cannot lock file: '.$file);
fwrite($fp, $data);
if ($lock)
flock($fp, LOCK_UN);
fclose($fp);
}
यह ठीक काम करता है, लेकिन यह एक काफी जटिल हो रहा है। क्या ऐसा करने के लिए एक क्लीनर (अंतर्निहित?) तरीका है?
क्या मैं पूछ सकता हूं कि डाउनवोट क्या था? – FtDRbwLXw6
मेरा मानना है कि यह फ़ाइल खोलने के लिए मोड 'एक्स' का उपयोग नहीं करेगा (ओ_एक्ससीएल सी-लैंड में), इसलिए यदि कोई फ़ाइल मौजूद नहीं है तो आपके पास रेस स्थिति हो सकती है। Https://github.com/php/php-src/blob/master/ext/standard/file.c देखें (ऐसा लगता है कि यह केवल 'c' का उपयोग करता है) –
30 अप और सर्वोत्तम उत्तर नहीं। गरीब दुनिया! ': (' –