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
【PHP】下らねぇ質問はここに 9
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ 538a-od5V)
2017/12/20(水) 18:00:20.28ID:1xaO/YRR0686デフォルトの名無しさん (ワッチョイ 82d0-Y82R)
2018/09/21(金) 16:41:58.26ID:0nwAv71v0687デフォルトの名無しさん (ワッチョイ fe92-tHrl)
2018/09/21(金) 18:17:31.43ID:2dxDcAKa0688デフォルトの名無しさん (ワッチョイ 82d0-Y82R)
2018/09/25(火) 17:01:58.96ID:CUEvMMrT0 if($A === $B){
$A;
}else{
$B;
}
と
if($A !== $B){
$B;
}else{
$A;
}
って どっちが良いですか !?
って聞かれても俺にはわかんねーよ(´・ω・`)
というグチ
$A;
}else{
$B;
}
と
if($A !== $B){
$B;
}else{
$A;
}
って どっちが良いですか !?
って聞かれても俺にはわかんねーよ(´・ω・`)
というグチ
689デフォルトの名無しさん (ワッチョイ be9f-gsXS)
2018/09/25(火) 17:46:06.44ID:NyMQ4nya0 名前がつかない例外を受け取ることは難しいね
690デフォルトの名無しさん (オイコラミネオ MMf5-KkRk)
2018/09/25(火) 20:15:13.42ID:yenf1piQM >>688
!== より === の方がタイプする労力が小さいから前者
!== より === の方がタイプする労力が小さいから前者
691デフォルトの名無しさん (ワッチョイ c9b8-gcds)
2018/09/25(火) 20:25:06.12ID:YkAMOZHs0 結果は同じでもどちらに主軸をおくかによってニュアンスが変わる
例えばコンサート会場でチケットを持っている人は通し持ってない人は通さない場合
チケットを持っている人を通したいに主軸を置くと普通のスタッフを連想するが
チケットを持ってない人を通さないに主軸を置くと警備員のようなもっとお硬い物を連想する
$A===$Bを比較したいのか$A!==$Bを比較したいのか
自分が何をやりたいのかどこに主軸をおきたいのか考えれば自ずと答えは出るでしょう
例えばコンサート会場でチケットを持っている人は通し持ってない人は通さない場合
チケットを持っている人を通したいに主軸を置くと普通のスタッフを連想するが
チケットを持ってない人を通さないに主軸を置くと警備員のようなもっとお硬い物を連想する
$A===$Bを比較したいのか$A!==$Bを比較したいのか
自分が何をやりたいのかどこに主軸をおきたいのか考えれば自ずと答えは出るでしょう
692デフォルトの名無しさん (ワッチョイ c99e-IBuP)
2018/09/26(水) 01:33:34.79ID:QPkmxTlR0 thenが通常処理、elseが異常(エラー)処理ってイメージ
通常処理がn種類(複数)あるって感じな場合は、二択だったとしてもswitchにしてる
通常処理がn種類(複数)あるって感じな場合は、二択だったとしてもswitchにしてる
693デフォルトの名無しさん (ワッチョイ c198-DHaP)
2018/09/26(水) 14:54:46.71ID:eJD5a6UK0 $var = getA();
if (!$var) {
$var = getB();
}
if (!$var) {
$var = getC();
}
if (!$var) {
$var = getD();
}
if (!$var) {
return false;
}
return $var;
こういうコードをもっとスッキリさせる書き方ってないですか?
if (!$var) {
$var = getB();
}
if (!$var) {
$var = getC();
}
if (!$var) {
$var = getD();
}
if (!$var) {
return false;
}
return $var;
こういうコードをもっとスッキリさせる書き方ってないですか?
694デフォルトの名無しさん (ワッチョイ be9f-gsXS)
2018/09/26(水) 15:24:24.44ID:aA/f+lgF0 orを使うといいかも
695デフォルトの名無しさん (ワッチョイ c9b8-gcds)
2018/09/26(水) 18:40:59.41ID:we9WvBjb0 get($ident)的な関数作って
$var=false;で初期化して
["A", "B", "C", "D"]をぶん回して見つかれば$var上書きしてbreak
$var=false;で初期化して
["A", "B", "C", "D"]をぶん回して見つかれば$var上書きしてbreak
696デフォルトの名無しさん (ワッチョイ b165-coYL)
2018/09/26(水) 19:38:26.60ID:Rr41G2Hg0 短絡評価でbooleanが返ってくる言語だからなぁ
return getA() ?? getB() ?? getC() ?? getD() ?? false;
でnullが返ってくると順次後ろに落ちていくようには出来る
falseが返ってくると打ち切られて結果もfalseになる
return getA() ?? getB() ?? getC() ?? getD() ?? false;
でnullが返ってくると順次後ろに落ちていくようには出来る
falseが返ってくると打ち切られて結果もfalseになる
697デフォルトの名無しさん (ワッチョイ c198-DHaP)
2018/09/26(水) 23:01:39.30ID:eJD5a6UK0 みなさんレスありがとうございます
実際はもっとメソッド名が長く、引数が複数あり、一つ一つが若干重い処理なので
現状が一番スマートのような気がしてきました
実際はもっとメソッド名が長く、引数が複数あり、一つ一つが若干重い処理なので
現状が一番スマートのような気がしてきました
698デフォルトの名無しさん (ワッチョイ 579e-/YFy)
2018/09/27(木) 00:21:34.56ID:PI1koV5V0 Cなら関数ポインタを配列にツッコんでぶん回す
危険かどうかは触れない
危険かどうかは触れない
699デフォルトの名無しさん (ワッチョイ f7e9-S4i9)
2018/09/27(木) 10:36:27.42ID:kbPnGc7o0 メソッドに応じて引数も可変ならcall_user_func_array()使えばいいだけじゃない?
そんな大層な話しか?30秒で書けるがw
function hoge()
{
$methodArr = [
'A' => ['a', 'b'],
'B' => [],
'C' => ['c', 'd'],
];
foreach ($methodArr as $method => $params) {
if ($result = call_user_func_array($method, $params)) {
return $result;
}
}
return false;
}
そんな大層な話しか?30秒で書けるがw
function hoge()
{
$methodArr = [
'A' => ['a', 'b'],
'B' => [],
'C' => ['c', 'd'],
];
foreach ($methodArr as $method => $params) {
if ($result = call_user_func_array($method, $params)) {
return $result;
}
}
return false;
}
700デフォルトの名無しさん (ワッチョイ f7e9-S4i9)
2018/09/27(木) 10:42:54.79ID:kbPnGc7o0701デフォルトの名無しさん (ワッチョイ f7e9-S4i9)
2018/09/27(木) 10:50:13.05ID:kbPnGc7o0702デフォルトの名無しさん (ワッチョイ bfd5-E/Y9)
2018/09/27(木) 12:20:21.79ID:mllxUQ0M0703デフォルトの名無しさん (スププ Sdbf-4Fgi)
2018/09/27(木) 13:37:29.99ID:7B8reSZgd メソッドや引数が減ったり増えたり順序が変わったりした時に
699なら”コード”を触らず”定義”の修正だけで済むが
693だと”コード自体”を修正する必要があるな
699なら”コード”を触らず”定義”の修正だけで済むが
693だと”コード自体”を修正する必要があるな
704デフォルトの名無しさん (ワッチョイ 579e-/YFy)
2018/09/27(木) 13:54:32.47ID:PI1koV5V0 call_user_func_arrayなんてあったんだね。
じゃあこれ一択だわ。
理由は>703
じゃあこれ一択だわ。
理由は>703
705デフォルトの名無しさん (ワッチョイ bfd5-E/Y9)
2018/09/27(木) 13:55:31.21ID:mllxUQ0M0706デフォルトの名無しさん (ワッチョイ f7e9-S4i9)
2018/09/27(木) 14:00:23.22ID:kbPnGc7o0707デフォルトの名無しさん (ワッチョイ bfd5-E/Y9)
2018/09/27(木) 14:04:14.99ID:mllxUQ0M0708デフォルトの名無しさん (ワッチョイ 579e-/YFy)
2018/09/27(木) 14:06:18.58ID:PI1koV5V0 これは絶対にこうだって話でも何でもなく、おおよそこれまでの経験に基づく好みの方がデカいと思うけど。
>>693の実際のコードや運用保守まで知り得ないから、絶対こうだと第三者が結論づけるのはナンセンスだと思う。
自分は実際にこのようなケース(Cで)楽にメンテできた実績があるからこっちを選ぶけど、
こういう方法もあるよってディスカッションならどんどんやればいい。
>>693の実際のコードや運用保守まで知り得ないから、絶対こうだと第三者が結論づけるのはナンセンスだと思う。
自分は実際にこのようなケース(Cで)楽にメンテできた実績があるからこっちを選ぶけど、
こういう方法もあるよってディスカッションならどんどんやればいい。
709デフォルトの名無しさん (スププ Sdbf-4Fgi)
2018/09/27(木) 14:09:57.57ID:7B8reSZgd 今更include_onceなんかを使ってるしむしろ693より悪化してるという
699みたいに動作定義を配列変数にしておけばその中に更に変数やメソッドの返り値を持たせることだってできるだろうに
699みたいに動作定義を配列変数にしておけばその中に更に変数やメソッドの返り値を持たせることだってできるだろうに
710デフォルトの名無しさん (ワッチョイ bfd5-E/Y9)
2018/09/27(木) 14:10:07.99ID:mllxUQ0M0711デフォルトの名無しさん (ワッチョイ bfd5-E/Y9)
2018/09/27(木) 14:12:14.74ID:mllxUQ0M0 >>709
その変数やメソッドの返り値を定義した具体例を挙げてみてよ。
その変数やメソッドの返り値を定義した具体例を挙げてみてよ。
712デフォルトの名無しさん (ワッチョイ 175b-45+G)
2018/09/27(木) 14:15:44.50ID:dO3eQ5uW0 >>710
はたから見たらお前さんも同じようなもんだし喧嘩腰なのはむしろお前さんの方に見えるが
はたから見たらお前さんも同じようなもんだし喧嘩腰なのはむしろお前さんの方に見えるが
713デフォルトの名無しさん (ワッチョイ bfd5-E/Y9)
2018/09/27(木) 14:28:22.94ID:mllxUQ0M0714デフォルトの名無しさん (ワッチョイ 9fd0-ZVm4)
2018/09/28(金) 10:46:28.24ID:Lkb4ZCCn0 if ( ( string ) filter_input ( INPUT_POST , 'hoge' ) === '' ) { ・・・ }
↑だと入力欄が空の時に〜となりますが、
半角・全角のスペースが1つだけ入力されたの時も含めたい場合は どのように書くのが良いですか?
どなたか ご教授ください(´・ω・`)
↑だと入力欄が空の時に〜となりますが、
半角・全角のスペースが1つだけ入力されたの時も含めたい場合は どのように書くのが良いですか?
どなたか ご教授ください(´・ω・`)
715デフォルトの名無しさん (ワッチョイ 17b3-S4i9)
2018/09/28(金) 10:48:54.31ID:h3Rmmj6P0 >>714
filter_input のマニュアル見てみ。
filter_input のマニュアル見てみ。
716デフォルトの名無しさん (ワッチョイ f7e9-S4i9)
2018/09/28(金) 14:07:08.20ID:c+sKNdIa0 >>714
本当に半角スペースと全角スペースだけでいいの?
タブ"\t"とか改行コード"\rや\n"とかはOKなの?(たぶん駄目だよね)
本当に1つだけでいいの?
半角スペースが100個連続しているのはOKなの?(たぶん駄目だよね)
ってことで
UTF-8ならpreg_match()にuのパターン修飾子付けるのが楽
$hoge = (string) filter_input(INPUT_POST, 'hoge');
if ($hoge === '' || preg_match('/\A\s++\z/u', $hoge)) { }
もっと厳密にやりたいなら、弾きたい文字を文字プロパティで表現すればいい
例えば [\p{Z}\p{Cc}]++ みたいに
本当に半角スペースと全角スペースだけでいいの?
タブ"\t"とか改行コード"\rや\n"とかはOKなの?(たぶん駄目だよね)
本当に1つだけでいいの?
半角スペースが100個連続しているのはOKなの?(たぶん駄目だよね)
ってことで
UTF-8ならpreg_match()にuのパターン修飾子付けるのが楽
$hoge = (string) filter_input(INPUT_POST, 'hoge');
if ($hoge === '' || preg_match('/\A\s++\z/u', $hoge)) { }
もっと厳密にやりたいなら、弾きたい文字を文字プロパティで表現すればいい
例えば [\p{Z}\p{Cc}]++ みたいに
717デフォルトの名無しさん (ワッチョイ f7e9-S4i9)
2018/09/28(金) 14:08:24.39ID:c+sKNdIa0 で、更に言えばさw
'あいうえお'の前後に空白文字が1000個あるのはOKなの?って話にもなってくるんで
ちょいと考え方と変えて
$hoge = preg_replace('/\A\s++|\s++\z/u', '', $hoge);
こんな感じで先に文字列の前後の空白文字を取り除いてから
if ($hoge === '') { }
とするやり方なんかもあるな
'あいうえお'の前後に空白文字が1000個あるのはOKなの?って話にもなってくるんで
ちょいと考え方と変えて
$hoge = preg_replace('/\A\s++|\s++\z/u', '', $hoge);
こんな感じで先に文字列の前後の空白文字を取り除いてから
if ($hoge === '') { }
とするやり方なんかもあるな
718デフォルトの名無しさん (ワッチョイ 9765-aemA)
2018/09/28(金) 14:17:49.83ID:KTNzW9VA0 preg_match('/\A\s*+\z/u', $hoge) じゃない理由は何かあるのん
719デフォルトの名無しさん (ワッチョイ f7e9-S4i9)
2018/09/28(金) 14:29:52.16ID:c+sKNdIa0 >>718
空の時点で評価して正規表現に通さない方がいいから
だから本当に質問の通りでいいなら
if ($hoge === '' || $hoge === ' ' || $hoge === ' ')
で別にいいw
あと+じゃなく++と書いてる理由はReDoSでググればいいんじゃない?
Stack Exchange(違ったかもw)が
++じゃなく+使ってたせいでサービスダウンしたのはわりと有名
空の時点で評価して正規表現に通さない方がいいから
だから本当に質問の通りでいいなら
if ($hoge === '' || $hoge === ' ' || $hoge === ' ')
で別にいいw
あと+じゃなく++と書いてる理由はReDoSでググればいいんじゃない?
Stack Exchange(違ったかもw)が
++じゃなく+使ってたせいでサービスダウンしたのはわりと有名
720デフォルトの名無しさん (ワッチョイ 9fd0-ZVm4)
2018/09/28(金) 15:56:20.55ID:Lkb4ZCCn0721デフォルトの名無しさん (ワッチョイ 17b3-S4i9)
2018/09/28(金) 16:31:29.64ID:h3Rmmj6P0 >>720
filter として FILTER_VALIDATE_REGEXP つまり正規表現が使える。
FILTER_CALLBACK つまり、ユーザー定義の関数をコールしてデータをフィルタリングしても良い。
filter として FILTER_VALIDATE_REGEXP つまり正規表現が使える。
FILTER_CALLBACK つまり、ユーザー定義の関数をコールしてデータをフィルタリングしても良い。
722デフォルトの名無しさん (ワッチョイ 378a-tkB1)
2018/09/29(土) 10:56:37.08ID:6BMpRid40 if('aaa'==' aaa')//true
となることを発見したんですが、前方の空白は無視されるんですか?
これは正しい使い方でいいのですか?
よろしくお願いします
となることを発見したんですが、前方の空白は無視されるんですか?
これは正しい使い方でいいのですか?
よろしくお願いします
723720 (ワッチョイ 9fd0-ZVm4)
2018/09/29(土) 17:12:36.46ID:rR859Rl80724デフォルトの名無しさん (ワッチョイ 57b8-UjLZ)
2018/09/29(土) 18:16:41.98ID:DN2c19jF0725デフォルトの名無しさん (ワッチョイ ff8a-tkB1)
2018/09/30(日) 08:27:28.94ID:KcrMzjy/0726デフォルトの名無しさん (ワッチョイ 9fd0-ZVm4)
2018/09/30(日) 13:45:51.83ID:Cu2FNSd00 メール送信の際に確認と検証目的で画面上に表示させる時、気をつけるべきことって どのくらいあるものなのだろうか(´・ω・`)
htmlspecialchars() ? 未入力の確認 ? (´ρ`)
htmlspecialchars() ? 未入力の確認 ? (´ρ`)
727デフォルトの名無しさん (ワッチョイ bfd5-E/Y9)
2018/09/30(日) 18:23:11.88ID:+yuU+UfL0 >>726
単に表示するだけならそのくらいだろうけど、チェックも含むならメールのエンコーディングで使えない文字が含まれてないかとかかな。
単に表示するだけならそのくらいだろうけど、チェックも含むならメールのエンコーディングで使えない文字が含まれてないかとかかな。
728デフォルトの名無しさん (ワッチョイ 57b8-UjLZ)
2018/09/30(日) 18:40:30.48ID:0JTA57Qc0 >>725
http://php.net/manual/ja/language.operators.comparison.php
>整数値を文字列と比較したり、比較に数値形式の文字が含まれる場合は、文字列が 数値に変換され、 数値としての比較を行います。
要は文字列'1234'が数値形式(int型)なので↓のように比較される。
(int)'1234' == (int)' 1234'
> === あるいは !== による比較では型変換は発生しません。 この場合は値だけでなく型も比較します。
なのでこういう自動キャストが困るのであれば===で比較すること。
http://php.net/manual/ja/language.operators.comparison.php
>整数値を文字列と比較したり、比較に数値形式の文字が含まれる場合は、文字列が 数値に変換され、 数値としての比較を行います。
要は文字列'1234'が数値形式(int型)なので↓のように比較される。
(int)'1234' == (int)' 1234'
> === あるいは !== による比較では型変換は発生しません。 この場合は値だけでなく型も比較します。
なのでこういう自動キャストが困るのであれば===で比較すること。
729デフォルトの名無しさん (ワッチョイ 178a-tkB1)
2018/10/01(月) 01:43:36.31ID:4WHq1Bue0 >>728
ありがとうございました
ありがとうございました
730デフォルトの名無しさん (ワッチョイ 7f92-S4i9)
2018/10/01(月) 15:22:45.32ID:EoUwSVMY0 すまない。
微妙にスレチなのだが助けてほしい。
端的に言うとXAMPPの処理中にブルー画面になり、MySQLが壊れて動かくなった。
コントロール画面でStartを押しても一瞬動いてすぐ止まる。
調べてみたところ復旧方法がない。
XAMPPを外付けに移し、再インストールはうまくできた。
問題はSQLのデータをどのように移し替えればいいのかわからない。
エクスポートはできておらず、移行の仕方がわからない。
mysqlのdataファイルにデータベースの情報があるのはわかったが、
ここままファイル移動させただけでは動かないのです。
移行方法をご存知の方いらっしゃいましたらお教えください。
微妙にスレチなのだが助けてほしい。
端的に言うとXAMPPの処理中にブルー画面になり、MySQLが壊れて動かくなった。
コントロール画面でStartを押しても一瞬動いてすぐ止まる。
調べてみたところ復旧方法がない。
XAMPPを外付けに移し、再インストールはうまくできた。
問題はSQLのデータをどのように移し替えればいいのかわからない。
エクスポートはできておらず、移行の仕方がわからない。
mysqlのdataファイルにデータベースの情報があるのはわかったが、
ここままファイル移動させただけでは動かないのです。
移行方法をご存知の方いらっしゃいましたらお教えください。
731デフォルトの名無しさん (ワッチョイ 9fd0-ZVm4)
2018/10/01(月) 16:08:39.48ID:dk4eIPju0 ・echo htmlspecialchars($var = (string)filter_input(INPUT_POST,'var',ENT_QUOTES,'UTF-8'));
・echo $var = (string)filter_input(INPUT_POST,'var',FILTER_SANITIZE_FULL_SPECIAL_CHARS)
どっちが危険だと思う?
・echo $var = (string)filter_input(INPUT_POST,'var',FILTER_SANITIZE_FULL_SPECIAL_CHARS)
どっちが危険だと思う?
732デフォルトの名無しさん (ワッチョイ 17b3-S4i9)
2018/10/01(月) 18:58:30.27ID:Fhb8wAZ60 >>731
そんな汚いコード、読むまでもなく危険。
そんな汚いコード、読むまでもなく危険。
733デフォルトの名無しさん (ワッチョイ 57b8-UjLZ)
2018/10/01(月) 21:19:33.56ID:uTHNCD5Z0734デフォルトの名無しさん (ワッチョイ 7f92-S4i9)
2018/10/01(月) 23:30:37.04ID:EoUwSVMY0 >>733
#1932 - Table 'rssurl.imglist' doesn't exist in engine
(訳)#1932 - テーブル 'rssurl.imglist'はエンジンに存在しません
というエラーが出ます。
phpMyAdminのデータベースのページにはrssurlがあるのですが、
テーブルのimglistをクリックすると上記のエラーが出ます。
「ibdata1」「ib_logfile0」「ib_logfile1」を書き直せばいいというとこまではわかったのですが、
やり方までは分かりませんでした。
古いファイルもdataファイル内のものしかありません。
#1932 - Table 'rssurl.imglist' doesn't exist in engine
(訳)#1932 - テーブル 'rssurl.imglist'はエンジンに存在しません
というエラーが出ます。
phpMyAdminのデータベースのページにはrssurlがあるのですが、
テーブルのimglistをクリックすると上記のエラーが出ます。
「ibdata1」「ib_logfile0」「ib_logfile1」を書き直せばいいというとこまではわかったのですが、
やり方までは分かりませんでした。
古いファイルもdataファイル内のものしかありません。
735デフォルトの名無しさん (ワッチョイ 9fd0-ZVm4)
2018/10/02(火) 15:27:03.69ID:F0vZUT3n0736デフォルトの名無しさん (ワンミングク MM7f-xm3F)
2018/10/02(火) 15:44:49.78ID:ZToeE2jSM ワッチョイ 9fd0-ZVm4
そろそろ金払って誰かに個人レッスンしてもらいなさい
そろそろ金払って誰かに個人レッスンしてもらいなさい
737デフォルトの名無しさん (ワッチョイ 7723-jO+J)
2018/10/02(火) 17:55:01.30ID:nFqAwCYR0738デフォルトの名無しさん (ワッチョイ 7f92-S4i9)
2018/10/02(火) 22:16:36.49ID:nd3RRH6B0739デフォルトの名無しさん (ワンミングク MM7f-FaPL)
2018/10/03(水) 10:55:37.47ID:0581z6FqM740デフォルトの名無しさん (ワッチョイ 1f7e-S4i9)
2018/10/03(水) 11:42:25.53ID:GHy9f6hT0 MYSQLが吹っ飛んだ でググるといいかも
741デフォルトの名無しさん (ワッチョイ 7723-jO+J)
2018/10/03(水) 13:58:24.75ID:2El7vfsT0 >>738
それが壊れる前のファイルなら単純に差し替えれば動くだろう
バックアップあるならそこから引っ張ってくればいい
それが壊れたあとのファイルならそのファイル自体が壊れてるのだからあったところで意味がない
それが壊れる前のファイルなら単純に差し替えれば動くだろう
バックアップあるならそこから引っ張ってくればいい
それが壊れたあとのファイルならそのファイル自体が壊れてるのだからあったところで意味がない
742デフォルトの名無しさん (ワッチョイ 7f92-S4i9)
2018/10/03(水) 21:31:15.79ID:XKY8vr/j0743デフォルトの名無しさん (ワッチョイ d7b3-aemA)
2018/10/03(水) 22:33:44.05ID:bSsx2t9M0744デフォルトの名無しさん (ワッチョイ fd9e-XM+q)
2018/10/09(火) 19:35:33.43ID:DO0V6smF0 会社の先輩から受け継いだコードに
ini_set("allow_url_fopen", 1);
って有るのですが、何ですか?
PHP初めて三日目なので何も分かりません。
ini_set("allow_url_fopen", 1);
って有るのですが、何ですか?
PHP初めて三日目なので何も分かりません。
745デフォルトの名無しさん (ワッチョイ c4e3-5jP5)
2018/10/09(火) 21:29:54.26ID:gfRhaM0q0 文字通り
746デフォルトの名無しさん (ワッチョイ 3e6d-eH9n)
2018/10/10(水) 19:05:57.00ID:VQ/JYckG0 質問です
将来的にこういうアプリを作りたいと思っています
まずゲーム部分をunityで作って例えばオンラインランク的なネットワーク機能はphpで作るという物です
ここで疑問なのですがphpはサーバーとしてネットに公開するという事になりますよね?
俺はそのunityで作ったアプリからしかそのphpサーバーにアクセスして欲しくありません
でもネットに公開してる時点で普通にブラウザからでもアクセスできてしまうと思うのですが
こういう問題について世間の開発者の人たちはどういうやり方を用いているのでしょうか?
将来的にこういうアプリを作りたいと思っています
まずゲーム部分をunityで作って例えばオンラインランク的なネットワーク機能はphpで作るという物です
ここで疑問なのですがphpはサーバーとしてネットに公開するという事になりますよね?
俺はそのunityで作ったアプリからしかそのphpサーバーにアクセスして欲しくありません
でもネットに公開してる時点で普通にブラウザからでもアクセスできてしまうと思うのですが
こういう問題について世間の開発者の人たちはどういうやり方を用いているのでしょうか?
747デフォルトの名無しさん (ワッチョイ d881-t36n)
2018/10/10(水) 19:39:55.34ID:8sboglrA0748デフォルトの名無しさん (ワッチョイ 41b3-Qng4)
2018/10/10(水) 19:42:09.52ID:uL/SAi3N0 >>746
> unityで作ったアプリからしかそのphpサーバーにアクセスして欲しくありません
これと
> でもネットに公開してる時点で普通にブラウザからでもアクセスできてしまうと思う
これは全然別のレベル。
要件としては前者だと思うけど、各社のノウハウになるんじゃないかなぁ。
簡易的なものだと、header 触るぐらい。
> unityで作ったアプリからしかそのphpサーバーにアクセスして欲しくありません
これと
> でもネットに公開してる時点で普通にブラウザからでもアクセスできてしまうと思う
これは全然別のレベル。
要件としては前者だと思うけど、各社のノウハウになるんじゃないかなぁ。
簡易的なものだと、header 触るぐらい。
749デフォルトの名無しさん (ワッチョイ 3e6d-J+fU)
2018/10/10(水) 20:03:08.68ID:VQ/JYckG0750デフォルトの名無しさん (ワッチョイ 529f-XM+q)
2018/10/10(水) 20:04:12.63ID:dwQgwWbW0 プログラミングはphp mysqlを齧った初心者です。
下記のようなユーザー参加型ランキングサイトを作りたいのですが
https://www.animeranking.net/index.php
ユーザーにデータベースにある作品でランキングを作成してもらい
他ユーザーの投票によりランキングを変動/変動しない(ユーザーの任意)
またユーザー登録ログインシステムも作りたいのですが
html css php mysqlで事足りるでしょうか?
ご教授お願いします。
下記のようなユーザー参加型ランキングサイトを作りたいのですが
https://www.animeranking.net/index.php
ユーザーにデータベースにある作品でランキングを作成してもらい
他ユーザーの投票によりランキングを変動/変動しない(ユーザーの任意)
またユーザー登録ログインシステムも作りたいのですが
html css php mysqlで事足りるでしょうか?
ご教授お願いします。
751デフォルトの名無しさん (ワッチョイ d881-t36n)
2018/10/10(水) 20:50:38.91ID:8sboglrA0752デフォルトの名無しさん (ワッチョイ 3e6d-J+fU)
2018/10/10(水) 20:58:58.35ID:VQ/JYckG0 >>751
アプリやpcソフトからのアクセスで自分のホストとかわかるんですか?
アプリやpcソフトからのアクセスで自分のホストとかわかるんですか?
753デフォルトの名無しさん (ワッチョイ d881-t36n)
2018/10/10(水) 21:04:33.75ID:8sboglrA0754デフォルトの名無しさん (ワッチョイ 3e6d-J+fU)
2018/10/10(水) 21:09:09.52ID:VQ/JYckG0 >>753
スマホとかpcからです
スマホとかpcからです
755デフォルトの名無しさん (ワッチョイ d881-t36n)
2018/10/10(水) 21:19:14.34ID:8sboglrA0756デフォルトの名無しさん (オイコラミネオ MM71-vPhZ)
2018/10/10(水) 21:49:20.11ID:NIVvD6uyM mutual TLS
757デフォルトの名無しさん (ワッチョイ 3e6d-J+fU)
2018/10/10(水) 21:54:13.75ID:VQ/JYckG0758デフォルトの名無しさん (ワッチョイ d881-t36n)
2018/10/10(水) 22:06:33.98ID:8sboglrA0 PHPの話ではないけれど
大概のネットゲーム会社はクライアントアプリに
何らかの形でガードをかけている
ホストとの通信は暗号化し、
クライアントアプリ内部メモリへのアクセスも出来ないようにしている
チート対策でCPUの不正な高速化までチェックしている所もある
どこまでやれば良いのかを考えるとキリがないかも知れない
大概のネットゲーム会社はクライアントアプリに
何らかの形でガードをかけている
ホストとの通信は暗号化し、
クライアントアプリ内部メモリへのアクセスも出来ないようにしている
チート対策でCPUの不正な高速化までチェックしている所もある
どこまでやれば良いのかを考えるとキリがないかも知れない
759デフォルトの名無しさん (ワッチョイ 3e6d-J+fU)
2018/10/10(水) 22:16:40.86ID:VQ/JYckG0760デフォルトの名無しさん (ワッチョイ e7b8-PLlx)
2018/10/11(木) 02:07:56.23ID:ywvO8NYp0 パケットを圧縮暗号化分割して何をしているのかわからなくする
もちろんメンテナンスと称して毎週のようにパターンは変えること
もちろんメンテナンスと称して毎週のようにパターンは変えること
761デフォルトの名無しさん (ワッチョイ e79e-fbiU)
2018/10/11(木) 04:29:58.54ID:zE20d/IG0 蔵のチート対策やデータの暗号化はさておき、今回の質問のメインって
鯖との接続・セキュリティ対策よね?
単純に認証方式の話になるんじゃないの?>756でも書かれてるけど
鯖との接続・セキュリティ対策よね?
単純に認証方式の話になるんじゃないの?>756でも書かれてるけど
762デフォルトの名無しさん (ワッチョイ e7b8-PLlx)
2018/10/11(木) 11:25:38.96ID:ywvO8NYp0 >俺はそのunityで作ったアプリからしかそのphpサーバーにアクセスして欲しくありません
非正規クライアントを作られてほしくないからその対策を教えてくれ
って言ってんじゃないのか
非正規クライアントを作られてほしくないからその対策を教えてくれ
って言ってんじゃないのか
763デフォルトの名無しさん (ワッチョイ df6d-3WQG)
2018/10/11(木) 12:25:06.79ID:RBgNCbjF0764デフォルトの名無しさん (ワッチョイ 7fe8-37bo)
2018/10/11(木) 12:50:41.46ID:bd8i7ua+0 IPアドレスにデータを流す以外に通信する方法があるならそっちでやればいいけど、
普通に公開鍵と秘密鍵を使って認証するのが真っ当じゃないの
これを第三者クライアントが使えるんなら鍵の意味がない
普通に公開鍵と秘密鍵を使って認証するのが真っ当じゃないの
これを第三者クライアントが使えるんなら鍵の意味がない
765デフォルトの名無しさん (ワッチョイ 7f80-WnU0)
2018/10/11(木) 13:08:42.23ID:3Bdkvxy90 >>746
ゲームは、ログイン・認証した人しか、プレイできない。
もし、アクセス権のない人がアクセスすれば、ログイン画面にリダイレクトされる
ログイン後は、セッションを使うから、各プレイヤーは判別できる
Ruby on Rails で、システム運用構築・プログラミングの練習をした方がよい
ゲームは、ログイン・認証した人しか、プレイできない。
もし、アクセス権のない人がアクセスすれば、ログイン画面にリダイレクトされる
ログイン後は、セッションを使うから、各プレイヤーは判別できる
Ruby on Rails で、システム運用構築・プログラミングの練習をした方がよい
766デフォルトの名無しさん (ワッチョイ df6d-3WQG)
2018/10/11(木) 13:11:06.48ID:RBgNCbjF0767デフォルトの名無しさん (ワッチョイ e79e-fbiU)
2018/10/11(木) 13:15:39.15ID:zE20d/IG0768デフォルトの名無しさん (ワッチョイ e79e-fbiU)
2018/10/11(木) 13:19:09.28ID:zE20d/IG0 >>766
プログラム内部でログイン処理があるだけで表に出さないだけの話でしょ。
端末固有情報でアカウント作ってログインしてるだけ。
端末固有情報を使わないと鯖にはもちろん入れない。
あとは不正な端末固有情報を使わせない仕組みを考えるだけ。
プログラム内部でログイン処理があるだけで表に出さないだけの話でしょ。
端末固有情報でアカウント作ってログインしてるだけ。
端末固有情報を使わないと鯖にはもちろん入れない。
あとは不正な端末固有情報を使わせない仕組みを考えるだけ。
769デフォルトの名無しさん (ワッチョイ c723-WBp8)
2018/10/11(木) 13:24:40.62ID:Ub0lOJUx0 IDとパスワードを手打ちでポチポチッとすることだけがログインじゃない
もうちょっと自分でいろいろ調べてみていいと思うよ
さすがにちょっと質問のレベルが低すぎて教えようがない
もうちょっと自分でいろいろ調べてみていいと思うよ
さすがにちょっと質問のレベルが低すぎて教えようがない
770デフォルトの名無しさん (ワッチョイ df6d-3WQG)
2018/10/11(木) 13:27:20.03ID:RBgNCbjF0771デフォルトの名無しさん (ワッチョイ c723-WBp8)
2018/10/11(木) 13:51:16.45ID:Ub0lOJUx0 その質問はまず偽装の方法を自分で調べて理解してからの方がいいよ
偽装の方法によって対策が変わるんだからそんなざっくりとした質問は答えようがない
偽装の方法によって対策が変わるんだからそんなざっくりとした質問は答えようがない
772デフォルトの名無しさん (ワッチョイ df6d-3WQG)
2018/10/11(木) 13:51:26.37ID:RBgNCbjF0 >>770
やっぱりこれ無しにしてください
まず初回アクセス時にサーバーでパスワードを発行してアプリ側で保存してしまえばいいんですよね
それでかなり確かなセキュリティーが保たれると思います
皆さんありがとうございました
あんまりしつこいとウザいのでこの辺で失礼したいと思います
やっぱりこれ無しにしてください
まず初回アクセス時にサーバーでパスワードを発行してアプリ側で保存してしまえばいいんですよね
それでかなり確かなセキュリティーが保たれると思います
皆さんありがとうございました
あんまりしつこいとウザいのでこの辺で失礼したいと思います
773デフォルトの名無しさん (ワッチョイ e79e-fbiU)
2018/10/11(木) 14:01:09.06ID:zE20d/IG0 >>770
絶対不可能レベルなのか、仕組みさえバレなきゃまず偽装できないからそのレベルなのかで
方法論変わってくるんじゃない?
自分はなんちゃってプロテクトな感じで、固有情報を暗号化、初回登録時に
鯖で作ったパスを暗号化したのを端末のちょっと分かんないところにピーコしておしまい。
クラッカーからみて、何をどのようにしてるのか分かりにくくしてる程度で、
全バレしたらもちろんアウトだけど、「何を」「どのような暗号化」は中々分からないと思う。
カネ絡みやら個人情報の絡みがあるんなら、もっと厳格かつワンタイムパスワードとか
必要になってくるわね。
絶対不可能レベルなのか、仕組みさえバレなきゃまず偽装できないからそのレベルなのかで
方法論変わってくるんじゃない?
自分はなんちゃってプロテクトな感じで、固有情報を暗号化、初回登録時に
鯖で作ったパスを暗号化したのを端末のちょっと分かんないところにピーコしておしまい。
クラッカーからみて、何をどのようにしてるのか分かりにくくしてる程度で、
全バレしたらもちろんアウトだけど、「何を」「どのような暗号化」は中々分からないと思う。
カネ絡みやら個人情報の絡みがあるんなら、もっと厳格かつワンタイムパスワードとか
必要になってくるわね。
774デフォルトの名無しさん (ワッチョイ e79e-fbiU)
2018/10/11(木) 14:02:05.28ID:zE20d/IG0 書き込みボタン押す前に電話してたら終わってた
775デフォルトの名無しさん (オイコラミネオ MMfb-KnhR)
2018/10/11(木) 14:04:32.54ID:2BdL7A5TM >>772
まず難しいこと考える前に作ってしまえば。
URLを秘密にしておくだけでとりあえず充分。
それがちゃんと動くようになったら不正利用防止を考えていけばいい。
少なくとも今は、ただツベコベ言ってるだけで実際にモノを作れるレベルじゃないんじゃないの?って印象しかない。
まず難しいこと考える前に作ってしまえば。
URLを秘密にしておくだけでとりあえず充分。
それがちゃんと動くようになったら不正利用防止を考えていけばいい。
少なくとも今は、ただツベコベ言ってるだけで実際にモノを作れるレベルじゃないんじゃないの?って印象しかない。
776デフォルトの名無しさん (ワッチョイ 7f80-WnU0)
2018/10/11(木) 14:08:53.21ID:3Bdkvxy90 HTTP は、1回毎の通信だから、同じユーザーかどうか、判別できないが、
セッション機能を使うと、各プレイヤーは判別できる
毎回通信するたびに、各プレイヤーを特定できる暗号を送りあう
SSL・認証は、開発者の常識。
国家資格の基本情報処理技術者でも取れば?
セッション機能を使うと、各プレイヤーは判別できる
毎回通信するたびに、各プレイヤーを特定できる暗号を送りあう
SSL・認証は、開発者の常識。
国家資格の基本情報処理技術者でも取れば?
777デフォルトの名無しさん (ワッチョイ 7fe8-37bo)
2018/10/11(木) 14:18:55.27ID:bd8i7ua+0 不正ログイン対策と通信毎のユーザー判別とは別の話
778デフォルトの名無しさん (ワッチョイ e7b8-PLlx)
2018/10/11(木) 15:26:02.99ID:ywvO8NYp0 >>767
unityC#で作った正規GUIクライアントでランキングサーバにアクセスするのと
同じ情報手順プロトコルを解析してphpで作った非正規CUIクライアントでアクセスするの
サーバはどうやって正規クライアントと非正規クライアントを見分けるの?
正規クライアントを必要とするチートの話じゃなくてどちらかというとBOTの話
unityC#で作った正規GUIクライアントでランキングサーバにアクセスするのと
同じ情報手順プロトコルを解析してphpで作った非正規CUIクライアントでアクセスするの
サーバはどうやって正規クライアントと非正規クライアントを見分けるの?
正規クライアントを必要とするチートの話じゃなくてどちらかというとBOTの話
779デフォルトの名無しさん (ワッチョイ 7f80-WnU0)
2018/10/11(木) 16:10:14.57ID:3Bdkvxy90 ゲームは、ログイン・認証した人しか、プレイできない。
もし、アクセス権のない人がアクセスすれば、ログイン画面にリダイレクトされる
ログイン後は、セッションを使うから、各プレイヤーは判別できる
それが、どのようなGUI クライアントで認証しても関係ない。
内容が同じなら、どのGUIクライアントでも同じ
全く同じレスポンスを返すのだろ。
エミュレーターなんか、そう
もし、アクセス権のない人がアクセスすれば、ログイン画面にリダイレクトされる
ログイン後は、セッションを使うから、各プレイヤーは判別できる
それが、どのようなGUI クライアントで認証しても関係ない。
内容が同じなら、どのGUIクライアントでも同じ
全く同じレスポンスを返すのだろ。
エミュレーターなんか、そう
780デフォルトの名無しさん (ワッチョイ e79e-fbiU)
2018/10/11(木) 16:25:57.66ID:zE20d/IG0 >>778
まずは解析されにくくすることで非正規を弾く発想なので、
解析されてる時点ではどうしようもないよね。
ここからさらにどのように解析しにくくするのかというところが
ポイントであって、解析されてる前提だとどうしようもないんじゃないの。
むしろ正規の証明が難しそう。
認証局噛ませて秘密鍵公開鍵とかやってても、鍵盗まれた前提で
話しても意味ないでしょう。
ていうか、SSL/TLS通信ってそんな簡単に解析して非正規クローン作れたりするの?
まずは解析されにくくすることで非正規を弾く発想なので、
解析されてる時点ではどうしようもないよね。
ここからさらにどのように解析しにくくするのかというところが
ポイントであって、解析されてる前提だとどうしようもないんじゃないの。
むしろ正規の証明が難しそう。
認証局噛ませて秘密鍵公開鍵とかやってても、鍵盗まれた前提で
話しても意味ないでしょう。
ていうか、SSL/TLS通信ってそんな簡単に解析して非正規クローン作れたりするの?
781デフォルトの名無しさん (ワッチョイ 7f81-VhFj)
2018/10/11(木) 16:33:34.56ID:kxyqPSNi0 解析を試みる人がアプリの所有者の場合も考えないと
782デフォルトの名無しさん (ワッチョイ e7b8-PLlx)
2018/10/11(木) 16:43:19.53ID:ywvO8NYp0 >まずは解析されにくくすることで非正規を弾く
俺がいってるのは
解析されにくくすることで非正規そのものを作ろうと思わない環境にするであって
非正規クライアントの存在そのものがないことを前提にしてるので
似たようなこと言ってるのだが微妙に話が噛み合ってないんよな
俺がいってるのは
解析されにくくすることで非正規そのものを作ろうと思わない環境にするであって
非正規クライアントの存在そのものがないことを前提にしてるので
似たようなこと言ってるのだが微妙に話が噛み合ってないんよな
783デフォルトの名無しさん (ワッチョイ 7f81-VhFj)
2018/10/11(木) 17:02:25.53ID:kxyqPSNi0 質問者の前提は
>俺の入門書レベルでの知識ではphpをサーバーに設置したらネットのどこからでも見れてしまうと
>思ったのでそれで質問しました
>あくまでゲームからアクセスして欲しいなと
なので、非正規クライアントも含まれると思うが
>俺の入門書レベルでの知識ではphpをサーバーに設置したらネットのどこからでも見れてしまうと
>思ったのでそれで質問しました
>あくまでゲームからアクセスして欲しいなと
なので、非正規クライアントも含まれると思うが
784デフォルトの名無しさん (ワッチョイ a72d-4Hut)
2018/10/11(木) 17:08:05.67ID:mY8AIbZq0 SSL/TLSは経路上で情報が漏れることを防ぐためのものでエンドポイントでなら当然簡単に読み取れる
785デフォルトの名無しさん (ワッチョイ e7b8-PLlx)
2018/10/11(木) 17:20:45.95ID:ywvO8NYp0 そんなのはわかってるよ
1.非正規クライアントを作らせないというか作ろうとは思わない環境を作る
2.非正規クライアントを作られても問題のない環境を作る
という視点の違いであったにすぎずパケット圧縮暗号分割を否定してるわけではないだろう?
最も2はソケット開いたあと何したらいいかわからないはずなので
コードはせいぜい数行程度になり動作も不能で
俺的にはそんなものをクライアントと呼んでいいのか?っていう感じだが
1.非正規クライアントを作らせないというか作ろうとは思わない環境を作る
2.非正規クライアントを作られても問題のない環境を作る
という視点の違いであったにすぎずパケット圧縮暗号分割を否定してるわけではないだろう?
最も2はソケット開いたあと何したらいいかわからないはずなので
コードはせいぜい数行程度になり動作も不能で
俺的にはそんなものをクライアントと呼んでいいのか?っていう感じだが
非正規と判断されたクライアントに対してはなんらかのペナルティーを課せればいいかと
P2P file sharing ならばファイル拡散もかねてキャッシュを送りつける、とか
P2P file sharing ならばファイル拡散もかねてキャッシュを送りつける、とか
■ このスレッドは過去ログ倉庫に格納されています
