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

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

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2013/03/19(火) 22:13:49.76ID:???
質問者はまず>>1を良く読むこと(必須!)
過去スレ、関連スレ、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等)・フレームワークは各該当スレへ
0583nobodyさん2013/04/22(月) 08:08:19.49ID:???
>>582
>>1
0584nobodyさん2013/04/22(月) 17:30:21.42ID:0nrxKiO8
zend frameworkを使うことによって得られるメリットは?
0585nobodyさん2013/04/22(月) 20:16:28.58ID:???
>>584
>>1
>・ 質問者として、態度をわきまえること。
0586nobodyさん2013/04/22(月) 23:14:46.67ID:YyKrblk5
○じゃあのさんの入れ知恵○
じゃあのさん来た! 次スレ

26:以下、名無しにかわりましてVIPがお送りします[]
2013/04/22(月) 22:59:02.35 ID:8TN30C6y0
じゃあ、こっからが情報戦レクチャーに入るぜwww
敵の資金源をおまいらでも一枚噛んでぶっ潰す方法だwwww
不買運動やデモは単なる手段でしか無いwww
俺が求めるのは更にその先だwwww

--- 以下スレ情報 ---
高岡さんがフジ韓流ゴリ押し批判したら干されたのでウジテレビ凸
http://hayabusa.2ch.net/test/read.cgi/news4vip/1366637744/
0587nobodyさん2013/04/23(火) 10:52:32.26ID:???
>>585
いちいち反応するなボケ
お前も荒らしか?
0588nobodyさん2013/04/23(火) 10:55:13.48ID:???
>>587
>>1
>・ 質問者として、態度をわきまえること。
0589nobodyさん2013/04/23(火) 16:19:34.01ID:???
>>584
フレームワークを使うことによって得られるメリットと同等のメリットが得られる
0590nobodyさん2013/04/23(火) 21:53:05.68ID:870eDqk8
>>564
亀だけど、ぜんぜん方向の違う勘違いしてるじゃないか
お前らちゃんと指摘してやれよw
PHPはリクエストのたびに起動して一プロセス消費して終わり。
これ、フレームワークがどうたらとか関係なく、言語仕様な。

一度作成したインスタンスを再利用するなんてのはシリアライズして
DBに保存してっていう、どっちかっていうと変態っぽいやりかただから、
まだ手を出さないほうがいいと思うし。
0591nobodyさん2013/04/24(水) 02:14:16.69ID:???
>>590
いや、もう十分に指摘してるだろ
0592nobodyさん2013/04/24(水) 04:02:41.23ID:???
鼻水出たw
0593nobodyさん2013/04/24(水) 04:12:15.02ID:6o5SNjBY
全体の流れや効率を考えた外枠からではなくhttp通信の流れからだろ
0594nobodyさん2013/04/24(水) 04:23:24.40ID:???
HTTPはステートレス。そうじゃなく見える場合はプロトコル以外の部分が工夫してるだけ
0595nobodyさん2013/04/24(水) 11:10:58.26ID:???
hoge.php
を外部から呼び出す時、引数を与えたいのですが、
hoge.php?saitama=chichiu
以外に方法はありますか?

PHP 5.2.17です。
0596nobodyさん2013/04/24(水) 11:14:23.84ID:???
IDが出てないとダメなんです。ごめんなさい。
0597nobodyさん2013/04/24(水) 12:01:08.73ID:L2MfGf1m
hoge.php
を外部から呼び出す時、引数を与えたいのですが、
hoge.php?saitama=chichiu
以外に方法はありますか?

PHP 5.2.17です。


>>596
すみません。
0598nobodyさん2013/04/24(水) 12:04:45.02ID:???
POSTするんじゃだめ?
あとPATH_INFO使うとか
0599nobodyさん2013/04/24(水) 12:05:42.44ID:???
って外部からってのは具体的にどういう?
0600nobodyさん2013/04/24(水) 12:08:26.65ID:???
http://example.com/hoge/saitama/chichiu
で、 hoge.phpに saitama と chichiu 渡すみたいな方法はあります。
0601nobodyさん2013/04/24(水) 12:16:58.15ID:???
>>600
あります

