【PHP】下らねぇ質問はID出して書き込みやがれ 114
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2012/01/02(月) 02:03:25.50ID:???過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。
◆前スレ
【PHP】下らねぇ質問はID出して書き込みやがれ 113
http://kohada.2ch.net/test/read.cgi/php/1322564127/
◆質問用テンプレ
【OS名】CentOS
【PHPのバージョン】5.3
【連携ソフトウェア】MySQL ImageMagick
【質問内容】
◆質問する時の注意
・ スレを上げて自分のIDを表示させること。(メール欄に何も記述しない。専ブラのsageチェックを外す)
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に関連リンクの公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
(PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。)
◆質問後の注意
・2回目以降は最初に質問した際のレス番号を入れて、偽者防止に必ずIDを表示させること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
【その他諸注意】
・SQL・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
0671nobodyさん
2012/01/12(木) 04:51:39.62ID:???0676nobodyさん
2012/01/12(木) 13:02:25.38ID:???できる関数がありますが、これはPHPをCGIモードで
動かしている場合にのみ有効です。
通常はPHPをApacheモジュールとして動作させていることが
多いので、これが使えないケースが多々あります。
http://techblog.ecstudio.jp/tech-tips/php-multi.html
0677nobodyさん
2012/01/12(木) 13:15:01.92ID:???Perlで良いじゃん。
0678nobodyさん
2012/01/12(木) 13:19:01.14ID:???pcntl_fork関数は存在するし、forkも成功したように見えるけど、並列処理されないなんて結果になるということですか
0679nobodyさん
2012/01/12(木) 14:01:06.08ID:???俺は並列処理の事なんか分かっていないので、このやり方で合っているか分からないけれど
<?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
http://www.php.net/manual/ja/pcntl.installation.php
にはCLI版も可能って書いてるんじゃないの?
>>675
ちなみに自分はcentOSです
0680nobodyさん
2012/01/12(木) 14:01:29.80ID:QAUYYhrI書き込むときの排他制御はどのようにやるのでしょうか?
0682nobodyさん
2012/01/12(木) 14:02:25.17ID:???0683679
2012/01/12(木) 14:02:52.80ID:???0684nobodyさん
2012/01/12(木) 14:10:41.80ID:???レンタルサーバーとかでは。
自宅で一人で使う目的だったらマルチスレッドをONにしてコンパイルすればいい。
しかしソースコードに汎用性が無くなる。
Curlをつかっとけ。5.3か5.2から標準で並列に使える。
0685nobodyさん
2012/01/12(木) 14:15:13.44ID:???0686nobodyさん
2012/01/12(木) 14:16:07.48ID:???プロセス制御機能を有効にするには、 configure のオプションに --enable-pcntl を付け、
CGI 版あるいは CLI 版の PHP をコンパイルする必要があります。
注意: 現在、このモジュールは非 Unix 環境(Windows)では動作しません。
http://www.php.net/manual/ja/pcntl.installation.php
0688679
2012/01/12(木) 14:27:53.78ID:???>>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;
のように書いた
0689nobodyさん
2012/01/12(木) 14:28:15.56ID:???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秒後に表示された
これってどういうこと?
並列処理されていないってことだよね?
0690nobodyさん
2012/01/12(木) 14:30:51.41ID:???system('php forkc1.php');
system('php forkc2.php');
この時点で気付けよ
0691nobodyさん
2012/01/12(木) 14:36:08.80ID:???30秒かかるのは当たり前か・・・笑
>>679は10秒で済んでるから親プロセスと子プロセスはちゃんと並列処理されてるってことだね
自分の>>688の書き方が悪いだけか
この流れの話は、親プロセスから子プロセスを複数作成し、それを同時に実行
つまり3つの子プロセスがあれば4つとも10秒後に終わらせるということだよね?
となると実装法が思いつかないけど、pcntl_fork()っていうのを3回呼び出せばいいってことじゃないかな?
分からん
0694nobodyさん
2012/01/12(木) 14:56:29.29ID:???system('php forkc1.php &');
と、バックグラウンドプロセスにすればよろしい。
プロセスの終了待ち処理を入れる必要があるけど。
0695nobodyさん
2012/01/12(木) 15:05:23.27ID:???なるほど
実はまだ挑戦してて(笑
一度やり始めたら意地でもとなってしまってw
$pid[$i] = pcntl_fork();等と複数回呼び出して、
その後system()を呼び出すとかやってみたのですが30秒かかったりで
バックグラウンドプロセスという発想はなかったです
今から外に出ないといけないんですが、最後にちょっと試してみます
0696nobodyさん
2012/01/12(木) 15:10:13.69ID:???アハハ、今>>688のコードにて
if ($pid == 0) {
system('php forkc1.php &');
system('php forkc2.php &');
system('php forkc3.php &');
}
としましたが
今度は31秒かかってしまいましたw
どこがおかしいのか分かりませんが、また帰ってからやってみます
0697nobodyさん
2012/01/12(木) 15:17:35.81ID:???0698nobodyさん
2012/01/12(木) 15:23:17.54ID:???0699nobodyさん
2012/01/12(木) 15:29:16.52ID:???0701nobodyさん
2012/01/12(木) 15:31:28.10ID:???たぶん>>686のWindowsでは動かないというのをみたからじゃないのかな。
ほんとに動かないか知らないけど
0702nobodyさん
2012/01/12(木) 15:50:09.93ID:at33kcZ9CMSを使うか、フレームワーク使うかどっちがよろしいですかね・・・。
0703nobodyさん
2012/01/12(木) 16:55:38.26ID:???その文章だけを読んで「ちょっとしたポータルサイト」がどれほどの規模のものを指しているのか
わかる人は少ないだろう
0704nobodyさん
2012/01/12(木) 17:15:27.45ID:???0706nobodyさん
2012/01/12(木) 17:30:43.50ID:???どっちも詳しくない私は
使わない方がやりやすい。
0707nobodyさん
2012/01/12(木) 17:42:30.00ID:???0708nobodyさん
2012/01/12(木) 20:44:35.20ID:???0709nobodyさん
2012/01/12(木) 20:59:53.31ID:???0710nobodyさん
2012/01/12(木) 21:35:47.31ID:???0712nobodyさん
2012/01/12(木) 21:42:14.04ID:???0713nobodyさん
2012/01/12(木) 21:43:04.05ID:???0714nobodyさん
2012/01/12(木) 22:20:03.29ID:???0716nobodyさん
2012/01/12(木) 22:29:06.06ID:???なんで人の質問を俺がやってるのか分からんが、それが出来たら楽に処理できるような事も
出てくるかなと思ってやってみたんだけど
>>698
いや、だって引数とって一気に別ファイルのスクリプト実行するんでしょ?
system()じゃないの?
>>700
ごめんどういうこと?
$php fork-test.php > /dev/null
とかってこと?
同時に実行されていくということは
c1:0
c2:0
c1:1
c2:1
のように出てくるのかなとか思ってたんだけど違うん?
0719nobodyさん
2012/01/12(木) 22:48:45.79ID:???ごめん、分かりませんw
forkって子プロセスを作成->親プロセスは待機->子プロセス終了->親プロセス実行
って動作だよね?
で、子プロセスは親プロセスのコピーであると
だから元々親プロセスの時点で実行されていたり、格納していた変数の値とかは子プロセスも保持していると
ま、自分の分からない所は子プロセスを複数作成するにはPHPだとpcntl_fork()をその回数実行すると
ただ、自分がやったのでは
$pid1=pcntl_fork();
$pid2=pcntl_fork();
それぞれにて上記のようなfor()を使うと一緒に実行されるんじゃなくて、直列(逐次)処理になってて「う〜ん」と
別ファイルのスクリプトを実行するのにPCNTL関数内にそんな感じの関数もないし、
データベースなどから設定値を取得してきて、そこから得てきたそれぞれの設定値を渡すとなると
system()かなと考えて・・・
例えばどんな風に書けばいいんですかね?
0721nobodyさん
2012/01/12(木) 22:54:57.73ID:???ちなみに>>662におけるsleepをタイムスライス放棄のみのコードに変更した場合の出力結果例はこんな感じ。
child1: 0
parent: 0
parent: 1
child1: 1
parent: 2
parent: 3
child1: 2
parent: 4
parent: 5
child1: 3
parent: 6
child1: 4
parent: 7
child1: 5
parent: 8
child1: 6
parent: 9
wait begin.
child1: 7
child1: 8
child1: 9
wait end.
あとID出せよカス
0722nobodyさん
2012/01/12(木) 23:11:37.74ID:QxDXzJq0sleep(-1)ってのが出てきましたがこれの事ですかね?
俺は>>667のようにはならないんですが、OSは何ですか?
つまり、>>662のようなfor()文使った場合は、子プロセス->親プロセス->子プロセス->親プロセス->
という挙動をすると言うことですか?
しかし俺全然だめだなぁ・・・
0723nobodyさん
2012/01/12(木) 23:45:38.66ID:???<script type="text/javascript" src="test.js">
test.jsを変更しても反映されないことがあります。
ブラウザがキャッシュか何かをしているのでしょうか?
回避策とかありましたらご教授お願いします。
0724nobodyさん
2012/01/12(木) 23:49:13.05ID:???日付が変わってればキャッシュを破棄しそうなもんだけど。
プロキシ的なものが挟まってたりしない?
一応試せることとしては、たとえばIEならCtrl+F5ですべて再読み込みする
0725nobodyさん
2012/01/12(木) 23:52:16.83ID:???ブラウザ特有の現象かもしれないから後でちゃんと自分で調べるとして
とりあえずそういう時は応急処置にファイル名に適当な文字列を追加するもんだ
echo '<script type="text/javascript" src="test.js?' . md5(microtime(true)) . '">';
0726nobodyさん
2012/01/13(金) 00:05:03.08ID:???0727nobodyさん
2012/01/13(金) 00:11:52.36ID:???0728nobodyさん
2012/01/13(金) 00:29:29.21ID:???かけたくないならかけなくていい
0729nobodyさん
2012/01/13(金) 00:33:49.01ID:???0730nobodyさん
2012/01/13(金) 00:36:37.67ID:???0731nobodyさん
2012/01/13(金) 00:37:36.05ID:???0733nobodyさん
2012/01/13(金) 01:16:41.96ID:???>echo '<script type="text/javascript" src="test.js?' . md5(microtime(true)) . '">';
time()とかuniqid()で事足りる
>md5(microtime(true))
ない
0735nobodyさん
2012/01/13(金) 01:43:03.96ID:???これが実現できればなんでもいいだろ
何を拘ってるんだ?パフォーマンス?(笑)
そんなミジンコみたいなところでケチつけるなレスの無駄使い
0736nobodyさん
2012/01/13(金) 01:48:42.10ID:???http://stackoverflow.com/questions/637278/what-is-the-best-way-to-generate-a-random-key-within-php
0737nobodyさん
2012/01/13(金) 02:15:09.35ID:???> time()とかuniqid()で事足りる
えっ
> >md5(microtime(true))
> ない
こっちの方がまだマシ
0738nobodyさん
2012/01/13(金) 02:18:26.75ID:???0739nobodyさん
2012/01/13(金) 02:22:50.77ID:???>>738みたいな意味のないレスをする人がどう考えてるのかさっぱりわからんけど。
0740nobodyさん
2012/01/13(金) 02:28:45.64ID:???0741nobodyさん
2012/01/13(金) 02:30:22.51ID:???0742nobodyさん
2012/01/13(金) 02:31:28.69ID:???0743nobodyさん
2012/01/13(金) 02:34:35.61ID:???0744nobodyさん
2012/01/13(金) 02:43:41.18ID:???0745nobodyさん
2012/01/13(金) 02:45:27.34ID:???全くだな
自分につっこむ機会があると思うと頑張ってつっかかってきちゃうやつワロスwwww
上級者からすればそんなこまけーこたぁどうでもいいんだよって感じだがな
0746nobodyさん
2012/01/13(金) 02:47:04.65ID:???上級者()
早く吊れよ
0747nobodyさん
2012/01/13(金) 02:51:11.50ID:KkkOzRWtBitcometみたいに。
0748nobodyさん
2012/01/13(金) 03:12:53.61ID:???ヴォエエエエエエ ブヒョー コーヒー吹かれた
0749nobodyさん
2012/01/13(金) 03:14:54.14ID:???uPnPってわけでもなさそうにみえるが、NAPTを自動でやりたいってこと?
なら、ネットワーク越しに操作できるルータを手に入れる必要がありそう。
そんな話じゃないよ!ってことならBitcometの動作をもっとよく見ること。
0750nobodyさん
2012/01/13(金) 03:15:41.52ID:???低級者乙
早く吊れよ
0751nobodyさん
2012/01/13(金) 03:23:44.99ID:???0752nobodyさん
2012/01/13(金) 03:25:36.98ID:???0753nobodyさん
2012/01/13(金) 03:32:16.25ID:???無理ぽ。
0754nobodyさん
2012/01/13(金) 03:32:56.22ID:???同一人物だとは思うけど
俺が課題出してやるから解決してみろ的な
ほんと消えてくれないかな
0756755
2012/01/13(金) 03:40:02.10ID:???補足だけど、5.1系のセマフォがバグありだったから気をつけて。
いまさらあえて5.1使うこともないだろうけど、割と最近のRHELまでは5.1系だった気がするので遭遇することもあるかもしれない
0757nobodyさん
2012/01/13(金) 03:52:09.82ID:???あなたの言うように、
forkとストリームソケット使えば「遊び程度」ではどうにかなるだろうね。
しかし、商売用には素直にマルチドレッド言語を使ったほうがいい。
デフォルトで並行できるので開発スピードとパフォーマンスが
「圧倒的に」優れる。forkくんの質問と回答のあまりの馬鹿馬鹿しさに
気持ち悪い。
0758nobodyさん
2012/01/13(金) 04:15:10.88ID:???パフォーマンスについてはまったくもってそのとおり。ただ、それらを同じ土俵にあげること自体が間違えているよね。
開発スピードについては比較対象に依存する。マルチプロセス処理を記述する場合に圧倒的に開発スピードが優れる言語は何?
マルチスレッド言語とやらが何を指しているのかわからないが、たとえばCLRで提供されているワーカースレッドのようなものを指している?
ちょっと内容が漠然としているように思うよ。
0759nobodyさん
2012/01/13(金) 09:09:47.21ID:???0760nobodyさん
2012/01/13(金) 09:19:15.93ID:???0761nobodyさん
2012/01/13(金) 09:21:03.11ID:1Ih2hdXs管理機能とかもついてます。
作成の仕方として以下の3つの方法が浮かびました。
フレームワークを使って作成する。(codeigniter)
CMSを使って作成する。(MT or WP)
フレームワークにCMSプラグインを入れて作成する。
どれがいいでしょうか?
0762nobodyさん
2012/01/13(金) 09:21:55.46ID:???0763nobodyさん
2012/01/13(金) 11:33:36.37ID:???悩むほどの話じゃないし、どれつかえばいいかえらべないならけんさくしていちばんうえつかえばいいだけ
0765587
2012/01/13(金) 16:04:33.77ID:???しばらく勉強して、なんとか14日以前の日付を10日前で表示するところまで辿り着いてきましたが、なぜか1969年になってしまいます。。
$ptimeはUNIXTIMEではなく1323413498等という数字が入っているのですが、
これを一度UNIXTIMEにするには、どのように記述すればいいでしょうか?
ここがうまくいけば、なんとかなりそうです。
よろしくお願いしますm(_ _)m
↓年だけおかしくなっている現状です。
$post_date = date("y/m/d", $ptime);
$limit = 60 * 60 * 24 * 14; // 過去14日よりも前のものだった場合、
if($_SERVER['REQUEST_TIME'] - $post_date > $limit) {
$post_date -= 60 * 60 * 24 * 10; // 表示は10日前の日付にする。
}
$date = date(y/'m/d', $post_date);
※$dateで表示させています。
0766587
2012/01/13(金) 16:09:06.03ID:???すいません、よく確認したら、表示されている日付が20日ぐらい前になっていました(^^;
とりあえず$ptimeはUNIXTIMEにすれば解決できるのかと思います。
度々すいませんが、よろしくお願いします。。
0767nobodyさん
2012/01/13(金) 16:20:08.93ID:???俺はこっち使ってる
strtotime("- 10 day",time())
0768nobodyさん
2012/01/13(金) 16:32:32.90ID:???0769765
2012/01/13(金) 17:03:53.19ID:???■ このスレッドは過去ログ倉庫に格納されています