3

同時負荷が高く、ファイルロックにハングアップすることなくファイルI / Oを処理する必要があるLAMPサーバーに推奨されるベストプラクティスは何ですか?

つまり、名前と電子メールアドレスが多数含まれているSUBSCRIBERS.CSVファイルが必要だとします。しかし、私は人々が購読を解除するためのフォームに記入できるようにしたいと思います。登録解除アクションは、そのファイルをスクロールして、特定の電子メールアドレスに一致する行が存在する場合はそれを削除します。これはPHPの簡単な作業のように見えますが、一度に10人が購読を解除しようとし、10人の新しい購読者が追加された場合はどうなりますか?LinuxまたはPHPが私が思っているよりも優れている場合を除いて、PHPで問題が発生し、ファイルロックが原因でエラーが発生する可能性があると思います。

クライアントがデータベーステーブルではなくCSVファイルを必要としていることに注意してください。データベーステーブルでは、これは問題にはなりませんが、ファイルI / Oとして、潜在的な問題が発生する可能性があります。

(ところで、個人情報の盗難を防ぐために、.htaccessトリックを使用して、名前を推測してWeb経由でCSVをダウンロードできないようにします。アクセスするには、PHPスクリプトまたはFTPのいずれかでのみアクセスする必要があります。)

4

2 に答える 2

8

クライアントがCSVファイルとインターフェイスする必要がある場合は、CSVファイルをデータストアとして実際に使用する必要はありません。代わりに、データベースを使用し、データベースですべての作業を行い、PHPにオンデマンドでCSVファイルを生成させます。

したがって、クライアントがhttp://example.com/SUBSCRIBERS.CSVにアクセスする必要がある場合は、 PHPにSUBSCRIBERS.CSVを処理させ、次のようなものを使用します。

header("Content-type: text/csv");
$data = get_subscriber_data();
foreach ($data as $row) {
  // $row is an array of columns
  print implode(',', $row);
}
于 2010-12-27T02:14:46.677 に答える
1
header("Content-type: text/csv");
$data = get_subscriber_data();
$fp = fopen('php://stdout', 'w'); 
foreach ($data as $row) {
  // $row is an array of columns
  fputcsv($fp, $row);
}
fclose($fp);
于 2010-12-27T03:02:08.560 に答える