次の質問どうぞ〜
0602nobodyさん2013/04/24(水) 12:36:56.42ID:???
>>600
PHPには その方法は無いよ
0603nobodyさん2013/04/24(水) 13:38:58.11ID:???
あるだろw
0604nobodyさん2013/04/24(水) 18:32:03.09ID:???
?saitama=chichiuでsaitamaとchichiu拾うの?
foreachで$_GETからkeyとvalue取ってくるの?
0605nobodyさん2013/04/24(水) 18:33:19.63ID:???
ディレクトリ構造に見せかけてるだけで実際getと変わらんじゃん
0606nobodyさん2013/04/24(水) 20:26:09.16ID:???
>>603
PHPだけじゃ実現できないよ
0607nobodyさん2013/04/24(水) 20:53:40.70ID:???
はいはい
0608nobodyさん2013/04/25(木) 02:19:49.33ID:UuN6Innx
php5.4.14 PEAR1.9.4
Windows7でpeclで pecl_http を入れようとしてダウンロードまではいったのですが
その後エラーが出て止まってしまいました。これはどうすればいいんでしょうか。

pecl install http://pecl.php.net/get/pecl_http
downloading pecl_http-1.7.5.tgz ...
Starting to download pecl_http-1.7.5.tgz (174,624 bytes)
.....................................done: 174,624 bytes
71 source files, building
ERROR: The DSP pecl_http.dsp does not exist.
0609nobodyさん2013/04/25(木) 02:32:52.82ID:???
>>608
http://stackoverflow.com/questions/7751679/php-http-build-url-and-pecl-install
0610nobodyさん2013/04/25(木) 10:16:17.52ID:???
>>606
httpdが必要って言いたいのか。
こじつけもいい加減に・・・
0611nobodyさん2013/04/25(木) 13:44:25.08ID:???
>>609
英語なのであいまいにしか翻訳できなかったので間違っていたらすいません。
これはhttp_build_urlを使うためにpecl_httpを入れようとしたけど使えなかったから
http_build_url() を自作したっていう話ではないですか?
私がしたいのは http_build_url ではないのでこれには当てはまらないのではないでしょうか。
06126092013/04/25(木) 13:44:56.25ID:UuN6Innx
ID忘れてました。
>>611 は 609 です。
06136082013/04/25(木) 13:46:28.43ID:UuN6Innx
さらに間違い。>>611,612 は 608 の間違いです。たびたびすいません。
0614nobodyさん2013/04/25(木) 14:17:01.66ID:0FNu+M2T
>>603
http://example.com/hoge.php/saitama/chichiu
ならできるけど、
http://example.com/hoge/saitama/chichiu
ってできる?
0615nobodyさん2013/04/25(木) 14:37:11.67ID:???
>>614
サーバーにディレクティブ渡せば楽勝でしょ。
WordPressやCakePHPのURLの仕組みを調べてみれば?
0616nobodyさん2013/04/25(木) 15:04:32.09ID:???
いくらでもやり方はあるけど、
.htaccess に、特定のファイル名の時はapplication/x-httpd-phpを追加する
とかが一般的かな
0617nobodyさん2013/04/25(木) 15:31:26.40ID:???
PHPオンリーでって話じゃないのか
0618nobodyさん2013/04/25(木) 16:37:07.19ID:???
PHPのビルトインウェブサーバで実行できなきゃだね
0619nobodyさん2013/04/25(木) 16:42:52.06ID:???
質問者いなくなっちゃったのか
0620nobodyさん2013/04/25(木) 19:16:06.66ID:???
俺はくだらない質問をする
お前たちは答えてろ
0621nobodyさん2013/04/25(木) 19:32:36.30ID:???
俺はただ見物して楽しむ♪
0622nobodyさん2013/04/25(木) 21:49:42.17ID:???
>>615
楽勝には同意するけど
> サーバーにディレクティブ渡せば楽勝でしょ。
用語を勉強しなおしましょうね
0623nobodyさん2013/04/26(金) 07:59:11.43ID:h02AATTS
基礎の基礎で申し訳ありません

インスタンスを生成後、オブジェクトにアクセスする際
$this->val
valの部分に他の配列に入れておいた文字列でアクセスするにはどうしたらよいでしょうか
$val = array(a,b)
$this->a
$this->b
のょうに繰り返しで処理したいです

配列だとhoge[$val]といったようにしてましたが、オブジェクトの場合はどうなるのでしょう
0624nobodyさん2013/04/26(金) 08:12:40.04ID:???
>>623
$this->$val[0]
0625nobodyさん2013/04/26(金) 13:34:02.60ID:wd6ISbqU
【OS名】CentOS
【PHPのバージョン】5.3
【連携ソフトウェア】MySQL
【質問内容】
DBに書き込みデータを保存する掲示板を作っているのですが
ユーザーが書き込んだ文字列をHTMLエスケープするのはどの段階にするべきでしょうか

