X



【PHP】下らねぇ質問はここに 9
レス数が1000を超えています。これ以上書き込みはできません。
0687デフォルトの名無しさん (ワッチョイ fe92-tHrl)
垢版 |
2018/09/21(金) 18:17:31.43ID:2dxDcAKa0
>>658です。
お返事遅くなってしまい申し訳ないです。

>>660
うまくいきました。
XAMPPだと相対パスだとうまく行かなかったのですが、
絶対パスだとうまく行きました。

どうもありがとうございます。
0691デフォルトの名無しさん (ワッチョイ c9b8-gcds)
垢版 |
2018/09/25(火) 20:25:06.12ID:YkAMOZHs0
結果は同じでもどちらに主軸をおくかによってニュアンスが変わる
例えばコンサート会場でチケットを持っている人は通し持ってない人は通さない場合

チケットを持っている人を通したいに主軸を置くと普通のスタッフを連想するが
チケットを持ってない人を通さないに主軸を置くと警備員のようなもっとお硬い物を連想する

$A===$Bを比較したいのか$A!==$Bを比較したいのか
自分が何をやりたいのかどこに主軸をおきたいのか考えれば自ずと答えは出るでしょう
0693デフォルトの名無しさん (ワッチョイ 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;

こういうコードをもっとスッキリさせる書き方ってないですか?
0696デフォルトの名無しさん (ワッチョイ b165-coYL)
垢版 |
2018/09/26(水) 19:38:26.60ID:Rr41G2Hg0
短絡評価でbooleanが返ってくる言語だからなぁ

return getA() ?? getB() ?? getC() ?? getD() ?? false;

でnullが返ってくると順次後ろに落ちていくようには出来る
falseが返ってくると打ち切られて結果もfalseになる
0697デフォルトの名無しさん (ワッチョイ c198-DHaP)
垢版 |
2018/09/26(水) 23:01:39.30ID:eJD5a6UK0
みなさんレスありがとうございます
実際はもっとメソッド名が長く、引数が複数あり、一つ一つが若干重い処理なので
現状が一番スマートのような気がしてきました
0699デフォルトの名無しさん (ワッチョイ 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;
}
0703デフォルトの名無しさん (スププ Sdbf-4Fgi)
垢版 |
2018/09/27(木) 13:37:29.99ID:7B8reSZgd
メソッドや引数が減ったり増えたり順序が変わったりした時に
699なら”コード”を触らず”定義”の修正だけで済むが
693だと”コード自体”を修正する必要があるな
0705デフォルトの名無しさん (ワッチョイ bfd5-E/Y9)
垢版 |
2018/09/27(木) 13:55:31.21ID:mllxUQ0M0
>>703
hoge が呼び出す関数達の引数は hoge に渡された引数だったり別の変数だったりを含むんじゃないの。
それを事前に定義するって?
仮に定義できたとして、そんな内部のロジックに直結した定義を修正するのはコードを修正するのに加えてそんなに気安いことなの?

>>693 のコードを大体そのまま hoge.conf にでも書いて、

function hoge()
{
if(!@include_once 'hoge.conf') {
retur false;
}
return $var;
}

とでもする方がまだマシなんじゃね。
0708デフォルトの名無しさん (ワッチョイ 579e-/YFy)
垢版 |
2018/09/27(木) 14:06:18.58ID:PI1koV5V0
これは絶対にこうだって話でも何でもなく、おおよそこれまでの経験に基づく好みの方がデカいと思うけど。
>>693の実際のコードや運用保守まで知り得ないから、絶対こうだと第三者が結論づけるのはナンセンスだと思う。

自分は実際にこのようなケース(Cで)楽にメンテできた実績があるからこっちを選ぶけど、
こういう方法もあるよってディスカッションならどんどんやればいい。
0709デフォルトの名無しさん (スププ Sdbf-4Fgi)
垢版 |
2018/09/27(木) 14:09:57.57ID:7B8reSZgd
今更include_onceなんかを使ってるしむしろ693より悪化してるという
699みたいに動作定義を配列変数にしておけばその中に更に変数やメソッドの返り値を持たせることだってできるだろうに
0713デフォルトの名無しさん (ワッチョイ bfd5-E/Y9)
垢版 |
2018/09/27(木) 14:28:22.94ID:mllxUQ0M0
>>712
>>699 は $methodArr が hoge のスコープに居るからパラメタに変数を取ってもシンプルに定義できるけど、それを定義として別ファイルに浮かせるという話について、どうやって?と聞いてるだけだぞ。
おまえは具体的な実装イメージ湧いてる?
0714デフォルトの名無しさん (ワッチョイ 9fd0-ZVm4)
垢版 |
2018/09/28(金) 10:46:28.24ID:Lkb4ZCCn0
if ( ( string ) filter_input ( INPUT_POST , 'hoge' ) === '' ) { ・・・ }
↑だと入力欄が空の時に〜となりますが、
半角・全角のスペースが1つだけ入力されたの時も含めたい場合は どのように書くのが良いですか?
どなたか ご教授ください(´・ω・`)
0716デフォルトの名無しさん (ワッチョイ 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}]++ みたいに
0717デフォルトの名無しさん (ワッチョイ 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 === '') { }
とするやり方なんかもあるな
0719デフォルトの名無しさん (ワッチョイ f7e9-S4i9)
垢版 |
2018/09/28(金) 14:29:52.16ID:c+sKNdIa0
>>718
空の時点で評価して正規表現に通さない方がいいから

だから本当に質問の通りでいいなら
if ($hoge === '' || $hoge === ' ' || $hoge === ' ')
で別にいいw

あと+じゃなく++と書いてる理由はReDoSでググればいいんじゃない?
Stack Exchange(違ったかもw)が
++じゃなく+使ってたせいでサービスダウンしたのはわりと有名
0720デフォルトの名無しさん (ワッチョイ 9fd0-ZVm4)
垢版 |
2018/09/28(金) 15:56:20.55ID:Lkb4ZCCn0
>>715
アドバイスありがとうございます。
filter_inputのマニュアルを確認しましたが、自分では解決できませんでした。
引き続き学習を続けます。

>>716
アドバイスありがとうございます。
ご指摘の通り課題が山積みです。
いただいたレスを参考にします。

お二方、ありがとうございました。
0722デフォルトの名無しさん (ワッチョイ 378a-tkB1)
垢版 |
2018/09/29(土) 10:56:37.08ID:6BMpRid40
if('aaa'==' aaa')//true
となることを発見したんですが、前方の空白は無視されるんですか?
これは正しい使い方でいいのですか?
よろしくお願いします
0723720 (ワッチョイ 9fd0-ZVm4)
垢版 |
2018/09/29(土) 17:12:36.46ID:rR859Rl80
>>720です

>>721さん
詳しく教えてくださり、ありがとうございます。
いただいたアドバイスを生かせるよう精進します。
0725デフォルトの名無しさん (ワッチョイ ff8a-tkB1)
垢版 |
2018/09/30(日) 08:27:28.94ID:KcrMzjy/0
>>724
すみません、間違えました
アルファベットaaaじゃなくて、数字1234でした
var_dump('1234'==' 1234');//bool(true)
0726デフォルトの名無しさん (ワッチョイ 9fd0-ZVm4)
垢版 |
2018/09/30(日) 13:45:51.83ID:Cu2FNSd00
メール送信の際に確認と検証目的で画面上に表示させる時、気をつけるべきことって どのくらいあるものなのだろうか(´・ω・`)
htmlspecialchars() ? 未入力の確認 ? (´ρ`)
0728デフォルトの名無しさん (ワッチョイ 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'

> === あるいは !== による比較では型変換は発生しません。 この場合は値だけでなく型も比較します。
なのでこういう自動キャストが困るのであれば===で比較すること。
0729デフォルトの名無しさん (ワッチョイ 178a-tkB1)
垢版 |
2018/10/01(月) 01:43:36.31ID:4WHq1Bue0
>>728
ありがとうございました
0730デフォルトの名無しさん (ワッチョイ 7f92-S4i9)
垢版 |
2018/10/01(月) 15:22:45.32ID:EoUwSVMY0
すまない。
微妙にスレチなのだが助けてほしい。

端的に言うとXAMPPの処理中にブルー画面になり、MySQLが壊れて動かくなった。
コントロール画面でStartを押しても一瞬動いてすぐ止まる。
調べてみたところ復旧方法がない。
XAMPPを外付けに移し、再インストールはうまくできた。

問題はSQLのデータをどのように移し替えればいいのかわからない。
エクスポートはできておらず、移行の仕方がわからない。
mysqlのdataファイルにデータベースの情報があるのはわかったが、
ここままファイル移動させただけでは動かないのです。

移行方法をご存知の方いらっしゃいましたらお教えください。
0731デフォルトの名無しさん (ワッチョイ 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)
どっちが危険だと思う?
0734デフォルトの名無しさん (ワッチョイ 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ファイル内のものしかありません。
0737デフォルトの名無しさん (ワッチョイ 7723-jO+J)
垢版 |
2018/10/02(火) 17:55:01.30ID:nFqAwCYR0
>>734
もうそこまで来たらバックアップ使って一から復旧した方が速い
まさかバックアップ取ってないとかないと思うが、もしそうなら諦めロン
次からは定期的に数世代分はバックアップ取るようにしなよ
0741デフォルトの名無しさん (ワッチョイ 7723-jO+J)
垢版 |
2018/10/03(水) 13:58:24.75ID:2El7vfsT0
>>738
それが壊れる前のファイルなら単純に差し替えれば動くだろう
バックアップあるならそこから引っ張ってくればいい
それが壊れたあとのファイルならそのファイル自体が壊れてるのだからあったところで意味がない
0743デフォルトの名無しさん (ワッチョイ d7b3-aemA)
垢版 |
2018/10/03(水) 22:33:44.05ID:bSsx2t9M0
>>736
横から失礼、個人レッスンってどこで頼むのがいい?

テックアカデミーや侍でもできるのか?とか、
クラウドワークスやココナラで単発でお願いするのがいいかと迷っている
0744デフォルトの名無しさん (ワッチョイ fd9e-XM+q)
垢版 |
2018/10/09(火) 19:35:33.43ID:DO0V6smF0
会社の先輩から受け継いだコードに
ini_set("allow_url_fopen", 1);
って有るのですが、何ですか?
PHP初めて三日目なので何も分かりません。
0746デフォルトの名無しさん (ワッチョイ 3e6d-eH9n)
垢版 |
2018/10/10(水) 19:05:57.00ID:VQ/JYckG0
質問です
将来的にこういうアプリを作りたいと思っています
まずゲーム部分をunityで作って例えばオンラインランク的なネットワーク機能はphpで作るという物です
ここで疑問なのですがphpはサーバーとしてネットに公開するという事になりますよね?
俺はそのunityで作ったアプリからしかそのphpサーバーにアクセスして欲しくありません
でもネットに公開してる時点で普通にブラウザからでもアクセスできてしまうと思うのですが
こういう問題について世間の開発者の人たちはどういうやり方を用いているのでしょうか?
0748デフォルトの名無しさん (ワッチョイ 41b3-Qng4)
垢版 |
2018/10/10(水) 19:42:09.52ID:uL/SAi3N0
>>746
> unityで作ったアプリからしかそのphpサーバーにアクセスして欲しくありません
これと

> でもネットに公開してる時点で普通にブラウザからでもアクセスできてしまうと思う
これは全然別のレベル。

要件としては前者だと思うけど、各社のノウハウになるんじゃないかなぁ。
簡易的なものだと、header 触るぐらい。
0749デフォルトの名無しさん (ワッチョイ 3e6d-J+fU)
垢版 |
2018/10/10(水) 20:03:08.68ID:VQ/JYckG0
>>747
レンタルしてサーバーを使おうと思ってます
外部から遮断してアプリからアクセスできるんですか?

>>748
個人で作ってるので簡易的なものしか作れません
ヘッダーの設定ですね
覚えておきます
0750デフォルトの名無しさん (ワッチョイ 529f-XM+q)
垢版 |
2018/10/10(水) 20:04:12.63ID:dwQgwWbW0
プログラミングはphp mysqlを齧った初心者です。
下記のようなユーザー参加型ランキングサイトを作りたいのですが
https://www.animeranking.net/index.php


ユーザーにデータベースにある作品でランキングを作成してもらい
他ユーザーの投票によりランキングを変動/変動しない(ユーザーの任意)
またユーザー登録ログインシステムも作りたいのですが

html css php mysqlで事足りるでしょうか?

ご教授お願いします。
0752デフォルトの名無しさん (ワッチョイ 3e6d-J+fU)
垢版 |
2018/10/10(水) 20:58:58.35ID:VQ/JYckG0
>>751
アプリやpcソフトからのアクセスで自分のホストとかわかるんですか?
0754デフォルトの名無しさん (ワッチョイ 3e6d-J+fU)
垢版 |
2018/10/10(水) 21:09:09.52ID:VQ/JYckG0
>>753
スマホとかpcからです
0757デフォルトの名無しさん (ワッチョイ 3e6d-J+fU)
垢版 |
2018/10/10(水) 21:54:13.75ID:VQ/JYckG0
>>755
ですよね
俺もそう思いました
だから世間の開発者の人たちはどうしてるのかな、と
0758デフォルトの名無しさん (ワッチョイ d881-t36n)
垢版 |
2018/10/10(水) 22:06:33.98ID:8sboglrA0
PHPの話ではないけれど
大概のネットゲーム会社はクライアントアプリに
何らかの形でガードをかけている
ホストとの通信は暗号化し、
クライアントアプリ内部メモリへのアクセスも出来ないようにしている
チート対策でCPUの不正な高速化までチェックしている所もある

どこまでやれば良いのかを考えるとキリがないかも知れない
0759デフォルトの名無しさん (ワッチョイ 3e6d-J+fU)
垢版 |
2018/10/10(水) 22:16:40.86ID:VQ/JYckG0
>>758
うーむ
無理、ですね
チートされても致命傷にならない範囲で作るしかなさそう
0761デフォルトの名無しさん (ワッチョイ e79e-fbiU)
垢版 |
2018/10/11(木) 04:29:58.54ID:zE20d/IG0
蔵のチート対策やデータの暗号化はさておき、今回の質問のメインって
鯖との接続・セキュリティ対策よね?

単純に認証方式の話になるんじゃないの?>756でも書かれてるけど
0762デフォルトの名無しさん (ワッチョイ e7b8-PLlx)
垢版 |
2018/10/11(木) 11:25:38.96ID:ywvO8NYp0
>俺はそのunityで作ったアプリからしかそのphpサーバーにアクセスして欲しくありません
非正規クライアントを作られてほしくないからその対策を教えてくれ
って言ってんじゃないのか
0763デフォルトの名無しさん (ワッチョイ df6d-3WQG)
垢版 |
2018/10/11(木) 12:25:06.79ID:RBgNCbjF0
>>762
746ですが
俺の入門書レベルでの知識ではphpをサーバーに設置したらネットのどこからでも見れてしまうと
思ったのでそれで質問しました
あくまでゲームからアクセスして欲しいなと
0764デフォルトの名無しさん (ワッチョイ 7fe8-37bo)
垢版 |
2018/10/11(木) 12:50:41.46ID:bd8i7ua+0
IPアドレスにデータを流す以外に通信する方法があるならそっちでやればいいけど、
普通に公開鍵と秘密鍵を使って認証するのが真っ当じゃないの
これを第三者クライアントが使えるんなら鍵の意味がない
0765デフォルトの名無しさん (ワッチョイ 7f80-WnU0)
垢版 |
2018/10/11(木) 13:08:42.23ID:3Bdkvxy90
>>746
ゲームは、ログイン・認証した人しか、プレイできない。
もし、アクセス権のない人がアクセスすれば、ログイン画面にリダイレクトされる

ログイン後は、セッションを使うから、各プレイヤーは判別できる

Ruby on Rails で、システム運用構築・プログラミングの練習をした方がよい
0766デフォルトの名無しさん (ワッチョイ df6d-3WQG)
垢版 |
2018/10/11(木) 13:11:06.48ID:RBgNCbjF0
>>765
ログインですか
でもアプリとかのゲームではログインなしでランキング機能を使えるゲームも少なくないと
思うのですがそれについてはどう思われますか?
0767デフォルトの名無しさん (ワッチョイ e79e-fbiU)
垢版 |
2018/10/11(木) 13:15:39.15ID:zE20d/IG0
>>762
例えBASIC認証でも自分で作ったプログラム以外からのアクセスは除外することはできるよね。
あとはセキュリティ強度の問題であって、チートやら暗号化の話は別の話のはず。
0768デフォルトの名無しさん (ワッチョイ e79e-fbiU)
垢版 |
2018/10/11(木) 13:19:09.28ID:zE20d/IG0
>>766
プログラム内部でログイン処理があるだけで表に出さないだけの話でしょ。
端末固有情報でアカウント作ってログインしてるだけ。

端末固有情報を使わないと鯖にはもちろん入れない。
あとは不正な端末固有情報を使わせない仕組みを考えるだけ。
0769デフォルトの名無しさん (ワッチョイ c723-WBp8)
垢版 |
2018/10/11(木) 13:24:40.62ID:Ub0lOJUx0
IDとパスワードを手打ちでポチポチッとすることだけがログインじゃない
もうちょっと自分でいろいろ調べてみていいと思うよ
さすがにちょっと質問のレベルが低すぎて教えようがない
0770デフォルトの名無しさん (ワッチョイ df6d-3WQG)
垢版 |
2018/10/11(木) 13:27:20.03ID:RBgNCbjF0
>>768
なるほどわかりました
それで一つ質問なのですがある端末の識別情報を別の端末が偽装して使って成り済ます
という事はどうやって防ぐのでしょうか?
0772デフォルトの名無しさん (ワッチョイ df6d-3WQG)
垢版 |
2018/10/11(木) 13:51:26.37ID:RBgNCbjF0
>>770
やっぱりこれ無しにしてください
まず初回アクセス時にサーバーでパスワードを発行してアプリ側で保存してしまえばいいんですよね
それでかなり確かなセキュリティーが保たれると思います

皆さんありがとうございました
あんまりしつこいとウザいのでこの辺で失礼したいと思います
0773デフォルトの名無しさん (ワッチョイ e79e-fbiU)
垢版 |
2018/10/11(木) 14:01:09.06ID:zE20d/IG0
>>770
絶対不可能レベルなのか、仕組みさえバレなきゃまず偽装できないからそのレベルなのかで
方法論変わってくるんじゃない?

自分はなんちゃってプロテクトな感じで、固有情報を暗号化、初回登録時に
鯖で作ったパスを暗号化したのを端末のちょっと分かんないところにピーコしておしまい。
クラッカーからみて、何をどのようにしてるのか分かりにくくしてる程度で、
全バレしたらもちろんアウトだけど、「何を」「どのような暗号化」は中々分からないと思う。

カネ絡みやら個人情報の絡みがあるんなら、もっと厳格かつワンタイムパスワードとか
必要になってくるわね。
0775デフォルトの名無しさん (オイコラミネオ MMfb-KnhR)
垢版 |
2018/10/11(木) 14:04:32.54ID:2BdL7A5TM
>>772
まず難しいこと考える前に作ってしまえば。
URLを秘密にしておくだけでとりあえず充分。
それがちゃんと動くようになったら不正利用防止を考えていけばいい。
少なくとも今は、ただツベコベ言ってるだけで実際にモノを作れるレベルじゃないんじゃないの?って印象しかない。
0776デフォルトの名無しさん (ワッチョイ 7f80-WnU0)
垢版 |
2018/10/11(木) 14:08:53.21ID:3Bdkvxy90
HTTP は、1回毎の通信だから、同じユーザーかどうか、判別できないが、
セッション機能を使うと、各プレイヤーは判別できる

毎回通信するたびに、各プレイヤーを特定できる暗号を送りあう

SSL・認証は、開発者の常識。
国家資格の基本情報処理技術者でも取れば?
0778デフォルトの名無しさん (ワッチョイ e7b8-PLlx)
垢版 |
2018/10/11(木) 15:26:02.99ID:ywvO8NYp0
>>767
unityC#で作った正規GUIクライアントでランキングサーバにアクセスするのと
同じ情報手順プロトコルを解析してphpで作った非正規CUIクライアントでアクセスするの
サーバはどうやって正規クライアントと非正規クライアントを見分けるの?
正規クライアントを必要とするチートの話じゃなくてどちらかというとBOTの話
0779デフォルトの名無しさん (ワッチョイ 7f80-WnU0)
垢版 |
2018/10/11(木) 16:10:14.57ID:3Bdkvxy90
ゲームは、ログイン・認証した人しか、プレイできない。
もし、アクセス権のない人がアクセスすれば、ログイン画面にリダイレクトされる

ログイン後は、セッションを使うから、各プレイヤーは判別できる

それが、どのようなGUI クライアントで認証しても関係ない。
内容が同じなら、どのGUIクライアントでも同じ

全く同じレスポンスを返すのだろ。
エミュレーターなんか、そう
0780デフォルトの名無しさん (ワッチョイ e79e-fbiU)
垢版 |
2018/10/11(木) 16:25:57.66ID:zE20d/IG0
>>778
まずは解析されにくくすることで非正規を弾く発想なので、
解析されてる時点ではどうしようもないよね。

ここからさらにどのように解析しにくくするのかというところが
ポイントであって、解析されてる前提だとどうしようもないんじゃないの。
むしろ正規の証明が難しそう。

認証局噛ませて秘密鍵公開鍵とかやってても、鍵盗まれた前提で
話しても意味ないでしょう。

ていうか、SSL/TLS通信ってそんな簡単に解析して非正規クローン作れたりするの?
0782デフォルトの名無しさん (ワッチョイ e7b8-PLlx)
垢版 |
2018/10/11(木) 16:43:19.53ID:ywvO8NYp0
>まずは解析されにくくすることで非正規を弾く
俺がいってるのは
解析されにくくすることで非正規そのものを作ろうと思わない環境にするであって
非正規クライアントの存在そのものがないことを前提にしてるので
似たようなこと言ってるのだが微妙に話が噛み合ってないんよな
0783デフォルトの名無しさん (ワッチョイ 7f81-VhFj)
垢版 |
2018/10/11(木) 17:02:25.53ID:kxyqPSNi0
質問者の前提は

>俺の入門書レベルでの知識ではphpをサーバーに設置したらネットのどこからでも見れてしまうと
>思ったのでそれで質問しました
>あくまでゲームからアクセスして欲しいなと

なので、非正規クライアントも含まれると思うが
0785デフォルトの名無しさん (ワッチョイ e7b8-PLlx)
垢版 |
2018/10/11(木) 17:20:45.95ID:ywvO8NYp0
そんなのはわかってるよ
1.非正規クライアントを作らせないというか作ろうとは思わない環境を作る
2.非正規クライアントを作られても問題のない環境を作る
という視点の違いであったにすぎずパケット圧縮暗号分割を否定してるわけではないだろう?

最も2はソケット開いたあと何したらいいかわからないはずなので
コードはせいぜい数行程度になり動作も不能で
俺的にはそんなものをクライアントと呼んでいいのか?っていう感じだが
0786 ◆QZaw55cn4c (ワッチョイ df60-vJCm)
垢版 |
2018/10/11(木) 20:27:41.65ID:GbIju3sk0
非正規と判断されたクライアントに対してはなんらかのペナルティーを課せればいいかと
P2P file sharing ならばファイル拡散もかねてキャッシュを送りつける、とか
0787デフォルトの名無しさん (ワッチョイ 7f81-VhFj)
垢版 |
2018/10/11(木) 21:00:09.10ID:kxyqPSNi0
何をしたら良いか分からないはずと言うのは、かなり甘い見通し
ゲーム会社はそんな甘い考えは持っていない
例えばクライアントソフトをデバッガー環境下で起動されると
サバクラ間のやり取りの相当部分が解析されてしまう
ゲーム会社はそれをさせまいと独自のメモリ保護機構を構築し
そのようなハッキングを検出したら終了させている
0789デフォルトの名無しさん (ワッチョイ 7f81-VhFj)
垢版 |
2018/10/13(土) 11:00:18.78ID:WkgZggeq0
>毎週変えられたら

だからこういう手間をかけている分けだろう
こういう手間をかけなかったら、解析されてしまうってこと
解析する側からすれば、
調べる対象は手元にあって、サーバーとのやり取りは全部把握出来てしまう
クライアントの中でどういう処理をしているかも調べる事が出来る
途中経路がいくら暗号化されていようと、クライアントの中は丸見えだ
0790デフォルトの名無しさん (ワッチョイ 27e4-PLlx)
垢版 |
2018/10/13(土) 17:02:31.63ID:vROhTmSS0
最初から毎週暗号化しろっていってんじゃん。
不正規なクライアントを作らせないって話してるのに、
メモリ保護やらクライアント解析やら、チート対策とごっちゃにしてるんだよな。
0793デフォルトの名無しさん (ワッチョイ 7f81-VhFj)
垢版 |
2018/10/13(土) 17:32:45.69ID:WkgZggeq0
作らせないことを前提にしたら
泥棒がいないようにすれば警察はいらないねって言いだしてる様なものだ
不正規なクライアントが簡単に作れてしまうだろ
それをどう対策とるんだよ

クライアントの中見られたら、暗号解読をどうやってるか丸見えだ
毎週変えようと、毎日変えようと、全然対策にならないだろう
0795デフォルトの名無しさん (ワッチョイ 7f81-VhFj)
垢版 |
2018/10/13(土) 17:51:32.87ID:WkgZggeq0
普通は通信相手と信頼関係があって、
外部にそれが漏れないように暗号化するって事だが
ゲームの場合は、通信相手のクライアント自体が
信用出来ない前提でやらないとだめ
0796デフォルトの名無しさん (ワッチョイ bf16-Zu1O)
垢版 |
2018/10/13(土) 20:29:18.59ID:t1cbhpEg0
初心者です
PHPからコマンド一発で終わらない外部プログラムの実行して操作を行うことってできますか?
例えばMySQLのコマンドラインツールのようなものです
0797デフォルトの名無しさん (ワッチョイ e7a5-CsiS)
垢版 |
2018/10/14(日) 01:22:40.52ID:kPrWLnvE0
Laravelを使ってサイト作成しようとしてます。
ブログみたいに左側にサイドメニューがあって
メニューの項目をクリックすると中央のページにその項目の情報が表示されるという
ページを作りたいのですが、
サイドメニューを表示させる方法がわからないので教えてください。
調べたところ、レイアウトを設定するかもしれないところまではわかりました。
0800デフォルトの名無しさん (ワッチョイ dfd2-7vHE)
垢版 |
2018/10/14(日) 02:34:26.10ID:VGDv0f/D0
>>796
適当なシェルスクリプorバッチファイルを作成してキックかな
https://webkaru.net/php/function-exec-system/
本当にPHPでやる必要があるのか疑問だが
0802デフォルトの名無しさん (ワッチョイ 47e9-Zu1O)
垢版 |
2018/10/15(月) 13:04:12.63ID:tYDBCfF70
>>792
昔遊んだセガのスマホゲーム
Wiresharkでキャプチャして中身見たら
Jsonをちょこっとエンコード(暗号化ですらない)しただけのデータでやり取りしてたから
デコードしてクラックして遊んでたよ

まあクラックしたところでクライアント側に反映されるだけで
サーバには反映されなかったから
さすがにサーバ側でチェックはしてるんだろうけど

俺も>>791に一票
phpレベルでやる事なんてさ
グダグダ言ってる暇あったらさっさと動くもん作れって話だw
0809デフォルトの名無しさん (ワッチョイ 47e9-Zu1O)
垢版 |
2018/10/16(火) 13:07:24.26ID:FKF9rkIY0
>>807
は?
大手のセガですらそんな感じなんだから
791が言ってるように、つべこべ言ってる暇あったらプロト作れよ
って話をしたかっただけなんだがw

メモリ保護みたいなチート対策と混同してる奴いるし
何なのこのスレww さすがPHPerwww
0811デフォルトの名無しさん (ワッチョイ 275b-ToA/)
垢版 |
2018/10/16(火) 13:31:22.77ID:1YlWxxt/0
ざっとしか見てないから結局元の質問が何なのかよく分からないけど
せめて通信の秘匿化・通信内容の暗号化・その他ぐらいは分けて考えないと
そこをごちゃごちゃに書く人がいるからわけが分からなくなる
#たぶん何となくしってる事を適当に並べただけなんだろう

とりあえずapiみたいにhttp(s)使ってピンポン形式でやり取りするだけならプロトぐらいはすぐ作れるでしょ
0813デフォルトの名無しさん (ワッチョイ 7fe8-37bo)
垢版 |
2018/10/16(火) 19:12:19.10ID:XYy62ZSp0
非正規蔵を作られて鯖にアクセスされたくないってのが元々の質問内容

それに対して、暗号化して定期的に別パターンに変更するのが当たり前(ドヤ
とか宣い始めたのが>790>809(もうちょっと前から)なんだよね。

当たり前っつーならそれ挙げてみ?って書いたら、全然そうなってない例しか
挙げられなかった始末。

挙げ句の果てには809の言いぐさで論点すり替えて未だにマウンティング
しようと必死なわけ。


普通に考えたら、暗号化までは普通だろうが、暗号化パターンを定期的に変更
しようなら短スパンでの蔵の更新か暗号パターンファイルの更新をして配布
しなきゃならん。当然鯖の方も対応せにゃならん。
(日付時間を種にしてやる方法もなきにしもあらずだが穴がある)

809の脳味噌はそこまで一切考えずにゲーム脳の脊椎反射でマウントドヤドヤ
してるだけだろ。
0816デフォルトの名無しさん (ワッチョイ 7fb8-PLlx)
垢版 |
2018/10/16(火) 19:46:16.42ID:YwbSFpxf0
自動でログインしてセッション確立して投稿するようなスクリプトがあるけど
HTTPに限らず通信手順をちゃんと模倣できていればそれが可能
防ぎたいのなら通信部分を解析されない対策をとればいいのだけど
まあ専門外になるしPHPerには難しいと思うよ
0819デフォルトの名無しさん (ワッチョイ e79e-fbiU)
垢版 |
2018/10/17(水) 01:43:49.88ID:3pfHQO2y0
話の前の方から引用すると
>最初から毎週暗号化しろっていってんじゃん。

これやってないよねって話でしょ
802自身が実際にはキャプチャしたら暗号化すらしてないって言ってる

毎週暗号パターン変更してるのかしてないのかの事実関係は
どうでもいいんだけど、上から目線で言う事毎回矛盾してるのはどうなのって話なのでは
0821デフォルトの名無しさん (ワッチョイ 7fe8-37bo)
垢版 |
2018/10/17(水) 14:21:09.22ID:D/px6urb0
関連ないのを持ち出されても関連ないとしか言いようがないな
>>787から「ゲーム会社では〜」を持ち出し、>>787-790で「毎週変えられたら」
という話が出たから>>792を書いたに過ぎない

結果的にゲーム会社でそこまでやってる例を挙げてるつもりで、暗号化されてない
例を挙げてドヤ顔してるやつが居るよなって話になってるだけ
0822デフォルトの名無しさん (ワッチョイ e79e-JlWZ)
垢版 |
2018/10/17(水) 17:09:22.67ID:xHybN1E+0
配列で得られたデータをオブジェクトに変換してリターン
している例を見たのですが、何かメリットがあるのでしょうか?
return (object)$arr;
0823デフォルトの名無しさん (ワッチョイ 47e9-Zu1O)
垢版 |
2018/10/17(水) 17:54:36.83ID:ovwDg+Xe0
何かよく分からんが
勝手にマウント(笑)がどうとかと勘違いして
勝手にドヤ顔(笑)がどうとか喚き散らしてるだけって事はよく分かったw

つかプライドが高いのかなんなのかしらんが
現実世界で話したら実に面倒臭そうなやつばっかだなw


セガでもそんな感じなんだし難しい事考える前に適当に作って動かしてみれば

俺が言いたいのはこれだけ
何をそんなに噛み付く必要があるんだw キモすぎww
0824デフォルトの名無しさん (ワッチョイ 47e9-Zu1O)
垢版 |
2018/10/17(水) 17:57:45.30ID:ovwDg+Xe0
>>822
返り値を受け取る側でオブジェクトの方が都合が良いからだろ

まあPHPerは配列大好きだからな

例えばPDOのPDOStatementなんかはTraversableだから
そのまんまforeachでぶん回せるのに
それをわざわざfetch()とかで配列にしてみたりとかさw
0826デフォルトの名無しさん (ワッチョイ e79e-JlWZ)
垢版 |
2018/10/17(水) 18:07:27.22ID:xHybN1E+0
>>824
なるほど。
ありがとうございました。
0829デフォルトの名無しさん (ワッチョイ 7fe8-37bo)
垢版 |
2018/10/17(水) 20:56:47.75ID:D/px6urb0
>>792に答えてって質問に対して的外れなことばかり言ってんじゃねえよ
的外ればっかだし、もうマウント取るしか能が無いよね?って話で図星突かれて
さらに的外れ続けんの?無能すぎね?
0830デフォルトの名無しさん (ワッチョイ e79e-fbiU)
垢版 |
2018/10/17(水) 21:10:08.06ID:3pfHQO2y0
う〜ん。
自分も非正規蔵の件について話に入ってたけど、認識違いとかのズレで
まあどうでもいいやと思って黙ってたけど、結論はいいとして方法論で
これが当然のようにいいながら矛盾しつつ相手を卑下するやり方には
同意しかねるね。
議論の内容より相手を叩く事に重点を置いてるだけにしか見えない。

まあこんなところで議論とか求めても仕方ないけど、筋が通ってない分
ヤクザにも及ばないタチの悪さとは思う。
0832デフォルトの名無しさん (ワッチョイ bf17-DKnb)
垢版 |
2018/10/17(水) 21:27:10.80ID:swlX/dQc0
ローカルプロキシ使ってキャプチャするぐらいなら簡単にできるんだから実際にどんなデータになってるか見てみればいいのにね
他の人が言ってるとおり意外と簡素なものも少なくないと思うよ
0835デフォルトの名無しさん (ワッチョイ 7fb8-PLlx)
垢版 |
2018/10/17(水) 23:02:30.73ID:leuazgxV0
読み返してみてだいたいどうしてこうなったか理解した

毎週変える対策すればクライアントなんて出来ないはず→
「はず」ってのは考えが甘い→
言い方がわるかった「はず」ではなくて不可能→
毎週変えなかったら解析されてしまうだろ→
最初から毎週変えろいってる

この最後のはそういう前提で話をしてるってことであって
別にそれが当たり前だとは言ってないと思うんだわ
0836デフォルトの名無しさん (ワッチョイ e776-WBp8)
垢版 |
2018/10/17(水) 23:26:36.20ID:wTgde3Ka0
話の流れがイマイチ読めないが暗号化のキーは共通鍵って話なの?
それとも暗号化のアルゴリズムを変えるとかトンでも理論の話なの?

どっちでもおかしな話だけれど
そんなことしてるアプリあったら教えてほしいw
0838デフォルトの名無しさん (ワッチョイ 7b5b-a866)
垢版 |
2018/10/18(木) 10:11:12.44ID:1rhihpgt0
>>829
>>792の毎週暗号化法を変えてるアプリはあるの?
に対する答えは
1.そういう事をやってるものもある「かも」
2.やってないものもある
のどちらかなわけで
1の具体例はまだないが
>>802は2の具体例なんだから別に的外れじゃないでしょ

誰も”全部そうしてる””絶対にそんな事はない”という0か1かの話しじゃないのにさ
マウントだの何だの言ってるあなたの方がよほど的外れだ
0839デフォルトの名無しさん (ワッチョイ 66d5-7cZp)
垢版 |
2018/10/18(木) 11:09:28.82ID:cOwpgSZ30
外から解析できるような鍵なら毎週変えたところで無意味だし、
リバースして解析されるならそれこそ毎週変えても無意味だと思うの。
だからそんなことは置いといて、さっさとプロト作れってこった。
それが出来たらパラメタのチェック方法を掘り下げていく方が効果的。
0840デフォルトの名無しさん (ワッチョイ bfe9-7PZ0)
垢版 |
2018/10/18(木) 11:13:40.24ID:or/egUOV0
>>836
>どっちでもおかしな話
だよなw

暗号化やハッシュ値生成のためのアルゴリズムは高度な数学の話になるから
そのアルゴリズム自体を毎週新しく生み出せってのはトンデモ話だが

既存のアルゴリズムの組み合わせ順を変えるとか
暗号化⇔複合に使うキーやベクトル値を変えるとかって話なら
週ごとどころか通信毎にランダム化できるんだから別に非現実的な話じゃないよな
※つか、なぜ”週”単位なのかの方がよく分からんw

>>838
もうそいつの事はほっとけよw

>>839
特に下2行には激しく同意
0841デフォルトの名無しさん (ワッチョイ bee8-Ue0Q)
垢版 |
2018/10/18(木) 12:49:16.43ID:snT/KIMy0
>>838
>>792では「【あって当たり前な流れになってるけど】あるなら具体例を教えてくれ」であって「あるかないか教えてくれ」ではないんだよ
単純明快な日本語でなにもおかしくないだろ

求めてるのは完全に1.(あればだが)なんだが、なんで2.でOKみたいな流れになってんのよ
0842デフォルトの名無しさん (スププ Sd8a-1yD9)
垢版 |
2018/10/18(木) 13:30:57.93ID:KrxjH9oQd
いつまでクソみたいな揚げ足取りをやってるんだか
特にお前の話は糞の役にも立ってないんだから黙ってクソして寝てろ
マウントとかドヤ顔って単語を好んで使う奴ってほんとゴミクズだわ
0844デフォルトの名無しさん (ワッチョイ bfe9-7PZ0)
垢版 |
2018/10/18(木) 13:52:25.45ID:or/egUOV0
まあでもlocalに串立ててGUIでデータの中身見るなんてのは
専門知識も要らない低レベルな話なんで
そんな話をドヤ顔だのマウントだのと言われて俺困惑ww

何がこいつの逆鱗に触れたんだろうw
おちょくる分には面白いが
0846デフォルトの名無しさん (ワッチョイ bee8-Ue0Q)
垢版 |
2018/10/18(木) 17:01:50.49ID:snT/KIMy0
あるなら教えてくれ(あればな)→これでドヤ!(ないけど)→ねえんだろ何ドヤ顔してんの

この流れで悔しがってるのが802以外に居るのが不思議だね
本人か親兄弟か何か?
0848デフォルトの名無しさん (ワッチョイ beb8-4vxQ)
垢版 |
2018/10/18(木) 20:27:57.21ID:aXklSebk0
(当たり前というのは思い込みだが)当たり前の流れにしたくなさそうな>>792
加勢した>>802になぜか噛み付いてるんだもん
wiresharkでパケットキャプチャしたってのが何か高度なスキルに思えて
そんな自己満披露せんでいいよとかキレちゃったのかはわからないけど
傍からみててなぜキレてるのかさっぱりわからないw
0851デフォルトの名無しさん (ワッチョイ c395-1yD9)
垢版 |
2018/10/18(木) 21:21:54.89ID:DXkQKcQs0
>>848
wiresharkじゃなくてburpsuite
burpsuiteの方がそういう用途に特化してて簡単
それでも>>792にとってはドヤ顔に見えてしまった
つまり792はその程度の知識の持ち主だってこと

もう相手にするのはよそう
0853デフォルトの名無しさん (ワッチョイ bee8-OawP)
垢版 |
2018/10/18(木) 21:47:24.32ID:snT/KIMy0
>>851
採用例を求めてるのに、採用してなかった一例のみ挙げて加勢とか判断材料にもならん
馬鹿としか思えんし、その加勢方法がキャプチャなんて所がむしろ失笑しかしてないけど?
高度でもないのに自分でそんな詳細一々紹介しに来る神経がもう、背伸び精一杯だろ

やっぱりドヤ顔してたんで?
ドヤ顔指摘がツボすぎるから悔しくて粘着して煽りに来てるんだろ?
0857デフォルトの名無しさん (ワッチョイ beb8-4vxQ)
垢版 |
2018/10/20(土) 15:36:54.08ID:gEDPu4pz0
http://php.net/manual/ja/functions.arguments.php
> 強い型付け ¶
> デフォルトでは、間違った型を渡された場合でも、可能な限りは来されている型に変換します。
> たとえば、string を想定している関数のパラメータに integer が渡された場合は、その値を string 型として受け取ります。

declare(strict_types=1);
気になるなら、これいれるとTypeError投げるようになる。
0860デフォルトの名無しさん (ワッチョイ beb8-4vxQ)
垢版 |
2018/10/21(日) 03:14:09.66ID:Pz2IqIp+0
> 組み込み関数内からの関数呼び出しは、 strict_types 宣言の影響を受けません。
とも書いてあるな。
strlenはもろに影響受けてるようだけど、よくわからなくなってきたw
0862デフォルトの名無しさん (ワッチョイ 377e-Pr2h)
垢版 |
2018/10/21(日) 15:33:51.77ID:8uJUIhMV0
文字列のUnicodeを10進数または16進数の配列として取得するにはどうすればよいですか?
0863デフォルトの名無しさん (ワッチョイ 66d5-7cZp)
垢版 |
2018/10/21(日) 15:48:19.30ID:FEyhRhG60
>>862
文字列を $s としたとき、$s[$i] で $i バイト目の文字が得られる。
これを ord するとその ASCII値が得られる。

UNICODE文字単位でそれがやりたいなら、mb_substr を組み合わせてやる感じかな。
0864名無しさん@そうだ選挙に行こう! Go to vote! (ワッチョイ bfe9-7PZ0)
垢版 |
2018/10/22(月) 10:46:42.37ID:zqf9WRrQ0
>>862
$str = 'unkoうんこ';
$arr = [];

foreach (preg_split('//u', $str, -1, PREG_SPLIT_NO_EMPTY) as $char) {
  $arr[$char] = [
    'hex' => bin2hex($char),
    'unicode' => base_convert(bin2hex(mb_convert_encoding($char, 'UTF-32BE', 'UTF-8')), 16, 16),
    'json' => json_encode($char),
  ];
}

print_r($arr);

あとは結果見て都合の良いように改変してどうぞ
0865デフォルトの名無しさん (ワッチョイ a3ef-7TBo)
垢版 |
2018/10/27(土) 20:45:15.13ID:LtQGrCdd0
よろしくお願いします。

$date=date('Y-m-d H:i:s');
$sql="INSERT INTO tableName (name,comment,created) VALUE (:name,:comment,'{$date}')";

のこコード中で、最後の出てくる ' { $date } ' が、シングルクォートで囲まれているのは何故でしょうか?
$dateが文字列になるからなのでしょうか?
0866デフォルトの名無しさん (ワッチョイ e3d2-8L5D)
垢版 |
2018/10/28(日) 02:50:58.85ID:GS4HIDpq0
>>865
前後がないとわからんがPDOかな?
:nameや:commentはパインド変数だから
型を意識する必要ないけど$dateはバインドしてないから
文字扱いにしてるんやろね
んで、文字列でシングル使いたいから全体はダブルで括るという
0868デフォルトの名無しさん (ブーイモ MMbf-JP9K)
垢版 |
2018/10/28(日) 07:26:54.25ID:7IwsJv31M
さらに言うと
{$date}は 2018/01/01 01:00:00 みたいに展開されるわけだが
シングルクォートが無いとこの部分は数値と除算と…のように解釈されてエラーになるわけだ

MySQLだと日付時刻の指定はYYYYMMDDhhmmssかYYMMDDhhmmssの形式の数値でもいいから
$date=date('YmdHis')かdate('ymdHis')
だったらクォートいらないけどな
0872デフォルトの名無しさん (ワッチョイ 1be9-JHIh)
垢版 |
2018/10/31(水) 10:59:37.08ID:BXLRnHBs0
>>871
どこをどう見ても3にしかならないし
実際実行しても3が出力されるんで
何かどっかがおかしいんだろ

つか変数のglobal宣言なんていまさら使うことなんかないから
理解できんのなら忘れていいよこんなもんw
0873デフォルトの名無しさん (ワッチョイ 859e-o1DS)
垢版 |
2018/10/31(水) 17:59:49.38ID:J8G9WBiJ0
>>872
検証ありがとうございました。
その後、必死でテストしたのですが2しか出ません。
>つか変数のglobal宣言なんていまさら使うことなんかないから
なぜですか?
0875デフォルトの名無しさん (ワッチョイ 1be9-JHIh)
垢版 |
2018/10/31(水) 19:01:40.49ID:BXLRnHBs0
>>873
必死ってのがよく分からんw
コードをコピペして実行するだけなんだから数秒で終わる話だと思うんだが
ひょっとしてコードを見よう見まねで手打ち(「写経」という)してね?

写経が無駄だとは言わんが
もうちょい色々分かりだしてからやった方がいいぞ


globalについては
グローバル汚染って言葉でググってみ

今PHPをやってるって事はセットでJavaScriptもやる可能性が高いわな?

そこも踏まえて言語を問わず
今自分がどこの空間を使っててそこを「汚染」しないようにはどうすりゃいいか
意識した方がいいぞってことだ

って書くのが面倒くさかったから適当に書いたw 適当すぎだなww

今はよく分からなくてもその内何となく分かってくるから
今わかんないなら気にするなw
0876デフォルトの名無しさん (ワッチョイ 175b-119k)
垢版 |
2018/10/31(水) 19:21:20.91ID:V+5pvMby0
使い方は覚えておいた方がいいけど
なるべく使わずにすむようにした方がいいだろうね

WordPressはglobal宣言しまくってるけど設計としてはあまりまねしてほしくないのは確か
0877デフォルトの名無しさん (スププ Sdaf-eYkk)
垢版 |
2018/10/31(水) 19:28:03.24ID:rEIsu6q2d
wpは歴史的に仕方ない
ポリシー的に後方互換を大事にしてるしな
設計はまねするなという意見には同意

そろそろ後方互換を捨てろよって思うけどfirefoxみたいなことになる可能性もあるからなー
0878デフォルトの名無しさん (ワッチョイ 8317-Cbrb)
垢版 |
2018/10/31(水) 21:49:30.59ID:8LMDJ4U80
wordpressって推奨はPHP7以降になっているけど、
実際はPHP5.2とmysql5.0でも最新版が動くらしい
下手すると10年以上前?
>>876を見て久しぶりにコードのぞいたら本当にglobalだらけで笑った
こういう古い設計のコードを見てPHPがくそ言語だと言われるのはモヤッとする
0879デフォルトの名無しさん (スププ Sdaf-eYkk)
垢版 |
2018/10/31(水) 22:25:32.37ID:rEIsu6q2d
プラグインやテーマもテンプレートエンジンを使わずに素のPHPを使ってるもんだからXSSやCSRFとかの対策が完全自動化されてないのも問題
2018年にもなって素のPHPで書いたテンプレートなんか読みたくないよ。。。
0880デフォルトの名無しさん (ワッチョイ cd95-Ha4+)
垢版 |
2018/10/31(水) 22:47:31.62ID:7+pd6iJs0
5.2っていうと配列をarray()って書いてた時代か
名前空間も無名関数もタイプヒンティングもないし
定数定義にdefine使ってグローバルで衝突しないように接頭辞を付けるようにしてたっけ
WordPress頑張りすぎだろ
0881デフォルトの名無しさん (ワッチョイ ab74-7TBo)
垢版 |
2018/10/31(水) 23:43:21.16ID:aqQK2dvp0
まぁ現状のコードベース維持するならコードスタイルもコードベースに合わせざるを得ないわな
モダンな書き方にするなら新規で書き起こした方が低コストだろうし
0882デフォルトの名無しさん (ワッチョイ c7e9-zV7r)
垢版 |
2018/11/01(木) 11:47:34.96ID:YMjHonMD0
>>881
だな
まあWPはしゃーない
プラグインとテーマの豊富さが売りなんだから
そこ切り捨てちゃったらそれこそFireFoxみたいなことになるw

大昔はこんな実装をしてたんだと反面教師にするにはいい材料だ
モダンなものに触れるだけじゃなぜそうすべきなのかが理解できないしな

俺の知り合いにもWPに親殺されたみたいなのがいるから
WPがこの世から消えれば幸せになれるやつも少なくないんだろうが
逆にWPだけで飯食ってるようなやつもいるからなあw
0883デフォルトの名無しさん (ワッチョイ fe92-rn+T)
垢版 |
2018/11/01(木) 21:57:02.20ID:nscXvzWP0
サイトマップから各ページのURL読み込むの作ってたら
http://mutimutigazou.com/sitemap.xml
こういうのができたのだがどう処理すればいい?
0885デフォルトの名無しさん (ワッチョイ 76ef-MyS3)
垢版 |
2018/11/02(金) 06:31:57.91ID:rR4ZFPRy0
お願いします。下記はテキストからの抜粋です。
新規登録するメールが、DBで重複していないかチェックするコードです。

function email_exists($dbh,$email){
$sql="SELECT COUNT(id) FROM members where email=:email";
$stmt=$dbh->prepare($sql);
$stmt->bindValue(':email',$email,PDO::PARAM_STR);
$stmt->execute();
$count=$stmt->fetch(PDO::FETCH_ASSOC);
if($count['COUNT(id)']>0){
return TRUE;
}else{
return FALSE;
}
}

解説では、入力するメールアドレスが「何件あるか」調べます。取得する値は0か1。
しっかりと行数をカウントし、メールアドレスが登録済みかチェックします。

と記載されています。
コードを見ていると、fetchで連想配列を1行だけ$count変数に格納しているだけに読めてしまい、
「何件存在しているか」、「行数をカウントする」、という部分の記載が、コード上理解できません。
上記のコードで、DB上で該当する行の行数をカウントしている部分はどこにあたるのでしょうか?
0887デフォルトの名無しさん (ワッチョイ c7e9-zV7r)
垢版 |
2018/11/02(金) 10:05:36.78ID:6yQoCIiM0
>>885
カウントはSQLの集計関数であるCOUNT()でやってる
SELECT COUNT(id)
のところな

こういう時は
"SELECT COUNT(id) AS cnt FROM members";
みたいに別名を付けるくせを付けといた方がいい


ちなみに今回のようにカラム1個のデータだけ欲しい時は
fetch()ではなfetchColumn()を使って

$count = $stmt->fetchColumn();

とすれば
$count には配列ではなく直接 COUNT(id) の値が入るんで楽


さらにこうやって書けば
$count = $stmt->fetch(PDO::FETCH_ASSOC);
以下の冗長な6行がこうやってたった1行で書けるわな

return (bool) $stmt->fetchColumn();
0888デフォルトの名無しさん (ワッチョイ c7e9-zV7r)
垢版 |
2018/11/02(金) 10:09:06.54ID:6yQoCIiM0
>>885
さらに言えばw

メアドが登録済みかどうかを知りたいだけなら
COUNT()なんか使う必要はなく

$sql="SELECT id FROM members where email=:email LIMIT 1";

でいい

まぁその例はあくまでも教科書的に「何件あるか」を調べる方法を書いてるだろうが
DB処理ってのはボトルネックになりやすいんで
sqlはなるべく簡素にするのが基本な
0889デフォルトの名無しさん (ワッチョイ c7e9-zV7r)
垢版 |
2018/11/02(金) 10:13:15.59ID:6yQoCIiM0
>>883
XMLなんだからsimplexml系とか(他にも色々あるが)で処理すればいいだろ?

gzされてるデータの扱いが分からんのか?

gzされてるデータはローカルに保存した上でgzopen()で開いて処理してもいいし
データ取得にcurl使って CURLOPT_ENCODING => 'gzip' ってオプション指定して自動展開してもいいし
そのままとってきてgzdecode()通してもいいし

好きなようにすりゃいい
0890デフォルトの名無しさん (ワッチョイ fe92-rn+T)
垢版 |
2018/11/02(金) 13:12:23.63ID:H0U+eOT90
>>889
できました。
ありがとうございます。
0891デフォルトの名無しさん (ワッチョイ 9aab-MyS3)
垢版 |
2018/11/02(金) 16:43:43.64ID:lKWT8t9P0
>>886
>>887
>>888
ありがとうございます。
$count には ['COUNT(id)']=>行数という連想配列が、
$count['COUNT(id)'] には 行数が、
それぞれ格納されているのですね。

return (bool) $stmt->fetchColumn();や
実務的なSQLの考え方を教えてくださってありがとうございます!
0892デフォルトの名無しさん (ワッチョイ c7e9-zV7r)
垢版 |
2018/11/02(金) 17:13:43.40ID:6yQoCIiM0
>>891
お、おう
そういうレベルだったのかw

変数の中身がどうなってるかわけ分からん時はすぐに
var_dump($count);
ってするんだ

$countが「配列」や「オブジェクト」だと分かってる時は
print_r($count);
ってした方が見やすいから使い分けるといいぞ

とにかく初心者の内はちょっとでもあれ?って思ったらすぐ var_dump() しろ
0896デフォルトの名無しさん (ワッチョイ ab95-lmxD)
垢版 |
2018/11/03(土) 14:45:26.63ID:3f9xsIAr0
>>894
上でも書かれてるけどそういう疑問を持ったら実行してvar_dump

スクリプト言語はそうやって簡単に実行して結果が見れるのがメリットなんだから、
もし今それができないなら環境構築から見直さないとものにならないよ
あと上の人もだけどPHPというよりはSQLが分かってない
勉強の仕方が間違ってる
0897デフォルトの名無しさん (ワッチョイ 5b80-Q1ft)
垢版 |
2018/11/03(土) 15:52:27.60ID:rSl2Ac3O0
コレは解説のサンプルコード書いてるヤツが頭ワルイわ
$countを$$colum_valuesとか別の名前にするべき
countと直接一切関係ない

$stmt->fetch()は行の列を全部とってくるのは分かるヤツがみれば
コード書いたアホがなにをやりたいかなんとなく分かる

きっとなウンコphpのウンコライブラリ使うと
辞書の連想配列にカラムの値が格納される仕様になってるのは分かる

コレでわかる

$$column_values=$stmt->fetch(PDO::FETCH_ASSOC);
if($$column_values['COUNT(id)']>0){

↓低学歴知恵遅れが書いた解説コードはペケ
$count=$stmt->fetch(PDO::FETCH_ASSOC);
if($count['COUNT(id)']>0){
0898デフォルトの名無しさん (ワッチョイ 5b80-Q1ft)
垢版 |
2018/11/03(土) 15:57:47.32ID:rSl2Ac3O0
$$2個は$1個だからな
気にしなくていい
0899デフォルトの名無しさん (ワッチョイ 769f-4Mp1)
垢版 |
2018/11/04(日) 11:12:58.45ID:XAVCAs+90
PHP 7.2の初歩的な質問をさせてください。
下記のようにコンストラクタの戻り値を宣言すると __construct() cannot declare a return type エラーになります。

__construct( ): void { }

コンストラクタは何も型宣言をしてはいけないということでしょうか?
0902デフォルトの名無しさん (ワッチョイ 3e9f-Nr8X)
垢版 |
2018/11/04(日) 21:17:19.38ID:hVqxhauo0
コンストラクタの機能は100%インスタンスの生成を成功することなので仮に失敗もあるならbool値のみ、でも言語の機能としてインスタンスの生成を失敗したら使い物にならないので100%インスタンスの生成を成功する言語のはずだから戻り値は必要ない
0910デフォルトの名無しさん (ワッチョイ c7e9-zV7r)
垢版 |
2018/11/05(月) 10:31:34.96ID:dcr0NBob0
>>908
たぶん何も考えてないんだろw

>>909
その発想はなかったわw

>>897
PHPerは何でも配列にしたがる癖があるのが困り物だが
配列にしてわけが分からなくなるなら
変数名の付け方をもっと工夫すりゃいいのにってのは思う
配列には$rowArrとか$row_arrとか付けるようにするとかさ

前の方にも書いたが配列として取得しなくても
fetchColumnでスカラー型として取得する方法も知っておくべきだと思うし

$arr['COUNT(id)']みたいにSQLの集計関数の結果をそのままキーとして使わずに
COUNT(id) AS cntみたいにエイリアス使って
$arr['cnt']ってする癖をつけておくべきだと俺は思うけどな
0915デフォルトの名無しさん (ワッチョイ 364b-/Yns)
垢版 |
2018/11/06(火) 17:19:57.17ID:z3LzXL080
laravelがrailsと比べて優れているところ教えて下さい
0917デフォルトの名無しさん (ワッチョイ 364b-/Yns)
垢版 |
2018/11/06(火) 17:57:07.05ID:z3LzXL080
>>916
言語の質ではなくフレームワークの質を聞いてるんです。
0918デフォルトの名無しさん (ワッチョイ 364b-/Yns)
垢版 |
2018/11/06(火) 17:57:40.53ID:z3LzXL080
あと開発効率とか学習コストとか
0920デフォルトの名無しさん (ワッチョイ 364b-/Yns)
垢版 |
2018/11/06(火) 18:09:43.95ID:z3LzXL080
>>919
プログラミング初心者なので一番知りたいのは学習コストで、どちらが学習コスト低いですか?やはり日本語情報の多いRailsの方が有利でしょうか?わかりやすさの面ではどちらでしょうか?もう1つ聴きたいのですが将来性はどちらに方があるでしょうか?長文すいません。
0921デフォルトの名無しさん (ワッチョイ 63b3-zV7r)
垢版 |
2018/11/06(火) 18:20:05.67ID:YBa3NmNt0
書いてんじゃん。どっちも変わらん。要件次第。前提次第。

XXと〇〇、どっちが優れてますか系の質問するやつにまともなエンジニアはいないんだよ。
要件整理して、前提確認して、比較軸作って、ドキュメント読んで、必要なら検証するのがエンジニア。
手が動かないなら向いてない。
0924デフォルトの名無しさん (ワッチョイ a35b-d84H)
垢版 |
2018/11/06(火) 19:30:36.24ID:S+SbxixY0
ものすごく感覚的な話で申し訳ないけど
Railsは出た当時は画期的だったけど、他のフレームワークがRailsの良いところをどんどん取り込んでいったので優位性がなくなっていってるイメージが強いかな

あとこんな事書くとRuby使いの人が怒るだろうけど
どこかの海外フォーラムで最近、死に向く言語ランキング上位にrubyが入ってたっけ
ソースを探したんだけど、どこだったかど忘れして探しきれなかった
申し訳ない

かといってこれから先はPHP?って言われると答えはNoだけど(スレのみんなごめん)
今から勉強始めるなら、個人的には色んな意味でPythonをおすすめするかな

Pythonっていうと機械学習や深層学習のイメージが強いと思うけど、
WEBフレームワークもどんどん進化してるし、
スクレイピングライブラリなんかも超高性能なのが出てきてるし

手っ取り早く結果を出すだけならまだまだPHPの方がかなり楽だけどね
0929デフォルトの名無しさん (ワッチョイ 4e80-mY15)
垢版 |
2018/11/07(水) 01:04:09.41ID:+978RLDn0
バグらない、Ruby >> Python, JavaScript >> PHP、よくバグル

PHP の本は、デザイン主体だろ。
プログラミングの本は、ほとんどない

ゲームエンジン・フレームワークの巨人、掌田津耶乃の本も、初めて出たばっかり。
Node.js超入門、2017
Python Django 超入門、2018

Rails は既に、何十冊も出ている。
この2冊が最短

たのしいRuby 第5版、2016
改訂4版 基礎 Ruby on Rails、黒田努・佐藤和人、2018/9/7

他に、無料のRails チュートリアルがある。
これの10日ぐらいの解説講座もあるらしい

YouTube に、Rails の動画もある。
フリーエンジニアになる人は、Rails が多い

Pythonは、ラズパイ・AI・機械学習・統計処理とか、普通のウェブページではない。
サーバーサイドは、node.js

Railsでも、HTML, CSS, JavaScript(JS), jQuery は必須だから、
プログラミングやテスト工程をマスターするには、Rubyがよい

Railsの前に、Sinatra をいじくりまわして、ウェブページの仕組みを学ぶのがよい。
Nokogiri, Selenium WebDriver で、スクレイピングするのも勉強になる

Rubyで学んだことは、そっくり、JS で使えるから、JSで学ぶよりも効率的。
Rubyの方が、他の言語よりも可読性が高く、バグらないから!
0935デフォルトの名無しさん (ワッチョイ db9f-cu2J)
垢版 |
2018/11/08(木) 02:10:30.38ID:xe/8BT4B0
相性は別に良くないと思うよ。
フレームワーク次第じゃない?

そういう話なら既存のOSSなSNSをインストールするべきと思う。
OpenPNEやWordPressのプラグイン等など…
0936デフォルトの名無しさん (ワッチョイ 2bb8-orkQ)
垢版 |
2018/11/08(木) 05:00:41.38ID:OUyHbsHB0
プログラム言語やツールは物を作る道具や手段であってできるものに変わりはない
HTMLのようなGUIを作る場合はエディタが出来栄えを左右することもあるだろう
ただPHPでやることはバックエンドの目に見えない地味な場所であって
頑張って書くようなコードでもなければ体感速度もサーバのスペックが大きく物を言う
そんなところで良し悪しを熱く語ってるやつはたいていアホで出来ない子
つられやすい話題につられるのもアホで出来ない子
0937デフォルトの名無しさん (ドコグロ MM6d-xkqI)
垢版 |
2018/11/08(木) 06:27:27.64ID:WetMyQ75M
HTMLやCSS出来なくても
WordPress使えば誰でも子供でも
ホームページが!
それもタダで無料で!
WordPressはPHPで構成されてます人気もあります
でも問題ないわけではないです!
子供より若い園児向きには Flat-File CMSを
データベース不要でPHPで動きます!
0939デフォルトの名無しさん (ワッチョイ db17-ZE27)
垢版 |
2018/11/08(木) 23:31:20.72ID:bTylvWCo0
>>933
初心者でも簡単にapacheのモジュールとしてインストールして動かせるって意味では相性いいと思うよ

>>936も言ってるように
プログラミング言語というのはあくまで手段であって目的によって使い分けるものなので
これは絶対こう絶対違うって書き方してる人のことはスルーしとこう

webアプリといえばperlかc言語のcgiみたいな感じだった昔とは違って今は色んな選択肢がある
phpはその内の1つってだけ

phpのいいところは学習コストの低さかな
脳死でさっと結果を出したい時はphpみたいに何かに特化してる言語はとにかく楽

最近10年以上前にperlで書かれたcgiを触る機会があったけど
たったこれだけの事するのに何でこんなにあれこれ書かないといけないんだ…って萎えまくった(perlは文字列処理が得意だけどウェブに特化してるわけじゃないから仕方ない)

php以外にも色んな言語に触れてた方がいいとは思うけど
ウェブアプリを作ることを目的とした初学者が選ぶ言語としてはまだまだ第一選択肢となり得る言語だよ
0941デフォルトの名無しさん (スププ Sdb3-lurq)
垢版 |
2018/11/08(木) 23:40:19.74ID:QE0GgM25d
>>939がいいことを言った

プログラミング言語には自分との相性みたいなのもあるからな
色んなものを試してみて1番自分に馴染みそうなのを選ぶのもいい
とにかく0か1かでしか物事を語れないプログラマ脳のいうことは鵜呑みにしちゃだめだ
0942デフォルトの名無しさん (ワッチョイ 2b81-ki2E)
垢版 |
2018/11/09(金) 00:06:22.11ID:gcFuq4sF0
perlは、同じ事するのでも人によって色々アプローチが違ってて
それはそれで面白いんだけどね
perlをとっつきにくくさせているのは変数の宣言と使い方じゃないかな
書いた人を呪いたくなる事があった
0943デフォルトの名無しさん (ワッチョイ db17-ZE27)
垢版 |
2018/11/09(金) 00:20:55.59ID:9LljJNk30
>>942
TIMTOWTDIがperlの設計思想だしね

>書いた人を呪いたくなる事があった
あるある過ぎて泣ける

perlはその自由度のせいで可読性が損なわれやすい(もちろん書き方の問題)けどそういう言語は最近は不人気だね

正規表現使ってワンライナーでさくっと何かしたい時とかやっぱperlはいいなって思う事もあるけど
あんまりやり過ぎると5時間後の自分にすら読めなくなるという…
0945デフォルトの名無しさん (ワッチョイ db17-ZE27)
垢版 |
2018/11/09(金) 00:49:31.00ID:9LljJNk30
>>944
だね
昔は趣味のスポーツカーが流行ったけど今は使い勝手や燃費重視のコンパクトカーや軽が流行るのと同じで
pythonは悪くいえば遊び心はないけど可読性と再利用性の高さは強力な武器だよ
流行るわけだ

プログラミング言語には作者の性格が色濃く現れてるから面白いよね

php作者の名言集
https://anond.hatelabo.jp/touch/20100427231539
ディスる時によく使われるけど俺はそんなphpも好きだ
0949デフォルトの名無しさん (スププ Sdb3-lurq)
垢版 |
2018/11/09(金) 01:42:41.18ID:jyPZVHOtd
一気読みしてしまったけどめちゃくちゃ面白かった
サンクス
俺もPHPをもっと好きになれた気がするww

そしてPHPにもgotoがあることを知って驚愕
まあ使う必要はないとだろうけど
わざわざあとから付け足したみたいだが必要だったのだろうか
0950デフォルトの名無しさん (ワッチョイ b9e9-YP9l)
垢版 |
2018/11/09(金) 10:05:10.34ID:lA/zS5Cl0
ラスマスさんインタビュー
http://gihyo.jp/news/interview/2010/rasmus
ここでは自分のことを利己的と表現してるが
現実主義・合理主義者なんだよな

アホのいうことは相手にせず適当にスルーしてるから
>>945みたいな感じになるとw

> 言語は開発者が考えているほど重要ではありません。
> 重要なのはどのような製品が必要とされているのかではないでしょうか。
> 必要とされている製品をいかに速く作り,かつ簡単に維持するかが重要です。
> エンドユーザは,どの言語で書かれているか?なんて気にしていません。

このスレの誰かさんに100回声に出して読めといいたいw
0951デフォルトの名無しさん (ワッチョイ b9e9-YP9l)
垢版 |
2018/11/09(金) 10:08:54.85ID:lA/zS5Cl0
>>949
少し上の方にあったglobalの話と似たようなもので
使わなくて済むなら使わない方がいいって感じのもんだな
他の言語にもgotoはあるけど使ったことないや

あ、basicやったことないの?なんていうおっさんは相手にしてませんので
(書いとかないと相手にするのがめんどくさいw)
0953デフォルトの名無しさん (ワッチョイ 93ab-ki2E)
垢版 |
2018/11/09(金) 13:22:28.59ID:aQf6YGTQ0
すみません、よろしくお願いします。

function readLines(string $path){
$i=0;
$file=fopen($path,'rb') or die('ファイルが見つかりません');
while($line=fgets($file,1024)){
yield $line;
}
fclose($file);
}

$gen=readLines('sample.txt');//***
foreach($gen as $line){
print $line.'<br>';
}
?>
読みだす対象ファイルは10行あります。

***の部分なのですが、$genで関数readLine()を1度呼び出して
対象ファイルから一行読みだしているように思えるのですが、
実際には、対象ファイルの全行を読みだしています。
$genで全行(10行)格納できているのは、どんな働きがあってのことなのでしょうか?
0956デフォルトの名無しさん (ワッチョイ b9e9-YP9l)
垢版 |
2018/11/09(金) 14:03:26.71ID:lA/zS5Cl0
>>953
while ($line=fgets($file,1024)) { }
がループ処理だって事も分からないのはやばいぞ
もう少し頑張れw

このコードはだめだな
while($line=fgets($file,1024))
これだと 0 だけとか改行だけの行があったらそこで処理が止まる

同じように書くなら
while (($line = fgets($file, 1024)) !== false) { }
こう書かないと駄目

PHPerはよく if ($hoge = fuge()) みたいな書き方をするけど
分かってる上で手抜きでそう書くなら別にいいが
分かってないならそんな書き方はやめるべき
0957デフォルトの名無しさん (ワッチョイ d374-39Ij)
垢版 |
2018/11/09(金) 14:08:17.39ID:9S1HIFQT0
ジェネレータ使ってるから一見何してるか分かりにくいように見えるかもね
とはいえ便利だし1行ずつ読めば難しくない

ifの条件文中で代入するのはむしろCでよく見た
0959デフォルトの名無しさん (ワッチョイ b9e9-YP9l)
垢版 |
2018/11/09(金) 15:37:24.13ID:lA/zS5Cl0
>>957
swiftとかpythonだとこういう書き方はできないからね(代入式が値を返さない)
そのおかげでヨーダ記法みたいなヘンテコリンな書き方をしなくてもミスが防げるんだけど
一長一短だしこの書き方を全否定してるわけじゃないってことで

perlのワンライナーが気持ちいいってのもよく分かるが
人が書いたものは見たくないというのもよく分かるw
0962デフォルトの名無しさん (ワッチョイ 5b4b-YrFS)
垢版 |
2018/11/09(金) 16:59:43.84ID:aAkZVDrn0
PHPは大っ嫌いだけどLaravelは好き
0963デフォルトの名無しさん (ワッチョイ 5b4b-YrFS)
垢版 |
2018/11/09(金) 17:13:56.97ID:aAkZVDrn0
セミコロン消えろ
0967デフォルトの名無しさん (ワッチョイ 93ab-ki2E)
垢版 |
2018/11/10(土) 13:09:23.21ID:w8ozGR5u0
>>966
ありがとうございます。変数に関数を入れられるのですね。
書き換えられた方はテキストの別のページに載ってるのと似ているので理解できました。
すっきりしました。ありがとうございました。
0969デフォルトの名無しさん (ワッチョイ 93ab-ki2E)
垢版 |
2018/11/10(土) 17:57:23.60ID:w8ozGR5u0
>>968
ありがとうございます。
各yieldの前後や、関数の呼び出し元に
print文でどこを実行しているのかを表示させるようにして確認しました。
yield fromを混ぜ込んだ文も、同様に処理するようにしたら
ずいぶん理解できるようになりました。

皆様、ありがとうございます。
0970デフォルトの名無しさん (ワッチョイ f380-9/Uq)
垢版 |
2018/11/10(土) 22:20:51.20ID:16GnFLu/0
$gen=readLine('sample,text'); 
これで代入されてるのは関数じゃなくてジェネレータ関数が返す反復可能なオブジェクト(への参照)かな
ジェネレーター関数を呼び出したのをvar_dumpするとこんな感じだわ
object(Generator)#1 (0) {}
0971デフォルトの名無しさん (ワッチョイ 5b4b-YrFS)
垢版 |
2018/11/11(日) 16:39:55.95ID:kuiXddTN0
Laravelのログイン処理をゼロから解説してる学習リソースありますか?
0977デフォルトの名無しさん (ワッチョイ e3ab-zhOP)
垢版 |
2018/11/24(土) 16:02:54.40ID:iAypOYs00
よろしくお願いします。

for($i=1;print"{$i}<br>",$i<6;$i++);
for($i=1;$i<6,print"{$i}<br>";$i++);

前者は、1〜6までをプリントしますが、後者は無限にプリントされてしまいます。i++が6を超えてしまうのはなぜなのでしょうか?
0981デフォルトの名無しさん (ワッチョイ 6fef-zhOP)
垢版 |
2018/11/25(日) 09:04:25.92ID:dabdOdKd0
>>978
ありがとうございます。
判定がtrueになり続けてしまうということなのですね。

もう一つ質問があります。

class A{
private $B;

public function __construcr($C){
$this->B=$C;
}

というコードなのですが、classAのフィールドで変数$Bを宣言して
関数のコンストラクタの$thisで、変数$Bに引数を代入してますが
この時、変数Bの$が取れているのはどういう仕様なのでしょうか?
0984デフォルトの名無しさん (ワッチョイ e3ab-zhOP)
垢版 |
2018/11/26(月) 18:28:25.99ID:vghby52J0
$db=getDb();
$opDB=$db->prepare('SELECT * FROM sample WHERE id=?');
$opDB->bindValue(1,$_GET['id'] ?:1);

このコードから質問お願いします。
2行目の id=? は、ワイルドカードのようなものですか?
3行目のbindValueの一つ目のパラメータの1は、何を指しているのでしょうか?
0987デフォルトの名無しさん (ワッチョイ 73e9-Kv/S)
垢版 |
2018/11/27(火) 14:57:55.52ID:aBLKPQ100
>>984
>>986
SELECT * FROM sample WHERE id=?
というSQLの中で使われている「?」はプリペアドステートメントというもの
http://php.net/manual/ja/pdo.prepared-statements.php

?だと理解し難いなら名前付き(例えば今回なら :id とか)にした方が理解しやすいと思う


$hoge = $_GET['id'] ?: 1;

はエルビス演算子という三項演算子を省略した書き方
可読性が悪いのであんまり使わない方が良いと思う

・同じ事を三項演算子で書くなら
$hoge = ($_GET['id']) ? $_GET['id'] : 1;

・同じ事をif文で書くなら
if ($_GET['id']) {
  $hoge = $_GET['id'];
} else {
  $hoge = 1;
}

だが、このケースでは、こんな書き方をしてはいけない。
(続く)
0988デフォルトの名無しさん (ワッチョイ 73e9-Kv/S)
垢版 |
2018/11/27(火) 14:59:13.82ID:aBLKPQ100
(続き)
$_GET['id']が定義されていない事を考慮した正しい書き方は

・PHP7以降ならNULL合体演算子を使って
$hoge = $_GET['id'] ?? 1;

・↑が分かり難いなら
$hoge = (isset($_GET['id'])) ? $_GET['id'] : 1;

・↑でも分かり難いなら
if (isset($_GET['id'])) {
$hoge = $_GET['id'];
} else {
$hoge = 1;
}

このケースでエルビス演算子をこんな使い方するような糞コードは、あんまり参考にしない方がいい
0989デフォルトの名無しさん (ワッチョイ 73e9-Kv/S)
垢版 |
2018/11/27(火) 15:06:26.62ID:aBLKPQ100
>>977も読んだが、エルビス演算子の使い方といい
いったい何を参考にしてこんなコードを書いてるんだろうか

もし本を参考にしてるなら焼き捨てた方がいいレベルで酷い

クイズ的に質問してるなら面白いけどw
0990デフォルトの名無しさん (ワッチョイ c39e-qSu8)
垢版 |
2018/11/27(火) 16:49:32.78ID:BR30Kh7X0
演算子の説明だけだとシンプルで理解しやすいけど実用性ではクソ
実用性重視の説明だと本来説明したいもの以外の説明で蛇足だらけで
紙面使いすぎでクソ
というジレンマなんやろ
0991デフォルトの名無しさん (ワッチョイ 6fe7-sCK9)
垢版 |
2018/11/27(火) 18:08:09.22ID:MA03kwvb0
$input = trim(fgets(STDIN));
while($input)

echo $input;

これってwhileの式のところでは$inputの中が空かって判断してるの?そういう機能がついてるのか?
0992デフォルトの名無しさん (ワッチョイ cf80-fhi1)
垢版 |
2018/11/27(火) 18:52:40.99ID:DSo9/Qg/0
>>984
SELECT * FROM sample WHERE id=?

id=? は、placement。
? の所に、値が入る

SQL injection 対策

例えば、単純な文字列をつなげて、問い合わせると、
? が「1; DROP TABLE 何々」とか、クラッカーに入力されると、

「SELECT * FROM sample WHERE id=1; DROP TABLE 何々」のように、
; で、危険なSQL文をつなげてくる

placement で、SQL文をつなげられないようにしている
0994デフォルトの名無しさん (ワッチョイ 6fe7-sCK9)
垢版 |
2018/11/27(火) 19:53:06.64ID:MA03kwvb0
while分の中では$inputをbool型にして判定してるわけか?
0995デフォルトの名無しさん (ワッチョイ ffd2-f63u)
垢版 |
2018/11/27(火) 22:02:27.91ID:7ygBETe/0
空文字がFalse判定されることを利用して
空行入力で終わるようにしてるんだろうけど
ゼロとかもFalse判定されて終わっちゃうんじゃないか
試してないけど
0997デフォルトの名無しさん (ワッチョイ e3ab-zhOP)
垢版 |
2018/11/28(水) 12:52:07.66ID:yr9LfNgh0
>>987
ありがとうございました。プレイスホルダなのですね。
prepareでSQLを用いて、プレイスホルダを使うとき、
SQL文の中で、左から数えたプレイスホルダの順番を、
bindValueのカッコ内の数値で指定してバインドする、ということもわかりました。
?:や??:の解説もありがとうございました。

>>989
独習phpというテキストを使っています。

>>992
ありがとうございます。
prepareステートメントが悪意ある入力に対策しているとテキストにも書いてありました。

皆様、ありがとうとざいました。
今のテキストを読み終えたら、もう少しテキストを吟味して、違うテキストを探してみようと思います。
0999デフォルトの名無しさん (ワッチョイ 73e9-Kv/S)
垢版 |
2018/11/28(水) 15:17:38.93ID:zpzfEtE+0
すまんw 大嘘書いたww
>>998のコードだと trim() によって string型にキャストされるから永久ループするわwww

while (($input = fgets(STDIN)) !== false) {
echo $input;
}

が正しいが場合によっては

while (($input = trim(fgets(STDIN))) !== '') {
echo $input;
}

が期待した動作なのかもしれない
10011001
垢版 |
Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 342日 23時間 9分 23秒
10021002
垢版 |
Over 1000Thread
5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────

会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。

▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/

▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
レス数が1000を超えています。これ以上書き込みはできません。

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