【PHP】下らねぇ質問はID出して書き込みやがれ 113
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2011/11/29(火) 19:55:27.17ID:???過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。
◆前スレ
【PHP】下らねぇ質問はID出して書き込みやがれ 112
http://hibari.2ch.net/test/read.cgi/php/1320005469/
◆質問用テンプレ
【OS名】CentOS
【PHPのバージョン】5.3
【連携ソフトウェア】MySQL ImageMagick
【質問内容】
◆質問する時の注意
・ スレを上げて自分のIDを表示させること。(メール欄に何も記述しない。専ブラのsageチェックを外す)
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に関連リンクの公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
(PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。)
◆質問後の注意
・2回目以降は最初に質問した際のレス番号を入れて、偽者防止に必ずIDを表示させること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
【その他諸注意】
・SQL・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
0124nobodyさん
2011/12/05(月) 05:20:52.70ID:???呼び出すときにそのobjがどんなメソッドと引数を持っているか
推測しないといけない設計はあまり好まず…そこは素直にクラス作りんしゃいに一票。
0125nobodyさん
2011/12/05(月) 05:52:43.56ID:Df4UWWf4ネット上のオセロの対戦サイトっぽいの作ろうと思っています。
そこで、通信のやり方が分かりません。
不特定多数の人がそのサイトにログインするまではいいのですが、対戦は1対1なので、
対戦が始まったらその二人の間でのみ通信が行われないといけないのですが、
そのような通信は一体どうやればいいのでしょうか?
オセロのプログラム、描画はJavaScriptで書いています。
0126nobodyさん
2011/12/05(月) 06:04:21.68ID:???0127nobodyさん
2011/12/05(月) 06:08:30.42ID:4I6BeXxuソートに使用するorder byやdescやascを、
バインドしてもうまく働きません。
$sort_by = "hoge"; //実際は外部から取る値
$is_desc = true; //外部から指定
$stmt=$dbh->prepare("select * from t where 1 order by :sort :which");
$stmt->bindValue(":sort", $sort_by);
if ($is_desc) {
$stmt->bindValue(":which", "desc");
} else {
$stmt->bindValue(":which", "asc");
}
$stmt->execute();
これは内部で
select * from t where 1 order by hoge desc
ではなく、
select * from t where 1 order by "hoge" "desc"
となってるからなのは分かるのですが、
こういうケースの場合はどうしたらいいのでしょうか?
よろしくお願いします。
0129nobodyさん
2011/12/05(月) 06:25:04.96ID:???サーバは送られてきたクッキーとセッションを照合しながら二人を追う
現在のゲームの進行状況をクライアント(2人)に返す
返した結果によってクライアント画面に反映する
この繰り返し
片方側からのリクエストが途絶えて
片方からのリクエストを3回連続で受け取った場合
もう片方はゲームを途中でやめた判定する
いわゆるポーリングという技法
実装が簡単だがよりリアルタイムに近づけるにはインターバルを1秒未満にしなくてはならず
ゲーム中はF5アタックをしてるようなものなのでレンタルサーバではやってはいけない
0130nobodyさん
2011/12/05(月) 06:39:35.66ID:???成る程、分かりやすいです。
送られてくるクッキーとセッションで送信者が識別できるのなら実現できそうです。
やっぱりいろいろと問題もあって、難しそうですね。
レンタルサーバーでもやり方次第でなんとかなると思ったので、いろいろ試して
みようと思います。
とにかく簡単なプロトタイプを作って動かすまではやってみます。
0131127
2011/12/05(月) 07:25:44.75ID:4I6BeXxuプリペアドステートメントは使わず、PDO::query()+PDO::quote()で行うしかないんでしょうか?
なんかベストな解決方法を知っていたらお願いします。
0132nobodyさん
2011/12/05(月) 13:11:31.92ID:???call_user_func_array(array($this->obj, $name), $arguments);
>>131
ORDER BY句は自力で組み立てて
そっから PDO#prepare() に渡す
ちなみにバインドできるのはリテラル値だけ
0133nobodyさん
2011/12/05(月) 14:23:18.46ID:???http://stackoverflow.com/questions/8343399/calling-a-function-with-explicit-parameters-vs-call-user-func-array
横からだけど
引数が5つ以上になると call_user_func_array のほうが早くなるんだな…
それより短い場合は短ければ短いほど不利で
引数が一つだけ取るようなケースだと、二倍くらい遅くなると。勉強になりました感謝。
0134nobodyさん
2011/12/05(月) 16:17:45.57ID:uI9LFaIuまずはソースを貼ります。
$_query =
"select F.seq_user, U.seq, COUNT(F.seq_user) AS total
FROM tbFavorites AS F
LEFT JOIN tbUser AS U ON F.seq_user = U.seq
group by F.seq_user
order by total desc limit 25";
if ($result = $mysqli->query($_query)) {
if ($result->num_rows > 0) {
$userranking = array();
while ($row = $result->fetch_array(MYSQLI_ASSOC)) {
$userranking[] = $row;
}
$result->close();
}
}
for($i=0;$i<25; $i++){
$_query =
"select COUNT(F.seq_user) AS total
FROM tbFavorites2 AS F
WHERE F.seq_user = ".$userranking[$i]['seq']."
limit 1";
if ($result = $mysqli->query($_query)) {
if ($result->num_rows > 0) {
$row = $result->fetch_array(MYSQLI_ASSOC);
$userranking[$i]['total']= $userranking[$i]['total'] + $row['total'];
$result->close();
}
}
}
$smarty->assign('userranking', $userranking);
0135nobodyさん
2011/12/05(月) 16:24:09.16ID:uI9LFaIutbFavorites(商品ジャンルA)、tbFavorites2(商品ジャンルB)はユーザが二つの種類の商品をお気に入り
に登録するためのtableです。
今どのユーザがたくさんお気に入り登録したかをランキング形式で出そうとしています。
しかし134のソースではジャンルAでまずランキング上位25人を出してしまっています。
本当ならジャンルAとジャンルBの合計値を出したあとに上位25人を出したいのですが
うまいやり方が思いつきません。どなたかお知恵をお貸しください。
0136nobodyさん
2011/12/05(月) 16:54:20.79ID:???全件とって自分でがんばるかどっちか
0137nobodyさん
2011/12/05(月) 16:56:30.82ID:uI9LFaIuうまくいきません。JOINとUNIONで試してみたのですが
全然期待通りの値にならないのです。。。
0138nobodyさん
2011/12/05(月) 17:43:15.14ID:???テーブル構造は?
DB板のが答え速そうだな
0139nobodyさん
2011/12/05(月) 18:24:42.35ID:???UNIONでできなかったってのが、UNION ALLでダメだったのかどうかにもよるけど。
select count(seq_user) as total from (
select seq_user from tbFavorites
union all
select seq_user from tbFavorites2
)
group by seq_user
order by total desc limit 25
あと、tbUserと結合する意味がなさそう。
0140nobodyさん
2011/12/05(月) 18:25:52.85ID:???0141nobodyさん
2011/12/05(月) 19:07:21.50ID:wb46KamGセキュリティ的に問題ないんですか?負荷も掛かるだろうし。
0142nobodyさん
2011/12/05(月) 19:08:59.07ID:???0143nobodyさん
2011/12/05(月) 21:33:08.80ID:???0144nobodyさん
2011/12/05(月) 21:48:37.75ID:FlRxYHcsマニュアル見たところ無いようなのですが
statsは全然まとめられていないながらも、あるようですが
0145nobodyさん
2011/12/05(月) 23:53:12.26ID:???¥マークはどういう時に使うのでしょうか?
例
class Model_Crud extends \Model implements \Iterator
0147nobodyさん
2011/12/06(火) 00:12:06.88ID:???0148nobodyさん
2011/12/06(火) 00:23:22.19ID:???0150nobodyさん
2011/12/06(火) 12:02:11.48ID:bGnivCFj携帯で、あるページにアクセスした時、その携帯のメーラーを立ち上げることってできるでしょうか?
どうやったらいいでしょうか
PHP5を使っています
0151nobodyさん
2011/12/06(火) 12:02:28.57ID:OdBx5Qxgありがとうございます。おかげさまでできました。
お礼が遅くなりました><
原因はgroup byがちゃんと使えてませんでした。
0153nobodyさん
2011/12/06(火) 13:09:00.01ID:???0154150
2011/12/06(火) 13:09:11.32ID:bGnivCFjレスどうもです。そういうことではないんですよ
1)リンクを踏む
2)ページAに遷移してDB処理、終わったらページBにリダイレクト
3)ページBに移動したら自動的にメーラーが立ち上がる
というのをイメージしています
ページBにリダイレクトしなくても、ページAでのDB処理が終わったあとに
何らかの方法でメーラ起動できればそれでいいんですが…
header関数とかの問題かなと思ったんですが、ヒントが見つからない状況です
0155150
2011/12/06(火) 13:10:07.14ID:bGnivCFjそんなことやりませんよw
0157nobodyさん
2011/12/06(火) 13:38:57.60ID:???0158nobodyさん
2011/12/06(火) 13:39:18.56ID:???0159nobodyさん
2011/12/06(火) 13:56:53.94ID:???メーラーが勝手に開くのは怖いしウザい
0160nobodyさん
2011/12/06(火) 14:10:13.41ID:???避けるべき実装
0161nobodyさん
2011/12/06(火) 14:12:49.28ID:16sWocHtメーラーが勝手に開くリンクからメール送ったことってほとんどないな。
0162150
2011/12/06(火) 14:19:00.41ID:bGnivCFjこんな簡単なんですか
すみませんでした、試してみます。ありがとうございました
>>159-161
ご意見どうもです
説明不足でしたが>>154の「1)リンクを踏む」のリンクに「メールを送る」と書くつもりです
多分大丈夫かと…
ありがとうございました
0164nobodyさん
2011/12/06(火) 16:56:44.79ID:???gmail しか使ってなかったり linux のクライアントだとメーラー設定してなかったり
あるのでテキスト直書きで、テキスト@hoge.com 件名は○○○で送ってください
とか併記しておいて欲しいと思う吉宗であった…
0165nobodyさん
2011/12/06(火) 20:56:46.07ID:16sWocHtURLはhoge.phpのまま変わらないというのがありますが、
これはPOSTメソッドで同じURLにPOSTして、ifなどで条件分岐して
表示を変えているんでしょうか?
この手法は一般的ですか?
トークンによるCSRF対策も問題なく動作しますか?
0167nobodyさん
2011/12/06(火) 21:00:57.91ID:16sWocHtありがとうございました。
cart1.php
↓
cart2.php
↓
cart3.php
とか書いていたのですが、ダサイので書き直します。
0168nobodyさん
2011/12/06(火) 22:44:11.20ID:QHQ8UGsv【PHPのバージョン】5.3
お世話になります。セッションについて勉強中です。
[A]というサイト上にあるログイン用のプログラムで
session_name(セッション名);
セッション名を設定した上でセッション利用
cookieにはランダム文字列のセッションIDが記録されます。
このあと、全く別サーバー・別ドメイン上にあるPHPで
echo $_COOKIE["セッション名"];
と書いてアクセスすると
[A]サイトのセッションID(ランダム文字列)が丸見えになっています。
1.悪意のある人が$_COOKIE["セッション名"];でセッションIDを抜き出す
2.偽装した上ですぐさま[A]サイトにアクセス
3.ログイン状態
となってしまうのではと想像しているのですが
何か良い対策は無いでしょうか?
セッションに対する自分の認識自体が間違っていたら面目ございません。
0172nobodyさん
2011/12/07(水) 14:57:42.29ID:???0173nobodyさん
2011/12/07(水) 16:15:10.80ID:wyHjvonwその場合、端末側のcookieは自動的に削除されますか?
端末側から一定時間操作をしないとセッションが終了しましたと
表示されるサイトがありますが、これはどのようなコードを
書いているのでしょうか?
セッションスタート時に、その時刻をセッション変数に記録する
次のセッションスタート時に、前回記録した時刻と現在時刻を比較して
一定以上経過していると、ログインページに案内する
こういう仕組みでいいのでしょうか。
それともsession.gc_maxlifetimeをいじればいいのでしょうか。
0174nobodyさん
2011/12/07(水) 16:27:58.44ID:???セッションは、時間で消され たり します。
session.gc_maxlifetime などが関係ありそうです。
また、それとは別にセッション時間を記録するのも、それでなにをしようと自由です。
そのときは、セッションを自分で消さなくちゃいけません。
0175nobodyさん
2011/12/07(水) 16:40:10.05ID:wyHjvonw>閉じようがずっと続くようにも出来ます。
逆に、ブラウザを閉じたらセッション終了するにはどうすればいいでしょうか。
0177173
2011/12/07(水) 16:49:16.54ID:wyHjvonwということは、
セッションが開始されると端末側にcookieができる(許可する場合)
サーバ側はそのcookieでセッションが継続していると判断する
ブラウザを閉じても、cookieがあって、セッションの有効期間中なら
セッションは継続される
ということですか?
別件ですが、セッションIDをURLに埋め込む場合、
どのようなセキュリティ対策が必要ですか?
1. http→httpsに移行するときにセッションIDを変更する
2. セッションIDが無効なときは、トップに転送
を考えていますが、セッションIDが無効かどうかはどのように判断できますか?
0178nobodyさん
2011/12/07(水) 16:53:00.73ID:???セッションを継続したり保持してるのはサーバーで
cookieに入れるのはその名前というかキーだな。 cookieがあったとしても
セッションがあるかどうかは別。
0179nobodyさん
2011/12/07(水) 17:01:38.88ID:???そのセッションIDつきのURLをほかの人が使ったときに、セッションの乗っ取りができないようにする対策が必要です
0180173
2011/12/07(水) 17:16:59.06ID:wyHjvonwありがとうございます。
たとえば、
アリスがセッション 111 をスタート
セッション111は失効または手続完了でdestroyされる
あとで、アリスまたはボブがセッション111をスタートしても、
前回の続きを表示せず、別の正当なセッションID 123 を発行する。
チャーリーが存在しないセッション 222 を指定したときは、
そのIDを無効として受け付けず、代わりに正当なセッションID 234 を
発行する。
このようなことができればいいと思っています。
0182173
2011/12/07(水) 17:21:57.43ID:wyHjvonwセッション111がガーベージコレクトされていなければ、
サーバ側にまだ情報は残っているので、セッション111を
指定すれば取り出すことはできないですか?
そういう意味で最初から存在しないものと区別したつもりだったのですが。
0183nobodyさん
2011/12/07(水) 17:29:53.80ID:???0184173
2011/12/07(水) 17:39:38.10ID:wyHjvonwsession_destory()はそういう仕様なのですね。
終了せず、放置されて有効期間が経過したときはどうでしょうか。
セッションの有効期間は15-25分程度を考えています。
0185nobodyさん
2011/12/07(水) 17:53:46.99ID:???削除タイミング。 検索して調べてね。
0186173
2011/12/07(水) 18:03:23.50ID:wyHjvonwありがとうございます。大体つかめてきました。
削除の確率を上げればいいんですね。
0187nobodyさん
2011/12/07(水) 18:27:44.54ID:???0188173
2011/12/07(水) 18:32:35.12ID:wyHjvonwどうでしょう。
商品を選ぶ→httpsに移動→配達先を入れる→確認→完了
という構成で、お金はオンライン決済ではなく代引きなどで
もらうので、少なくともhttpでの乗っ取りはさほど深刻ではないと
考えています。
0189nobodyさん
2011/12/07(水) 18:39:22.08ID:WEP6SmbY0190nobodyさん
2011/12/07(水) 18:58:36.31ID:???乗っ取った人が、商品を選ぶ→httpsに移動→配達先を入れる→確認→完了
ってやってもさほど深刻ではないということ?
0191nobodyさん
2011/12/08(木) 01:47:49.47ID:???sessionで生成される桁数を考えたら、ループで回すのも大変だろうし
もし不安なら、こんなのもあるから、コレでほぼ大丈夫だと思うよ。
http://d.hatena.ne.jp/do_aki/20100319/1269021432
人的コストとレスポンスが遅くなるコストよりも、こんな対策も考えてみてはいかが?
0192173
2011/12/08(木) 01:57:01.85ID:XeoPGUCwありがとうございます。
作ろうとしてるサイトでは、たぶん乗っ取るメリットがないので
あまり気にしていないのですが、最初のセッション開始時に
IPとUAを記録して、重要なステップの前にマッチするのはどうでしょう?
>>190
注文した人の情報が他人にわかると深刻ですが、
商品を選んでる段階ならもし乗っ取られても問題ないかと。
httpsに移動して配達先を入力してもらうところで
セッションIDを変更する処理を入れようと思いますが。
0193nobodyさん
2011/12/08(木) 02:10:40.20ID:???SESSION['IP']とかにIPを入れるんだったら
ま、毎回マッチさせてもいいんじゃない?それくらいなら
0195173
2011/12/08(木) 05:29:47.98ID:XeoPGUCwはい。会員登録やログインのシステムは作りません。
商品を選ぶ→httpsに移動→送り先を入れる→注文完了
これだけです。
>>193
そうですね。
CSRF対策は考えようと思っています。
0196nobodyさん
2011/12/08(木) 11:58:55.42ID:+gCf/58vvar $title = '';
と varがあるのと
$title = '';
と varがないんと
何が違うんですか?
0197nobodyさん
2011/12/08(木) 12:14:52.77ID:???http://jp2.php.net/manual/ja/language.oop5.properties.php
つけるべきところでつけなかったり、そうでないところで付けたらエラーになるだけです。
0198nobodyさん
2011/12/08(木) 21:45:37.59ID:DX40whZT見たことがないのですが
もし出来ないならば、代わりにどのような言語を使用すればいいのでしょうか?
0199nobodyさん
2011/12/08(木) 22:17:20.35ID:???http://www.neowin.net/forum/topic/406790-php-calculus-functions/
こんなんみつけますた
0200nobodyさん
2011/12/08(木) 22:34:16.63ID:WqXOej+6どんな用途だ?
計算時間など考慮して近似式に展開しておけば良いだろ。
厳密に必要だったら数値計算のライブラリやツール使う。
0202nobodyさん
2011/12/09(金) 00:19:24.53ID:???癖が強すぎる・・・
JavaScriptも癖はあるが、それでも他言語と感覚は近い
いかにPHPが素直で分かりやすい、扱いやすい言語かが分かる
0203nobodyさん
2011/12/09(金) 00:23:40.51ID:???微分、積分をfor()でループ?
想像が出来ないんだけど、具体的にどんな風にやるの?
f(x)をf'(x)にするとかどうなるんだろ・・・
2乗が書けないので変な書き方するけど、
f(x)=x2+3x+5の場合
f'(x)=2x+3
・・・う〜ん、俺には分からん
0205nobodyさん
2011/12/09(金) 01:24:09.48ID:CtDS5H650206nobodyさん
2011/12/09(金) 11:19:24.96ID:???Webサービスからデータを取得するときにも、GETではなくPOSTメソッドを使うような実装は一般的でしょうか?
GETメソッドとの使い分けが知りたいです。
0207nobodyさん
2011/12/09(金) 11:27:17.48ID:???postするときはPOST
0208nobodyさん
2011/12/09(金) 12:29:06.21ID:???0209nobodyさん
2011/12/09(金) 14:33:39.95ID:???ダメ元で【Twitter 初心者&質問スレ Part.10】に書きましたが、
プログラム寄りの話になるので、やはり返答がありませんでしたのでこちらへ移動しました。
質問内容は下記です。
お手数ですが、最適なスレへの誘導お願いいたします。
twitter developers(ttps://dev.twitter.com/)にログインしたのですが、
どこからログアウトすればいいのかわかりません。
ググってもどこでログアウトするかといった話題はありませんでした。
ログアウトはどこをたどっていけばいいのでしょうか?
0210nobodyさん
2011/12/09(金) 14:48:45.75ID:???質問に答えるときはメール欄にsageを入力
0211nobodyさん
2011/12/09(金) 14:52:37.85ID:???しかもどこに質問すればいいのか答えろって・・・
こういうときこそツイッターでつぶやけばいいと思うよ
またはヤフー!知恵袋へ
0212173
2011/12/09(金) 15:40:51.03ID:TzYxXuZs商品を選ぶ→httpsに移動→送り先を入れる→注文完了
こういうサイトで、セッション固定化攻撃に対するセキュリティ向上の
ために一度だけセッションIDを変更しようとおもいます。
そのタイミングは、httpsに移動した直後が適当でしょうか?
いくつかのブログを読むと
http://hoge.jp/?PHPSESSID=fuga
というURLにアクセスすれば、セッションIDがfugaとしてアクセスできるため
セッション固定化攻撃にぜい弱だと書いてありますが、
これは今のPHP5.3.xでもその仕様ですか?
0213nobodyさん
2011/12/09(金) 16:13:26.44ID:???対策はされていないので自分で面倒見ないといけない
タイミングはパスワード入力を要求される操作の直後にやると良い
ログインや個人情報にアクセスする時等
0214173
2011/12/09(金) 16:30:00.88ID:TzYxXuZsじゃあ個人情報の入力の直前がいいですね。
ありがとうございました。
0215nobodyさん
2011/12/09(金) 20:44:50.78ID:wAnNw8aSググりようがないです
0216nobodyさん
2011/12/09(金) 20:53:02.33ID:???unkoって表示する関数らしい
0217nobodyさん
2011/12/09(金) 20:54:52.90ID:8IpyhOyC[0]=>
string(9) "北海道"
[2]=>
string(9) "群馬県"
[4]=>
string(9) "栃木県"
[6]=>
string(9) "福島県"
[7]=>
string(9) "山梨県"
[8]=>
string(9) "東京都"
[10]=>
string(9) "福岡県"
[11]=>
string(9) "大阪府"
[17]=>
string(9) "新潟県"
[18]=>
string(9) "長野県"
[31]=>
string(9) "福井県"
[36]=>
string(9) "兵庫県"
[37]=>
string(9) "石川県"
}
こんな感じの配列で
配列の若い番号順に都道府県の上から(北海道から)の順にしたいんですがいい方法ありますか?
並べ替える配列はランダムで1〜50都道府県入れる予定です
0221nobodyさん
2011/12/10(土) 02:15:15.70ID:AgP8NyH3正規表現が死ぬほど苦手でこれの意味が・・・。
0-9の1回以上の連続まではわかるんですが、?![-\d]の部分が・・・。
0222nobodyさん
2011/12/10(土) 03:00:32.96ID:???4段落目くらいの「先読み明言」
http://www.mt312.com/php/43/
コレで分かるかな?
先読み明言とかのワードでググるといいよ
■ このスレッドは過去ログ倉庫に格納されています