勿論'や;に\をつけるのはDBに保存する前だと思いますが、
<や>等HTMLとして影響を与える文字をエスケープするのはDBに保存する前か
それともDBにはそのまま保存して出力する際にエスケープすべきでしょうか
一般的な考え方があったら教えて下さい
0626nobodyさん2013/04/26(金) 13:44:14.73ID:???
考慮するのは2点
DBにデータを入れる際のSQLインジェクション
そしてデータをHTMLに出力する際のクロスサイトスクリプティング

DB操作にどのAPI使ってるのかしらんがDBに入れる際
mysql関数ならmysql_real_escape_string
PDOならプリペアードステートメントを使う

DBから取り出してHTMLに出力するときにhtmlspecialcharsを使う
0627nobodyさん2013/04/26(金) 13:45:37.38ID:???
もちろんデータをselectするとき検索など外部に入力を依存するシステムの場合は
select文にたいしても同様にSQLインジェクション対策を行うこと
0628nobodyさん2013/04/26(金) 15:17:37.16ID:wd6ISbqU
>>626-627
どうもありがとうございます
0629nobodyさん2013/04/26(金) 15:22:40.36ID:???
PDO+静的プレースホルダで、DBにはそのまま保存。
出力するときに、htmlspecialcharsを使う。

これしかない。
0630nobodyさん2013/04/26(金) 15:27:43.27ID:???
>>625
有効にするタグがあるのかどうか(<a>や<strong>, <pre>などは生かすとか)によって違う。
また、エンコードが何なのかによっても違う。
0631nobodyさん2013/04/26(金) 16:08:21.01ID:???
>>625
色んな所で古くから議論されてるけど、
基本はDBに生で保存して出力時に整形する。
いろんな検証の仕方をしても多分ここに落ち着く。

それを踏まえた上で、パフォーマンスを高めるためのチューニングとして
エンコード済みのデータをケースバイケースで本データとは別に保存しておいたりすると良い。
0632nobodyさん2013/04/26(金) 17:56:09.59ID:???
>>625
ほかの人も言っていることとほぼ同様だけど
取り立てて仕様に影響するような要件がない場合は、DBには可能な限り生なデータを突っ込んだほうがいい。
突っ込む前に整形するとその後の拡張性がすこぶる悪くなったりする。
で、PHPでMySQL使っているならば、mysqli_real_escape_string関数あたり使いなはれ。
で、出力するときは、htmlspecialcharsあたりでXSS除けしなはれ。
ちなみにWHERE句なんかで外部からの値突っ込むときもちゃんとエスケープ処理かけるんだぞ。
もう一つ言うと、LIMITやOFFSET句みたいな場所を除いて外部から受け取ったIntegerを突っ込むときも
ちゃんとエスケープ処理して'つけてSQL文に流し込め。
LIMITやOFFSETは、Integer以外入りようがないのだから、正規表現かなんかでバリデートすべし。
0633nobodyさん2013/04/26(金) 18:13:03.59ID:???
DBに保存する前に、入力データそのものを変更するって考え方、誰が広めたんだ?
昔はそれが普通だったのか?
0634nobodyさん2013/04/26(金) 18:14:00.99ID:???
同じ回答を繰り返すPHP回答者△
0635nobodyさん2013/04/26(金) 18:14:09.48ID:2flPsSFU
MySQLはPHPと共にオワコン
0636nobodyさん2013/04/26(金) 18:16:10.65ID:???
>>633
たんに何のセキュリティ問題なのかとか具体的なことがわからなかったってだけでは?
とりあえずエスケープにはhtmlspecialcharsを使っとけばいいって覚えちゃった人が
自分のサイトでこういうふうにして入れますみたいに書いて
それを間にうけた第三者が真似していくという
0637nobodyさん2013/04/26(金) 18:18:57.51ID:???
セキュリティホールの名称はわかっても具体的な内容までは知らない人
内容はだいたいわかるけど実際に問題になるコードが書けない人
本当にアマでセキュリティホールを理解してるのは少ない
0638nobodyさん2013/04/26(金) 19:13:13.98ID:???
>>632
そういう時は、同様じゃない部分だけ書くのが大人
0639nobodyさん2013/04/26(金) 19:42:40.94ID:???
普通のファイルに<>でカラムを分割していたから
そのカラムの範囲を破壊されないために
<と>をエスケープしていたんだよねwww
0640nobodyさん2013/04/26(金) 20:23:06.36ID:???
>>637
そうそう、そんな理解していない奴らが簡単にWebアプリもどきを作れるようにしたPHPは犯罪
世界規模のサイバーテロに匹敵するほどの犯罪

