【PHP】下らねぇ質問はここに 9

■ このスレッドは過去ログ倉庫に格納されています
2017/12/20(水) 18:00:20.28ID:1xaO/YRR0
PHPに関する質問スレです

前スレ
【PHP】下らねぇ質問はここに書き込みやがれ 8
http://mevius.5ch.net/test/read.cgi/tech/1489506082/

次スレは>>980以降
本文の1行目に以下を追加すること
!extend:on:vvvvv:1000:512
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
2018/08/07(火) 13:53:06.05ID:XXpusaA40
サーバってのはsocket関数使ってポートlistenしたデーモンであること
>>368はたんにバックエンドなだけ
2018/08/07(火) 14:37:02.01ID:uocr6YSL0
>>373
今のところ使い道が浮かばないからやめておくよ。でもありがとう

>>374
これで完全に合点がいった。ありがとう
2018/08/08(水) 16:21:48.35ID:Ao8ga7ES0
VB/VBA(クラス無し)しか書かけないけど、PHP(5?)を触ることになった

入門書探してるんだけど、尼のカスタマーレビュー見るとどれも賛否両論でまともなのがない

「これ買え」ってのない?
内容全部が役に立つわけないのはわかってるから、本の特徴が知りたい
2018/08/08(水) 16:24:03.76ID:ic4eKuJe0
リンクをクリックすると問い合わせに回答するメールの画面が開くという処理があるのですが、
EdgeとIEでは正常に動作するのですが、Chromeだと何も起こらない時があります。

$val = mb_convert_encoding($_POST['body'], "SJIS", "UTF-8");
body(本文)が短いとChromeでも正常に動作するのでbodyの内容が長い時に↑のエンコード時に何か異常が起きてると思うんですけどわかる方いますか?
378デフォルトの名無しさん (ワッチョイ ffd0-10BI)
垢版 |
2018/08/08(水) 17:06:31.24ID:/J/gevQO0
input要素の入力の有無を確認する方法で一般的な方法を教えてください。

1. if($hoge == ''){・・・}
2. if($hoge === ''){・・・}
3. if(empty($hoge)){・・・}
4. if(!$hoge){・・・}
5. if(!strlen($hoge)){・・・}
6. 他の良い方法も教えてください。

PHPを初めて日が浅いので変な質問をすると思いますが、よろしくお願いします。
2018/08/08(水) 17:18:00.31ID:Evm53zpf0
>>378
<form action="" method="post">
<input type="text" name="hoge">

のフォームから飛んでくる$_POST['hoge']の値が空かどうかは

if ((string) filter_input(INPUT_POST, 'hoge') === '')

と書くのが実用的(正しいというと語弊があるので「実用的」と表現しとく)

少なくとも3や4は使っちゃ駄目
hogeに'0'が入っていても空として判定されてしまう
2018/08/08(水) 17:24:45.45ID:Evm53zpf0
>>377
<a href="mailto:aaa@example.com?body={$val}">〜</a>
としてリンクをクリックした時に
メーラーの本文に$valが書かれた状態にしたいって話だろうか?

もしそうならbodyに何byteまで指定できるかは環境依存なので
その方法は止めて
ローカルのMTAやSMTP使ってメールを飛ばすようにした方がいい
2018/08/08(水) 17:30:58.81ID:Evm53zpf0
>>376
ちょっと上でも話が出てるがPHPには初心者ならこれ!という本が本当にない
強いていうならPHP公式サイトにあるPHPマニュアルが一番いい

何かを作りながら学びたいのであれば
ドットインストールみたいなサービスも選択肢になるかも
2018/08/08(水) 17:37:04.15ID:4S5+d1joa
プログラミング言語として学ぶだけならいざ知らず, PHPの場合はほぼ確実にサーバサイドプログラミングのお作法とセットだから難しい
構文だけは簡単だけど実用しようと思うと全く初心者向けじゃないと思うわ
(サーバサイドアプリケーション自体初心者向きじゃないとは思う)
2018/08/08(水) 17:44:35.51ID:tT8nsbXK0
本屋で色々見て一番読みやすそうなの買えばいいんだよ
何が読みやすいなんて人それぞれなんだから
384378 (ワッチョイ ffd0-10BI)
垢版 |
2018/08/08(水) 18:05:55.26ID:/J/gevQO0
>>378です

