トップページphp
1001コメント311KB

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

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2012/01/02(月) 02:03:25.50ID:???
質問者はまず>>1を良く読むこと(必須!)
過去スレ、関連スレ、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等)・フレームワークは各該当スレへ
0588nobodyさん2012/01/10(火) 20:01:42.81ID:???
>>587
$date = 書き込んだ日;
$date = mktime($date);
$now = time();
$date = $now - $date > 60*60*24*10 ? 10 : $date;
0589nobodyさん2012/01/10(火) 20:02:28.76ID:???
あ、ごめん、最後の行読んでなかった
0590nobodyさん2012/01/10(火) 20:03:08.26ID:???
>>587
$dateってただの変数じゃん
これでどうかな
<?php
$posted_str = "2011/12/26"; //投稿日
$posted = strtotime($posted_str);
$now = time();
$date_format = "Y/m/d";

$posted_disp = $posted<($now-(60*60*24*15)) ? ($now-(60*60*24*10)) : $posted;

print "今日:".date($date_format)."<br />
元投稿日:".date($date_format,$posted)."<br />
表示投稿日:".date($date_format,$posted_disp);
0591nobodyさん2012/01/10(火) 20:03:29.35ID:???
あ、ごめん、よく読み直したら全然ちがったw
05925902012/01/10(火) 20:14:05.38ID:???
>>588,589591 は違う人
0593nobodyさん2012/01/10(火) 20:28:04.95ID:???
回答も含めて色々ひどいな

$post_date // これを投稿日時だとする(UNIXTIME)
$limit = 60 * 60 * 24 * 14; // 期限14日前とする

if($_SERVER['REQUEST_TIME'] - $post_date > $limit) {
$post_date -= 60 * 60 * 24 * 10;
}

echo date('Y-m-d', $post_date);
05945872012/01/10(火) 21:08:57.11ID:???
皆さん、レスありがとうございます!
すごい助かります!

60 * 60 * 24 * 10 の10は10日前という数字だとわかりますが、
他の数字60,60,24 の意味を教えていただけると勉強になります。
よろしくお願いしますm(_ _)m
0595nobodyさん2012/01/10(火) 21:16:12.68ID:???
60 * 60 * 24 = 1日
1秒をかけてる
0596nobodyさん2012/01/10(火) 21:17:14.75ID:???
>>593
$_SERVERは使うな!!!!!!!!!!!!!!!
getenvを使えっ!!!!!!!!!!!!!!!!!!!!
0597nobodyさん2012/01/10(火) 21:17:39.58ID:???
60秒 * 60分 * 24時間 = 1日
0598nobodyさん2012/01/10(火) 21:28:09.69ID:???
>>596
公開するプログラムでもあるまいに、
自分の環境チェックもしないやつになっちまうだろ。
0599nobodyさん2012/01/10(火) 21:34:28.20ID:HU7fZVh4
データベースをPDOにてプレースホルダを利用し、変更したいのですが、質問させてください
カラム名がaaa、bbb、cccとして、
その内の一つ、または複数の値を変更するような場合にはどのように記述すればいいのでしょうか?

マニュアルなどを見ると、VALUESのようにデータベースに与える値をプレースホルダに割り当てるのは分かるのですが、
自分は値だけでなく、カラム名にも変数を割り当てたいのです
prepare('UPDATE table SET $name = :name WHERE $url = :url')のような型です
まさかprepare('UPDATE table SET :name1 = :name2 WHERE :url1 = :url2')のような型にはできないでしょうし
この場合、どのように記述すればいいのでしょうか?
0600nobodyさん2012/01/10(火) 21:34:55.57ID:???
>>596
は?その根拠は?
おまえENVの意味もわかってないだろどうせ
0601nobodyさん2012/01/10(火) 21:37:15.54ID:???
>>599
SQLごとに作れ
0602nobodyさん2012/01/10(火) 21:39:00.09ID:???
>>599
普通に
UPDATE table SET col1=? WHERE col2=?
でいいんじゃねーの
カラム名に変数割り当てるなら上を
"UPDATE table SET {$col1}=? WHERE {$col2}=?"
すりゃいいじゃん
06035872012/01/10(火) 22:25:58.95ID:???
みなさんレスありがとうございます。
とても助かります!

