【PHP】下らねぇ質問はID出して書き込みやがれ 127
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2013/03/19(火) 22:13:49.76ID:???過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。
◆前スレ
【PHP】下らねぇ質問はID出して書き込みやがれ 126
http://kohada.2ch.net/test/read.cgi/php/1359808868/
◆質問用テンプレ
【OS名】CentOS
【PHPのバージョン】5.3
【連携ソフトウェア】MySQL ImageMagick
【質問内容】
◆質問する時の注意
・ スレを上げて自分のIDを表示させること。(メール欄に何も記述しない。専ブラのsageチェックを外す)
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に関連リンクの公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
(PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。)
◆質問後の注意
・2回目以降は最初に質問した際のレス番号を入れて、偽者防止に必ずIDを表示させること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
【その他諸注意】
・SQL・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
0655nobodyさん
2013/04/28(日) 19:17:29.32ID:mmUnQlFQ0657nobodyさん
2013/04/28(日) 23:50:47.53ID:3X4yk4QNで、質問の答えだが、ヒアドキュメントのパースする際に
まずはその中の命令を処理する必要があると思わないか?
この結果には驚くような要素は何も含まれていないと思うよ。
0658nobodyさん
2013/04/29(月) 00:02:01.61ID:???クラスファイルで使いたいと思い、作り直しを試みているのですが
function hout($d) {
if (is_array($d)) {
return array_map('hout', $d);
}
else {
$d = htmlspecialchars($d, ENT_QUOTES);
}
}
以下がオブジェクトで
Class Hout
publice function __construct($d)
0660nobodyさん
2013/04/29(月) 00:07:12.36ID:cl3jdKHBクラスファイルで書いてみたのがは以下の通りです
Class Hout
{
private $d;
public function __construct($data)
{
$this->d = $data;
if (is_object($this->d)) {
$this->d = get_object_vars($this->d);
}
}
public function htmlout()
{
if (is_array($this->d)) {
return array_map('htmlout', $this->d);
} else {
$this->d = htmlspecialchars($this->d, ENT_QUOTES);
}
}
}
0661660
2013/04/29(月) 00:13:10.57ID:cl3jdKHB0662nobodyさん
2013/04/29(月) 00:27:56.12ID:???{
private $d;
public function __construct($data)
{
$this->d = $data;
if (is_object($this->d)) {
$this->d = get_object_vars($this->d);
}
}
public function htmlsc()
{
var_dump($this->d);
if (is_array($this->d)) {
return array_map('Hout::htmlsc', $this->d);
} else {
$this->d = htmlspecialchars($d, ENT_QUOTES);
}
return $this->d;
}
}
としてみましたが、ループしてしまいます・・・
0664nobodyさん
2013/04/29(月) 02:22:19.12ID:???0665nobodyさん
2013/04/29(月) 03:26:57.34ID:???0666662
2013/04/29(月) 04:14:22.43ID:cl3jdKHBvar_dump($val);
$val = get_object_vars($val);
var_dump($val);
とすると、結果が
object(ArrayObject)[17]
string '0' (length=1)
string '1' (length=1)
string '1' (length=1)
string '0' (length=1)
array (size=0)
empty
となってしまうのが、上手くいかない原因のようなのですが、
なぜに、get_object_varsを通すとemptyになってしまうのでしょうか・・・
array
[0] => string'0'
[1] => string'1'
[2] => string'1'
[3] => string'0
とさせたいのですが'
0667nobodyさん
2013/04/29(月) 09:07:52.19ID:aXyeiYnzaddServers(array(
192.168.0.11 => 11211,
192.168.0.12 => 11211,
192.168.0.13 => 11211
));
で複数のMemcachedクラスタを構成しています。
Memcachedが落ちた(get(key1)できなかった)場合、DBに直接アクセスしてデータ(val1)を取得した後、
書き込みset(key1,val1)を行います。
この状態で、たとえば192.168.0.12が落ちた場合、192.168.0.12にマッピングされていたkey1が
0.11か0.13にマッピングし直されて継続されることを期待しているのですが、どうも0.12に向けられていた
割り当てられていた分が全部DBに直接アクセスしているっぽいです。
addServersでサーバーを追加したら、そのどれかが落ちていたとしても、再マッピングはされないのでしょうか?
OPT_DISTRIBUTIONを変えても駄目でした。
そうすると、addServersを行う前にサーバーの死活をチェックして、もし0.12が落ちているのであれば
addServers(array(
192.168.0.11 => 11211,
192.168.0.13 => 11211
));
のようにしないといけない、ということなのでしょうか?
(この方法だともちろんうまくいきましたが、何か納得いかず・・・)
0668nobodyさん
2013/04/29(月) 10:06:27.00ID:???0669nobodyさん
2013/04/30(火) 09:46:50.70ID:???サーバーを冗長化するのは、負荷分散で、データの多重化ではないよ。
データベースへのアクセスをメモリーを使って高速化するのが希望なら、tokyo tyrantを使いなさい。
0670667
2013/04/30(火) 15:11:25.92ID:/LZjkS9qただ、>>667の説明がまずかったようなので、流れを書きますと
Memcachedクラスタ:A、B、C
仮にkey1 => val1がBに対応づけられているとする。
ここでBが落ちたとき
プロセスX
(1) get(key1)する
(2) 当然失敗する
(3) DB叩いてval1を取る(実際には色々加工してval1を作るわけですが)
(4) set(key1,val1)する
(5) 今はクラスタが{A,C}なので、今度は(例えば)Aにkey1 => val1が保存される
プロセスY
(6) get(key1)する
(7) 今度はAに保存されているval1が返ってくる
こういう動作を期待しているんですが、どうもプロセスYでもプロセスXと同様にDB叩いてるっぽいんですよね。
それもタイミング差で数プロセスってレベルじゃなくて、数百というプロセスが何分間も。
当然DBが(結果を加工してval1を作っているWebサーバも)捌ききれなくなってあぼん。
0671nobodyさん
2013/04/30(火) 15:21:11.06ID:???6で失敗してることは確認したの?
6で成功する環境が構築できていることは確認したの?
0672nobodyさん
2013/04/30(火) 15:25:34.14ID:???同じように失敗してるとこへ聞きにいって、同じこと繰り返すに決まってる。
クラスタ纏めてるサーバーが1台あって死活まで管理してるならともかく、
簡易的な分散なんだから。
0673nobodyさん
2013/04/30(火) 15:38:05.83ID:???すみません・・・
> 6で失敗してることは確認したの?
Yes
> 6で成功する環境が構築できていることは確認したの?
addServers(array(A,C))なら期待したとおりに動きます。
>>672
こんなコード書いてやってみましたが、確かにval1は取れませんね・・・そういうもんなのか(´Д`)
$m = new Memcached();
$servers = array(
array('localhost', 11211), //Memcachedが動いている
array('192.168.0.201', 11211), array(...), array(...), ... //存在しないサーバー100個ぐらい適当にぶっこむ
);
$m->addServers($servers);
$m->set('key1','val1',time()+100); //多分localhostじゃないとこに書き込もうとしてる
var_dump($m->get('key1')); // bool(false)・・・
0674nobodyさん
2013/04/30(火) 15:46:15.33ID:???Bを速攻で復旧させたほうがスマートじゃないだろうか
数秒間落ちただけでDBが死ぬほどクリティカルじゃないんだろ?
ハードのトラブルとかで長期間落ちる場合は、addServersのところを自動なり手動なりで
書き換えてクラスタから切り離す。
あとは>>669のようにNoSQLか。どう冗長化すりゃいいのか俺は知らんけど。
0676nobodyさん
2013/04/30(火) 19:59:46.53ID:???DBそのまま叩いてもイケる
0677nobodyさん
2013/04/30(火) 20:02:21.83ID:???作成者が2chで質問って・・・
0678nobodyさん
2013/04/30(火) 20:04:01.91ID:???0679nobodyさん
2013/04/30(火) 20:06:21.67ID:???0680nobodyさん
2013/05/01(水) 03:40:01.52ID:cfjacJ3h$a = 1;
$b = 0;
if ($a == 0)
if ($b == 0) print "a";
elseif ($a == 1)
if ($b == 0) print "b";
else
if ($b == 1) print "c";
上記のようなコードを実行すると、想定では「b」が表示されるはずだったのですが
何も表示されずに終了します。
$a = 1; $b = 1; とした場合も「c」が表示されません。
$a = 0; $b = 0; では想定通り「a」が表示されます。
なぜこのような動作をするのか教えて頂けないでしょうか。
0681nobodyさん
2013/05/01(水) 04:11:57.11ID:???0682nobodyさん
2013/05/01(水) 04:12:19.66ID:???見にくすぎる。
0683nobodyさん
2013/05/01(水) 04:27:00.83ID:???if ($b == 0) {
}
} elseif ($a == 1) {
if ($b == 0) {
}
} else {
if ($b == 1) {
}
}
なんだこのクソみたいなコードは・・・
if ($a == 0 && $b == 0) {
} elseif ($a == 1 && $b == 0) {
} elseif ($b == 1) {
}
0684nobodyさん
2013/05/01(水) 04:28:40.98ID:???0685680
2013/05/01(水) 06:56:39.93ID:???理由がさっぱりです。。
if〜elseif〜else文のときは必ず{}を入れろということでしょうか?
0686nobodyさん
2013/05/01(水) 08:55:31.76ID:???やりたいことが分かった。
AddServerには、weightオプションがあるよ。
ABCをそれぞれ、321にしなさい。Weightの重い順にアクセスする。
weightがフラットだと、均等にアクセスするから、ABCのどれにアクセスするか分からない。
一度アクセスすると、CならCにずーっとアクセスする。でないと、結果が取れないでしょ?
あと、Daemon Toolsを調べなさい。落ちたmemcashedを自動的に再起動してくれる。
0687nobodyさん
2013/05/01(水) 09:01:09.31ID:???その式の解釈は
if ($a == 0)
{
if ($b == 0) print "a";
elseif ($a == 1)
if ($b == 0) print "b";
else
if ($b == 1) print "c";
}
だからです。 なんで elseif のが 一個目のifの受けだと思ったんです?
0688nobodyさん
2013/05/01(水) 09:03:12.54ID:???0689nobodyさん
2013/05/01(水) 10:30:44.81ID:???自分でコード追ってみりゃわかる
わからないうちは括弧入れよう(わかっても読みやすくするために入れるけどね)
インデントは読みやすくするために必須だけど、間違ったインデントに騙されないようにね。
0691nobodyさん
2013/05/01(水) 15:51:42.82ID:???括弧つけないのは
...
...
if ($FLAG === 0) echo "error";
...
...
こういう場合だけ
0692nobodyさん
2013/05/01(水) 16:26:56.70ID:???これ常識ネ
0693nobodyさん
2013/05/01(水) 16:32:05.68ID:???0694nobodyさん
2013/05/01(水) 17:44:31.14ID:???その認識レベルなら必ず括弧入れるべき。
面倒くさいのはわかるが括弧で区切りつけないと後々絶対同じような問題起こす。
0696nobodyさん
2013/05/01(水) 18:53:25.95ID:???たとえば、こうなった。
if ($a == 0)
if ($b == 0) print "a";
elseif ($a == 1)
if ($b == 0) print "b";
else
if ($b == 1) print "c";
0697nobodyさん
2013/05/01(水) 18:54:27.87ID:???if ($a == 0)
if ($b == 0) print "a";
elseif ($a == 1)
if ($b == 0) print "b";
else
if ($b == 1) print "c";
0698nobodyさん
2013/05/01(水) 19:43:46.49ID:j59swQb1public $hensuu;
〜
〜
$hoge = "hensuu";
echo $this->$hoge;
として、$hogeに入ってる文字列でプロパティにアクセスしたいので、
存在しないプロパティを呼び出さないようチェックを入れたいのですがうまくいきません
if(property_exists($this, 'hensuu'))
ではtrueが返ってくるのですが、
if(property_exists($this, $hoge))
ですとfalseが返ってきてしまいます・・・
0699nobodyさん
2013/05/01(水) 20:14:00.04ID:???そのコードどうなってんのよ。
0700nobodyさん
2013/05/01(水) 20:20:42.60ID:???0701nobodyさん
2013/05/01(水) 20:31:42.36ID:???そのメソッド中で変なプロパティ読み出さないようにチェックしれ
0703nobodyさん
2013/05/01(水) 23:56:42.39ID:iNKD91fwとすれば全てのエラーを出力してくれますが、
このエラー内容を取得することは出来ますか?
エラーを画面上に表示させずに、エラー内容をテキストか何かに書き出して
おきたいと考えています。
標準出力ではなくテキストなどへの出力方法などあればアドバイスいただけないでしょうか。
0704nobodyさん
2013/05/02(木) 00:30:53.74ID:???error_get_last()
register_shutdown_function() と絡めてみるとうまくいく思う
0705nobodyさん
2013/05/02(木) 00:33:05.62ID:???なら、 error_log() だな。
0706nobodyさん
2013/05/02(木) 03:39:40.66ID:???0707nobodyさん
2013/05/02(木) 05:41:36.85ID:???0708nobodyさん
2013/05/02(木) 05:49:01.99ID:PlTCCm2Zそのプラグインの使用は、終了コードと標準出力にテキストを出すというものです。
exec 関数でやればいいようですが、処理の並列化のため、
exec ('/pathto/program > /dev/null &', $output, $return_var);
とすると、標準出力を得られません。何かいい方法はありますか?
ファイルにリダイレクトしてそれを読むのでしょうか?いやいや。
0709703
2013/05/02(木) 07:53:36.09ID:7Z0Os0eY回答をもとに対応してみたいと思います。
ありがとうございました。
0711nobodyさん
2013/05/02(木) 10:52:24.02ID:???何をしたいのか良くわからないが、ここが参考になるかもな。
PHPでプロセスを呼び出してパイプで繋ぐ方法
http://d.hatena.ne.jp/UDONCHAN/20101116/1289891757
0712nobodyさん
2013/05/02(木) 13:41:47.39ID:???0713nobodyさん
2013/05/02(木) 15:03:31.48ID:???標準出力捨ててんのに何がしたいのよwwwwww
非同期で標準出力取りたいなら、どっかのファイルにぶち込んで
別のプロセスでそのファイル監視し続けるしかないんじゃないの?
0714nobodyさん
2013/05/02(木) 15:08:06.58ID:???0715nobodyさん
2013/05/02(木) 16:03:05.63ID:???fork して子プロセスで popen して読み取って、
ファイルに書き出してやがったですよ!
0716nobodyさん
2013/05/02(木) 16:04:02.00ID:???0717nobodyさん
2013/05/02(木) 20:20:16.22ID:???そして事態はより複雑に
0718sage
2013/05/03(金) 07:54:54.79ID:???複数のエラーが発生した場合は最後のエラーしかとれません。
エラーをすべて取得する方法ってありますか?
0719nobodyさん
2013/05/03(金) 08:03:38.10ID:???0720sage
2013/05/03(金) 08:59:40.30ID:???0721nobodyさん
2013/05/03(金) 09:19:17.66ID:???0722nobodyさん
2013/05/03(金) 12:58:19.36ID:???0724nobodyさん
2013/05/03(金) 16:06:03.57ID:???すみませんココ試験会場だったのですね間違えました
0725nobodyさん
2013/05/03(金) 18:08:11.32ID:???普通のレンタル鯖だと生ログ見れるところはないと思う
phpとかPerlしか動かせない鯖だと全部のエラーをキャッチしておくってのは無理じゃないかな
0726nobodyさん
2013/05/03(金) 18:23:59.04ID:???wkey.meだけどユーザー毎のホームディレクトリにlogディレクトリがあってそこにログたまっていくぞ
0727nobodyさん
2013/05/03(金) 18:54:53.52ID:???0728nobodyさん
2013/05/03(金) 20:24:59.12ID:???なんつって
0729nobodyさん
2013/05/03(金) 20:43:05.77ID:???借りる理由ってなんだ?
0730nobodyさん
2013/05/03(金) 20:46:04.14ID:???0731nobodyさん
2013/05/03(金) 20:54:23.17ID:???0732nobodyさん
2013/05/03(金) 21:34:09.24ID:???>月1000円未満で借りられるVPSがたくさんあるのに、今時プログラマがレンタルサーバ
0733nobodyさん
2013/05/03(金) 22:30:55.67ID:???いまどき、負荷で他人に迷惑とか心配するようなのなんで借りるのか。
0734nobodyさん
2013/05/03(金) 23:22:55.41ID:???0736nobodyさん
2013/05/04(土) 02:24:53.02ID:???0738nobodyさん
2013/05/04(土) 04:56:11.79ID:???0739nobodyさん
2013/05/04(土) 08:14:30.77ID:???0740nobodyさん
2013/05/04(土) 15:34:13.29ID:???0741nobodyさん
2013/05/04(土) 16:03:20.74ID:???0742nobodyさん
2013/05/04(土) 16:09:50.75ID:???語源や言葉の意味なんてころころ変わるもの
だいたいIT用語なんて確立した意味をもつものは少なく曖昧な意味が多い
下らない争いしてんじゃねえよ
729も用語無理して使うな(下手に曖昧なこというな)
732も意図理解しててあえて突っ込んでやるな
共用サーバって言いたかったんだろ
0743nobodyさん
2013/05/04(土) 17:00:42.40ID:???0744nobodyさん
2013/05/04(土) 19:34:20.11ID:???そういうたぐいのめんどくせー話はいらんわ
0745nobodyさん
2013/05/05(日) 01:54:18.29ID:???0746nobodyさん
2013/05/05(日) 01:55:09.42ID:???0748nobodyさん
2013/05/05(日) 17:12:44.70ID:WrP9RIzVIDの先頭にsenior(シニア)がつくユーザーと、つかないユーザーです。
senior102315
senior102516
112316
senior118311
120210
121653
・
・
seniorを削除して全ユーザのIDを数字のみにしたいのですが
UPDATE `table_ID` SET `field_ID` = REPLACE(`field_ID`,'senior','');
記述がどこか違っているのかわかりません。
一括削除の操作は別のコマンドを使うのでしょうか?
0749nobodyさん
2013/05/05(日) 17:28:37.62ID:???間違ってるようにみえないけど、試しに select してみ
SELECT field_ID , REPLACE〜 FROM 〜
とかさ
0750nobodyさん
2013/05/05(日) 17:58:30.08ID:WrP9RIzVそうそうに引き揚げますのでこれだけみてください
なぜ機能しないのでしょう
SELECT field_ID, REPLACE(`field_ID`,'senior','') FROM `table_ID`;
0751nobodyさん
2013/05/05(日) 18:04:11.71ID:???0752nobodyさん
2013/05/05(日) 18:09:18.89ID:???機能しないってのは結果が0件とか?
エラー表示させるとか、一番単純なやつで結果見るとかしてみては
0753nobodyさん
2013/05/05(日) 18:19:38.27ID:???IDは数値のみでもってシニアかどうかはフラグでもつければいいのに
0754nobodyさん
2013/05/05(日) 19:01:15.54ID:???0755nobodyさん
2013/05/05(日) 19:42:00.33ID:???$newid = preg_replace("/senior/","",$oldid);
$query = "update usertable set id = $newid where id = $oldid";
とかどうかな
■ このスレッドは過去ログ倉庫に格納されています