У меня есть проект с параноидальным клиентом ... Он обеспокоен тем, что сайт будет разбиваться, если более 200 человек используют сайт одновременно.Параллельные записи файлов PHP
Является ли мой сценарий похожим на то, что он будет собирать данные в порядке? Или файл даст пользователям ошибки?
<?php
if($_POST['name'] && $_POST['email']) {
//file name var
$fileName = "mycsvfile.csv";
//grab from form
$name = $_POST['name'];
$email = $_POST['email'];
//date
date_default_timezone_set("America/Los_Angeles");
$today = date("F j, Y, g:i a");
//set the data we need into an array
$list = array (
array($today, $name, $email)
);
// waiting until file will be locked for writing (1000 milliseconds as timeout)
if ($fp = fopen($fileName, 'a')) {
$startTime = microtime();
do {
$canWrite = flock($fp, LOCK_EX);
// If lock not obtained sleep for 0 - 100 milliseconds, to avoid collision and CPU load
if(!$canWrite) usleep(round(rand(0, 100)*1000));
} while ((!$canWrite)and((microtime()-$startTime) < 1000));
//file was locked so now we can store information
if ($canWrite) {
foreach ($list as $fields) {
fputcsv($fp, $fields);
}
}
fclose($fp);
}
//Send them somewhere...
header('Location: http://alandfarfaraway') ;
}else{
echo "There was an error with your name and email address.";
}
?>
Почему бы не использовать базу данных MySQL? Проще и будет обрабатывать 200 одновременных запросов такого рода довольно быстро и эффективно. –
Запись в файлы таким образом действительно может быть подвержена ошибкам. Вы можете рассмотреть что-то вроде SQLite, если вы не можете использовать обычную базу данных. Тем не менее, без дополнительной информации о ожидаемом трафике и о том, что представляет собой реальная цель, трудно сказать. – Cfreak
Или SQLite, если вы хотите сохранить его простым. На всех: использование базы данных для сохранения данных – KingCrunch