【PHP】下らねぇ質問はID出して書き込みやがれ 131
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2013/11/10(日) 15:46:09.34ID:???過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。
◆前スレ
【PHP】下らねぇ質問はID出して書き込みやがれ 130
http://kohada.2ch.net/test/read.cgi/php/1379566039/
◆質問用テンプレ
【OS名】CentOS
【PHPのバージョン】5.3
【連携ソフトウェア】MySQL ImageMagick
【質問内容】
◆質問する時の注意
・ スレを上げて自分のIDを表示させること。(メール欄に何も記述しない。専ブラのsageチェックを外す)
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に関連リンクの公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
(PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。)
◆質問後の注意
・2回目以降は最初に質問した際のレス番号を入れて、偽者防止に必ずIDを表示させること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
【その他諸注意】
・SQL・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
0231nobodyさん
2013/11/17(日) 09:37:26.57ID:???0232nobodyさん
2013/11/17(日) 13:01:07.39ID:iaEwZT+Sあなたみたいに、無駄かもしれないけどとりあえずやってみようっていう人は素晴らしいと思う。
0233nobodyさん
2013/11/17(日) 18:10:59.78ID:???「動作する」って意味ならLinuxでもWindowsでも使える
「実用に耐える」って意味ならLinuxでもWindowsでも使えない
0234nobodyさん
2013/11/17(日) 23:19:57.93ID:???[ID]と[パスワード]の入力欄は表示されますが、肝心な[ログイン]ボタンが表示されないので、ログインできません
このOperaは、ガラケーのフルブラウザなんですが、どうにかしてログインさせる方法はありませんでしょうか?
[ID]と[パスワード]の入力欄は問題なく入力できます
宜しくお願いします。
0235nobodyさん
2013/11/17(日) 23:33:39.91ID:???0236nobodyさん
2013/11/17(日) 23:35:12.68ID:???0238nobodyさん
2013/11/18(月) 00:15:21.89ID:???どこの言語の人って言いたかったかw
PHPが使えないって言ってるやつは大体本人が使えないだけって決まってるからな
0239nobodyさん
2013/11/18(月) 12:57:44.49ID:+1FXVq0T多態性(ポリモーフィズム)とは、端的に、どういうことを指すのでしょうか?
わかりやすい要点や具体例、使いどころなどをご教示ください。
なお、自分で調べて次のことを知りました。
ネットで調べると、複数のクラスのメソッドの命名を同一にして、場面により切り替えることとありました。
また、ある本では、オブジェクトの引数に他のオブジェクトを渡してそのメソッドを切り替えることとありました。(ストラトジーパターン)
Javaの本では、オーバーロードという仕組みで、引数の数の違いによりメソッドの振る舞いを変えることとありました。
ただ、調べても抽象的で理解が困難です。
ご回答よろしくお願いします。
0241nobodyさん
2013/11/18(月) 14:05:27.46ID:JW8eEpfY【PHPのバージョン】5.4.7
【連携ソフトウェア】MySQL
【質問内容】
PHPでDBの内容を複数取得して表示する時、どの方法がいいんでしょうか?
PDO::query、PDOStatement::fetch+execute等色々あるようで、
検索しても色々な方法があってよくわからないです。。。
最新のものがいいとは思うのですが、最新のものもどれかよくわかりません。お助け下さい。
0243nobodyさん
2013/11/18(月) 15:12:26.33ID:???PHPのような動的型付け言語(インタープリター)では、基本的にオーバーロード(多重定義)という仕組みはない。
PHPの場合オーバーロードを実現するために、func_get_argsなんかを使って条件分岐でやる必要がある。
ようは引数に渡す型の種類や引数の数は違えど、処理内容が同じになる場合とかに使うわけだけど、
何が嬉しいかというと、メソッド名(関数名)を1つだけ覚えとけばいいとか、メソッド名を考えるのに困らないとか、
まぁそんなところ。(多重定義否定派やそれがよくないと感じる人もいる)
オーバーロードを使わない場合、>>240のあげるtoStringは、
intToString($int)とかboolToString($bool)とか冗長な名前でごった返すことになる。
ただPHPではfunc_get_argsでやると複雑になるので、そういう実装を取る人も多い。
http://php.net/manual/ja/language.oop5.overloading.php
ここで書かれているPHPのオーバーロードというのは、
注釈にも書いてる通り他の言語のオーバーロードとは意味あいが違うので注意。
0244nobodyさん
2013/11/18(月) 15:18:20.79ID:???0245nobodyさん
2013/11/18(月) 15:28:53.99ID:???0246nobodyさん
2013/11/18(月) 15:37:21.09ID:???> ネットで調べると、複数のクラスのメソッドの命名を同一にして、場面により切り替えることとありました。
> また、ある本では、オブジェクトの引数に他のオブジェクトを渡してそのメソッドを切り替えることとありました。(ストラトジーパターン)
これらがポリマーフィズム
> Javaの本では、オーバーロードという仕組みで、引数の数の違いによりメソッドの振る舞いを変えることとありました。
これはポリマーフィズムじゃない
多態性(ポリモーフィズム)は複数のクラスに同じメソッド名を設定することで
どのクラスが来ても同じメソッドの呼び方で実行させられってもの
大体は、インターフェースか継承で実現するもの
ポリマーフィズムに関してはJavaもPHPも差がない
0247nobodyさん
2013/11/18(月) 15:51:04.64ID:???その場合、全く関連性の無いオブジェクトでも同一メソッド名のメソッドがあればポリモーフィズムを実現できる。
というのが、JavaとPHPの違い。
0248nobodyさん
2013/11/18(月) 16:06:16.24ID:???素人ばかりだな
0249nobodyさん
2013/11/18(月) 16:07:41.17ID:???0251nobodyさん
2013/11/18(月) 16:13:50.49ID:???この人の言ってることがわかれば参考になると思うよ
わからないからそんな質問してるんだろうけどね
オブジェクト指向の勉強なんてのはPHPでやるもんじゃないので
一回Javaコース入ったほうがいいと思う
0253nobodyさん
2013/11/18(月) 16:38:37.75ID:???SmallTalkのときから長らく議論されてる問題
僕はポリマーフィズム実現手段派
0254nobodyさん
2013/11/18(月) 16:45:12.30ID:???SmallTalk → Smalltalk
0255nobodyさん
2013/11/18(月) 16:51:58.32ID:???0256nobodyさん
2013/11/18(月) 17:14:25.82ID:???0257239
2013/11/18(月) 17:27:24.47ID:hjGdNC9C>>243
多態性(ポリモーフィズム)のメリットを理解できました。
メソッド名の統一により楽できることが利点の一つなのですね。
>>246
抽象クラスで、メソッドの実装と名称を強制するのと同義と考えて大丈夫ですよね。
>>247
同一のメソッド名にすれば、その効果が、結局、ポリモーフィズムであるということですよね。
>>251
そのページの説明を読みましたが、解答がポリモーフィズムからずれて、オブジェクト指向全般の概要になっている気がします。
ただ、次の部分は、ポリモーフィズムの説明だと思いました。
もっとも、PHPのオーバーロードは、Javaとは別物のようです。
『他にも "オーバーロード" といった便利な機能があります。
引数の種類を変えれば、同名のメソッドを定義できるというものです。
いい例えが思いつきませんが、攻撃する際に "こうげき" のみでダメージ判定されるものと
"こうげき" と "まりょく" でダメージ判定される攻撃の二つがある場合、必要な引数が前者で1つ、後者で2つなのでどちらも記述できるといったカンジです。』
ありがとうございました。
0258nobodyさん
2013/11/18(月) 19:39:12.50ID:???外部からのデータを扱う場合、prepareメソッドを使う(無害化する機能有り)
外部からのデータを扱わない場合、queryメソッドを使う(無害化する機能無し)
分からなければ常にprepare使えばOK
0259nobodyさん
2013/11/18(月) 21:31:57.27ID:???0261nobodyさん
2013/11/18(月) 21:52:48.72ID:???条件文使わないといけなくなるから使いづらい
0262nobodyさん
2013/11/18(月) 21:53:41.23ID:HK3o2Mp0それ何でやっても同じだろ
0263nobodyさん
2013/11/18(月) 21:58:12.44ID:???条件によってクエリが変わることは全く別物だぞ
0264nobodyさん
2013/11/18(月) 22:00:52.85ID:???じゃやっぱクエリ2つ用意するのね
0265nobodyさん
2013/11/18(月) 22:04:57.29ID:???0266nobodyさん
2013/11/18(月) 22:53:34.11ID:???パラメータを無害化することしか知らない人には分からないだろうけど。
0267234
2013/11/18(月) 23:36:38.28ID:???0272nobodyさん
2013/11/19(火) 10:43:34.31ID:???0273nobodyさん
2013/11/19(火) 10:54:41.60ID:???0275nobodyさん
2013/11/19(火) 11:57:37.76ID:???あおりのレベルが低いんだよな。
0276nobodyさん
2013/11/19(火) 12:16:10.14ID:???使ってる人の問題だけど、そういうFWを推してる人はどうにかならんかな
0277nobodyさん
2013/11/19(火) 12:17:54.87ID:???0279nobodyさん
2013/11/19(火) 12:20:03.73ID:???0280nobodyさん
2013/11/19(火) 12:28:14.36ID:???0281nobodyさん
2013/11/19(火) 12:30:37.60ID:???0282nobodyさん
2013/11/19(火) 12:39:02.32ID:???今も治ってないの?
0283nobodyさん
2013/11/19(火) 12:53:02.64ID:hKBGRur1http://fuelphp.jp/docs/1.6/general/security.html#sql
0285nobodyさん
2013/11/19(火) 13:17:38.96ID:???query+quoteに比べて処理工数が多いだけに遅そうだしー
ただでさえ遅いFWの速度をあげるには仕方ないのでゎ
0287nobodyさん
2013/11/19(火) 13:23:36.67ID:???0288nobodyさん
2013/11/19(火) 13:24:21.74ID:???一昔前の文字コードやエスケープ処理での脆弱性を知らないんだろうし
シングルバイト系の人は知らない人多いし
0289nobodyさん
2013/11/19(火) 13:37:06.01ID:hKBGRur1だめなの?
fuelphpてSQLインジェクション防げないんだ…
これはオワコンだわ
0290nobodyさん
2013/11/19(火) 13:49:33.19ID:???基本的には防げてるし、新たに発見された脆弱性も継続して修正されてる。
http://fuelphp.com/security-advisories
「プリペアードステートメントを使ってないからSQLインジェクションの脆弱性がある」というのはFUD。
とはいえ、プリペアードステートメント使えやとは思うけどね。
0291nobodyさん
2013/11/19(火) 13:57:50.15ID:???そもそもでいえば、インジェクション防止の機構じゃねーし。
SQLの機構じゃなくて、ライブラリのラッパなので、仕様によっては
使っていても問題ないというわけではない。
0292nobodyさん
2013/11/19(火) 13:58:01.02ID:???クエリを実行するとき、データベースサーバでは、
1. 構文解析
2. 実行計画立案
3. クエリ実行
の処理が必要で、prepareでは1または1&2が行われる。(構文のみで実行計画を立てて固定する場合と、3で渡された
パラメータをもとに実行計画を立てる場合がある)
一方、exec queryでは毎回1〜3が行われる。
なので、同じ処理をパラメータを変えながら複数回実行する場合、プリペアードステートメントを使った方が速い場合がある。
0293nobodyさん
2013/11/19(火) 14:08:35.69ID:???>>268
PHPが何なのか解らず、単にネットプログラムの質問スレで質問させて頂きました
>>269
大手企業サイトなので厳しいですね
ど素人ながら、ログインボタンのURLとかPCでログイン後のURLとか試したんですが、無理でした
0294nobodyさん
2013/11/19(火) 14:12:15.36ID:???> 大手企業サイトなので厳しいですね
大手こそ対応してくれそうなもんだが。
「○○のサイトって、ガラケーのフルブラウザだとログインもできない糞サイトだわ」
とかネットで言われると困るだろうし。
0298nobodyさん
2013/11/19(火) 15:39:16.53ID:???0300nobodyさん
2013/11/19(火) 15:55:45.62ID:???昔のMySQLみたいなprepareがクライアントサイドで処理とかゴミな実装されてると
prepareのほうが脆弱性の巣窟になりかねない。
この場合、徳丸氏や大垣氏が騒ぐから問題はいつか解決される
0301nobodyさん
2013/11/19(火) 16:05:50.48ID:???ポストしたデータ類はdbやcsvに書き込んだり保存したりするわけでもなく
switch($_POST["color"])
{
case "red":return imageColorAllocateAlpha($i,200,200,200,$alpha);break;
~~~~~~
default:return imagecolorallocate($i,255,255,255,$alpha);break;
}
で最終的に変な物が飛んできてもdefaultで処理されると思うんですがセキュリティ的にこれ$_POSTを正規表現やstrlenで弾くべきですか?
0305nobodyさん
2013/11/19(火) 17:47:12.58ID:???想定外のものがあったらexitして真っ白にして不気味感を演出したり
headerでbad requestあたりを返すと思う
0306nobodyさん
2013/11/19(火) 18:06:18.79ID:???0307nobodyさん
2013/11/19(火) 20:51:48.38ID:???余談だが、404にすべきページをエラーページに飛ばしてたら
ソフト404とかで注意されたよ。
0309nobodyさん
2013/11/19(火) 21:10:38.01ID:???0310nobodyさん
2013/11/19(火) 21:14:07.64ID:???header("HTTP/1.0 404 Not Found");
header("Location: http://www.example.com/error/");
こんな感じにしたら、なぜか、最初のヘッダーは無視されて、
結局、302でのリダイレクトになっちゃうから404を出すのは諦めたんだけど。
404出してから更にエラーページに遷移するのは無理っぽい。
fiddlerでステータスコードを確認した限りの話だが。
0314nobodyさん
2013/11/19(火) 21:18:06.73ID:???0315310
2013/11/19(火) 21:37:04.47ID:XtFCM7Hlいや、エラーページは200を返す普通のページにしてたんだけど。
もちろん、存在しないページ用の404ページ(ヘッダー404)は別に用意してるんだけど。
つーか、むしろエラーページに飛ばさないで、素直に404ページに飛ばせばいいのか。
0316310
2013/11/19(火) 21:42:44.27ID:XtFCM7Hl0317nobodyさん
2013/11/19(火) 21:49:59.72ID:???厳密には200を返す必要があるときはない
0318nobodyさん
2013/11/19(火) 21:54:36.62ID:???0319310
2013/11/19(火) 22:48:57.12ID:9JiWXD43どうも頭が混乱してしまいました。
こうすれば大丈夫でしょうか?
POSTパラメーターが不正 → エラーページ
(200ステータス: echo ”リクエストが不正です”)
GETパラメーターが不正か不存在 → 404ページ
(404ステータス: echo ”ページが存在しません”)
GETパラメーターの場合に、エラーページに飛ばしていたのが、
ソフト404の原因だと思うのです。
0320nobodyさん
2013/11/19(火) 23:00:34.26ID:???RFC2616か、WikipediaのHTTPステータスコードでもいいから読んで
どういう時にどれを使えばいいか分かるから
0321nobodyさん
2013/11/19(火) 23:04:02.90ID:???hoge.phpというファイルは存在しているんだから404を返すのは不自然
0322310
2013/11/19(火) 23:29:26.30ID:9JiWXD43ご指摘に従い、HTTPステータスコード等について調べてみます。
>>321
mod_rewriteで、GETパラメーターを静的URLに書き換えてリンクとして活用しているのですが、
この場合もhoge.phpは存在するとみなされるのでしょうか?
(例)ttp:example.com/hoge/2013/11/29
9999とか不正な値がきたら、404に飛ばせばいいかなと思ったのですが。
わかりづらい説明ですみません。
0323nobodyさん
2013/11/19(火) 23:44:52.18ID:???実質的にはhoge.php?y=2013&m=11&d=29みたいな感じで見れると思うけど
hoge.phpが存在するというのを表向きに知られたくないのなら好きにすればいいんじゃね
目的とか実装によりけりだよそのへんは
0324nobodyさん
2013/11/19(火) 23:51:53.10ID:???ファイルがあろうがなかろうが、そのURLを存在させたくなければ404でよい
> (例)ttp:example.com/hoge/2013/11/29
> 9999とか不正な値がきたら、404に飛ばせばいいかなと思ったのですが。
404が適切。
0325nobodyさん
2013/11/19(火) 23:59:01.39ID:???example.com/post/ブログ記事のid
だとして、存在しないidだったときは404返してたんだけど間違ってる?
0326310
2013/11/20(水) 00:10:19.19ID:VLPy2k85(例)ttp:example.com/hoge/2013/11/29
結論として、このurlの不正な値の場合に、200のエラーページに飛ばしていたのがソフト404の原因ですよね。
ご指摘くださったことを参考に、もう一度、ページの構成と遷移、
ステータスコードの関係について検証したいと思います。
ありがとうございました。
0328nobodyさん
2013/11/20(水) 07:53:07.64ID:???自分で書いてるスクリプトなのにw
400と500のどちらかを返すだけの方が無難だよねw
0331nobodyさん
2013/11/20(水) 11:28:24.00ID:35fCUlouErrorDocument 404 /error/404.php(404ヘッダーを出力)
ここから質問です。
次のURLのid値が不正な場合、404となるよう、同様に、/error/404.php に遷移できますか?
ttp://example.com/post/id
header('Location: ttp://example.com/error/404.php');
post.phpで出すこのヘッダーは302ですが、遷移すれば、結果として404扱いになるのでしょうか?
■ このスレッドは過去ログ倉庫に格納されています