2012-03-15 1 views
2

У меня есть проект с параноидальным клиентом ... Он обеспокоен тем, что сайт будет разбиваться, если более 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."; 
} 
?> 
+7

Почему бы не использовать базу данных MySQL? Проще и будет обрабатывать 200 одновременных запросов такого рода довольно быстро и эффективно. –

+3

Запись в файлы таким образом действительно может быть подвержена ошибкам. Вы можете рассмотреть что-то вроде SQLite, если вы не можете использовать обычную базу данных. Тем не менее, без дополнительной информации о ожидаемом трафике и о том, что представляет собой реальная цель, трудно сказать. – Cfreak

+0

Или SQLite, если вы хотите сохранить его простым. На всех: использование базы данных для сохранения данных – KingCrunch

ответ

1

Используйте базу данных, такую ​​как MySQL, чтобы хранить данные. Он будет обрабатывать гораздо более высокую нагрузку.

http://php.net/manual/en/book.mysql.php

+0

Я знаю, как писать в БД, я обычно иду по этому маршруту. Я просто пытался что-то новое. Я поеду по этому маршруту. Спасибо за отличные ответы. – PaulELI

 Смежные вопросы

  • Нет связанных вопросов^_^