トップページ > プログラム > 2016年05月13日 > /XgzJMPY

書き込み順位&時間帯一覧

8 位/188 ID中時間01234567891011121314151617181920212223Total
書き込み数0000000000030000200000005



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん
43
【PHP】下らねぇ質問はここに書き込みやがれ 5 [無断転載禁止]©2ch.net

書き込みレス一覧

【PHP】下らねぇ質問はここに書き込みやがれ 5 [無断転載禁止]©2ch.net
43 :デフォルトの名無しさん[sage]:2016/05/13(金) 11:46:37.11 ID:/XgzJMPY
>>41
いろいろ面白そうだったので、勝手に作ってみた。

function my_lock($lockfile, $timeout, $maxuser)
{
 // ロック試行
 $fp = fopen($lockfile, 'a');
 if(flock($fp, LOCK_EX|LOCK_NB)) return $fp;

 // 待ち人数を数える
 exec('/usr/sbin/lsof -FC '.escapeshellcmd("\"$lockfile\"").' 2>/dev/null', $out, $ret);
 if($ret == 0) {
  if(count($out) > $maxuser) {
   // 待ち人数過剰
   fclose($fp);
   return false;
  }
 }

 // 時間制限付きロック試行
 for($interval = 100, $remain = $timeout * 1000; $remain > 0; $remain-=$interval) {
  if(flock($fp, LOCK_EX|LOCK_NB)) return $fp;
  usleep($interval * 1000);
 }

 // タイムアウト
 fclose($fp);
 return false;
}
【PHP】下らねぇ質問はここに書き込みやがれ 5 [無断転載禁止]©2ch.net
44 :43[sage]:2016/05/13(金) 11:48:10.08 ID:/XgzJMPY
>>43
行数制限で省略したヘッダ

/**
* 待ち時間・待ち人数制限付きロック
*
* @param string $lockfile ロックファイルのパス
* @param integer $timeout タイムアウト(秒)
* @param integer $maxuser 最大ユーザー数(ロック取得済みユーザー及び自分を含む)
* @return resource ロックしたファイルのハンドル、またはロックが取得できない場合は FALSE
*/

lsof のパスは環境に合わせて。
使えない環境(lsof がエラー)では人数制限しない仕様。
【PHP】下らねぇ質問はここに書き込みやがれ 5 [無断転載禁止]©2ch.net
45 :デフォルトの名無しさん[sage]:2016/05/13(金) 11:51:53.48 ID:/XgzJMPY
>>43
連投すまん、ロック試行ループ内の usleep の位置は直前の if の前にするべきだね。
【PHP】下らねぇ質問はここに書き込みやがれ 5 [無断転載禁止]©2ch.net
52 :デフォルトの名無しさん[sage]:2016/05/13(金) 16:37:32.55 ID:/XgzJMPY
>>49
. の代わりに [^<>] にしてみるとか?
【PHP】下らねぇ質問はここに書き込みやがれ 5 [無断転載禁止]©2ch.net
54 :デフォルトの名無しさん[sage]:2016/05/13(金) 16:48:42.10 ID:/XgzJMPY
あと * じゃなく + の方がいいな。
とどのつまり "/>([^>]+?)「/" だな。

>>52 で [^<>] と言ったがやっぱ [^>] で充分だ。


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。