犯罪者予備軍のPHP厨にはお似合いかw
0641nobodyさん2013/04/26(金) 22:33:10.72ID:zqV1AZ+p
>>640
わしのことやな、、getpost変数はほぼホワイトリスト解決させてる、、ヌルバイトだけはどう来るか予想できん。。。。
0642nobodyさん2013/04/26(金) 22:35:09.48ID:???
失礼さげ
0643nobodyさん2013/04/27(土) 06:55:33.74ID:???
>>640
理解してないやつらが簡単に〜
なんてどの言語でもそうじゃないか
0644nobodyさん2013/04/27(土) 14:25:23.44ID:RdpUkJUr
それが同じなどというのは言葉遊びに過ぎない
仮にmcintosh(詳細な綴りは知らん)とwindowsに同じ問題があったとして
その影響が同じだなどという主張と変わらん
0645nobodyさん2013/04/27(土) 14:36:40.37ID:???
つまり罪深さで言えばWindowsそのものが大罪を犯してるわけだ
0646nobodyさん2013/04/27(土) 14:48:32.82ID:???
mcintoshはないだろ
なんでmacって呼ばれてるのか考えろ!
0647nobodyさん2013/04/27(土) 14:49:44.35ID:???
Mcdonald'sじゃないのよ!
0648nobodyさん2013/04/27(土) 19:00:06.77ID:RdpUkJUr
興味のない知らんもんは考えても正解にはたどり着かんよw
0649nobodyさん2013/04/27(土) 22:27:02.27ID:78HtUPwG
○じゃあの野間まつり○
じゃあのさん来た!

421:以下、名無しにかわりましてVIPがお送りします[]
2013/04/27(土) 21:53:57.62 ID:qYDE1sEQ0
てか、すっかり野間ちゃんのこと忘れてたわwww
別件で色々あってなwwww
所詮その程度の存在なんだけどなwww野間ちゃんなんてwwww
じゃあ、今からやるかwww罰ゲームなwww
あーあwww野間のせいだwww野間が全部悪いwww
--- 以下スレ情報 ---
高岡さんがフジ韓流ゴリ押し批判したら干されたのでウジテレビ凸
http://hayabusa.2ch.net/test/read.cgi/news4vip/1366990405/
0650nobodyさん2013/04/28(日) 01:08:05.93ID:A2fSkdFW
【OS名】Windows 【PHPのバージョン】5.3
ウェブサイトを制作しており、初回訪問時に設問を表示し、その答えに応じてメニューの並び順などを変えたいと思っています。
Cookieに保存し次回訪問時も引き継ぎたいです。
$pt = $_POST["pt"];
if ($pt == ""){
$pt = $_COOKIE["pt"];
if ($pt == ""){
header("HTTP/1.1 301 Moved Permanently");
header("Location: ./start.html");
quit();}
} else {
setcookie("pt", $pt, 0, "/", "www.exsample.jp");}
$topMenu[0] = "<a href=\"aa\" alt=\"aa\">aa</a>";
$topMenu[1] = "<a href=\"bb\" alt=\"bb\">bb</a>";
switch ($pt){
case "1": $topDisp = array(0, 1);
break;
case "2": $topDisp = array(1, 0);

現在このように書いており、「start.html」にて
<form method="post" action="index.html">
<a href="http://www.exsample.jp"; onclick="forms[0].pt='1'; forms[0].submit();">1</a>
<a href="http://www.exsample.jp"; onclick="forms[0].pt='2'; forms[0].submit();">2</a>
<input type="hidden" name="pt" value="" /></form>
と、選択させCookieへの保存を行なっているつもりです。
しかし「index.html」へアクセスすると「start.html」に飛びはするのですが、選択しても「start」から移動しません。
どの部分に間違いがありますでしょうか。あまり知識がなく、どうか教えていただきたいです。

また、現在は「start」という別ページを置いていますが、jQueryなどを使い、設問画面がポップアップするという形を取りたいと思っております。
その方法(どの部分でどういった書き方をすれば良いか)も教えて頂ければと思います。
長文となって申し訳ありませんが、よろしくお願いします。
0651nobodyさん2013/04/28(日) 06:40:23.43ID:???
毎回ブラウザ終了時にクッキー消してる人には大迷惑だな
0652nobodyさん2013/04/28(日) 06:52:30.49ID:???
>>650
長い。3行で。
0653nobodyさん2013/04/28(日) 19:10:31.55ID:???
クラスのヒアドキュメント内での挙動について聞きたいです。

// 222を出力するクラスaaa
class aaa{
function aaa_m(){
echo "222<br>";
}
}

// クラスaaaを継承したクラスbbb
// ヒアドキュメント内でクラスaaaのメソッドを出力
class bbb extends aaa{
function bbb_m(){
echo <<< EOF
111<br>
{$this->aaa_m()}
333<br>
EOF;
}
}

$bbb = new bbb;
$bbb->bbb_m();

クラスbbbのメソッドbbb_mを使うと

111、222、333とならぶはずが
222、111、333となります

となってしまいます。ヒアドキュメント内でクラスを使うと
最初に呼び出される仕様なのでしょうか?
0654nobodyさん2013/04/28(日) 19:13:02.19ID:???
>>1
0655nobodyさん2013/04/28(日) 19:17:29.32ID:mmUnQlFQ
すみませんIDわすれてました
0656nobodyさん2013/04/28(日) 22:43:03.43ID:???
>>655
echo -> return
0657nobodyさん2013/04/28(日) 23:50:47.53ID:3X4yk4QN
質問の答えの前にまず言っておくがコーディング自体に大きな問題がある


で、質問の答えだが、ヒアドキュメントのパースする際に
まずはその中の命令を処理する必要があると思わないか?

この結果には驚くような要素は何も含まれていないと思うよ。
0658nobodyさん2013/04/29(月) 00:02:01.61ID:???
array_mapを使って下記のような関数をつくってたのですが、
クラスファイルで使いたいと思い、作り直しを試みているのですが
function hout($d) {
if (is_array($d)) {
return array_map('hout', $d);
}
else {
$d = htmlspecialchars($d, ENT_QUOTES);
}
}

以下がオブジェクトで
Class Hout
publice function __construct($d)
0659nobodyさん2013/04/29(月) 00:04:09.93ID:C0H6wuFm
>>656
>>657
レスありがとうございます
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);
}
}
}
06616602013/04/29(月) 00:13:10.57ID:cl3jdKHB
return $this->d が最後抜けてますが、転記ミスです
0662nobodyさん2013/04/29(月) 00:27:56.12ID:???
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 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;
}
}