とりあえず593の$post_dateを$dateに変えて記述してみたのですが、
$limit = 60 * 60 * 24 * 14; // 期限14日前とする
の行でエラーが出てしまいます。

最終的に表示させたい場所に
echo date('Y-m-d', $post_date);
を書けばいいという認識であっていますか??
初歩的すぎて、すいませんが、よろしくお願いします。

0604nobodyさん2012/01/10(火) 22:33:03.94ID:???
>>603
その行でいきなりエラーはないだろw
投稿日時はどうやって受け取って、どういう形式で保存してんの?
例)2012/01/10、とか、2012-01-10、とか、1326121200、とか。
0605nobodyさん2012/01/10(火) 22:33:49.35ID:???
>$limit = 60 * 60 * 24 * 14; // 期限14日前とする
>の行でエラーが出てしまいます。

んなアホな
違うところだろ

>最終的に表示させたい場所に
>echo date('Y-m-d', $post_date);

しらんがな
どんなソースになってるのかもわからんし
0606nobodyさん2012/01/10(火) 22:40:12.89ID:???
>>600
ggrks
0607nobodyさん2012/01/10(火) 22:42:27.44ID:???
>>603
$dateの中身を書きなさい
0608nobodyさん2012/01/10(火) 22:49:22.50ID:???
素人相手に偉そうに語るのがこのスレです。
0609nobodyさん2012/01/10(火) 22:49:50.87ID:DbdGI1rD
【OS名】CentOS 5.5
【PHPのバージョン】5.2.17
【連携ソフトウェア】MySQL GD
【質問内容】
GDの機能を使って画像を作成して、データベースに入れていくのですが、
imagepng()とかで画像をファイルに保存したり、ブラウザに出したりしますよね?
これの出力結果を直接文字列として変数に格納したいのですが、どうすればよいでしょうか?
$data = imagepng()とかも試してみましたが、trueしか返ってきませんでした。
06105872012/01/10(火) 22:52:45.04ID:???
ありがとうございます。
すいません、違うところのエラーですか。(^^;


メールで投稿する形式の掲示板で、メールサーバーに
投稿記事を取りに行く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と書いたところに日時が表示されています。
0611nobodyさん2012/01/10(火) 22:54:19.13ID:DbdGI1rD
自己れす。下記で行けそうです。
ob_start();
imagepng($resource);
$data = ob_get_contents();
ob_end_clean();
0612nobodyさん2012/01/10(火) 22:56:28.46ID:???
>>609
ヒント:base64_encode

>>610
もうここで聞く以前の学習を
>$date = date("y/m/d", $ptime);
$ptimeには何が入ってるの?すでにUNIXTIMEが入ってるなら
$date = $ptime;
でいいよ、代入する意味ないけど
0613nobodyさん2012/01/11(水) 00:11:45.44ID:???
>>610
dateとstrtotimeは使うな
datetimeを使え
0614nobodyさん2012/01/11(水) 00:23:58.10ID:???
ついに使うな厨も登場したか
0615nobodyさん2012/01/11(水) 00:26:28.08ID:dfPHpXiU
phpにおける分散オブジェクトについて語りましょう!
0616nobodyさん2012/01/11(水) 00:29:05.90ID:???
>>615
http://kohada.2ch.net/test/read.cgi/php/1131016915/
0617nobodyさん2012/01/11(水) 00:35:11.26ID:dfPHpXiU
さあ、分散オブジェクトについて語りましょう!
0618nobodyさん2012/01/11(水) 00:37:35.15ID:dfPHpXiU
>>616
PHPの分散オブジェクト技術にはどのようなものがありますか?
0619nobodyさん2012/01/11(水) 00:41:39.74ID:???
荒らし認定
0620nobodyさん2012/01/11(水) 12:55:49.06ID: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で他に何か設定しなきゃいけないのでしょうか。
ご意見よろしくお願いします
0621nobodyさん2012/01/11(水) 13:00:09.61ID:???
>>620
ドメインが違うんだから無理。
それでセッション引き回しできたら、ハッキングやりほうだい
0622nobodyさん2012/01/11(水) 13:15:03.58ID:???
>無いが原因でしょうか?
マニュアルを読まないのが原因です
0623nobodyさん2012/01/11(水) 13:27:59.44ID:eyRErrPB
>>621
ありがとうございます
http://php.net/manual/ja/function.session-set-cookie-params.php
を見てるんですが、
「すべてのサブドメインでクッキーを有効にしたい場合は、先頭にドットをつけて '.php.net' のようにします。」
とあるようにサブドメインの変更までなら対応できるのではないですか?
0624nobodyさん2012/01/11(水) 13:30:15.06ID:???
http://d.hatena.ne.jp/n314/20100512/1273658459
0625nobodyさん2012/01/11(水) 13:36:51.45ID:???
>>624
そのブログの設定ファイルがphp.iniより優先するということでしょうか
実はちょうど今session_set_cookie_params();で対応できたんですが
そちらの勉強もしてみます
ありがとうございました
0626nobodyさん2012/01/11(水) 13:44:43.70ID:???
>>621
へぇ
0627nobodyさん2012/01/11(水) 14:07:42.61ID:VbJoExbW
質問させてください
皆さんはPHPにて「並行処理」をしたい場合、どのようにされていますでしょうか?
自分がやりたいのは、あるスクリプトがあり、それを引数(設定値)だけを変えて
決められた時間の間隔にて(sleep()等を使って)繰り返し、大量に(少なくとも20位)かつ”同時に”実行したいと思っております
子プロセスの同期は必要ないと思います
ファイルをコピーして、各スクリプト毎に設定値を書いて・・・って言うのは現実的ではないので
データベースなどからリストを取得して、その設定値を使ってそれぞれを同時に実行したいと思っております
(fwrite()などで、設定毎にスクリプトを作成していこうかとも考えましたが・・・)

しかし色々考えたのですが、全然いいアイデアが浮かんできません
このような場合、どのようにすればいいのでしょうか?
0628nobodyさん2012/01/11(水) 14:08:07.06ID: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のような実装をしたい場合に何かアドバイスを頂けないでしょうか?
0629nobodyさん2012/01/11(水) 14:20:29.14ID:???
並列させたい分だけforkすりゃいいだろ
0630nobodyさん2012/01/11(水) 15:00:30.88ID:???

foreach ( $list ... ) {
if ( ($pid = pcntl_fork()) === 0 ) {
子でやりたいこと
exit(0);//終わる
} else if ($pid == -1) die("x");
}

//親での処理(終わるの待つとか)


0631nobodyさん2012/01/11(水) 15:07:26.35ID:???
>>627
並列処理したい処理をもうちっと具体的にくれ
0632nobodyさん2012/01/11(水) 15:25:25.54ID:VbJoExbW
皆さん、返答ありがとうございます

自分のやりたい事とは少し違いますが、説明が簡単な例としては、Googleのクローラなんかがあると思います
データをどういう手法か分かりませんが、初期のものでも1サーバに300ものクローラを使っていたとの事です

クローラは動き回っているので考え方が違うかもしれませんが、例えば自社や関連会社のデータなど固定されたターゲットの場合はcronなどで定期的に訪問出来るでしょうが、
それらの設定値をいちいちファイルに記述するのも大変なので、それぞれの場所にてデータを取得するためのxPathなど設定値リストを読み込んで、
スクリプトにて一気に並行処理にて自動的に行う、という事をやりたいと考えております

ただ、アクセスし続けるのも相手側に付加がかかるので、各スクリプトの訪問間隔を大きい相手は5分、小さい相手は1時間などにしたいと考えております

また、それらのデータを正常に取得したら、その瞬間に今度はそのデータを解析・整形するようなスクリプトを起動させたいと考えております

以上の点にて宜しくお願いいたします
0633nobodyさん2012/01/11(水) 16:03:46.74ID:???
いまいち何をやりたいかわからんが
取得先が大量にあって直列処理だと時間がかかりすぎるしそれぞれ取得設定を書くのもめんどいから
並列にしたいってことでおk?
ならcURLのマルチ使って、設定値をdbなどから引っ張ってきてから
回しながらcallbackなんかをうまく設定して一気にゴー、で行けるんじゃないか。
やりたいことと違っていたならすまん。
参照:ttp://techblog.ecstudio.jp/tech-tips/php-multi.html
0634nobodyさん2012/01/11(水) 16:19:22.57ID:???
>>632
Webのクローラーはデータ取得に暇がかかるのが明白だから並列処理するのが当たり前のアプローチ
0635nobodyさん2012/01/11(水) 16:46:00.24ID:???
あえてクローラーをPHPで作ることもないだろ。
PHPは標準で並列処理できない仕様だ。
並列処理できる言語、並列処理できるソフトを使って保存してから
PHPでそこにアクセスしたら良い。
0636nobodyさん2012/01/11(水) 16:58:01.39ID:???
しかしcurlだけは標準でダウンロードが完了してなくても処理が帰ってくるから擬似的には並列処理できるな。
通信だけは並列にできるいうことだが。クローラーはパフォーマンスを落とさずに、並列処理可能な言語・ツールに並べる可能性はある。
0637nobodyさん2012/01/11(水) 17:09:13.29ID:???
ここで適切なアドバイスしても、馬鹿には無理だろ。
0638nobodyさん2012/01/11(水) 17:40:57.15ID:???
返事なくなっちゃったね。
0639nobodyさん2012/01/11(水) 17:43:06.65ID:???
http://engawa.2ch.net/test/read.cgi/linux/1324631185/427
のコンパイルは結局うまくいったのか?
0640nobodyさん2012/01/11(水) 18:11:13.28ID:???
>>630 じゃだめなん?
0641nobodyさん2012/01/11(水) 18:17:50.79ID:???
よくわからないから無視したんだろw
0642nobodyさん2012/01/11(水) 19:03:57.60ID:???
質問してしっぱなしかよ・・・
0643nobodyさん2012/01/11(水) 19:05:55.41ID:???
いつも質問答えてる側の奴らから難易度高めの問題がほしい
0644超難問!2012/01/11(水) 19:10:37.65ID:???
>>643が彼女をつくるにはどうしたらいいでしょうか?
0645nobodyさん2012/01/11(水) 19:31:49.93ID:???
彼女(笑)
0646nobodyさん2012/01/11(水) 20:04:08.13ID:???
$list = array("清美", "里子", "友恵", "友里", "とめ", "愛子", "雅子", ...... );
for ($i = 0; >>643の心が折れるまで; $i++) {
$result[] = kokuhaku($list[$i]);
}
if ($result == NULL){
die("まだ2次元がある");
}
0647nobodyさん2012/01/11(水) 20:48:30.27ID:tHZDD+V0
質問です

hoge.txtというテキストファイルがありまして

100バイトの文字列\n
100バイトの文字列\n
100バイトの文字列\n



と500行ある500KBののテキストファイルがあるとします
このファイルから
「499行目と500行目」

「1行目と2行目」
だけを取り出すとき、サーバーの負荷は
両方1〜500行の文字を取り出すときとほぼ同じ負荷でしょうか?
0648nobodyさん2012/01/11(水) 20:50:49.28ID:???
>>643

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
>>649
という事はどんなやり方でも最低でも500KBかかってしまうという事でしょうか?
200バイト(2行分)程度だけで住む方法ないかなーと思ってたのですが
0652nobodyさん2012/01/11(水) 21:34:41.86ID:???
固定長なら200バイトだけで済むだろ。
0653nobodyさん2012/01/11(水) 22:26:31.01ID:???
>>649はちょっと読み間違いをしているね。
> 「499行目と500行目」
> 「1行目と2行目」
この二つの負荷には大差がないといっているんだろう。

本来の質問であるところの、
> 1〜500行の文字を取り出すとき
との負荷には大きな差があるよ。

固定長じゃない場合は、最後の2行を得るのが少し面倒だけど。
0654nobodyさん2012/01/11(水) 22:33:40.13ID:???
500行のロードと、2行のみロードでは負荷に違いがある。
0655nobodyさん2012/01/11(水) 22:33:46.01ID:???
実験してみればいいじゃん
0656nobodyさん2012/01/11(水) 22:45:01.77ID:???
500Kくらいたいした事で無い。
fileで全行読み込んでも良いよ。
そこがボトルネックになってから改良したら良い。
0657nobodyさん2012/01/11(水) 22:47:30.54ID:???
全ての箇所で低リソースを目指していたら手間が掛かって進まない。
一応動くやつを作ってから速度測定して、
全体の中で時間掛かっているところに手を加えれば良い。
0658nobodyさん2012/01/11(水) 23:02:44.07ID:tHZDD+V0
ごめんなさい、1〜500行の文字を取り出すと比べて
「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:GX2tXR1t
PHPとAsp.netってどう違うんですか?
0662nobodyさん2012/01/11(水) 23:50:01.97ID:VbJoExbW
>>633-642
すみません、今まで色々試しにやってて返事が遅くなりました
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: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ではこのようなものなのでしょうか?

学習不足で申し訳ないです
0664nobodyさん2012/01/12(木) 01:50:16.25ID:???
>>662
なぜPHPを使っているのですか?
0665nobodyさん2012/01/12(木) 02:58:10.26ID:KRgm5yh1
やっぱりphpでは並列無理ぽ。
0666nobodyさん2012/01/12(木) 03:08:54.02ID:???
ニートおっさんには無理
0667nobodyさん2012/01/12(木) 03:25:30.76ID:???
>>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.
0668nobodyさん2012/01/12(木) 03:39:54.92ID:???
>>667
できてない。
0669nobodyさん2012/01/12(木) 03:43:15.46ID:???
並列と分散はPHPの泣きどころ。
0670nobodyさん2012/01/12(木) 03:52:56.74ID:???
かろうじて並列できても実用性は全くないことに気づけよ
0671nobodyさん2012/01/12(木) 04:51:39.62ID:???
同じやつが同じ話題を繰り返してるんだな
0672nobodyさん2012/01/12(木) 05:35:36.73ID:???
>>668
どういうこと?
0673nobodyさん2012/01/12(木) 10:36:29.57ID:???
>>663
これって実行には何秒かかったんだろ。
0674nobodyさん2012/01/12(木) 12:24:55.33ID:???
>>664 >>665 >>668 >>669 >>670 は並列処理を理解できてない馬鹿。
0675nobodyさん2012/01/12(木) 12:27:31.97ID:???
>>667
>>663
実行環境(カーネル)の違いでプロセスの優先度が変わるのかな?
0676nobodyさん2012/01/12(木) 13:02:25.38ID:???
PHPにはpcntl_forkというプロセスをフォーク(複製)することが
できる関数がありますが、これはPHPをCGIモードで
動かしている場合にのみ有効です。
通常はPHPをApacheモジュールとして動作させていることが
多いので、これが使えないケースが多々あります。
http://techblog.ecstudio.jp/tech-tips/php-multi.html
0677nobodyさん2012/01/12(木) 13:15:01.92ID:???
っていうか、何でPHPで作ることにこだわってんだ?
Perlで良いじゃん。
0678nobodyさん2012/01/12(木) 13:19:01.14ID:???
>>676
pcntl_fork関数は存在するし、forkも成功したように見えるけど、並列処理されないなんて結果になるということですか
0679nobodyさん2012/01/12(木) 14:01:06.08ID:???
ちなみに俺も>>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
http://www.php.net/manual/ja/pcntl.installation.php
にはCLI版も可能って書いてるんじゃないの?

>>675
ちなみに自分はcentOSです
0680nobodyさん2012/01/12(木) 14:01:29.80ID:QAUYYhrI
phpとmysqlでカウンターが作りたいのですが
書き込むときの排他制御はどのようにやるのでしょうか?
0681nobodyさん2012/01/12(木) 14:01:52.50ID:???
>>676
CLIでも使えるよね?
0682nobodyさん2012/01/12(木) 14:02:25.17ID:???
もういい加減ニートのおっさんは飽きた
06836792012/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:???
forkだからマルチスレッドの話ではないでしょ。
0686nobodyさん2012/01/12(木) 14:16:07.48ID:???
PHPがサポートするプロセス制御機能は、デフォルトでは有効となってい ません。
プロセス制御機能を有効にするには、 configure のオプションに --enable-pcntl を付け、
CGI 版あるいは CLI 版の PHP をコンパイルする必要があります。
注意: 現在、このモジュールは非 Unix 環境(Windows)では動作しません。
http://www.php.net/manual/ja/pcntl.installation.php
0687nobodyさん2012/01/12(木) 14:18:28.39ID:???
>>686
何が言いたいの。
■ このスレッドは過去ログ倉庫に格納されています