【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等)・フレームワークは各該当スレへ
0638nobodyさん
2012/01/11(水) 17:40:57.15ID:???0639nobodyさん
2012/01/11(水) 17:43:06.65ID:???のコンパイルは結局うまくいったのか?
0641nobodyさん
2012/01/11(水) 18:17:50.79ID:???0642nobodyさん
2012/01/11(水) 19:03:57.60ID:???0643nobodyさん
2012/01/11(水) 19:05:55.41ID:???0645nobodyさん
2012/01/11(水) 19:31:49.93ID:???0646nobodyさん
2012/01/11(水) 20:04:08.13ID:???for ($i = 0; >>643の心が折れるまで; $i++) {
$result[] = kokuhaku($list[$i]);
}
if ($result == NULL){
die("まだ2次元がある");
}
0647nobodyさん
2012/01/11(水) 20:48:30.27ID:tHZDD+V0hoge.txtというテキストファイルがありまして
100バイトの文字列\n
100バイトの文字列\n
100バイトの文字列\n
:
:
:
と500行ある500KBののテキストファイルがあるとします
このファイルから
「499行目と500行目」
か
「1行目と2行目」
だけを取り出すとき、サーバーの負荷は
両方1〜500行の文字を取り出すときとほぼ同じ負荷でしょうか?
0648nobodyさん
2012/01/11(水) 20:50:49.28ID:???501 :nobodyさん:2012/01/08(日) 19:46:27.97 ID:???
>>489
abstractとinterfaceの具体的な使い分けはどうしてますか?
実装が書きたかったらabstractっていうのはあまりにもアレなので
哲学とまでは言いませんが、確固たる理由をつけて使い分けたいんです
0649nobodyさん
2012/01/11(水) 20:52:56.46ID:???読み込む位置が確定していたら、シークするだけの違いしかなく負荷に大差ないが。
改行位置の判定からやっていたら後ろの方が手間掛かる。
0650nobodyさん
2012/01/11(水) 21:08:42.58ID:???真実は一つだけ
怒りは自然な感情
戦争・テロは無くならない
死刑には殺人の抑止力がある
虐められる側にも虐めの原因がある
自己チューな人間ほど自己愛が強い
などの間違いを解説中
感情自己責任論
0651nobodyさん
2012/01/11(水) 21:13:42.02ID:tHZDD+V0という事はどんなやり方でも最低でも500KBかかってしまうという事でしょうか?
200バイト(2行分)程度だけで住む方法ないかなーと思ってたのですが
0652nobodyさん
2012/01/11(水) 21:34:41.86ID:???0653nobodyさん
2012/01/11(水) 22:26:31.01ID:???> 「499行目と500行目」
> 「1行目と2行目」
この二つの負荷には大差がないといっているんだろう。
本来の質問であるところの、
> 1〜500行の文字を取り出すとき
との負荷には大きな差があるよ。
固定長じゃない場合は、最後の2行を得るのが少し面倒だけど。
0654nobodyさん
2012/01/11(水) 22:33:40.13ID:???0655nobodyさん
2012/01/11(水) 22:33:46.01ID:???0656nobodyさん
2012/01/11(水) 22:45:01.77ID:???fileで全行読み込んでも良いよ。
そこがボトルネックになってから改良したら良い。
0657nobodyさん
2012/01/11(水) 22:47:30.54ID:???一応動くやつを作ってから速度測定して、
全体の中で時間掛かっているところに手を加えれば良い。
0658nobodyさん
2012/01/11(水) 23:02:44.07ID:tHZDD+V0「499行目と500行目」「1行目と2行目」この二つは差があるのでしょうか?という質問でした
説明不十分で申し訳ないです
やっぱりテキストファイルを固定長形式にするしか無いですかね?
この場合
100バイトの文字列
2Kバイトの文字列
4バイトの文字列
:
となった場合、全部2KBになって500行あったら1Mになってしまうので避けてたのですが
0659nobodyさん
2012/01/11(水) 23:06:53.90ID:???全て(1〜500行)のロードと2行のみでは負荷は違う。
可変長だったらindexをファイルの後方か先頭に配置して必要なところを読めば速いです。
0660nobodyさん
2012/01/11(水) 23:16:37.71ID:???そしたらメモリ管理など気にしなくて済むしキャッシュなども自動で使ってくれる
0661nobodyさん
2012/01/11(水) 23:39:54.74ID:GX2tXR1t0662nobodyさん
2012/01/11(水) 23:50:01.97ID:VbJoExbWすみません、今まで色々試しにやってて返事が遅くなりました
http://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 できません');
}としました
0663nobodyさん
2012/01/11(水) 23:50:43.62ID:VbJoExbWchild: 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ではこのようなものなのでしょうか?
学習不足で申し訳ないです
0665nobodyさん
2012/01/12(木) 02:58:10.26ID:KRgm5yh10666nobodyさん
2012/01/12(木) 03:08:54.02ID:???0667nobodyさん
2012/01/12(木) 03:25:30.76ID:???そのコードでできたよ。
child: 0
parent: 0
child: 1
parent: 1
child: 2
parent: 2
(略)
child: 8
parent: 8
child: 9
parent: 9
wait begin.
wait end.
0669nobodyさん
2012/01/12(木) 03:43:15.46ID:???0670nobodyさん
2012/01/12(木) 03:52:56.74ID:???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:???■ このスレッドは過去ログ倉庫に格納されています