【PHP】下らねぇ質問はID出して書き込みやがれ 79
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2009/01/13(火) 21:48:25ID:???過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。
◆前スレ
【PHP】下らねぇ質問はID出して書き込みやがれ 78
http://pc11.2ch.net/test/read.cgi/php/1230026935/
◆質問用テンプレ
【OS名】vine linux
【PHPのバージョン】php5.26
【連携ソフトウェア】mysql
【質問内容】
◆質問する時の注意
・ スレを上げて自分のIDを表示させること。(メール欄に何も記述しない。専ブラのsageチェックを外す)
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に関連リンクの公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
(PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。)
◆質問後の注意
・2回目以降は最初に質問した際のレス番号を入れて、偽者防止に必ずIDを表示させること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
0111nobodyさん
2009/01/16(金) 00:29:04ID:???0112nobodyさん
2009/01/16(金) 00:32:34ID:???にチェックしたら解決できました
すいません><
0113nobodyさん
2009/01/16(金) 02:25:38ID:cpRhXZRJconstっていうのは
クラスの中でしか、使えない?
0114nobodyさん
2009/01/16(金) 02:36:59ID:cpRhXZRJ$dsn = 'sqlite:C:/aaa';
$pdo = new PDO($dsn);
$sth = $pdo->prepare(
'SELECT count
FROM bookmark
where id=1');
$sth->execute();
$a=$sth->fetch(PDO::FETCH_ASSOC);
print $a[count];
?>
これを実行すると
「20」
と、こちらが欲しい結果が表示されるが、それと共に
Notice: Use of undefined constant count - assumed 'count' in
という、Noticeが出てしまう。
「countを初期化すればいいのか?」
と思ったが、constはクラスの中でしか使えないみたい。
どうすれば初期化できる?
0115nobodyさん
2009/01/16(金) 02:37:10ID:???0116nobodyさん
2009/01/16(金) 02:38:22ID:cpRhXZRJは直接、クエリーを発行したけど、
今度はそれの、プリペアード・ステートメント版を作ってるということ。
この方がSQLインジェクションに強くなる。
0117nobodyさん
2009/01/16(金) 02:38:59ID:cpRhXZRJなるほどね。
Noticeにconstantという用語が出ているからといって、
かならずしもconstを使って初期化しなければならない、
ということではなかったんだな。
0118nobodyさん
2009/01/16(金) 02:44:32ID:cpRhXZRJdefine("count", ""); //countを初期化
$dsn = 'sqlite:C:aaa';//データーベースの情報の定義
$pdo = new PDO($dsn);//データーベース作成
$sth = $pdo->prepare(//プリペアード・ステートメント
'SELECT count//フィールド選択
FROM bookmark//テーブル名選択
where id=1');//レコード選択
$sth->execute();//実行
$a=$sth->fetch(PDO::FETCH_ASSOC);//データーを取ってる
print $a[count];//表示
?>
------------------------------------------------------
これにしたら、今度は、次のNoticeが出るようになった。
Notice: Undefined index: in C:1.php on line 14
indexを初期化するってなんだ?
$a[count]を初期化してみたが、違うようだし。
0119nobodyさん
2009/01/16(金) 02:57:41ID:cpRhXZRJ$dsn = 'sqlite:C:/aaa';
$pdo = new PDO($dsn);
$sth = $pdo->prepare(
'SELECT count
FROM bookmark
where id=1');
$sth->execute();
$a=$sth->fetch(PDO::FETCH_ASSOC);
if (isset($a['count'])){
print $a['count'];
}
?>
これでいけた。
シングル・クオーテーションつけてないだけだった。
つけたらNotice消えた。
0120nobodyさん
2009/01/16(金) 02:59:00ID:cpRhXZRJデーターベースから情報を取ってきて
画面に表示する、というところまで、できた。
次の挑戦は、プレースホルダ、変数のバインドだ。
0122nobodyさん
2009/01/16(金) 07:08:59ID:???0123nobodyさん
2009/01/16(金) 09:09:33ID:???0124nobodyさん
2009/01/16(金) 11:19:23ID:???チラ裏に書いておきなさいってば
0125nobodyさん
2009/01/16(金) 14:08:45ID:JjgIvuO0結果が正規分布になりません
参考にしたのは以下のHPです
http://blog.longearth.net/2008/04/30/c%E3%81%A7%E3%83%9C%E3%83%83%E3%82%AF%E3%82%B9%E3%83%BB%E3%83%9F%E3%83%A5%E3%83%BC%E3%83%A9%E3%83%BC%E6%B3%95%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E6%AD%A3%E8%A6%8F%E4%B9%B1%E6%95%B0%E3%82%92%E7%99%BA/
http://www.inf.ie.kanagawa-u.ac.jp/c_learn/class/norminv.html
//正規分布の乱数を10000回生成
for($i=0;$i<$10000;$i++){
$x=rand();
$y=rand();
$a=sqrt(abs(-2*log($x)))*(cos(2*pi()*$y));
@$result[floor($a*5.8+171)]++;//身長(平均171、標準偏差5.8)
}
//結果表示
for($i=100;$i<=200;$i++){
echo @"$i {$res[$i]}<br>";
}
何が間違っているのか分かる方、よろしくお願いします。
0126nobodyさん
2009/01/16(金) 14:23:11ID:???0127nobodyさん
2009/01/16(金) 14:23:53ID:???0128nobodyさん
2009/01/16(金) 14:26:52ID:???0129nobodyさん
2009/01/16(金) 14:30:18ID:JjgIvuO0×for($i=0;$i<$10000;$i++){
○for($i=0;$i<10000;$i++){
×echo @"$i {$res[$i]}<br>";
○echo @"$i {$result[$i]}<br>";
0130nobodyさん
2009/01/16(金) 14:43:58ID:???舌足らずな>>126を補足すると
その変換式には 0 < $x <= 1, 0 < $y <= 1 を与えろって事
http://www.php.net/manual/ja/function.rand.php
0131nobodyさん
2009/01/16(金) 14:46:49ID:JjgIvuO0一様乱数の事を偏りの無い結果を返す乱数なら範囲はどうでもいいと誤解していました。
一様乱数は0〜1まででないと駄目で
$x=rand()/getrandmax();
$y=rand()/getrandmax();
としたら正規分布した結果が得られました
>>126さんどうもありがとう御座いました
0132nobodyさん
2009/01/16(金) 14:47:25ID:JjgIvuO00133nobodyさん
2009/01/16(金) 14:57:51ID:BSD/KGQfrssで更新情報を取得したいのですが、これはレンタルサーバに負荷がかかるのでしょうか?
0134nobodyさん
2009/01/16(金) 15:03:28ID:???0135nobodyさん
2009/01/16(金) 15:03:32ID:???0139135
2009/01/16(金) 15:08:21ID:???0143nobodyさん
2009/01/16(金) 15:13:42ID:???実際に問題になる負荷かどうかはこのスレの住人が決める事じゃないよ
レンタルサーバに相談してね
RSSはcron等で定期的に更新するようにして
表示する際はそのキャッシュを参照する仕組みをとってりゃ却下されないでしょう
0144133
2009/01/16(金) 15:33:49ID:???index.phpには日時だけを表示するようにしますがこれも重い処理になるのでしょうか?
ありがとうございました
0145nobodyさん
2009/01/16(金) 15:36:44ID:???0146nobodyさん
2009/01/16(金) 18:24:47ID:???0148nobodyさん
2009/01/16(金) 18:43:49ID:???0149nobodyさん
2009/01/16(金) 18:44:56ID:tYa6x4Bm本文などは転送量が多くなるので更新日時だけを取得したいです
0150nobodyさん
2009/01/16(金) 19:00:33ID:???0151nobodyさん
2009/01/16(金) 19:02:27ID:???RSSを配信しているファイルで更新日時をはいてるかどうか試してみるといい。
0153nobodyさん
2009/01/16(金) 19:47:28ID:08Ji2paIindex.phpと保存したファイルをfffhpを使ってupしても
変なエラーコードがweb上で表示されます。
助けてください。
0154nobodyさん
2009/01/16(金) 19:55:35ID:???0156nobodyさん
2009/01/16(金) 20:05:27ID:???0157nobodyさん
2009/01/16(金) 20:06:34ID:tYa6x4Bmエラーコード晒してからかけよバカ
0160nobodyさん
2009/01/16(金) 20:56:54ID:???0161nobodyさん
2009/01/16(金) 21:20:34ID:cpRhXZRJそのエラーメッセージをコピペしてください。
もちろん公開できない部分は適当に変えて。
0162nobodyさん
2009/01/16(金) 21:28:24ID:???0163153
2009/01/16(金) 21:36:07ID:08Ji2paIいま携帯からなので自宅へもどりしだいエラーコード書きます。
0165nobodyさん
2009/01/16(金) 22:40:42ID:???0167nobodyさん
2009/01/16(金) 23:05:31ID:3QNMuF/NSTART
あいうえお
END
START
かきくけこ
END
";
という変数から正規表現で間の文字だけ取得し、配列に入れたいと思います。
preg_match_all("/START(.*)END/is",$body,$array);
としたのですが、取得できません。どういう書き方をすればいいのでしょうか?
0168nobodyさん
2009/01/16(金) 23:07:08ID:???0169nobodyさん
2009/01/16(金) 23:17:16ID:e0uLUs7Z教えて下さい!!
0170nobodyさん
2009/01/16(金) 23:21:27ID:n9qydKtv文字コードがUTF-8で作った掲示板をブラウザで表示して
ブラウザの表示を文字化け覚悟でEUCに変換、その後POSTで送信したら
内部に届く文字はEUCになるんですかね?
0171nobodyさん
2009/01/16(金) 23:25:54ID:???聞いたことよりもやってみた結果のほうが何倍も信用できるだろ?
0172170
2009/01/16(金) 23:35:26ID:???返信ありがとうございます。
やってみたらEUCで送られてきました・・・
どう対処しようかと考えましたが
mbstring.http_input = auto
mbstring.encoding_translation = On
にしたら全てUTF-8になりました。
お手数をおかけしました。
対処法はこれでいいんですかね?
0173nobodyさん
2009/01/16(金) 23:36:34ID:???0174170
2009/01/16(金) 23:53:36ID:???mbstring.http_input = autoでは
まずいんですかね?
出来ればmbstring.internal_encodingで
設定しているUTF-8でいただきたいんですけど・・・
0175nobodyさん
2009/01/17(土) 00:41:26ID:sXvdxnWvもしくは今の時代utf8だからそのままでもいいとは思うけど
0176170
2009/01/17(土) 01:00:35ID:???返信ありがとうございます。
私自身も今までこの設定でやってきたんですが、
もしUTF-8で作った掲示板を誰かがブラウザの表示で
文字のエンコードを変えてPOSTで送信してきたら
セキュリティ的に大丈夫なのかなと思いまして・・
変な質問ですいません。
0177nobodyさん
2009/01/17(土) 01:01:53ID:???0178nobodyさん
2009/01/17(土) 01:19:40ID:sXvdxnWv大丈夫だよ。
誰もphp.iniをのぞかないから。乗っ取られない限り
0179170
2009/01/17(土) 01:35:59ID:???例えば先程書いた例の通り掲示板にSJISの文字コードで
こんにちはとPOST送信してきた場合その言葉を内部でUTF-8に
エンコードしない限りSJISとして処理され
データベースに格納されてしまうのかなと疑問に感じまして・・
今日確認目的でマルチバイトの設定ファイルの勉強を再度したら
頭がごちゃごちゃになってしまいました。
変な質問本当にすいません。
0180nobodyさん
2009/01/17(土) 01:57:53ID:???0181nobodyさん
2009/01/17(土) 02:12:55ID:???valueを日本語にして送信されたvalueと内部の値を比較する。
0182170
2009/01/17(土) 02:23:40ID:???セキュリティというか文字化けですね。
掲示板の投稿やショッピングサイトのユーザ登録を作る時に
ブラウザから文字コードの違うテキストがPOST送信されてきた場合、
内部の文字コードに適切に処理するプログラムでいつも対処するべきなのか
疑問に感じました。
例えばIEのメニューから表示→エンコード→シフトJISに切り替えて
POST送信した場合、フォームに記述したモノは
全てシフトJISで送信されるんですかね?
なんか書きながらすごい自分自身幼稚な事を言ってる気がします。
読んでいただいてありがとうございます。
0183nobodyさん
2009/01/17(土) 02:24:40ID:???聞いたことよりもやってみた結果のほうが何倍も信用できるだろ?
0184nobodyさん
2009/01/17(土) 02:33:55ID:???ブラウザ上でユーザーが明示的に
UTF-7にして、そのデーターを送信してきたら
アタッカーが意図的にjavascriptのコードを仕込んできて、
XSSやCSRFの原因になることがあるよ
詳しくはググれ
0186nobodyさん
2009/01/17(土) 02:35:34ID:???0187nobodyさん
2009/01/17(土) 02:36:11ID:???危ないだろ。
シフトJISでは防げない攻撃がある。
だからシフトJIS自体を使うのをやめましょうね、
って流れになってる。
0188nobodyさん
2009/01/17(土) 02:38:46ID:???0189nobodyさん
2009/01/17(土) 02:39:41ID:???SQLインジェクションだけ考えればいい。
そっから取ってきたデーターを画面に
表示するときは、htmlspecialcharsでサニタイズが必要。
0190nobodyさん
2009/01/17(土) 02:40:08ID:???0191nobodyさん
2009/01/17(土) 02:41:14ID:???「OSコマンド・インジェクション」への注意が必要。
通常、ユーザーの入力値をそのままOSに渡したりしてはいけない。
バカがメール送信プログラムとかでよくやる。
0192153
2009/01/17(土) 02:46:02ID:ElVqoJ54よろしくお願いします
0193nobodyさん
2009/01/17(土) 02:46:54ID:uOghFGaK・サイト内検索
・ログイン、ログアウト
・ユーザー登録
・データベース管理
あとどんな技術が必要?
0197nobodyさん
2009/01/17(土) 03:00:05ID:???0198170
2009/01/17(土) 03:02:18ID:qiM85KnNまだまだ勉強不足なのでこれから一層努力していきます。
0199nobodyさん
2009/01/17(土) 03:03:20ID:???0200nobodyさん
2009/01/17(土) 04:17:01ID:???んですけど、なぜでしょう?デフォルトの挙動ではないのか。
ちなみに,
fputcsv($fp, $data, ',', '"')としても結果は同じだた。
0201nobodyさん
2009/01/17(土) 04:26:55ID:???0202nobodyさん
2009/01/17(土) 05:31:32ID:3kZEDG7gレス番、名前、メール欄、・・・・、本文、、
みたいな感じでテーブルにずらーと管理されてるのかな
想像絶するようなデータ量だと思うんだけど、そのようなことが本当に行われているのか。
それともphpでdatからこの部分参照、検索みたいなことやってるのかな。
気になってしょうがないので、なんとなくでいいので教えてください
0203nobodyさん
2009/01/17(土) 08:35:28ID:???未来検索ブラジルってとこが2chのログをインデックス化して
検索できるようにしてるだけ
なんのDBが使われてるかはしらないが当然DBは使われている
簡単にいえばGoogleみたいなもんだ
0204nobodyさん
2009/01/17(土) 09:52:48ID:???詳細はぐぐれば分かる(もしくは説明しても分からない)から大雑把に言うと、
DBからインデックス(本の末尾に単語とページ数の対応表があるだろ、あんな感じ)を事前に生成し、そいつを使って検索する。
(もしかしたら公開版のsennaより高性能なものを使っているかもな)
まあ、その辺は内部処理なので、呼ぶ側からは普通にSQLで検索かけているように見えるんだけどな。
昔の2chはMySQLだったので、いまもそうじゃないかと思うが、断言は出来ない。
それと、2chはPHPではなくPerlで動いている。
サーバー側の仕組みからして普通のwebサーバーとは異なるので、その辺のスクリプトと比較はできないけどな。
0205nobodyさん
2009/01/17(土) 09:56:44ID:???0207nobodyさん
2009/01/17(土) 10:03:16ID:???0208nobodyさん
2009/01/17(土) 12:22:02ID:???DBに何使ってるのかは俺はシラネ。
他の人のレスにもあるように、大規模データのindex化の手法っていうのは色々あるので、
sennaの開発元でもあるし、頭の良い人は何かえーよーにやっとるのでしょう。
俺みたいな凡人は、頭の良い人が考えた技術を後からありがたーく使わせてもらうまでw
ちなみにgoogleなんかはDBのエンジンからして自社開発だけどね。
0209nobodyさん
2009/01/17(土) 12:32:22ID:???(゚Д゚)ポカーン
■ このスレッドは過去ログ倉庫に格納されています