- 1 名前:nobodyさん mailto:sage [2012/01/02(月) 02:03:25.50 ID:???]
- 質問者はまず>>1を良く読むこと(必須!)
過去スレ、関連スレ、FAQなどは>>2-10辺り 次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。 ◆前スレ 【PHP】下らねぇ質問はID出して書き込みやがれ 113 kohada.2ch.net/test/read.cgi/php/1322564127/ ◆質問用テンプレ 【OS名】CentOS 【PHPのバージョン】5.3 【連携ソフトウェア】MySQL ImageMagick 【質問内容】 ◆質問する時の注意 ・ スレを上げて自分のIDを表示させること。(メール欄に何も記述しない。専ブラのsageチェックを外す) ・ 己の行った操作、変更などを詳しく明記すること。 ・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。 ・ 質問者として、態度をわきまえること。 ・ 事前に関連リンクの公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。 (PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。) ◆質問後の注意 ・2回目以降は最初に質問した際のレス番号を入れて、偽者防止に必ずIDを表示させること。 ・解決しなくても回答をもらった場合はお礼を言うこと。 (荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。) ◆回答者への注意 ・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。 【その他諸注意】 ・SQL・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
- 601 名前:nobodyさん mailto:sage [2012/01/10(火) 21:37:15.54 ID:???]
- >>599
SQLごとに作れ
- 602 名前:nobodyさん mailto:sage [2012/01/10(火) 21:39:00.09 ID:???]
- >>599
普通に UPDATE table SET col1=? WHERE col2=? でいいんじゃねーの カラム名に変数割り当てるなら上を "UPDATE table SET {$col1}=? WHERE {$col2}=?" すりゃいいじゃん
- 603 名前:587 mailto:sage [2012/01/10(火) 22:25:58.95 ID:???]
- みなさんレスありがとうございます。
とても助かります! とりあえず593の$post_dateを$dateに変えて記述してみたのですが、 $limit = 60 * 60 * 24 * 14; // 期限14日前とする の行でエラーが出てしまいます。 最終的に表示させたい場所に echo date('Y-m-d', $post_date); を書けばいいという認識であっていますか?? 初歩的すぎて、すいませんが、よろしくお願いします。
- 604 名前:nobodyさん mailto:sage [2012/01/10(火) 22:33:03.94 ID:???]
- >>603
その行でいきなりエラーはないだろw 投稿日時はどうやって受け取って、どういう形式で保存してんの? 例)2012/01/10、とか、2012-01-10、とか、1326121200、とか。
- 605 名前:nobodyさん mailto:sage [2012/01/10(火) 22:33:49.35 ID:???]
- >$limit = 60 * 60 * 24 * 14; // 期限14日前とする
>の行でエラーが出てしまいます。 んなアホな 違うところだろ >最終的に表示させたい場所に >echo date('Y-m-d', $post_date); しらんがな どんなソースになってるのかもわからんし
- 606 名前:nobodyさん mailto:sage [2012/01/10(火) 22:40:12.89 ID:???]
- >>600
ggrks
- 607 名前:nobodyさん mailto:sage [2012/01/10(火) 22:42:27.44 ID:???]
- >>603
$dateの中身を書きなさい
- 608 名前:nobodyさん mailto:sage [2012/01/10(火) 22:49:22.50 ID:???]
- 素人相手に偉そうに語るのがこのスレです。
- 609 名前:nobodyさん [2012/01/10(火) 22:49:50.87 ID:DbdGI1rD]
- 【OS名】CentOS 5.5
【PHPのバージョン】5.2.17 【連携ソフトウェア】MySQL GD 【質問内容】 GDの機能を使って画像を作成して、データベースに入れていくのですが、 imagepng()とかで画像をファイルに保存したり、ブラウザに出したりしますよね? これの出力結果を直接文字列として変数に格納したいのですが、どうすればよいでしょうか? $data = imagepng()とかも試してみましたが、trueしか返ってきませんでした。
- 610 名前:587 mailto:sage [2012/01/10(火) 22:52:45.04 ID:???]
- ありがとうございます。
すいません、違うところのエラーですか。(^^; メールで投稿する形式の掲示板で、メールサーバーに 投稿記事を取りに行くphpには、以下のように記載されています。 ※日付は1323413498等という形で保存されています。 // 日付の袖しつ eregi("Date:[ \t]*([^\r\n]+)", $head, $datereg); $now = strtotime($datereg[1]); if ($now == -1) $now = time(); 呼び出すphpの冒頭にはには $date = date("y/m/d", $ptime); とだけ書かれています。 最終的には、$dateと書いたところに日時が表示されています。
- 611 名前:nobodyさん [2012/01/10(火) 22:54:19.13 ID:DbdGI1rD]
- 自己れす。下記で行けそうです。
ob_start(); imagepng($resource); $data = ob_get_contents(); ob_end_clean();
- 612 名前:nobodyさん mailto:sage [2012/01/10(火) 22:56:28.46 ID:???]
- >>609
ヒント:base64_encode >>610 もうここで聞く以前の学習を >$date = date("y/m/d", $ptime); $ptimeには何が入ってるの?すでにUNIXTIMEが入ってるなら $date = $ptime; でいいよ、代入する意味ないけど
- 613 名前:nobodyさん mailto:sage [2012/01/11(水) 00:11:45.44 ID:???]
- >>610
dateとstrtotimeは使うな datetimeを使え
- 614 名前:nobodyさん mailto:sage [2012/01/11(水) 00:23:58.10 ID:???]
- ついに使うな厨も登場したか
- 615 名前:nobodyさん [2012/01/11(水) 00:26:28.08 ID:dfPHpXiU]
- phpにおける分散オブジェクトについて語りましょう!
- 616 名前:nobodyさん mailto:sage [2012/01/11(水) 00:29:05.90 ID:???]
- >>615
kohada.2ch.net/test/read.cgi/php/1131016915/
- 617 名前:nobodyさん [2012/01/11(水) 00:35:11.26 ID:dfPHpXiU]
- さあ、分散オブジェクトについて語りましょう!
- 618 名前:nobodyさん [2012/01/11(水) 00:37:35.15 ID:dfPHpXiU]
- >>616
PHPの分散オブジェクト技術にはどのようなものがありますか?
- 619 名前:nobodyさん mailto:sage [2012/01/11(水) 00:41:39.74 ID:???]
- 荒らし認定
- 620 名前:nobodyさん [2012/01/11(水) 12:55:49.06 ID:eyRErrPB]
- aaa.example.comとbbb.example.comで同じセッションを使いたいのですが、
php.iniで session.cookie_domain = ".example.com" を指定してもうまくいきません。 また、.phpの中で直接設定しようと以下のようにテストしたんですがやはりうまくいきません (aaaとbbbを変更するとセッション値がカラになる) //session_set.php ini_set("session.cookie_domain", ".example.com"); session_start(); $_SESSION['animal'] = "cat"; echo "animal>>>"; echo $_SESSION['animal']; //session_check.php この.phpをaaa.example.comとbbb.example.comで確認する ini_set("session.cookie_domain", ".example.com"); session_start(); echo "animal>>>"; echo $_SESSION['animal']; 何が原因でしょうか? php.iniで他に何か設定しなきゃいけないのでしょうか。 ご意見よろしくお願いします
- 621 名前:nobodyさん mailto:sage [2012/01/11(水) 13:00:09.61 ID:???]
- >>620
ドメインが違うんだから無理。 それでセッション引き回しできたら、ハッキングやりほうだい
- 622 名前:nobodyさん mailto:sage [2012/01/11(水) 13:15:03.58 ID:???]
- >無いが原因でしょうか?
マニュアルを読まないのが原因です
- 623 名前:nobodyさん [2012/01/11(水) 13:27:59.44 ID:eyRErrPB]
- >>621
ありがとうございます php.net/manual/ja/function.session-set-cookie-params.php を見てるんですが、 「すべてのサブドメインでクッキーを有効にしたい場合は、先頭にドットをつけて '.php.net' のようにします。」 とあるようにサブドメインの変更までなら対応できるのではないですか?
- 624 名前:nobodyさん mailto:sage [2012/01/11(水) 13:30:15.06 ID:???]
- d.hatena.ne.jp/n314/20100512/1273658459
- 625 名前:nobodyさん mailto:sage [2012/01/11(水) 13:36:51.45 ID:???]
- >>624
そのブログの設定ファイルがphp.iniより優先するということでしょうか 実はちょうど今session_set_cookie_params();で対応できたんですが そちらの勉強もしてみます ありがとうございました
- 626 名前:nobodyさん mailto:sage [2012/01/11(水) 13:44:43.70 ID:???]
- >>621
へぇ
- 627 名前:nobodyさん [2012/01/11(水) 14:07:42.61 ID:VbJoExbW]
- 質問させてください
皆さんはPHPにて「並行処理」をしたい場合、どのようにされていますでしょうか? 自分がやりたいのは、あるスクリプトがあり、それを引数(設定値)だけを変えて 決められた時間の間隔にて(sleep()等を使って)繰り返し、大量に(少なくとも20位)かつ”同時に”実行したいと思っております 子プロセスの同期は必要ないと思います ファイルをコピーして、各スクリプト毎に設定値を書いて・・・って言うのは現実的ではないので データベースなどからリストを取得して、その設定値を使ってそれぞれを同時に実行したいと思っております (fwrite()などで、設定毎にスクリプトを作成していこうかとも考えましたが・・・) しかし色々考えたのですが、全然いいアイデアが浮かんできません このような場合、どのようにすればいいのでしょうか?
- 628 名前:nobodyさん [2012/01/11(水) 14:08:07.06 ID:VbJoExbW]
- pcntl_fork()という関数があるという事は知ったのですが、これを使った場合もどのように実装すればいいのかいまいち分かりません
$list = array(~DBからの設定値~); $pid = pcntl_fork(); if ($pid == -1) { die('ダメ'); } else if ($pid) { pcntl_wait($status); } else { //子プロセス foreach(~$list~)とかイテレータ{ system()とか } } 上記のようにforeach()で回してしまうと、設定値を読み込んだ順に実行されていくので 普通のイテレータ使ったスクリプトと同じで、並列処理にはならないように思います それともforeach()をif()の外で回して配列に格納しておいて、$iという数字をインクリメント した後に子プロセス内にてfor()にて一気にsystem($list[$i])等で実行すればいいのでしょうか? >>627のような実装をしたい場合に何かアドバイスを頂けないでしょうか?
- 629 名前:nobodyさん mailto:sage [2012/01/11(水) 14:20:29.14 ID:???]
- 並列させたい分だけforkすりゃいいだろ
- 630 名前:nobodyさん mailto:sage [2012/01/11(水) 15:00:30.88 ID:???]
-
foreach ( $list ... ) { if ( ($pid = pcntl_fork()) === 0 ) { 子でやりたいこと exit(0);//終わる } else if ($pid == -1) die("x"); } //親での処理(終わるの待つとか)
- 631 名前:nobodyさん mailto:sage [2012/01/11(水) 15:07:26.35 ID:???]
- >>627
並列処理したい処理をもうちっと具体的にくれ
- 632 名前:nobodyさん [2012/01/11(水) 15:25:25.54 ID:VbJoExbW]
- 皆さん、返答ありがとうございます
自分のやりたい事とは少し違いますが、説明が簡単な例としては、Googleのクローラなんかがあると思います データをどういう手法か分かりませんが、初期のものでも1サーバに300ものクローラを使っていたとの事です クローラは動き回っているので考え方が違うかもしれませんが、例えば自社や関連会社のデータなど固定されたターゲットの場合はcronなどで定期的に訪問出来るでしょうが、 それらの設定値をいちいちファイルに記述するのも大変なので、それぞれの場所にてデータを取得するためのxPathなど設定値リストを読み込んで、 スクリプトにて一気に並行処理にて自動的に行う、という事をやりたいと考えております ただ、アクセスし続けるのも相手側に付加がかかるので、各スクリプトの訪問間隔を大きい相手は5分、小さい相手は1時間などにしたいと考えております また、それらのデータを正常に取得したら、その瞬間に今度はそのデータを解析・整形するようなスクリプトを起動させたいと考えております 以上の点にて宜しくお願いいたします
- 633 名前:nobodyさん mailto:sage [2012/01/11(水) 16:03:46.74 ID:???]
- いまいち何をやりたいかわからんが
取得先が大量にあって直列処理だと時間がかかりすぎるしそれぞれ取得設定を書くのもめんどいから 並列にしたいってことでおk? ならcURLのマルチ使って、設定値をdbなどから引っ張ってきてから 回しながらcallbackなんかをうまく設定して一気にゴー、で行けるんじゃないか。 やりたいことと違っていたならすまん。 参照:ttp://techblog.ecstudio.jp/tech-tips/php-multi.html
- 634 名前:nobodyさん mailto:sage [2012/01/11(水) 16:19:22.57 ID:???]
- >>632
Webのクローラーはデータ取得に暇がかかるのが明白だから並列処理するのが当たり前のアプローチ
- 635 名前:nobodyさん mailto:sage [2012/01/11(水) 16:46:00.24 ID:???]
- あえてクローラーをPHPで作ることもないだろ。
PHPは標準で並列処理できない仕様だ。 並列処理できる言語、並列処理できるソフトを使って保存してから PHPでそこにアクセスしたら良い。
- 636 名前:nobodyさん mailto:sage [2012/01/11(水) 16:58:01.39 ID:???]
- しかしcurlだけは標準でダウンロードが完了してなくても処理が帰ってくるから擬似的には並列処理できるな。
通信だけは並列にできるいうことだが。クローラーはパフォーマンスを落とさずに、並列処理可能な言語・ツールに並べる可能性はある。
- 637 名前:nobodyさん mailto:sage [2012/01/11(水) 17:09:13.29 ID:???]
- ここで適切なアドバイスしても、馬鹿には無理だろ。
- 638 名前:nobodyさん mailto:sage [2012/01/11(水) 17:40:57.15 ID:???]
- 返事なくなっちゃったね。
- 639 名前:nobodyさん mailto:sage [2012/01/11(水) 17:43:06.65 ID:???]
- engawa.2ch.net/test/read.cgi/linux/1324631185/427
のコンパイルは結局うまくいったのか?
- 640 名前:nobodyさん mailto:sage [2012/01/11(水) 18:11:13.28 ID:???]
- >>630 じゃだめなん?
- 641 名前:nobodyさん mailto:sage [2012/01/11(水) 18:17:50.79 ID:???]
- よくわからないから無視したんだろw
- 642 名前:nobodyさん mailto:sage [2012/01/11(水) 19:03:57.60 ID:???]
- 質問してしっぱなしかよ・・・
- 643 名前:nobodyさん mailto:sage [2012/01/11(水) 19:05:55.41 ID:???]
- いつも質問答えてる側の奴らから難易度高めの問題がほしい
- 644 名前:超難問! mailto:sage [2012/01/11(水) 19:10:37.65 ID:???]
- >>643が彼女をつくるにはどうしたらいいでしょうか?
- 645 名前:nobodyさん mailto:sage [2012/01/11(水) 19:31:49.93 ID:???]
- 彼女(笑)
- 646 名前:nobodyさん mailto:sage [2012/01/11(水) 20:04:08.13 ID:???]
- $list = array("清美", "里子", "友恵", "友里", "とめ", "愛子", "雅子", ...... );
for ($i = 0; >>643の心が折れるまで; $i++) { $result[] = kokuhaku($list[$i]); } if ($result == NULL){ die("まだ2次元がある"); }
- 647 名前:nobodyさん [2012/01/11(水) 20:48:30.27 ID:tHZDD+V0]
- 質問です
hoge.txtというテキストファイルがありまして 100バイトの文字列\n 100バイトの文字列\n 100バイトの文字列\n : : : と500行ある500KBののテキストファイルがあるとします このファイルから 「499行目と500行目」 か 「1行目と2行目」 だけを取り出すとき、サーバーの負荷は 両方1〜500行の文字を取り出すときとほぼ同じ負荷でしょうか?
- 648 名前:nobodyさん mailto:sage [2012/01/11(水) 20:50:49.28 ID:???]
- >>643
501 :nobodyさん:2012/01/08(日) 19:46:27.97 ID:??? >>489 abstractとinterfaceの具体的な使い分けはどうしてますか? 実装が書きたかったらabstractっていうのはあまりにもアレなので 哲学とまでは言いませんが、確固たる理由をつけて使い分けたいんです
- 649 名前:nobodyさん mailto:sage [2012/01/11(水) 20:52:56.46 ID:???]
- 読み方に依るだろ。
読み込む位置が確定していたら、シークするだけの違いしかなく負荷に大差ないが。 改行位置の判定からやっていたら後ろの方が手間掛かる。
- 650 名前:nobodyさん mailto:sage [2012/01/11(水) 21:08:42.58 ID:???]
- 一般的には常識とされている、
真実は一つだけ 怒りは自然な感情 戦争・テロは無くならない 死刑には殺人の抑止力がある 虐められる側にも虐めの原因がある 自己チューな人間ほど自己愛が強い などの間違いを解説中 感情自己責任論
- 651 名前:nobodyさん [2012/01/11(水) 21:13:42.02 ID:tHZDD+V0]
- >>649
という事はどんなやり方でも最低でも500KBかかってしまうという事でしょうか? 200バイト(2行分)程度だけで住む方法ないかなーと思ってたのですが
- 652 名前:nobodyさん mailto:sage [2012/01/11(水) 21:34:41.86 ID:???]
- 固定長なら200バイトだけで済むだろ。
- 653 名前:nobodyさん mailto:sage [2012/01/11(水) 22:26:31.01 ID:???]
- >>649はちょっと読み間違いをしているね。
> 「499行目と500行目」 > 「1行目と2行目」 この二つの負荷には大差がないといっているんだろう。 本来の質問であるところの、 > 1〜500行の文字を取り出すとき との負荷には大きな差があるよ。 固定長じゃない場合は、最後の2行を得るのが少し面倒だけど。
- 654 名前:nobodyさん mailto:sage [2012/01/11(水) 22:33:40.13 ID:???]
- 500行のロードと、2行のみロードでは負荷に違いがある。
- 655 名前:nobodyさん mailto:sage [2012/01/11(水) 22:33:46.01 ID:???]
- 実験してみればいいじゃん
- 656 名前:nobodyさん mailto:sage [2012/01/11(水) 22:45:01.77 ID:???]
- 500Kくらいたいした事で無い。
fileで全行読み込んでも良いよ。 そこがボトルネックになってから改良したら良い。
- 657 名前:nobodyさん mailto:sage [2012/01/11(水) 22:47:30.54 ID:???]
- 全ての箇所で低リソースを目指していたら手間が掛かって進まない。
一応動くやつを作ってから速度測定して、 全体の中で時間掛かっているところに手を加えれば良い。
- 658 名前:nobodyさん [2012/01/11(水) 23:02:44.07 ID:tHZDD+V0]
- ごめんなさい、1〜500行の文字を取り出すと比べて
「499行目と500行目」「1行目と2行目」この二つは差があるのでしょうか?という質問でした 説明不十分で申し訳ないです やっぱりテキストファイルを固定長形式にするしか無いですかね? この場合 100バイトの文字列 2Kバイトの文字列 4バイトの文字列 : となった場合、全部2KBになって500行あったら1Mになってしまうので避けてたのですが
- 659 名前:nobodyさん mailto:sage [2012/01/11(水) 23:06:53.90 ID:???]
- 理解不可能ですが。
全て(1〜500行)のロードと2行のみでは負荷は違う。 可変長だったらindexをファイルの後方か先頭に配置して必要なところを読めば速いです。
- 660 名前:nobodyさん mailto:sage [2012/01/11(水) 23:16:37.71 ID:???]
- ファイルサイズがでかくて全読込をさけたいなら、データベースにいれとけよ。
そしたらメモリ管理など気にしなくて済むしキャッシュなども自動で使ってくれる
- 661 名前:nobodyさん [2012/01/11(水) 23:39:54.74 ID:GX2tXR1t]
- PHPとAsp.netってどう違うんですか?
- 662 名前:nobodyさん [2012/01/11(水) 23:50:01.97 ID:VbJoExbW]
- >>633-642
すみません、今まで色々試しにやってて返事が遅くなりました ja.wikipedia.org/wiki/Forkを参照に #!/usr/local/bin/php -q <?php $pid = pcntl_fork(); if ($pid == 0) { $j; for ($j=0; $j < 10; $j++) { printf("child: %d\n", $j); sleep(1); } } else if($pid > 0) { $i; for ($i=0; $i < 10; $i++) { printf("parent: %d\n", $i); sleep(1); } print "wait begin.\n"; pcntl_wait($status); print "wait end.\n"; } else { die('fork できません'); }としました
- 663 名前:nobodyさん [2012/01/11(水) 23:50:43.62 ID:VbJoExbW]
- ただ、結果が
child: 0 child: 1 child: 2 child: 3 child: 4 child: 5 child: 6 child: 7 child: 8 child: 9 parent: 0 parent: 1 parent: 2 parent: 3 parent: 4 parent: 5 parent: 6 parent: 7 parent: 8 parent: 9 wait begin. wait end. のようになってparentがwikipediaのようにchildの間に入っておりません "出力の順序はカーネルが決定する"とは書かれていますが、PHPではこのようなものなのでしょうか? 学習不足で申し訳ないです
- 664 名前:nobodyさん mailto:sage [2012/01/12(木) 01:50:16.25 ID:???]
- >>662
なぜPHPを使っているのですか?
- 665 名前:nobodyさん [2012/01/12(木) 02:58:10.26 ID:KRgm5yh1]
- やっぱりphpでは並列無理ぽ。
- 666 名前:nobodyさん mailto:sage [2012/01/12(木) 03:08:54.02 ID:???]
- ニートおっさんには無理
- 667 名前:nobodyさん mailto:sage [2012/01/12(木) 03:25:30.76 ID:???]
- >>662
そのコードでできたよ。 child: 0 parent: 0 child: 1 parent: 1 child: 2 parent: 2 (略) child: 8 parent: 8 child: 9 parent: 9 wait begin. wait end.
- 668 名前:nobodyさん mailto:sage [2012/01/12(木) 03:39:54.92 ID:???]
- >>667
できてない。
- 669 名前:nobodyさん mailto:sage [2012/01/12(木) 03:43:15.46 ID:???]
- 並列と分散はPHPの泣きどころ。
- 670 名前:nobodyさん mailto:sage [2012/01/12(木) 03:52:56.74 ID:???]
- かろうじて並列できても実用性は全くないことに気づけよ
- 671 名前:nobodyさん mailto:sage [2012/01/12(木) 04:51:39.62 ID:???]
- 同じやつが同じ話題を繰り返してるんだな
- 672 名前:nobodyさん mailto:sage [2012/01/12(木) 05:35:36.73 ID:???]
- >>668
どういうこと?
- 673 名前:nobodyさん mailto:sage [2012/01/12(木) 10:36:29.57 ID:???]
- >>663
これって実行には何秒かかったんだろ。
- 674 名前:nobodyさん mailto:sage [2012/01/12(木) 12:24:55.33 ID:???]
- >>664 >>665 >>668 >>669 >>670 は並列処理を理解できてない馬鹿。
- 675 名前:nobodyさん mailto:sage [2012/01/12(木) 12:27:31.97 ID:???]
- >>667
>>663 実行環境(カーネル)の違いでプロセスの優先度が変わるのかな?
- 676 名前:nobodyさん mailto:sage [2012/01/12(木) 13:02:25.38 ID:???]
- PHPにはpcntl_forkというプロセスをフォーク(複製)することが
できる関数がありますが、これはPHPをCGIモードで 動かしている場合にのみ有効です。 通常はPHPをApacheモジュールとして動作させていることが 多いので、これが使えないケースが多々あります。 techblog.ecstudio.jp/tech-tips/php-multi.html
- 677 名前:nobodyさん mailto:sage [2012/01/12(木) 13:15:01.92 ID:???]
- っていうか、何でPHPで作ることにこだわってんだ?
Perlで良いじゃん。
- 678 名前:nobodyさん mailto:sage [2012/01/12(木) 13:19:01.14 ID:???]
- >>676
pcntl_fork関数は存在するし、forkも成功したように見えるけど、並列処理されないなんて結果になるということですか
- 679 名前:nobodyさん mailto:sage [2012/01/12(木) 14:01:06.08 ID:???]
- ちなみに俺も>>662やってみた
俺は並列処理の事なんか分かっていないので、このやり方で合っているか分からないけれど <?phpの後に、$time = time(); 最終行に、echo 'time:' . (time() - $time) . 'sec' . PHP_EOL;を付けてみた 2chの改行規制で出力形式変えるけど結果は child: 0 child: 1 child: 2 child: 3 child: 4 child: 5 child: 6 child: 7 child: 8 child: 9 time:10sec parent: 0 parent: 1 parent: 2 parent: 3 parent: 4 parent: 5 parent: 6 parent: 7 parent: 8 parent: 9 wait begin. wait end. time:10sec となった >>676 www.php.net/manual/ja/pcntl.installation.php にはCLI版も可能って書いてるんじゃないの? >>675 ちなみに自分はcentOSです
- 680 名前:nobodyさん [2012/01/12(木) 14:01:29.80 ID:QAUYYhrI]
- phpとmysqlでカウンターが作りたいのですが
書き込むときの排他制御はどのようにやるのでしょうか?
- 681 名前:nobodyさん mailto:sage [2012/01/12(木) 14:01:52.50 ID:???]
- >>676
CLIでも使えるよね?
- 682 名前:nobodyさん mailto:sage [2012/01/12(木) 14:02:25.17 ID:???]
- もういい加減ニートのおっさんは飽きた
- 683 名前:679 mailto:sage [2012/01/12(木) 14:02:52.80 ID:???]
- 書き忘れたけど、この出力結果みると並列処理ってされてない・・・んだよね?
- 684 名前:nobodyさん mailto:sage [2012/01/12(木) 14:10:41.80 ID:???]
- 基本的にはマルチスレッドはサポートされてないだろ。
レンタルサーバーとかでは。 自宅で一人で使う目的だったらマルチスレッドをONにしてコンパイルすればいい。 しかしソースコードに汎用性が無くなる。 Curlをつかっとけ。5.3か5.2から標準で並列に使える。
- 685 名前:nobodyさん mailto:sage [2012/01/12(木) 14:15:13.44 ID:???]
- forkだからマルチスレッドの話ではないでしょ。
- 686 名前:nobodyさん mailto:sage [2012/01/12(木) 14:16:07.48 ID:???]
- PHPがサポートするプロセス制御機能は、デフォルトでは有効となってい ません。
プロセス制御機能を有効にするには、 configure のオプションに --enable-pcntl を付け、 CGI 版あるいは CLI 版の PHP をコンパイルする必要があります。 注意: 現在、このモジュールは非 Unix 環境(Windows)では動作しません。 www.php.net/manual/ja/pcntl.installation.php
- 687 名前:nobodyさん mailto:sage [2012/01/12(木) 14:18:28.39 ID:???]
- >>686
何が言いたいの。
- 688 名前:679 mailto:sage [2012/01/12(木) 14:27:53.78 ID:???]
- >>682には悪いけど、俺にはせっかくの機会だから色々試してみた
>>662を if ($pid == 0) { system('php forkc1.php'); system('php forkc2.php'); } に変えて、それぞれに <?php $time = time(); $i; for ($i=0; $i < 10; $i++) { printf("child1: %d\n", $i); sleep(1); } echo 'c1-time:' . (time() - $time) . 'sec' . PHP_EOL; のように書いた
- 689 名前:nobodyさん mailto:sage [2012/01/12(木) 14:28:15.56 ID:???]
- 実行結果は
c1: 0 c1: 1 c1: 2 c1: 3 c1: 4 c1: 5 c1: 6 c1: 7 c1: 8 c1: 9 c1-time:10sec c2: 0 c2: 1 c2: 2 c2: 3 c2: 4 c2: 5 c2: 6 c2: 7 c2: 8 c2: 9 c2-time:10sec p-time:20sec parent: 0 parent: 1 parent: 2 parent: 3 parent: 4 parent: 5 parent: 6 parent: 7 parent: 8 parent: 9 wait begin. wait end. p-time:20sec となった で、実際の時計を見ていたら、20秒後に表示された system('php forkc3.php'); も加えたら実際の時計では30秒後に表示された これってどういうこと? 並列処理されていないってことだよね?
- 690 名前:nobodyさん mailto:sage [2012/01/12(木) 14:30:51.41 ID:???]
- なんでそんなトンチンカンなことが平気で言えるのか
system('php forkc1.php'); system('php forkc2.php'); この時点で気付けよ
- 691 名前:nobodyさん mailto:sage [2012/01/12(木) 14:36:08.80 ID:???]
- ん?
30秒かかるのは当たり前か・・・笑 >>679は10秒で済んでるから親プロセスと子プロセスはちゃんと並列処理されてるってことだね 自分の>>688の書き方が悪いだけか この流れの話は、親プロセスから子プロセスを複数作成し、それを同時に実行 つまり3つの子プロセスがあれば4つとも10秒後に終わらせるということだよね? となると実装法が思いつかないけど、pcntl_fork()っていうのを3回呼び出せばいいってことじゃないかな? 分からん
- 692 名前:nobodyさん mailto:sage [2012/01/12(木) 14:37:16.69 ID:???]
- >>690
ごめん、投稿した後すぐに気がついた(苦笑
- 693 名前:nobodyさん mailto:sage [2012/01/12(木) 14:54:03.86 ID:???]
- >>686
>>678
- 694 名前:nobodyさん mailto:sage [2012/01/12(木) 14:56:29.29 ID:???]
- >>691
system('php forkc1.php &'); と、バックグラウンドプロセスにすればよろしい。 プロセスの終了待ち処理を入れる必要があるけど。
- 695 名前:nobodyさん mailto:sage [2012/01/12(木) 15:05:23.27 ID:???]
- >>694
なるほど 実はまだ挑戦してて(笑 一度やり始めたら意地でもとなってしまってw $pid[$i] = pcntl_fork();等と複数回呼び出して、 その後system()を呼び出すとかやってみたのですが30秒かかったりで バックグラウンドプロセスという発想はなかったです 今から外に出ないといけないんですが、最後にちょっと試してみます
- 696 名前:nobodyさん mailto:sage [2012/01/12(木) 15:10:13.69 ID:???]
- >>694
アハハ、今>>688のコードにて if ($pid == 0) { system('php forkc1.php &'); system('php forkc2.php &'); system('php forkc3.php &'); } としましたが 今度は31秒かかってしまいましたw どこがおかしいのか分かりませんが、また帰ってからやってみます
- 697 名前:nobodyさん mailto:sage [2012/01/12(木) 15:17:35.81 ID:???]
- 時間のムダ。
- 698 名前:nobodyさん mailto:sage [2012/01/12(木) 15:23:17.54 ID:???]
- pcntl_fork()の話してんのになんでsystem()になってんの。
- 699 名前:nobodyさん mailto:sage [2012/01/12(木) 15:29:16.52 ID:???]
- アホですから
- 700 名前:nobodyさん mailto:sage [2012/01/12(木) 15:30:19.76 ID:???]
- >>696
アハハ、なんで標準出力捨てないの
|

|