>>379さん
アドバイスありがとうございます。
教えてくださったコードとPHPマニュアルを見て動作から学びたいと思います。
また、3と4の方法は、日本語のみの場合、使っても問題ないということでしょうか。
覚えることが多いですが、頑張ります。
2018/08/08(水) 18:19:09.01ID:Ao8ga7ES0
>>381-383

やっぱなぁ
入るスキルがバラバラだからコレっつーのが難しいんだな
「PHPマニュアル」が一番ってのはわかるんだが、リファレンスであって教本じゃない感じ

XAMPP(MySQLでPHP5)環境だから、大きい本屋であさって、尼で中古買うわ
2018/08/08(水) 18:29:33.84ID:JZIh8c1S0
自分が始めた10年ぐらい前は赤マンモス本とかが流行ってたけどね
今はもう古いんじゃないかなあ
困ったときはとりあえずみんなオライリーって言うけど誰も言ってなかった
2018/08/08(水) 18:37:52.38ID:Evm53zpf0
>>384
> 3と4の方法は、日本語のみの場合、使っても問題ないということでしょうか

例えば if (empty($hoge)) は
1.$hogeが未定義(undefined)
2.$hoge = NULL
3.$hoge = (bool) false
4.$hoge = (int|float) 0
5.$hoge = (string) 0 or (string) ''
6.$hoge = (array) array() (空の配列)
なんかの時に真になる

意味を分かって使うのであれば別に絶対駄目だという訳じゃないよ

「日本語のみ」というのはPHPではどう判定するのか
そもそも日本語をどう定義するのかって話はあるけど
388378 (ワッチョイ ffd0-10BI)
垢版 |
2018/08/08(水) 19:16:28.90ID:/J/gevQO0
>>387さん
詳しいレスありがとうございます。
それぞれの関数の意味を理解するよう勉強します。
ありがとうございました。
2018/08/09(木) 10:37:03.17ID:eox88/ri0
>>380
ありがとうございます。mailtoじゃなくjavascriptですけどメーラー本文に問い合わせ内容が書かれた状態にしたいです。
私は専門はオフコンなのでほとんどPHP等の知識はないのですが、作った人がもういないので仕方なく探り探りやってる状態です。
2018/08/09(木) 11:17:35.06ID:MNGTuu+R0
>>389
今JavaScriptでやってるという方法も
結局は内部的にmailtoスキームを使ってるのではないかと思う

その方法はブラウザやブラウザから呼ばれるメールソフトに依存してしまう
しかも環境によってはそもそもメールソフトが起動しない

つまりPHPの処理の問題ではないって事ね

Googleフォームみたいに
問い合わせフォームを簡単に作れるサービスがたくさんあるので
そういうのを使ってみるのはどうだろう?
「問い合わせフォーム 作成」とかでググってみるとか
2018/08/09(木) 11:27:54.29ID:MNGTuu+R0
>>389
試しに実験してみたけど
Chromeはやはり?body=に長過ぎる文字列を指定してると
mailtoが反応しなくなるっぽいね

適当に10,000byteのbodyを与えみたら
Chromeはmailtoをクリックしても何も起こらなくなる
Firefoxだと2046byte以降が削除される

これはもう仕様なので他の方法にするしかないだろうね

今までも環境によっては動いてなかったんだと思うよ
2018/08/09(木) 11:39:44.99ID:2CPDzClL0
>>389
GETじゃなく、POSTでやってみたら
PHPの知識というよりWebの動作についての知識
2018/08/09(木) 11:51:13.12ID:icZP1PWcd
>>392
いやそういう問題じゃないだろ
2018/08/09(木) 13:07:46.86ID:eox88/ri0
>>390-391
やはりそうですかありがとうございます。
問い合わせフォーム自体はあるのですが、返信する時にメーラーを使っています。

>>392 POST勉強してみます
2018/08/09(木) 13:23:22.82ID:MNGTuu+R0
>>394
問い合わせ内容がメールで来るわけではなく画面に表示されて
画面内のリンクをクリックしたら返信用にメーラーが立ち上がるみたいな仕組みなのかな?

