Параллельный файл пишет PHP - PullRequest
2 голосов
/ 16 марта 2012

У меня есть проект с параноидальным клиентом ... Он обеспокоен тем, что сайт может потерпеть крах, если сайт одновременно используют более 200 человек.

Похоже ли, что мой скрипт будет работатьсобирать данные хорошо?Или файл выдаст пользователям ошибки?

<?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.";
}
?>

1 Ответ

1 голос
/ 16 марта 2012

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

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

...