としてみましたが、ループしてしまいます・・・
0663nobodyさん2013/04/29(月) 00:59:39.61ID:???
なぜ >>658 をクラスメソッドにしたら >>662 になるんだ・・・
0664nobodyさん2013/04/29(月) 02:22:19.12ID:???
phpでオブジェ使ったことないわしがarraymap途中でプロパティが途中で配列じゃなくなったと勝手に予想
0665nobodyさん2013/04/29(月) 03:26:57.34ID:???
安易にネットとPCを普及させたヤフーBBやPCショップにまで矛先いきそうな
06666622013/04/29(月) 04:14:22.43ID:cl3jdKHB
>>664さんのを参考に見直していくと
var_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:aXyeiYnz
PHP5.4でMemcached 2.1.0(libmemcached 1.0.13)入れてます。

addServers(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:???
cacheとはそもそもそういうもん。
サーバーを冗長化するのは、負荷分散で、データの多重化ではないよ。
データベースへのアクセスをメモリーを使って高速化するのが希望なら、tokyo tyrantを使いなさい。
06706672013/04/30(火) 15:11:25.92ID:/LZjkS9q
どうもです。確かにNoSQLのほうがいいかもしれませんね。
ただ、>>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:???
そら、もともとの3台の設定のままなら、
同じように失敗してるとこへ聞きにいって、同じこと繰り返すに決まってる。

クラスタ纏めてるサーバーが1台あって死活まで管理してるならともかく、
簡易的な分散なんだから。
0673nobodyさん2013/04/30(火) 15:38:05.83ID:???
>>671
すみません・・・

> 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か。どう冗長化すりゃいいのか俺は知らんけど。
0675nobodyさん2013/04/30(火) 19:04:08.46ID:???
>>670
アクセスが1秒間に数百もあるようなシステムなの?
0676nobodyさん2013/04/30(火) 19:59:46.53ID:???
そら秒間数十リクぐらいのシステムならMemcachedクラスタ構成にする必要ねーだろ
DBそのまま叩いてもイケる
0677nobodyさん2013/04/30(火) 20:02:21.83ID:???
そんなサイトがPHPって・・・
作成者が2chで質問って・・・
0678nobodyさん2013/04/30(火) 20:04:01.91ID:???
あ?PHPなめんな
0679nobodyさん2013/04/30(火) 20:06:21.67ID:???
wikiとかアフィブログとかでもピークで秒間数百なんて簡単にいくだろ
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:???
まさかelseifがくっついてるからとか??
0682nobodyさん2013/05/01(水) 04:12:19.66ID:???
しらねえが括弧つけてくれ。
見にくすぎる。
■ このスレッドは過去ログ倉庫に格納されています