問い合わせ内容が何かしらのメールアドレス宛に届くようにしさえすれば
あとは運用で解決する問題なような気がするけど…
2018/08/10(金) 10:53:33.88ID:Jh09aF/n0
>>395
まさにそう言うことです
VBAくらいは触ったことはあってもWebアプリはチンプンカンプンで一から勉強です・・・
2018/08/10(金) 12:02:22.10ID:9AhDfxBI0
運用でカバーするなら今のままでIE使わせればいいって話でもあるわな。
398デフォルトの名無しさん (ワッチョイ 8ad0-SkTr)
垢版 |
2018/08/11(土) 17:46:10.17ID:3QKmHOOO0
$var = $_POST['var'];
よりも
$var = filter_input(INPUT_POST,'var');
が良いんですか !?
前者は危険だと聞いた(´・ω・`)
勉強中の身だけどムズカシイ 
2018/08/11(土) 17:51:08.49ID:sk2SMDv70
filter_inputで少しぐぐれば出てくるでしょ
分からない単語出てきたらまたぐぐるってやってけば分かるさ
2018/08/11(土) 21:17:42.60ID:8ZYocvEQ0
>>399
前者が危険な理由はキーワード知らないと filter_input でググってもでてこないと思うけど。
2018/08/12(日) 00:03:01.67ID:iFUBY5JA0
>>400
実際にググってみた?
キーワード知らなくても検索結果の上から5つくらい見ればそれなりには理由分かるよ
2018/08/12(日) 00:08:01.15ID:B+zL8m/c0
単刀直入にやらないと、無駄にスレを消費する
2018/08/12(日) 00:31:14.89ID:UYzABTVRM
filter_input だと便利な場面があるというだけで、$_POST はこれまでみんな使ってきたものだし留意点を押さえれば問題があるわけじゃない。
$_POST での参照は、そもそもそのパラメタが設定されているか、期待する型かとかを自分で判定する必要があるというだけで、fi-ter_input はそれを場合によって便利にするユーティリティ関数程度のもの。
2018/08/12(日) 01:12:20.29ID:9ChOuHra0
$_POST が危険って言われるのは、変更可能なスーパーグローバルだから。
filter_input は HTTP で投げられた値を直接参照するので、$_POST とは全然別物。
ググってでてくる情報で、変数汚染に触れてる記事はないので、概要知らないとたどり着けないんだぜぃ!
2018/08/12(日) 07:20:34.52ID:l4hCxpRe0
変更可能だとどんな危険が考えられるの?
2018/08/12(日) 09:08:50.60ID:9ChOuHra0
>>405
行儀の悪いモジュールやライブラリとか使うと書き換えられるかも。ってぐらい。
実際にはそれほど気にしなくて良いレベルだけど、それを気にしなきゃいけないプログラムは多い。
読みやすく/使いやすく/再利用性の高いコード書くってことは、結合を疎に保つことが重要なんで、そのあたり理解してると $_POST はまず使わん。
2018/08/12(日) 15:04:58.70ID:9ilCyu/u0
GETも同じ?
2018/08/12(日) 15:27:03.70ID:bsEI5sh70
>>404
>$_POST が危険って言われるのは、変更可能なスーパーグローバルだから。
>filter_input は は HTTP で投げられた値を直接参照するので、$_POST とは全然別物。

$_POST が危険って言うのは聞いたことがないんだが、
Webサーバーが受けとったリクエストをPHPが取得して変数に代入している訳だろう?
PHPスクリプトが変数の値を参照するのに誰かが割り込めるのかな
リクエスト内容を直接参照すれば他が割り込めなくなるとは思えないが
filter_input がやれるなら、他も出来ると言うことだろう
2018/08/12(日) 15:35:31.72ID:bsEI5sh70
$HTTP_POST_VARS って変数があり、
これはスーパーグローバルではないけれど
現在は非推奨となってる
2018/08/12(日) 20:02:51.29ID:9ChOuHra0
>>408
ここで言う「危険」は「セキュアじゃない」って意味ではなくて、「コードが意図した通り動かない可能性がある」とかの意味。

$_POST は「スーパーグローバル変数」なので、コード内のいたる箇所で書き換えることが可能。
で、書き換えちゃった場合、それを使用している他の箇所にも影響出るよね。ってことを危険っ言ってる。
普通は書き換え行うようなことはしないけど、何かの意図があって書き換えた場合、後に想定を超える影響を及ぼす可能性が大。
filter_input は読み取りのみが保証されるので、疎結合なコードを書くには filter_input を使用することが必須。

>> 407
GET も考え方は同じ。
2018/08/12(日) 20:18:35.31ID:bsEI5sh70
>>410
そういうのはバグって行って、POSTスーパーグローバル変数の問題ではないなあ
使い方が間違えているか、ワザとそうしているかだろう

普通に推奨されている方法をあえてとらないって 意味が無いと思う
自分だけでやってシステムが終わるまでメンテするって言うなら良いけど
2018/08/12(日) 20:51:00.05ID:9ilCyu/u0
>>410
なるほど、ありがとう
2018/08/12(日) 20:56:57.73ID:9ChOuHra0
>>411
バグの入る余地をなくして、読みやすく/使いやすく/再利用性の高い危険を回避したコードを書くには、結合を疎に保つことが重要
で、結合を疎に保つには filter_input を使用することが推奨されるって話なんだけど、通じてる?

普通に推奨されている方法をあえてとらないって 意味が無いと思う
自分だけでやってシステム終わるまでメンテするって言うなら良いけど
2018/08/12(日) 21:02:18.40ID:bsEI5sh70
あえて書き直すほどの事は無いと思う
開発する人間が注意すれば避けられること

そこまで拘るなら、Webサーバー使わずに
自前でリクエストを受けとってしまえば良いんじゃない?

普通に推奨されているとは思わないよ。そんな関数初めて聞いたし。
どこでそんな事で大騒ぎになっているの?サイト教えて
2018/08/12(日) 21:24:00.23ID:l4hCxpRe0
疎結合と filter_input がいまいち結び付かん。
HTTPリクエストから必要パラメタを取り出しオブジェクト化して、後はそのオブジェクトを使ってパラメタにアクセスしましょうってんならHTTPリクエストを隠蔽できて疎かなって気もするが。
$_POST の代わりに filter_input を使うと何と何が疎になるの?って感じ。
2018/08/12(日) 21:37:43.85ID:9ChOuHra0
>>414
変数のスコープのの話なんて、適当に探せばいくらでも出てくるだろうに^^;

堅牢なコードを理解してないみたいなんで、これでも見て意識改善するといいよ。
https://youtu.be/17i1EL9pBwA
2018/08/12(日) 21:44:39.30ID:9ChOuHra0
>>415
> HTTPリクエストから必要パラメタを取り出しオブジェクト化して、後はそのオブジェクトを使ってパラメタにアクセスしましょうってんならHTTPリクエストを隠蔽できて疎かなって気もするが。
その認識で正しいと思うよ。
ただ、それはそれ。
取り出しの時に行儀の悪いモジュールやライブラリ使用したときに、邪魔される可能性は残る。
取り出しのときにでかいスコープを回避できる 読み取り専用の関数を使用すると、予防的にコードが書けるってことです。
2018/08/12(日) 22:17:31.77ID:bsEI5sh70
PHPを扱うサイトでfilter_input が話題になっている所あるの?
見つからないんだけど
普通に推奨されている位だから、たくさんあってもおかしくはないよね?
2018/08/12(日) 22:25:25.71ID:bsEI5sh70
Webサーバーからリクエストを受けとるのに隠蔽も何もないと思うけどね
グローバル変数だから書き換えられる可能性があるというのも変
書き換えているのは自分じゃないか。人のせいには出来ないでしょう
大勢で開発しているなら、その処理を行う担当以外は操作禁止にするだけだし
2018/08/12(日) 22:26:50.06ID:9ChOuHra0
>>418
filter_input じゃ、ググれないよ。
グローバル変数を使用しない理由を検索してみるといい。
キーワード知らないと、ググれないっていうのはそういうこと。
2018/08/12(日) 22:29:18.96ID:9ChOuHra0
>>419
@t_wada の前でも同じこと言えんの?
2018/08/12(日) 22:31:31.01ID:mMH07JtW0
既存コードを修正すべきだとまでは言わないが, 新規コードにはfilter_inputを使うべきだという点に関しては疑う余地がない
2018/08/12(日) 22:40:35.81ID:bsEI5sh70
>>420
つまり、公開されているPHP関連のサイトではそのような話題が出ていないと言うことでOK?
2018/08/12(日) 22:49:31.76ID:l4hCxpRe0
>>419
んまあデバッグしたりコマンドラインでも実行できるようにしたりする可能性を考えると、HTTPリクエストの扱いは浮かせて置いた方がいいかなって気はするよ。
後は同意。
$_POST がダメで filter_input ならいいって話には繋がらないと思うし、$_POST をわざわざ書き換えるならあえてそういう設計なんだろうけど、それが甘いか明確になってないだけじゃねとしか思わん。
そういう設計はかくかく然々でお勧めしないよって話ならまだ聞ける。

ちなみに >>416 は見たよ。
話のうまいやつで面白かったよ。
PHP にも assert あったのね。しかも運用時にいないことにできるとか、なかなかいいじゃないか。
2018/08/12(日) 22:55:53.50ID:bsEI5sh70
キーワードで検索出来ないってことがとても不自然に感じるんだけど
普通に推奨されていると言うなら、行う記事があってもおかしくはないよね

まさか、この関数が非公開関数で秘密にしないといけないものだったりして
2018/08/12(日) 22:59:03.40ID:9ChOuHra0
>>423 >>425
グローバルスコープな変数使うなよって話以上に何が聞きたいの?
グローバル使用しない代替手段使おうねって話でしか無いんだけど^^;
そろそろ理解しようよ。
2018/08/12(日) 22:59:36.87ID:bsEI5sh70
>>425
× 行う記事
○ 推奨する記事
2018/08/12(日) 23:01:06.85ID:bsEI5sh70
>>426
それならそういえば良いでしょう

変な関数持ち出す必要もないし
普通に推奨されているなんて言いだすから
サイトを教えてくれと言う話になってるんだし
2018/08/12(日) 23:04:19.57ID:l4hCxpRe0
>>426
よく言われるようなグローバル使うなって話は、自分で定義するのは極力避けましょうってことであり、用意されてるものを使うなって話ではないんじゃない?
2018/08/12(日) 23:07:19.08ID:bsEI5sh70
そんな事実上の内部バグを問題にするよりも
リクエスト投げてくるのは、こちらが用意したフォームとは限らない、
想定外のリクエストに乗せられることが現実に発生するんだし、
そちらのチェックの方が重要だと思うよ
そういう実際的な話題を提供して議論する方が良いと思うな
2018/08/12(日) 23:08:04.47ID:9ChOuHra0
>>428
最初っから、そう言ってるんだぜぃw

> >>399
> 前者が危険な理由はキーワード知らないと filter_input でググってもでてこないと思うけど。
2018/08/12(日) 23:09:31.00ID:9ChOuHra0
途中で投稿してしまった。

> $_POST が危険って言われるのは、変更可能なスーパーグローバルだから。
> filter_input は HTTP で投げられた値を直接参照するので、$_POST とは全然別物。
> ググってでてくる情報で、変数汚染に触れてる記事はないので、概要知らないとたどり着けないんだぜぃ!
2018/08/12(日) 23:15:01.27ID:9ChOuHra0
>>429
改変されるリスクの有無は同じなので、限定した話ではない。
2018/08/12(日) 23:15:09.06ID:bsEI5sh70
ググっても出てこない関数がどうして普通に推奨されていると言うのか、
その根拠を聞きたかったんですが
そんなに話題に上らない関数と言うことで良いんでしょうか?
2018/08/12(日) 23:17:10.07ID:bsEI5sh70
しつこくて済みませんが、グローバル変数を使うなと言うのは、一種の宗教だと思うんです
信じる人はそうすれば良いけど、信じない人はそうしなくてもいいと言う程度で
2018/08/12(日) 23:32:41.22ID:mMH07JtW0
PHP The Right Wayくらいは必読だと思う
ttps://www.phptherightway.com/#data_filtering

理由もなくスーパーグローバルを直接叩くようなコードを新しく書いたならそれだけでrejectするに足る
それ以外のグローバル変数も納得出来る説明がコードやコメントに無いならreject
2018/08/12(日) 23:50:35.68ID:9ilCyu/u0
エラーが起きない方法をとるのに越した事はないと思うけど、何をそんなにむきになってるのだろう
2018/08/13(月) 01:59:19.53ID:eWNl9K1lM
>>436
そこからどこまで読めばお前さんの言いたいことが書いてあるのが分からんが、とりあえず外部データをサニタイズせずに使うことの危険性なんかを説明してるのかな?
それを解決するのに filter_input や filter_var を使えますよという話だよね?
グローバル使うな的な話は書いてないようだが、ただ実はもしやと思ってたんだけど、register_globals を使うなって話と混同してるんじゃない?
それは危ないから使わない方がいいよ。
そしてそれは $_POST を使うななんてこととは全く関係無い。
2018/08/13(月) 11:03:05.76ID:rjxAd60g0
>>434
ずっと同じことのループやねぇ。。。

> ググっても出てこない関数がどうして普通に推奨されていると言うのか、
ググって出てこないのは、$_POST の危険な理由。
関数としては各所で便利だぜぃ。って紹介されている。
PHP The Right Way もその一つ。
2018/08/13(月) 11:05:41.03ID:rjxAd60g0
>>435
> しつこくて済みませんが、グローバル変数を使うなと言うのは、一種の宗教だと思うんです
宗教じゃなくて、意識の話。読みやすく/使いやすく/再利用性の高いコード書くことを意識していれば、グローバル変数の使用はまず避けるように設計する。
避ける気がないのは、読みやすく/使いやすく/再利用性の高いコード書く意識が無いってだけ。
2018/08/13(月) 11:35:41.06ID:V6shauct0
>>435
他言語しか知らないけど、グローバル変数なんてめったに使わない

>>440
PHP勉強中だけど、教本のサンプルって短いからグローバル使いまくり
いいコードの書き方ってなかなかないね
やっぱり実践のコード((またはきれいな)が見たいよ
2018/08/13(月) 11:43:06.68ID:XxWurSAu0
filter_input 自体は $_POST使っているんでしょ?
2018/08/13(月) 12:32:33.81ID:ZXAQ0ZmcM
>>440
だからさ、自分でわざわざグローバル変数作るなってことだろ、それは。
既に用意されてるものを使うなって理由としてグローバル変数だから(誰でも書き換えられるから)ってのは意味が分からんだろ。
わざわざ示されたもの読んで言ってるんだから >>438 にも答えてくれよ。
2018/08/13(月) 12:48:25.49ID:rjxAd60g0
>>443
ずっと同じことのループやねぇ。。。

> 改変されるリスクの有無は同じなので、限定した話ではない。
改変されるリスクの有無は同じなので、限定した話ではない。
この辺が、結合を疎にする意味。

> わざわざ示されたもの読んで言ってるんだから >>438 にも答えてくれよ。
オレが示したわけじゃないんで解釈あってるか分からんけど、普通に読めば「ググっても出てこない関数がどうして普通に推奨されていると言うのか、その根拠を聞きたかったんですが」に対するコメントだと思うぞ。
filter_input 紹介している有名記事を教えてくれたんでしょ。
2018/08/13(月) 12:50:40.98ID:rjxAd60g0
>>442
filter_input は HTTP で投げられた値を直接参照するので、$_POST とは全然別物。

試してみるといいよ。オレも最初試したw
2018/08/13(月) 13:13:48.26ID:ZXAQ0ZmcM
>>444
あ、ごめん
別の人と混同してたわ

それはそれとして結合を疎にする話、自分でグローバル変数を用意してそれを介して複数クラスやモジュールでコミュニケーションするって話ならそれは結合が密だと言えると思う。
でもただシステムが用意してるリソースを参照するからと言ってそれが密かと言えばそうじゃないし、密だったとしてそれを疎にするためにラップしなさいっていうならそれは分かる。
filter_input 使ったところで何が疎になってるの?って感じだけど、そこらへんどうなの?
若干繰り返しになるけど、PHP固有の関数である filter_input 自体を直接参照せずラップしましょうってところまで行ってるのであれば、そういう方法論もあるかと思うよ。

グローバル変数誰かが書き換えたら不具合が起こるって、スコープが狭いだけでクラスメンバ変数を誰かが書き換えちゃったらという話と同じような話でしょ。
早い話、選定してるものを仕様通りに使ってないという問題なんだかrさ。
2018/08/13(月) 13:22:06.99ID:+hDvRkt20
個人的には $_POST をリードオンリーにして使ってるが、俺だけだろうな
2018/08/13(月) 13:41:09.92ID:rjxAd60g0
>>446
filter_input は HTTP で投げられた値を直接参照するので、$_POST とは全然別物

スーパグローバル変数は「参照」できるだけでなく、「書き込む」こともできるのでどう使っても密になる。
オブジェクトのプロパティに「POST内容を突っ込んでおく」場合でも、スーパーグローバル変数を使用して取り出すと行儀の悪いモジュールやライブラリに邪魔される可能性が残る。
取り出しのときに読み取り専用の関数を使用すると、そういった結合を疎にすることができ、予防的にコードが書ける。
で、ここで言う読み取り用の関数が filter_input

> グローバル変数誰かが書き換えたら不具合が起こるって、スコープが狭いだけでクラスメンバ変数を誰かが書き換えちゃったらという話と同じような話でしょ。
読みやすく/使いやすく/再利用性の高いコード書く場合は、発想が逆でそういった事をさせないように設計する。

堅牢なコードを理解してないみたいなんで、これでも見て意識改善するといいよ。
https://youtu.be/17i1EL9pBwA
2018/08/13(月) 14:57:40.05ID:XxWurSAu0
これ以上やっても信仰する宗教のようなのでやめますが

php.netで $_POST変数が非推奨になり、filter_input関数が推奨になったら
その時に考えることにします

今は、いくつかある対策方法の一つとして聞いておきます
2018/08/13(月) 15:25:20.03ID:6I003ZzcM
>>448
書き込めたら密だって?
なんかワケわからんが、お前さんの言う密って何?
ちなみにそれは見たよ。
2018/08/13(月) 15:48:38.75ID:rjxAd60g0
>>450
複数クラスやモジュールでコミュニケーションしてしまう状態
2018/08/13(月) 15:54:21.02ID:XxWurSAu0
あなたはそういう風に使いたいのかも知れないが
普通の人はそうは使わない
いつまで自分の信仰に拘るんだろう
2018/08/13(月) 16:14:12.67ID:rjxAd60g0
>>452
グローバル変数の汚染を回避する設計って普通だぞ^^;
新興でも何でも無い。
2018/08/13(月) 16:22:06.43ID:XxWurSAu0
汚染する犯人は自分以外にいないんですが
多重人格者でもなければ心配ないでしょう
2018/08/13(月) 16:27:52.12ID:rjxAd60g0
>>454
3ヶ月目の初心者みたいなこと言うなよ。。。
堅牢なコードを理解してないみたいなんで、これでも見て意識改善するといいよ。
https://youtu.be/17i1EL9pBwA
2018/08/13(月) 16:29:04.74ID:XxWurSAu0
汚染の原因なんて事前に特定出来るでしょう
それが出来ない人だから、こんなことするの?
2018/08/13(月) 16:33:01.17ID:rjxAd60g0
>>456
だから動画見ろってw
汚染も含めて「影響を受けない/受け付けない」コードの書き方を研究して、公開してくれてるんだから。
2018/08/13(月) 16:33:50.13ID:LXDaPxOa0
一か月前の自分は他人だよ
一年も経てば細部なんて何も覚えてない
俺は自分にそこまで自信を持てないわ
2018/08/13(月) 16:44:20.77ID:XxWurSAu0
防げるのはせいぜい自分が書く内部バグくらい?
外部からの攻撃については無力
コツコツとバリッドチェックを用意することになるのは変わらない
こんなんでも堅牢なシステムだって言えるんだろうか
2018/08/13(月) 16:46:25.51ID:XxWurSAu0
グローバル変数に対して誤って代入している箇所を見つける事が
そんなに難しいことなんだろうか?
2018/08/13(月) 16:50:37.23ID:B8BpXPvN0
>>456 は結局のところ「注意すれば事足りるでしょ?」ってことを昨日からずっと言い続けてるよね
その注意をかける負担を減らせる手段を一つでも盛り込む事に反発する理由なんて一つもないと思うんだけどな
俺の頭がおかしいのかそうじゃないのかよく分かんなくなってくるじゃん
2018/08/13(月) 16:51:42.20ID:XxWurSAu0
誤った代入ならローカル変数にだってあり得るが
こういうロジックミスはそれを使っても防ぎようがない
丹念にチェックし潰していくしかない
2018/08/13(月) 16:55:21.28ID:B8BpXPvN0
あと宗教だの信仰だの言ってるけど、頑として自分の主張を曲げずにずっと言い続けてるってのは、結局のところそれは「別の宗教(信仰)」なのでは……?
2018/08/13(月) 17:01:08.48ID:XxWurSAu0
経験により積み重ねてきた手法を変えるというのは
それだけの説得力が必要なんだと思います
だから布教は大変なんでしょう
2018/08/13(月) 17:04:05.65ID:B8BpXPvN0
>>464
俺はあなたの事を話してるんですが
2018/08/13(月) 17:13:09.68ID:XxWurSAu0
堅牢と言っているけども、何から堅牢かと言えば、自分自身が書く記述の誤りから堅牢になると言うこと
プログラムから見たら、グローバル変数だけをガードしてからと言ってバグフリーになるわけじゃない

また、Webサイトとして堅牢をうたうなら、それは外部からの攻撃に対しての話だし
今回提案された関数を使おうと、その点については無力のまま

この辺が改善されたら導入を考えようと思うんですが、如何ですか?
2018/08/13(月) 17:26:15.20ID:rjxAd60g0
>>466
オマエほんとバカだろ。。。
動画見ても全然理解できないと思うけど、まず見てみ。
会話が成立しないくらいズレたことコメントしてるってだけでも理解したほうがいい。
2018/08/13(月) 17:47:45.32ID:XxWurSAu0
>>466 の提案を受け入れたら考えます

出来ないなら、これで終わります
2018/08/13(月) 17:54:32.31ID:rjxAd60g0
>>468
なんで交換条件なんだよw
そのままズレてろ。どうでもいいわ。
2018/08/13(月) 18:22:02.91ID:6I003ZzcM
>>461
注意すれば足りるっつうか、$_POST に値を代入しないようにコードを書くのがそんなに大変なの?
わざわざそういう設計をしなけりゃそんなことしないし、そうしてるなら必要だからしたんだろうから仕様に沿って使えばいいんじゃね?
ということなんじゃないの。
いや別に filter_input を使うなと言ってるのではないし使えばいいじゃんと思ってるが、$_POST をそこまで忌み嫌うのが意味分からんてことだよ。
それで疎にするとか持ち出してきて、$_POST の代わりに filter_input 使えば疎になるって何のこっちゃ?って感じだろう?
堅牢になるぜならまだ分かるが、疎って?ってさ。
疎にするって話ならと >>415 みたいな手法を持ち出してみたらそれには同意してもらえてるっぽいが、filter_input 使えば疎って話ではないだろってところは通じてないっぽいんだよな。

なんつうか、意識高い系なんだろうなって感じ。
2018/08/13(月) 18:45:11.35ID:V6shauct0
チームで開発したことないんだろ、きっと
それか、一人で十分な開発規模

あるいはチームでテレパシーw
2018/08/13(月) 18:55:06.81ID:LXDaPxOa0
スーパーグローバルとfilter_inputに関してはPHP特有だし多少議論があるのは理解する
それでもfilter_inputの方がベターだと思うが

しかしグローバル変数使うなが納得出来ないというのはお話にならない
2018/08/13(月) 19:31:08.20ID:Mozi/syi0
正直、ここしばらくフレームワークの世話になってたから
$_POSTもfilter_inputも明示的につかったことない
でも、ざっと見た限りではよっぽどトリッキーなことしない限り
filter_inputをつかわない理由はないな
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況