課題
PHPで、特定の処理のみ同時実行数を制限したいです。
背景
一般的なフォームをPHPで作成しているのですが、フォームを入力後、入力した内容をもとにPDFを作成する処理を実行します。
PDFを実行する処理は、サーバに負荷がかかるので、同時にPDFを作成するのを5つまで、という風に制限を行いたいです。
前提
- DBは使用できない
- フォームに接続する人数の制限は行いたくない
自分で考えてみた方法
プロセス数を制限する
そもそもPHPのプロセス数を制限すれば、それ以上の同時処理は基本的にできなくなると思いました。
しかし今回は、PDFを作成するという処理のみの同時実行数を制限したく、プロセス数自体には制限を設けたくありません。
(もちろん常識的な範囲での制限は行いますが)
現在の実行数を記録するファイルを作成し、制限する
現在の実行数を管理するファイルを作成し、以下のような処理でカウント数を確認し、制限する。
php
1 2pdfCount = カウンターファイルを読み込む(); 3 4if(pdfCount > 20){ 5 3秒ほどWait(); 6}else{ 7 カウンターファイルの中身を1加算する処理(); 8 pdfを作成する処理(); 9 カウンターファイルの中身を1減算する処理(); 10} 11
この方法で実現自体は可能かと思ったのですが、以下のようなリスクがあると思っています。
- PDF作成中に何らかのエラーで処理が中断される
- ファイルの読み書きが増えるので、実行時間が長くなる
- カウンターファイル自体の排他制御も必要 など
なにかいい方法はありませんでしょうか。
また、私自身がPHPのプロセス数と同時接続ユーザ数などの理解が乏しいと思っておりますので、前述に間違いなどありましたら、ご指摘いただければと思います。
よろしくお願いします。

バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/04/24 04:08