のくす牧場
コンテンツ
牧場内検索
カウンタ
総計:126,340,858人
昨日:no data人
今日:
最近の注目
人気の最安値情報

    私的良スレ書庫

    不明な単語は2ch用語を / 要望・削除依頼は掲示板へ。不適切な画像報告もこちらへどうぞ。 / 管理情報はtwitter
    ログインするとレス評価できます。 登録ユーザには一部の画像が表示されますので、問題のある画像や記述を含むレスに「禁」ボタンを押してください。

    元スレ【PHP】下らねぇ質問はID出して書き込みやがれ 133

    php スレッド一覧へ / php とは? / 携帯版 / dat(gz)で取得 / トップメニュー
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。
    レスフィルター : (試験中)
    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitter
    251 : nobodyさん - 2014/05/06(火) 12:37:05.69 ID:???.net (+98,+29,-17)
    >>240
    そう
    でもそれだと書く量多いので工夫したい
    252 : 244 - 2014/05/06(火) 12:45:16.85 ID:???.net (+26,-30,-208)
    >>245
    詳しく言うと、>>244 の処理は、データベースから値を取りだして消すまで
    ほかのアクセスを待たせます。そのため順序付けやランダムに関係なく、同時アクセスで
    偶然同じ値を取得してしまうことは起こりえないわけです。

    mysqli で書くとこんな感じ(手続き型で書いている場合は適宜書き換えてね)
    $mysqli->begin_transaction();
    $mysqli->query('SELECT giftcode FROM table_name WHERE ~~ FOR UPDATE;');
    $mysqli->query('DELETE FROM table_name WHERE diftcode=○○');
    $mysqli->commit();

    >>247 のような "locked" フラグをいけると思いますが、
    結局はそのフラグにも排他ロックが必要なのは同じなので、だったら無駄なことはせず、
    上記のようなコードでいいと思います。
    253 : nobodyさん - 2014/05/06(火) 14:11:35.03 ID:???.net (+42,+16,-60)
    >>252
    コードまでありがとうございます!
    でも(SELECT文などの)待機中にDELETEされたら待機してる処理が実行不可能になってしまうのでは…
    それとWHERE文で排他ロックされていない行を探すことは出来ないのでしょうか?
    そのためにlockedフラグを作ろうとしているのですが…
    お願いします
    255 : nobodyさん - 2014/05/06(火) 15:53:45.85 ID:???.net (-8,-29,-38)
    >>254
    トランザクションの理解が不十分に思える。
    共有ロックと排他ロックについて自分で調べるといいよ。
    SELECT ... FOR UPDATE
    SELECT ... LOCK IN SHARE MODE

    http://dev.mysql.com/doc/refman/5.1-olh/ja/innodb-locking-reads.html
    256 : nobodyさん - 2014/05/06(火) 17:20:52.83 ID:???.net (+5,-30,-134)
    >>253
    lockedフラグの考え方でいいよ。
    排他ロックの話は、ロック解除時に使用済みのギフトカードを取得することになるんじゃないのという懸念のとおり。

    update tname set locked = true where giftcode = (select giftcode from tname where locked = false order by random() limit 1);
    の結果が、1件になるまで繰り返して、1件になったときのレコードを処理すればいいよ。
    257 : nobodyさん - 2014/05/06(火) 17:21:25.53 ID:???.net (+57,+29,-12)
    繰り返す必要もないか。まぁ、そういうこと。
    258 : nobodyさん - 2014/05/06(火) 17:27:58.90 ID:???.net (+3,-30,-207)
    連投スマソ。
    mysqlならこうかけるようだ
    update tname set locked = true where locked = false order by random() limit 1;

    便利ね。ただ、postgresqlのreturning相当のものがないと、結果を取得しないといけないので、

    update tname set owner = ユーザIDかなにか where owner is null order by random() limit 1;
    select giftcode from tname where owner = ユーザIDかなにか
    giftcodeを使った処理
    delete from tname where owner = ユーザIDかなにか

    という流れでいいと思う。
    259 : nobodyさん - 2014/05/06(火) 17:49:35.47 ID:???.net (+8,-30,-188)
    >>253
    テーブルにgiftcodeを取得したユーザーIDを格納するカラムに追加(仮にgetid)、初期値は0としておく
    最初の取得で
    begin transaction;
    select ~ for update where getid=0;
    recordがあったら
    update ~ set getid=userid where (取得したgiftcode)
    commit

    recordがないときは、giftcodeは全部使い切ってる

    後続の取得処理は、先行する処理がcommitするまで待たされる。
    先行の処理のcommit後は、getidが0でないので、このgiftcodeは除外される
    こんな感じかな

    だれが取得したか記録しておく必要があるなら、giftcodeの削除は出来ないと思う
    260 : nobodyさん - 2014/05/06(火) 18:57:01.61 ID:???.net (+55,+29,-66)
    ロックのことはよくわからんけど、ギフトコードが連番って不正取得される危険高くならない?
    チェックデジットとかを付与してバルクアクセスを防止したほうが良さそうだけどどうだろう
    261 : nobodyさん - 2014/05/06(火) 21:24:03.88 ID:???.net (+52,+29,-6)
    ここに書く都合でじゃない?
    262 : nobodyさん - 2014/05/06(火) 22:07:14.15 ID:Nk4oF//+.net (-10,+29,-70)
    >>256-261
    ありがとうございます!
    ここで質問するまで、誰かが取得したギフトコードは個別の何かに移動するとか考えてましたが、
    >>260の方法を使うことにします、ありがとうございました!
    それと、実際に使う場面ではAmazonギフト券のコードを使うのですが、他にセキュリティなどで気をつけることがあればご教授お願いします…
    264 : nobodyさん - 2014/05/07(水) 03:36:35.00 ID:???.net (+71,+30,+0)
    265 : nobodyさん - 2014/05/07(水) 09:14:00.07 ID:???.net (+94,+28,+0)
    >>264
    それ入出力じゃないよね
    266 : nobodyさん - 2014/05/07(水) 12:59:59.59 ID:???.net (+70,+29,-15)
    >>265
    264じゃないけど
    標準入出力 というものがあると思って言っている?
    それともそういう便利に抽象化する何かを期待している?
    267 : nobodyさん - 2014/05/07(水) 14:06:40.85 ID:???.net (+57,+29,-14)
    r+のようなイメージで、読むときは標準入力、書くときは標準出力へと振り分けてくれる
    便利なストリームはないのか、ということだと思うけど、ないと思う
    268 : nobodyさん - 2014/05/07(水) 14:10:00.10 ID:???.net (+91,+29,-16)
    ってあれ、どうしたら作れますか、か。
    streamWrapperを使えば作れそうに見えるけど、試してみた?
    269 : nobodyさん - 2014/05/07(水) 15:12:51.75 ID:???.net (+70,+29,+0)
    >>268
    なるほど
    これでちょっとやってみます
    272 : nobodyさん - 2014/05/09(金) 09:56:15.62 ID:???.net (+31,-29,-21)
    受け取った側が undisclosed-recipients; になるから
    何か設定した方がいいと思うけどね。
    273 : nobodyさん - 2014/05/09(金) 12:40:35.68 ID:???.net (+104,+29,-3)
    >>251
    これで書く量多いと思う理由は?
    274 : nobodyさん - 2014/05/09(金) 12:41:23.38 ID:???.net (-10,-28,-3)
    >>246
    PHP6.5って何年後の話ですか?
    275 : nobodyさん - 2014/05/09(金) 12:43:58.06 ID:???.net (+16,-3,-29)
    >>246
    とりあえず本当に検索したのか疑問なんだけど
    「php micro framework」とか「php フレームワーク 軽量」で検索して好きなものを見つけろ
    276 : nobodyさん - 2014/05/09(金) 12:46:14.87 ID:???.net (+73,+29,-26)
    >>231
    そういう記事を書くと次の日にはてぶコメントで炎上しますよ
    記事に書いて反響コメントを見てみればいい
    277 : nobodyさん - 2014/05/09(金) 12:47:38.47 ID:???.net (+62,+29,-6)
    >>213
    がんばってネタ書いたけどスルーされてる気持ち教えて?
    278 : nobodyさん - 2014/05/09(金) 14:06:45.07 ID:???.net (+11,-30,-30)
    >>251
    長くなるけど

    <?php
    $ary = array();
    $idx = a;
    foreach(explode() as $item){
     $ary[$idx] = $item;
     $idx++;
    }
    //http://secretaccess.seesaa.net/s/article/257600560.html を参考にしました
    ?>
    これでどう?
    279 : 270 - 2014/05/09(金) 15:16:53.21 ID:???.net (+61,+29,+1)
    >>272
    初めて知りました
    ありがとうございます
    280 : nobodyさん - 2014/05/09(金) 17:19:51.52 ID:???.net (+61,+25,+0)
    >>213
    ネタだと思ったらまじでtrueだった
    281 : nobodyさん - 2014/05/09(金) 17:26:33.26 ID:???.net (+55,+29,+1)
    だから>>214があるんじゃん
    282 : nobodyさん - 2014/05/09(金) 18:10:48.44 ID:???.net (-2,-29,+0)
    ===じゃなくて==での比較の話だろ
    284 : nobodyさん - 2014/05/09(金) 19:11:18.67 ID:???.net (+52,+29,+0)
    無限ループになる方がおかしい
    285 : nobodyさん - 2014/05/09(金) 19:43:43.88 ID:???.net (-2,-29,-2)
    >>282
    echo (int)"10円";

    これで分からないならあきらめて。
    286 : nobodyさん - 2014/05/09(金) 19:48:05.68 ID:???.net (-11,-29,-60)
    >>283
    プロトコル的に考えれば、HEADでContent-Lengthを取得、制限したいバイト数と比較して、
    Rangeヘッダを付加したGETを送信すればいいだけだと思うよ。
    287 : nobodyさん - 2014/05/09(金) 20:42:30.85 ID:???.net (-5,-29,-114)
    >>283
    PHP5.2.8使ってるのに堅牢なライブラリがあるわけがない。
    あとRSSの取得でAllowed memory size of ~ bytes exhausted エラーが起きるっておかしい。
    どれだけ大きいRSSなんだよと。

    データ取得部分より他のところでエラーが起きているかどうか見たほうが良いと思う。
    常駐しているって書いてあるから、特にメモリ関係。
    http://php.net/manual/ja/features.gc.performance-considerations.php
    こんな感じで組んでるんだったら現環境で解決しようとするのは諦めた方がいい。

    ループじゃなくてcronで実行するとかなら問題起きないかも。
    288 : nobodyさん - 2014/05/10(土) 00:40:56.41 ID:???.net (-1,-29,-22)
    session_startのオン状態を判別して
    オフならsession_startする方法ありますか
    289 : nobodyさん - 2014/05/10(土) 01:01:36.90 ID:???.net (+2,-29,+0)
    session_status()
    290 : nobodyさん - 2014/05/10(土) 01:23:12.60 ID:???.net (+75,+29,+1)
    >>273
    タイプ量がちょっと多いから
    291 : nobodyさん - 2014/05/10(土) 01:46:28.65 ID:???.net (+52,+24,-2)
    PHP使ってる時点でこだわるところが違うよ
    292 : nobodyさん - 2014/05/10(土) 01:48:35.52 ID:???.net (-1,-29,-6)
    pythonみたいにa,b=[1,2]みたいなことはできないから
    それで妥協できないならphpにこだわる必要はないかなと
    293 : nobodyさん - 2014/05/10(土) 02:15:11.54 ID:???.net (+8,-29,+0)
    >>290
    array_combineあたりで妥協してくれ
    294 : nobodyさん - 2014/05/10(土) 02:28:41.85 ID:???.net (+57,+29,-18)
    初心者に限ってコード量が少ないのが良コードだと思い込んでるものなんだよな
    295 : nobodyさん - 2014/05/10(土) 04:03:17.09 ID:???.net (+30,-30,-62)
    理想系を挙げなければならない>>236の場面でああいうコードを書いてしまうのがダメなんじゃないかなぁ。

    たとえば、$arr['a', 'b'] = explode(' ', 'a_val b_val'); みたいに書くことはできないのかって質問なら、
    気持ちは分からんでもないと思うわけで。
    296 : nobodyさん - 2014/05/10(土) 04:41:10.58 ID:???.net (+96,+29,-93)
    >>295
    そういう書き方を例としてあげられるのは、前提として>>236の質問があったからこそだと思うよ。
    PHPの構文でエラーが出るような書き方で質問するのは難しいだろうね。
    「pythonではこういう書き方できるけどPHPではこういう書き方できないのか」みたいな一文があれば良いかもしれない。
    ただそれもpythonとか他の言語を知っていれば入れられる文章だけど。
    297 : nobodyさん - 2014/05/10(土) 05:00:59.82 ID:???.net (+57,+29,-2)
    なぜまともなレスが1つもつかないのか
    298 : nobodyさん - 2014/05/10(土) 05:58:28.59 ID:9ae9/7cJ.net (+9,+18,+3)
    >>289
    ありがとうございます
    300 : nobodyさん - 2014/05/10(土) 06:23:31.82 ID:???.net (+50,+28,-6)
    >>299
    起きがけで寝ぼけてるかもしれんがODBCは?
    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / php スレッド一覧へ
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。

    類似してるかもしれないスレッド


    トップメニューへ / →のくす牧場書庫について