X



【PHP】下らねぇ質問はここに 9
レス数が1000を超えています。これ以上書き込みはできません。
0111デフォルトの名無しさん (ワッチョイ fa6c-mRzn)2018/03/23(金) 17:19:12.88ID:D5VJHy400
スレ違いだったらすみません
ネットの中の情報ってどこかに保存されてて僕はそれを引き出して見てるんですか?もしそうだったらどこに保存されてるんですか?
曖昧な質問すみません
0112デフォルトの名無しさん (ワッチョイ c7e9-fzSc)2018/03/23(金) 18:27:48.68ID:R9lXxg8x0
いわゆるサーバー
とりあえず仮想環境でサーバー作ってみて
慣れたらどこか適当なところでVPSでも借りて好きにやってみればいい
サーバーを触れないPHPerなんて話にならん
0114デフォルトの名無しさん (ワッチョイ 1ad2-QTIh)2018/03/23(金) 23:25:31.14ID:2DgZhzwv0
linux知識は必須だ
せっかくこんなスレにくるくらいだから
LAMPシステムの概要読んだり
apacheでhttpサーバー立ち上げたり
php.ini読むことから始めてみては?

それやった上でのhello world は感慨深いものがあるぞ
0115デフォルトの名無しさん (ワッチョイ c7c9-3KaU)2018/03/24(土) 10:28:57.13ID:xLRXLjE70
>php.ini読むことから始めてみては?

ええぇぇぇ…
0118デフォルトの名無しさん (ワッチョイ 4ee4-NuQV)2018/03/24(土) 16:46:27.21ID:1+DXMJWu0
LinuxっていってもデスクトップはWindowsと変わらないけど
いわゆるガチのサーバ機はデスクトップ環境でやらないので
WindowsならDOSプロンプトで遊ぶところからがいいのでは
0119デフォルトの名無しさん (ワッチョイ 4e81-zkh5)2018/03/24(土) 16:53:10.58ID:qYWJwKPe0
>>107が希望しているアップローダーは、どこに置いて実現したいのかな

自分の手元にあるWindowsPCにPHPをインストールし、
PHPのスクリプトをそこに置いて
コマンドラインでPHPを起動してスクリプトを実行する感じ?

それとも、どこかのレンタルサーバーを借りて、そこにPHPスクリプトを置いて
WindowsPCはレンタルサーバーのHTMLを使い、ブラウザでフォームを表示させ、
そのフォームに手元のファイル名を指定し、ボタンを押してアップロードする?
0120デフォルトの名無しさん (ワッチョイ dbf7-gBYh)2018/03/27(火) 23:04:42.45ID:yJnfuO2v0
諸事情でララベルしなきゃいけないんだがSQLが俺は全く出来ないていう状態なんだが
ララベルとSQLはそれぞれ並行してやった方がええかな?分担してやった方がええかな?
0121デフォルトの名無しさん (ワッチョイ c7e9-fzSc)2018/03/28(水) 10:37:13.14ID:r6P5fkin0
Laravelみたいなフレームワークは
普通はSQL文を直接書かずにクエリビルダーを通すんだが
何らかのフレームワークは使った事あるのかね

その質問レベルで分業できるのか疑問
0122デフォルトの名無しさん (ワッチョイ d1f7-f7sf)2018/03/29(木) 00:50:06.39ID:6VZpXAAL0
>>121
mvcとやらはvueでルーターでビュー振り分けたり変数の値を直接表示したりで慣れてるけど
フレームワークにあるテストやらなんやらの沢山の設定ファイルは苦手やな
今前知識活かしてルーター探してララベルでビューの切り替えした辺り

どの道ララベルとMySQLを覚えなきゃいかんのだが、今は最優先でララベルで二、三個モノを作らなきゃいかん
ガチれば一夜漬けでSQLデータの出し入れ位は出来るようなるかな?
0125デフォルトの名無しさん (ワッチョイ 93ad-uaFS)2018/04/02(月) 13:28:31.23ID:1ZK7Ts6x0
SQL周りの質問します
$sql = 'select count(bang) from tbk';
$stmt = $dbh->prepare($sql);
$stmt->execute();
こう書いてcountでデータベースの行数を取得してその値をPHP側で受け取るにはどういうコード書けばいいですか?

$count = $stmt->fetch(PDO::FETCH_ASSOC);
こう書いて$countで受け取ってvar_dumpで調べたら連想配列なんですが$count['bang']としても値を得れません

データベースのカウント後を受け取るにはどう書けばいいんでしょうか?
0131デフォルトの名無しさん (ワッチョイ 93ad-uaFS)2018/04/03(火) 17:32:37.82ID:8BbSY5bZ0
>>130
ありがとうございます
理解できてませんでした
$count['count'] のほうではできませんでしたが
$sql = 'select count(bang) as bang from tbk';のほうでcount['bang']としたら通りました。
難しいですね・・・
0132デフォルトの名無しさん (ワッチョイ c69e-6Vn5)2018/04/07(土) 05:27:46.16ID:dDGDds4R0
include_once って読み込むファイルを http://・・・ で指定する方法は
無いの?
0137デフォルトの名無しさん (ワッチョイ c69e-6Vn5)2018/04/08(日) 10:00:09.99ID:8Q7B3DS20
>>135
>HTTPとか正気の沙汰ではない
なんでよ?
0139デフォルトの名無しさん (ワッチョイ c69e-6Vn5)2018/04/08(日) 14:40:24.98ID:8Q7B3DS20
>>138
>改竄されたら任意コード実行に直結やぞ
それは今回の質問の件と関係なく
改竄された時点で危険なんじゃないの?
0142デフォルトの名無しさん (ワッチョイ a17b-6Vn5)2018/04/09(月) 04:13:29.94ID:/CzDp9JH0
文法を一通り習って、Laravelなるフレームワークが主流と聞いて調べてみたのですが、自分の知ってるPHPとだいぶ違って面食らいました。
これはオブジェクト指向プログラミングなるものを習えばわかるようになるのでしょうか?
公式のドキュメント読むとルーティングとかコントローラーとか解説なしで当然のごとく出てきて激鬱です。
何をすればLaravelが使えるようになるか書籍・ウェブサイト等、指針を示して頂きたいです。
0143デフォルトの名無しさん (ワッチョイ 86b8-QncF)2018/04/09(月) 05:52:33.60ID:pdsBUMq90
フレームワークはコーディングにルールや制約を持たせることで
簡単に構築できるようになってるので
自分の知らないことや言葉に惑わされず
とりあえず書かれてる通りに従って真似してみればいいだけだよ
サンプルを何個かやってくうちにどんなもんかわかるだろうし
0145デフォルトの名無しさん (ワッチョイ 4ad2-kuJV)2018/04/09(月) 08:24:42.06ID:xFzcbrnT0
フレームワークまじでわからん
内容や構造を理解、構築しようとするのではなく、ひたすら「手法」を学べ
ってアドバイスされたがそれでもわからん、ってかこのアドバイス本当にあってんの?俺の頭がイカれてるのかと思い始めてきた
0148デフォルトの名無しさん (ワッチョイ a17b-6Vn5)2018/04/10(火) 04:47:34.57ID:RNPBEaXU0
>>143-144
ありがとうございます
とりまやってみます
0149デフォルトの名無しさん (オッペケ Sred-6wO2)2018/04/11(水) 02:01:00.17ID:mBTJQa8Ur
48都道府県名が格納されてる配列があるとして
例えば東京都が格納されてる配列番号を知りたいときはpreg_grepとprint_rを使った結果を確認すればいいみたいですが
検索して結果の配列番号だけを変数に格納するにはどうすればいいのでしょうか?
0153デフォルトの名無しさん (アウアウウー Sae7-ycE0)2018/04/12(木) 07:20:46.89ID:fdYFp2d/a
Ruby on Rails 5.2正式版発表。Active Storageによるクラウドストレージ対応、Redisでのキャッシュ対応など
http://www.publickey1.jp/blog/18/ruby_on_rails_52active_storageredis.html
>Active Storageは、Amazon S3やGoogle Cloud Storage、Microsoft Azure Storageのような
>クラウドドストレージに対してファイルをアップロードし、
>それらのファイルのActive Recoredオブジェクトへの添付を容易にする機能です。
>また、ミラーリング機能によって複数のクラウドストレージのあいだでファイルを同期することもできます。
>これによって高い冗長性などを実現可能です。

これは良さそうですがPHPにこういうのありますか?
0155デフォルトの名無しさん (アウーイモ MMe7-s85b)2018/04/17(火) 16:17:10.16ID:LPB+OBLfM
>>153
Symfony
+
Doctrine
+
VichUploaderBundle
+
Flysystem
FlysystemのAWS S3用アダプタ

でDBへの書き込みと画像のS3へのアップロードなら出来る
冗長化は無いが

サムネイル作成が必要ならLiipImagineBundleで

VichUploaderはPropelやMongoDBにも対応している
FlysystemはSymfony以外も対応している
0156デフォルトの名無しさん (ワッチョイ 8aeb-Mp6C)2018/04/20(金) 20:18:51.62ID:JYYXAoL40
グラフ画像を作って保存したいんですけど簡単なライブラリみたいなのってありませんか?
グラフを表示するhtmlやCSSをはくとかはあるみたいなんですけど
グラフ画像を作るのはさがしてもみあたらなくて…
0157デフォルトの名無しさん (ワッチョイ 8aeb-Mp6C)2018/04/21(土) 02:18:17.85ID:GJF07GGo0
レンタルサーバーを借りてphpの勉強はじめたんですけど

/ドメイン名/public_html/ 以下に php ファイルをおくとエラーが出たときに
/home/アカウント名/サーバー名/public_html/... 
のファイルでエラーがありましたってでちゃうんですけど
アカウント名をみえなくすることってできませんか?

関数全部に@つけるのも微妙だし
何かの拍子でアカウント名みえちゃうのいやなんですよね
0160デフォルトの名無しさん (ワッチョイ 8aeb-Mp6C)2018/04/21(土) 23:07:08.13ID:GJF07GGo0
>>158,159
できましたありがとうございます

Xサーバーなんですけどphp.iniがおいてあったのでそのなかの
display_errors = Off
にしてみました

あとはじめから
log_errors = On
log_errors_max_len = 1024
ってなってるんですけどこれどこに表示されるんでしょうか

エラーがまったく表示されないのもそれはそれで困るかも…
0162デフォルトの名無しさん (ワッチョイ 8aeb-Mp6C)2018/04/22(日) 02:56:08.02ID:pMZeO9w/0
これは設定ファイルとかじゃなくてphpのなかに書く関数なんですか?
自分で関数も戻り値とかをハンドリングしてエラーをハンドリングして使う感じなんでしょうか?
エラーメッセージも自分で作らないといけないみたいだし…
そもそも構文エラーとかの場合これどうやってハンドリングすればいいんでしょう

デフォルトのエラーメッセージに絶対パスを表示させたくないだけなんですけど結構大変なんですね…
0163デフォルトの名無しさん (ワッチョイ 1ae4-OGjV)2018/04/22(日) 06:44:08.35ID:ebslMH0y0
phpで設定を行う方法は主に3つ
・サーバ側の設定ファイル(php.iniやhttpd.conf)に直接書く方法
・phpスクリプトにini_set関数を使って書く方法
・専用の関数が用意されてればphpスクリプトに専用関数を使って書く方法

phpの設定がどこで行えるかは下記の通り
http://php.net/manual/ja/configuration.changes.modes.php

今回のerror_logは
http://php.net/manual/ja/errorfunc.configuration.php

PHP_INI_ALLなのでphp.iniに直接書くことも出来るし

ini_set関数を使ってphpスクリプトに書くことも出来る
http://php.net/manual/ja/function.ini-set.php

また同名の関数が用意されてるのでそれを使ってphpスクリプトに書くことも出来る
http://php.net/manual/ja/function.error-log.php
0164デフォルトの名無しさん (ワッチョイ 8aeb-Mp6C)2018/04/22(日) 11:55:07.76ID:pMZeO9w/0
うまくいかない…

エラーも表示されないし
ログファイルに書きこめない
パーミションもあけてるんですけど

せっかく丁寧に回答もらったのに申し訳ないんですがもうパス表示されたままであきらめます
phpのコードの勉強がしたいのにサーバーの設定だけで土日つぶれそう…
0169デフォルトの名無しさん (ワッチョイ 93ad-c97c)2018/04/26(木) 02:51:42.22ID:4mqP60uz0
c言語から勉強初めてjava→html/css→javascript→php→mysql→jqueryときてwordpressの本読んだけど
ウェブやるならこれだけでいい気がして今までの時間が凄く無駄に思えてきた・・・
phpとかできたほうが有利な点を教えてください・・・
モチベーションが・・・
0170デフォルトの名無しさん (ワッチョイ 2be4-iMQz)2018/04/26(木) 11:41:18.07ID:vpKHU58Q0
何かウェブサービスをやりたいとか
スマホでゲームとか作ってユーザのデータを集約させるバックグラウンドが必要とかでなく
ただWebサイトを構築したいってだけなら別にWPでいいんじゃない?
モチベが欲しいならWPなしでサイト構築するためにPHP学ぶでもいいのでは?
PHPerは無駄が好きなのでJava脳で車輪の再発明嫌いな人はPHP向いてないかもね
0171デフォルトの名無しさん (ワッチョイ 2be8-HzgJ)2018/04/27(金) 20:59:04.65ID:4+bpK0C+0
同じサーバー内で、自プログラムが置かれているディレクトリとは異なるディレクトリにある
ファイルを読み込みたいのですが、そのディレクトリはBASIC認証をかけています。
この場合、phpプログラムから認証を突破するための手続きはどうすればいいでしょうか?
IDとパスワードはもちろん分かっている状態です。
0173デフォルトの名無しさん (ワッチョイ 2be4-iMQz)2018/04/28(土) 00:04:33.20ID:g3LZUwEj0
httpでやる必要がないならbasic認証関係ないんで
ローカルのファイルのパスがちゃんと指定できてれば読める
もしhttp経由で読み込む必要があるのなら
http://php.net/manual/ja/function.file-get-contents.php
ここの例4のとこ参考にして
Authorizationヘッダをつけてリクエスト送ればいい
"Authorization: Basic {$token}\r\n"
$tokenはbase64_encode('id:password');
0174デフォルトの名無しさん (ワッチョイ 2be8-HzgJ)2018/04/28(土) 02:34:18.68ID:PnxQ5sIY0
>>172-173
思い違いと動作確認でもミスがあり、何か処理が必要と思い込んでいました。
すっぱり整理してやり直しをし、無事動作することが確認できました。

どうもありがとうございました。
0175デフォルトの名無しさん (ワッチョイ 89f7-c97c)2018/04/30(月) 08:30:19.19ID:HJ8JxjLj0
ここで聞いていいのかわからないんですが、フレームワークの利用に関する質問です
5年以上前に誰かが作ったWebサイトを運用していく必要があるのですが、フレームワークはEthnaを利用しています
当時サイトを作った人や、その後追加改修を行った人は、もういない状態です。

Ethnaの使用感としては5年以上前に開発が止まっていて、ドキュメントも未完成。
これに学習コストを払うのは嫌だなあというのが本音です。人不足で新しい人も入ってきているのですが、覚えてもらうのが申し訳ないレベルです。

ただ、フレームワークを変えて書き直すとなると、ほぼサイトをリニューアルすることになります。
そもそもフレームワーク関係なく、設計書もなく、中身がブラックボックス化しているサイトなので、リニューアルは何度か検討しています。
が、やはり時間がかかってしまうので、なおしたいことがあればその都度プログラムを読んで、修正しています。

なので、「現状のままであるリスク」を「リニューアルするコスト」がこえないと、なかなか上を説得することが難しいという状態です。
このWebサイトは、年数億円を売り上げており、何かの拍子に動かないというのは許されない状況です。


前提としてはここまでで、ここからが質問なのですが
5年以上前に作ったサイトの、5年以上前のフレームワークをそのまま扱っていくリスクというのは、どう見積もれば良いものでしょうか?
古いシステムをそのまま使い続けてる現場に入ったなら、どのように考えますか?
一応進言すれば、現状は変えられる可能性が高いのですが、判断に悩んでいます。
0176デフォルトの名無しさん (ワッチョイ 2be4-iMQz)2018/04/30(月) 15:33:03.01ID:jgwIHR0D0
動かなくなったらまずいといいつつ、
よくわからないものをいじって、なんとなく動いてるってことだよね?
その現状に危機感を抱くべきでは?
個人がフォークしたEthnamという後継プロジェクトはあるみたいだけど、
5.4で動くなんてのをウリにしてるあたり、
オリジナルはサポート切れのPHPバージョンを使ってるのだろうけど、
それだけで十分置き換え理由になるのでは?
0181デフォルトの名無しさん (ワッチョイ 272b-XJxX)2018/05/04(金) 18:08:52.10ID:ZORKHZxp0
FastCGIで動かす時にアプリケーション初期化のコードは最初の1回だけ実行したい
というより予め実行済みの状態でリクエストを待機させたいんだけど、どうすればいいの?
0182デフォルトの名無しさん (ワッチョイ 0beb-pRpi)2018/05/05(土) 02:10:31.22ID:i6PqpWH90
ファイルを file_get_contens() や file_pet_contents で読み書きしたいんですが
ロックってどうすればいいんでしょうか
flockにファイルディスクリプタが必要みたいなんですけど
それを使って与密会するわけじゃないのでRD_ONLYで開いてもいいんでしょうか

$fp = fopen($filename, 'r');
if (flock($fp, LOCK_EX)) {
file_get_contents($filename);

file_putt_contents($filename);
flock($fp, LOCK_UN)
}

でうごきますか?

ロックファイルはわける必要がありますか?
ロックがぶつかるケースをデバッグできないので大丈夫なのかどうかがよくわかりません
0183デフォルトの名無しさん (ワッチョイ bfad-pRpi)2018/05/05(土) 02:45:58.52ID:r2NCQwWJ0
てす
0185デフォルトの名無しさん (ワッチョイ 1fe9-bmQX)2018/05/05(土) 15:07:11.64ID:XYMHadsA0
スマホ向けに下記をhtmlのheadに書いた場合は、スマホの横サイズいっぱいで折り返し表示されますが、
<meta name="viewport" content="width=device-width,initial-scale=1" />

php埋め込みhtml(拡張子はphp)に上記を書いても折り返してくれません。

他に何かお作法が必要でしょうか?
0186デフォルトの名無しさん (ワッチョイ 1ee4-jSIs)2018/05/05(土) 17:46:10.93ID:ai+BlqsN0
文字コード周りに問題がなければ
PHPで出力したHTMLのソースを表示してみてオリジナルのHTMLと対比してみては?
エスケープミスでタグが閉じられてない状態で出力されてるとかそんなレベルかもしれない
サーバ側で関連ヘッダーを出力しちゃってる可能性もあるので
理解出来るならブラウザの開発者ツール使ってHTTPヘッダの中身チェックするといい

なんにせよ再現できる全体ソースが出ないことには答えようがない
0187デフォルトの名無しさん (ワッチョイ 1fe9-bmQX)2018/05/05(土) 18:17:23.60ID:XYMHadsA0
>>186
原因が分かりました。
変数に改行(\n)付きの長いメッセージを入れてあり、それを表示するのにpreタグ
で囲っていたのが原因でした。

preタグを使わずに改行付きの長いメッセージを表示する方法を考えてみたいと思います。

どうもありがとうございました。
0189デフォルトの名無しさん (ワッチョイ 0beb-pRpi)2018/05/05(土) 21:35:48.44ID:i6PqpWH90
>>184
やっぱりロックとる場合はロックをとったファイルディスクリプタに
fread, fwriteで読み書きする必要があるんですね
コード参考にさせていただきます
ありがとうございました
0190デフォルトの名無しさん (ワッチョイ 277f-U8nf)2018/05/06(日) 01:38:07.25ID:qVg6wQW80
プログラムの基本を教えてください。

一つのphpファイルが300行をオーバーしてしまったから、汎用性はないけど一まとまりの機能があって、色んな所から呼び出す処理を別のphpファイルにしてインクルードで呼び出す、
という形で小分けにしていこうと思ってますが、そんな風にバラバラにしてしまってもいいんでしょうか?
0191デフォルトの名無しさん (ワッチョイ 1ee4-jSIs)2018/05/06(日) 06:09:15.48ID:P7v+SOn20
その考えの行きつく先にオブジェクト指向があるのでオブジェクト指向入門するといいかな
方向性としてはあってるのでとりあえずは思った通りにやってみては?
あと行数に関していえば1万行クラスのソースコードはざらなので(半分はコメントだったりするけど)
長い行数になったときのソースコードの管理の仕方をIDE使って覚えていくといいよ
0194デフォルトの名無しさん (JP 0Hb6-a7mP)2018/05/08(火) 19:09:31.56ID:GHttMtN9H
関数の呼び出しがあっているのかわかりません

ボタンでCreateとLikesの処理をわけたいんですが、うまく実行できません

(ボタンの処理は別のPHPファイルに書いてます)

create_qaとUpdate_likes_whenbuttonClickは、単体であれば実行ができているのはわかっているのですが、振り分けるためのbutton_Click関数に入れた途端動かなくなります
returnで、振り分けそのものができていることは確認しました(IDを表示することができたので、問題がないかと思っています)
何か間違っていそうか分かる人教えて下さい



public function button_click(Request $request,$session_id){
if(isset($_POST["create"])){
$this->create_qa($request,$session_id);
}
else if(isset($_POST["likes"])){
//return $session_id; これはできてる
$this->update_likes_whenbuttonClick($request,$session_id);
}
}
0196デフォルトの名無しさん (ササクッテロラ Sp23-a7mP)2018/05/08(火) 21:06:53.22ID:XEaTgBIDp
>>195

errorが全くでなくて、むしろ真っ白なページが表示されます・・・
関数単体だときちんとreturn viewしたページに飛んで、処理もできているのに、こっちだとできないです
0198デフォルトの名無しさん (ササクッテロラ Sp23-a7mP)2018/05/08(火) 21:22:37.44ID:XEaTgBIDp
>>197
return でelse以降に入ると数値が表示させるようにして確認しましたが、今のところ流れてはなさそうです
分岐を一切作らずに
$this->create_qa($request,$session_id);
だけ入れてもおかしなことになるので、
$this->〜〜〜っていう表記が間違っているような気がするのですが何がおかしいのか全く分からず・・・
0200デフォルトの名無しさん (ワッチョイ 46d2-a7mP)2018/05/08(火) 21:46:05.47ID:ZabFV5ph0
>>199

引数なし、return0をするだけの別の関数を作って、同じように呼び出しをしてみましたがだめでした、
やっぱりthis〜の行が何かしら影響を及ぼしてるようです・・・
0202デフォルトの名無しさん (ワッチョイ 46d2-a7mP)2018/05/08(火) 22:27:49.92ID:ZabFV5ph0
>>201
ためしにエラー出力してみましたが、全く何もでてないようで・・・
0203デフォルトの名無しさん (ワッチョイ 46d2-a7mP)2018/05/08(火) 22:40:25.33ID:ZabFV5ph0
>>194
ですが解決しました!
分岐文の内部でreturn viewができてないのが原因でした
すみませんお騒がせしました
0205デフォルトの名無しさん (ワッチョイ c5eb-bFqk)2018/05/16(水) 06:54:52.26ID:U06fQouG0
文字列全体を正規表現判定するのってどうすればいいんですか?

入力に不正文字がないかチェックしたいんですけど

pregmatch('/[0-9a-zA-Z]+/', $input)

だと一部にマッチしてもtrueになっちゃうので
文字列全体で数字アルファベットしか使われてないことを確認したいです
0208デフォルトの名無しさん (ワッチョイ c5eb-bFqk)2018/05/16(水) 08:02:56.78ID:U06fQouG0
あとPHPの配列についてききたいんですけど

a[] = 2;
a[] = 4;

や array(2,4) でつくった場合Cやjavaの配列と同じくメモリ上にvalueだけがならんで
a[1] でアクセスした場合アドレス計算でアクセスされるんでしょうか?

それとも自動的に連想配列になって '1' っていう key を検索するんでしょうか?

メモリにははいるけどキャッシュにははいらないそこそこ大きなテーブルデータを扱ってるので気になりました
0209デフォルトの名無しさん (ワッチョイ 89fa-9WOx)2018/05/23(水) 19:27:20.90ID:Au5e7VGg0
僕の知り合いの知り合いができたパソコン一台でお金持ちになれるやり方
役に立つかもしれません
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』

Q3682
0212デフォルトの名無しさん (アウアウカー Sa5d-2Zx2)2018/05/31(木) 15:22:43.39ID:TDljpn4Za
参考書を1ページずつjpgに自炊スキャンしましたが
今あるjpgの奇数ページと偶数ページをくっつけて見開きページの画像にして保存したいと考えました、phpの画像処理ライブラリは
GD
DmImage
ImageMagick
等があるみたいですが
手軽にできるのはどれですか?
0215デフォルトの名無しさん (ワッチョイ 3315-WL+L)2018/06/07(木) 16:51:32.87ID:XK0BD38x0
初心者です。。

Class hoge {
public static function aaa (){
echo __CLASS__;
}
public function __construct (){
static::aaa();
}
}
Class piyo extends hoge {}
$var = new piyo();
//hoge
みたいなコンストラクタの中でstaticつけて関数呼び出すのってどういう意味が有るのですか…

static::hogehoge($this);みたいなのがコンストラクタのなかにあるのって
どういうふうに動いてるのかわからないです。
0217デフォルトの名無しさん (ワッチョイ 3315-WL+L)2018/06/07(木) 17:37:17.26ID:XK0BD38x0
>>216
遅延的束縛がわからんのです。
コンストラクタの中でやってるからpiyoにならないのかな
static $piyo;
public function __construct(){
static::hoge($this);
}
public static function hoge($this){
return static::piyo = $this;
}

みたいなのときとかもうわけわからん
0218デフォルトの名無しさん (ワッチョイ 3315-WL+L)2018/06/07(木) 17:38:09.15ID:XK0BD38x0
static::$piyoですね
0220デフォルトの名無しさん (ワッチョイ 3315-psTc)2018/06/07(木) 19:00:51.08ID:XK0BD38x0
>>219
書いてある?
あんまりインスタンス化して使ってるような例ないぽいけど
0221デフォルトの名無しさん (ワッチョイ 3315-psTc)2018/06/07(木) 23:45:31.41ID:XK0BD38x0
>>217はClass Hogeとして
$aho = new Hoge()とするとインスタンス化した時にHogeの静的プロパティも初期化されるってことだよね。staticとparentがチェーンしてると訳わからんくなる
0222デフォルトの名無しさん (ワッチョイ 3315-psTc)2018/06/07(木) 23:53:42.93ID:XK0BD38x0
Hogeを継承したpooクラスがあったらpooクラスのstaticプロパティも初期化されるけどselfとどう違うのかわからん。。
0223デフォルトの名無しさん (ワッチョイ eb96-LHz9)2018/06/10(日) 00:33:54.58ID:4f+KYqKd0
トランプゲームみたいな感じで写真の入ってるカードを並べ替えさせるゲームを作ろうと思っています。

カードはドラッグして移動可能。
所定の□の近くにくるとカードは□に収まる

こういったことを簡単に実現できるおすすめの言語があったら教えてください。
使ったことのある言語はCとC#だけです。
0224デフォルトの名無しさん (ワッチョイ 2176-QX4S)2018/06/10(日) 01:34:40.62ID:EYgmWGdc0
なぜPHPのスレで聞くのか?
てか、ハブリッシュするプラットフォームに依存する話しだから
それを言わないとだれも答えられない
ロジックだけ実装するならどんな言語でも作れる
0226デフォルトの名無しさん (ワッチョイ 92eb-m0US)2018/06/20(水) 05:45:13.05ID:gdouP6aq0
フォームで受け取ったデータをそのままディレクトリ名にしたいんですけど
ディレクトリ名に使われて危険な文字をはじく関数みたいなのってないですか?
. と / だけはじけば大丈夫なのかな
0230デフォルトの名無しさん (ワッチョイ 46d5-MIFy)2018/07/02(月) 20:37:50.95ID:WBjy4TX+0
a.php が吐くHTMLに、b.php を差し込むSSIタグを埋めたところ、挙動がおかしい。
サーバは apache、PHPの出力に対してもSSIが効くように設定してある。
どうおかしいって、b.php 出力がSSIタグの位置からズレた場所に挿入され、しかもなんか断片化してる。
a.php と b.php の出力が混ざった感じというか、a.php と b.php が非同期に並行して動いてる感じというか。
a.php や b.php と同等の内容の a.html と b.html を用意し、a.html に b.php や b.html をSSIするケースや、a.php に b.html をSSIするケースでは問題無く、a.php に b.php をSSIするケースだけでおかしい。
原因の心当たりって無い?
0233デフォルトの名無しさん (ワッチョイ 46d5-MIFy)2018/07/02(月) 21:25:25.66ID:WBjy4TX+0
>>231
> * SSIはWebサーバの機能(スレ違い)
あぁ、それもそうだ。おっしゃる通り。
残りについては、そういう都合があるとしか言えない。
SSI もまじ。<!--#include ... のやつな。
いろんなもの SSI してるのよ。
0236デフォルトの名無しさん (ワッチョイ ade9-PNnE)2018/07/04(水) 02:05:21.42ID:D7cT+Okb0
更新履歴〜
みたいなページでSSI使ってたことはある
これはこれで便利やしトリッキー言うほどじゃないだろ

まあ今時としては、SSIみたいな挙動をするphpコード書くだけになるか
0237デフォルトの名無しさん (ワッチョイ 1167-HDH5)2018/07/04(水) 12:23:51.44ID:0wBgZClm0
public function Hoge($hoge)
{
return function () use ($hoge) {
return $this->test_func($hoge);
};
}

こういうのって意味有りますか?
クロージャのとこに$hogeを持ってきても実際には繋がりはないように見えるんすけど
$var = Hoge($hoge)
//$var = function($bar){ return $this->test_func($bar);}
0238デフォルトの名無しさん (ワッチョイ 1167-HDH5)2018/07/04(水) 12:24:35.05ID:0wBgZClm0
クロージャの$hogeと最初の引数の$hogeの繋がり
0239デフォルトの名無しさん (ワッチョイ 1167-HDH5)2018/07/04(水) 12:32:44.93ID:0wBgZClm0
クロージャになっても最初に渡された$hogeは生きてるんやな。。
知らなかった
0240デフォルトの名無しさん (ワッチョイ 9de9-VCRa)2018/07/04(水) 13:58:24.36ID:CT674Y3Q0
>>236
PHPを使ってるんだったら
SSIの<!--#include...に該当する処理は
取り込み対象をPHPのコードとして評価したいならinclude、
文字列として評価したいならfile_get_contets()するだけの
1行で済む話

SSIはサーバー環境依存だし今どきSSIが有効になってる古いサーバーを
これから先も使い続けるのか?という疑問もある
0242デフォルトの名無しさん (ワッチョイ 027f-7be3)2018/07/04(水) 16:51:50.97ID:n4h9hTEh0
このゲーム面白すぎてずっとやってる
https://goo.gl/2UVYAA
0243デフォルトの名無しさん (ワッチョイ 45fa-2e90)2018/07/04(水) 21:46:16.37ID:gFgZc5FG0
CTP
0246デフォルトの名無しさん (ワッチョイ bf9f-wasm)2018/07/08(日) 17:52:24.96ID:V6T9ucEP0
PHPでerrnoを取得することはできますか?

やりたいことは、ファイルまたはディレクトリの有無を確認しつつ、
falseだった場合は、ENOENTなのかEACCESなのか知りたいのです。

file_existsとis_readableを組み合わせるしかないですか?
0247230 (ワッチョイ bfd5-Jsga)2018/07/08(日) 20:26:44.98ID:X1ZcCvQ00
>>230
せっかくなので分かったことを報告。
SSI にせよ PHP の virtual にせよ apache のサブリクエストが発行される場合、元リクエストとサブリクエストのPHPのインスタンスは同一のものが使い回されるらしく、グローバル変数なんかは共通されるらしい。
恐らく define や include、出力バッファなんかも共有されてると思う。
それでいろいろ思いもよらない挙動を示すっぽい。

ということが分かったので、適当に回避した。
apacheの設定によるところもあるかもしれないけど、そこまで検証してない。
0251デフォルトの名無しさん (ワッチョイ 6723-mSbI)2018/07/09(月) 16:51:13.69ID:snrXTXq90
よく分かってないので、スマソ。
モジュール版PHP5.3環境で動かしていたのを、

@ モジュール版5.6環境に移行させる場合
A CGI版5.3環境に移行させる場合

@、Aともにソースコードの書き換えは必須なの?
また、簡単なのはどっち?
0252デフォルトの名無しさん (ワッチョイ 6723-N6TJ)2018/07/09(月) 17:11:56.44ID:P+nm3UzA0
それだけじゃなんとも言えんよ…
エスパーでも答えられんと思われ
上の話と同じでグローバル変数とか使ってるとかなら書き換える必要あるかもね
使われてるモジュールやライブラリが対応してるかどうかもあるし
同じ環境を用意して実際に動かしてテストするしかないと思う
0253デフォルトの名無しさん (ワッチョイ a781-UVFs)2018/07/09(月) 17:22:57.00ID:YsFJMBw40
5.6でサポートやめたり、推奨からは図したりしたものがあれば
良くて警告、悪くて動作せずとなる
やってみないと分からないから、試験環境を作って試すのが最善
0254デフォルトの名無しさん (ワッチョイ e7e9-sule)2018/07/09(月) 18:02:41.46ID:p8VxNcvv0
5.2.X⇒7.2.Xに以降した環境がいくつもあるけど
PHPコンパイルで何度かこけた(コアに取り込まれて使えなくなってるオプションがあった)ぐらいで
コードを手直しをした記憶が全くないなぁ

逆にどんな書き方をしてたら動かなくなるのやら…
0255デフォルトの名無しさん (スププ Sd7f-w8Cw)2018/07/09(月) 18:09:44.47ID:U1ydYGt1d
開発を
error_reporting=E_ALL(PHP5.4以前ならE_ALL|E_STRICT)
でしてなかったりすると環境移行でエラー出まくったりするかもな
初心者はまずエラーを正しく出すところから学習しないとな
0256デフォルトの名無しさん (ワッチョイ bfd5-Jsga)2018/07/10(火) 02:26:11.43ID:wjyVwwQl0
>>248
同じインスタンスで動くならそりゃそうだろって話だけど、virtual はともかく SSI が同じインスタンスで動かすのが当たり前かと言われれば微妙じゃね?
$_GET みたいなスーパーグローバルとかどうなっちゃうんだよって問題もあるし、実際出力バッファはまぜこぜになって使い物にならないわけだし。
わざわざ SSI でやるのなんて、他所の誰かが作った全く関係ないものを自分の処理と隔離してページ上に取り込みたいなんてケースだったりするわけで、隔離できないならあんまり意味が無いというか。
そういうものだということが分かってりゃやり方考えるからいいんだけど、なんでそうする?っていう仕様だと思う。
PHPそのものの問題じゃないであろうこと引っ張ってすまないけど。
0257デフォルトの名無しさん (ワッチョイ 07b8-Ww/5)2018/07/10(火) 12:06:55.09ID:0tZHlanb0
前バージョンと同じように、必要なモジュール・ライブラリがロードされていて、
基本的な環境に差異がないのを前提とすれば、
あとは廃止変更された機能や関数が影響を受ける。
なので動かない場所が出てきて、書き換えが必要になる場合はあるが、
それはコードの1%にも満たないぐらいの量のはずだから、
大規模なアプリケーションでも書き換えに1日はかからないだろう。
0258デフォルトの名無しさん (ワッチョイ e7e9-sule)2018/07/10(火) 16:01:47.12ID:Whumi4Kc0
>>256
> 他所の誰かが作った全く関係ないものを自分の処理と隔離してページ上に取り込みたい
SSIを使う理由になってないしSSI以外の知識がないだけ
サーバーの知識が多少ある人間なら今この時代にSSIを使うのがいかに馬鹿げているかすぐ分かる
0259デフォルトの名無しさん (スププ Sd7f-w8Cw)2018/07/10(火) 16:24:53.40ID:XJrRuzBNd
SSIもhtaccessも無駄にサーバーに負荷をかけわ、遅いわ、セキュリティリスクの管理もしにくわで何1つ良いことないから無効にしろと大昔に教わったな
結構最近でもSSIインジェクションで資生堂の小会社がが情報漏えい起こしてたけど資生堂みたいな大きなところが未だにSSI使ってることに驚いた
includeしたいだけなら他にいくらでも代替案あるのにさ
0261デフォルトの名無しさん (スププ Sd7f-cREG)2018/07/10(火) 16:43:24.55ID:b+YyloMOd
素人だからよく分かんないんだけど
ssiでincludeするのとhtmlで<iframe> or phpでfile_get_contents するのは何が違うの?
ssiを使う理由って何?
0262デフォルトの名無しさん (オイコラミネオ MM9b-Jsga)2018/07/10(火) 17:02:12.57ID:MaGnmy4dM
>>261
旧来からのスタイルを踏襲しているとか、
SSIはPHP知らなくてもHTML(と言えるか微妙だが)分かれば使えるってのもあるかもね。
サイト全部がPHPじゃないし、みんながみんなPHP使えるわけじゃないからな。
PHP使うなら PHP の include しても file_get_contents しても、適用できるなら得られる結果は一緒でしょ。
0263デフォルトの名無しさん (ワッチョイ 475b-MSAO)2018/07/10(火) 18:15:06.82ID:lHg/M16h0
>>261
使う理由は特にない

1.SSI/#include file|virtual="path"はpathの中身をそのまま取り込んだ結果を取り込んだ場所で出力する
2.<iframe src="url|local_path">は対象の出力をフレームとして取り込む
3.file_get_contents('url')はurlの出力を取り込む
4.file_get_contents('local_path')はlocal_pathの中身をそのまま取り込む
5.includeは対象を「PHPのコードとして評価する」

1 ≒ 2 ≒ 3 ≠ 4 ≠ 5
だと思っとけばいい
includeとfile_get_contents()が等価なんてのは大嘘なので信じないよう

SSIの#includeに該当する処理は、そのほとんどが<iframe>+αで片付く程度の低レベルの事しかしてないね
繰り返すけど今更使う必要性は全くない過去の遺物です
0265デフォルトの名無しさん (オイコラミネオ MM9b-Jsga)2018/07/10(火) 18:46:59.92ID:MaGnmy4dM
include と file_get_contents が等価だなんて言ってないぞ。
別のコンテンツを差し込む方法として適用できるケースがあると言ってるだけで。
例えばページのヘッダやらフッタやらを別ファイルに浮かせたとして、それが include できるなら include で、file_get_contents できるなら file_get_contents で差し込めるだろ。
0267デフォルトの名無しさん (オイコラミネオ MM9b-Jsga)2018/07/10(火) 19:08:22.00ID:MaGnmy4dM
>>266
例えばただのHTMLファイルがあったとして、それを include した場合と file_get_contents 使って出力した場合とで得られる出力結果にどんな違いがあるの?
もちろんただのHTMLじゃないものを扱おうとすれば、得たい出力を得るために適用できないこともあるよ。
>>263 の PHPのコードとして評価するというのも語弊があると思うよ。
パースはテキストとして始まるわけだから。
0269デフォルトの名無しさん (ワッチョイ 475b-MSAO)2018/07/10(火) 19:25:00.51ID:lHg/M16h0
・index.php
------------
<?php
$a = 'hoge';

var_dump(file_get_contents('./test.php'));
/*
test
<?php
echo $a;
*/

var_dump(file_get_contents('http://localhost/test.php'));
/*
test
Notice: Undefined variable: a in...($aが定義されていないというエラー)
*/

include './test.php';
/*
test
hoge
*/
------------

この違いを理解してるならこれ以上俺から言う事は何もない
0270デフォルトの名無しさん (ワッチョイ 2ad0-kMcx)2018/07/15(日) 17:40:24.73ID:0ke1s5C30
PHPを勉強している者ですが、
PHPを使ってお問い合わせフォームを作る際に気を付けるべきセキュリティ対策についてのアドバイスをください。

メールの送信までの流れは「入力」→「確認」→「送信」となりました。

入力・・・入力される文字の制限(メールアドレスの欄なら使用可能な文字以外でエラー)
確認・・・出力の前にhtmlspicialchars()を使い無害化
送信・・・?

参考になるサイトや書籍のアドバイスなどもいただけると嬉しいです。
よろしくお願いします。
0271デフォルトの名無しさん (ワッチョイ 5ed5-uzwL)2018/07/16(月) 06:50:46.92ID:S86tTn750
>>270
とりあえず思い当たることをざっくり。
・SQLインジェクション対策
・セッションハイジャック対策
・HTTPSの確認
・管理者のうっかり対策
・スパムメール基地化の防止

前2つはこの言葉と PHP で検索すれば出てくると思うけど、SQLインジェクション対策にはPDOのプリペアドステートメントとバインドを使うとか、セッションハイジャック対策は個人的には問い合わせフォーム程度ならセッションなんて使わずhiddenでたらい回しにするかな。
HTTPSの確認は、HTTPでアクセスされた場合に受け付けないとかHTTPSにリダイレクトするとかの施策だけど、シンプルなサーバ構成なら $_SERVER['HTTPS'] が 'on' かどうかを見ればいいものの、webサーバの前段に何か(AWS の ELBとか)入れてるとそれじゃダメなこともある。
開発前に HTTP と HTTPS でのアクセス時の違いを phpinfo を diff 取って確認しておくのがいいんじゃないかな。
管理者のうっかり対策ってのは、問い合わせ内容に悪意あるURLなんかが書かれていてもうっかり踏まないようにするとか。
悪意あるURLじゃなくても、管理画面なんかからリンクを直接踏めると referer とかで管理画面のURLが漏れることがある。
スパムメール基地ってのは、もし受け付け時にユーザーにメールを送信する場合、他人のメールアドレスを入力されるとそっちへメールが飛ぶことを悪用されること。
文面に悪意あるURLを書かれると、それを踏まされちゃうかもしれない。
対策はいろいろあると思うけど完璧な対策は難しく、どこかを妥協することになると思う(メール送るのやめるとか)。
0272270 (ワッチョイ 2ad0-kMcx)2018/07/16(月) 14:33:10.45ID:HXh/vnsc0
>>270です。

>>271さん
詳細なレスをくださり、ありがとうございます。
今回いただいたアドバイスを元にセキュリティを強化していきます。
本当にありがとうございました。
0274270 (ワッチョイ 2ad0-kMcx)2018/07/16(月) 15:53:45.47ID:HXh/vnsc0
>>270です。

>>273さん
書籍情報ありがとうございます。
独学なのでありがたいです。
0275デフォルトの名無しさん (ワッチョイ c576-4qPP)2018/07/16(月) 16:20:11.41ID:+45YTdov0
>>274
ごめん、名前間違えてた

徳丸 浩
体系的に学ぶ 安全なWebアプリケーションの作り方 第2版 脆弱性が生まれる原理と対策の実践

PHPがサンプルで使われてるので参考になると思うよ
0276270 (ワッチョイ 2ad0-kMcx)2018/07/16(月) 19:00:14.50ID:HXh/vnsc0
>>270です。

>>275さん
徳丸 浩ですね 了解しました。
重ね重ねありがとうございました。
0277デフォルトの名無しさん (ワッチョイ ead2-1dqK)2018/07/16(月) 21:18:00.33ID:UPJrQacm0
書きっぷりから本人の気がするな
0280デフォルトの名無しさん (ワッチョイ 5ed5-uzwL)2018/07/16(月) 22:09:49.12ID:S86tTn750
>>279
それはライブラリでどうこうできる問題じゃなさそうだよね。
個別にトレードオフ見て仕様化してる。
送信されることを緩和するならボットチェック(と言うのか知らんが)入れるとか、本文の悪用防止ならメールに入力本文は転記しないとか入力本文中のURLを伏せて転記するとか、
あるいはそもそもメール送らないとか、悪用元が分かってるならIPアドレスチェックして内部処理変えるとか。
本文転記のニーズは高いから難しいのよね。
0281デフォルトの名無しさん (ワッチョイ 89e9-Y8gp)2018/07/17(火) 15:39:21.70ID:7HO9UDJa0
自動投稿系のスパムはハニーポットしかけるのが楽

<input type="text" name="mail" value="">
みたいなよくあるname値をもたせたダミーの<input>タグをcssとかで非表示にして
GETやPOSTメソッドでnameの値が飛んできたらスパム扱いにするだけ

初心者でも簡単に実装できるのがメリット
0282デフォルトの名無しさん (ワッチョイ bfe9-ljVq)2018/07/24(火) 16:30:53.54ID:noMJmsz30
クラスAを継承したクラスA1、クラスA2を作りました
クラスA1ではB1、クラスA2ではB2クラスをuse Bx as Bとして読み込み
クラスAにクラスBを操作する処理を書けばクラスA1、A2に共通の処理を書かなくて済むかと思ったのですが、名前空間的にnew BとするとクラスAを基準としたパスで読み込もうとしてnot foundになってしまいます
親クラス側から子クラスで読み込む前提のクラスに対しての操作を書く方法はありますでしょうか?
0285デフォルトの名無しさん (ワッチョイ f2ab-53i4)2018/07/26(木) 12:53:46.16ID:kn/Cla8U0
少しマニアックな可能性はありますが
シーサーブログへの自作エディタを作成したいと思っています。
プルダウン方式で時刻を簡単に選んだり
その他を大分楽にすすめる事ができるのが目的です。

PHPでライブドアへの投稿ツールを少し作成してみたり
PHP、pythonあたりを少しだけ知っている、というのが
現状の自分かと分析していますが

ネットで少し検索してもシーサーブログへの投稿のためのプログラムは
PHPであまり引っかかりませんでした。
最終的には、タイトル変更、カテゴリ選択、時刻設定、定型文の挿入あたりの出来る
ツールを目指しているのですが、

スレッドのPHPとは離れますが
もし良いツールが出来るならPerl、Rubyなどもチャレンジしてみるしかないのか、
と思うのですが、

現状、攻めれそうな言語、もしくは方法を・・
本当にすみませんが、大まかなアドバイスでもいただけたら有難いです・・
よろしくお願いします。
0286デフォルトの名無しさん (ワッチョイ d3e9-tjON)2018/07/26(木) 14:21:12.96ID:YpwlC3d50
>>285
結局APIをAPIの仕様に沿って叩くだけなんだから
言語なんか別に何でもいい

SeesaaのAPIはXML-RPC互換らしいが
XML-RPCを採用しているPHP製CMSで有名なのはWordPress
だから情報は豊富にあるかと
0287デフォルトの名無しさん (ワッチョイ f2ab-53i4)2018/07/26(木) 14:36:09.87ID:kn/Cla8U0
>>286
有難うございます。なるほど、そういう事ですか…。

確かにWordPressのそういう解説はある程度あると思われますし、
まずそこを自分も作って、それをシーサー向きにカスタマイズ、
という方向にもっていってみるのが得策ですかね。
プログラム等々色々しっかり理解できていないので
例えば、テストのワードプレスに投稿がうまくいっても
それをシーサーに対応させる、その箇所でいかにも自分はつまずきそうですが…
やってみようと思います!ありがとうございました!
0288デフォルトの名無しさん (ワッチョイ d68a-tjON)2018/07/26(木) 19:50:32.44ID:3rgn08oe0
formからfileタイプでファイルを送信するとき、一緒にカスタムデータも渡したいんですが
phpでカスタムデータを取得するにはどうすればいいんでしょうか
0293デフォルトの名無しさん (ワッチョイ 16b8-/DSX)2018/07/28(土) 03:40:13.45ID:zAnhzC560
html5の属性にdata-がつくってやつ?
submitを動作のない通常のbuttonにしてjsでsubmitするようにして
submitの前にjsでdata-要素を探して中身を
hiddenフィールドに追加する処理書けば渡せる
onsubmit時にやってもいいけどjavascriptオフだと想定したデータを受け取れない
buttonにしてjsでsubmitすればjavascriptオフだとsubmit自体ができなくなるが
そっちのほうが開発者には都合がいい
0296デフォルトの名無しさん (ワッチョイ 4b81-53i4)2018/07/28(土) 21:36:21.75ID:aLrZyGnX0
質問内容がPHPに関してではないし
回答もjavascriptを使用してと言うことだし
Web製作板なら全般に渡って質疑しても良いけど
プログラム板に設置したPHPスレとしては
ちょっと違う感じを否めない
0300デフォルトの名無しさん (ワッチョイ 16b8-/DSX)2018/07/29(日) 09:07:26.00ID:6Xs8CgHh0
今どきレガシーIE使ってるのとJavaScript使えない環境なんて考慮する必要ある?
そういう人たちの考えを改めさせるためにも甘やかしてはだめだ
あと広告ブロッカーなど入れてる人間にはおかえりいただくのだ
0301デフォルトの名無しさん (ワッチョイ 1222-Hl5m)2018/07/31(火) 22:09:39.35ID:jEXf5efo0
IE11は新機能も追加されないのに
2025年10月までサポート続く
頭の固い奴がいつまでも使い続けそう
0303デフォルトの名無しさん (ワッチョイ 16b8-/DSX)2018/08/01(水) 07:58:48.60ID:Vw19BKKS0
>>301
現状まだIE11はいいんだけど
このまま取り残されるつもりなら害悪だね
ITリテラシーのないユーザーが悪いわけではないが

>>302
サーバサイドとクライアントサイドでは出来ることが違う
質問者のフォーム設計がクソであろうことは疑いの余地はないが

>>300で言いたかったことは
閲覧者様ありがとう!1人でも多くの閲覧者様に奴隷のように対応します
ではなくサイト開設者側が閲覧者を選んでもいいということだ
0310デフォルトの名無しさん (アウアウウー Sa43-53i4)2018/08/01(水) 23:56:12.68ID:leTOpWGGa
curl_setopt($ch, CURLOPT_SSL_CIPHER_LIST, 'ecdhe_ecdsa_aes_256_sha');
と同じ設定をiniファイルで設定できるかと
curl.ssl_cipher_list="ecdhe_ecdsa_aes_256_sha"
とcurl.iniに書いてみましたが、うまくいきませんでした
iniファイルで設定するのはやはり無理なのでしょうか?
0312デフォルトの名無しさん (アウアウウー Saa7-Xflc)2018/08/02(木) 00:10:24.86ID:ZUaPNP+za
そうですか
VPSで動かしているTinyTinyRSSで、HTTPSのスクレイピング時にエラーが出ていて
CURLOPT_SSL_CIPHER_LISTを設定すればいいということまでは分かったのですが
コードを書き換えたとしてもアップデートで上書きされてしまう可能性があるので
設定ファイルでデフォルト値を設定できないかと思ったのですが、残念です・・
ありがとうございました
0314デフォルトの名無しさん (アウアウウー Saa7-lVen)2018/08/02(木) 02:01:14.88ID:ZUaPNP+za
それだとcurl呼び出し部分のコードを結局書き換えないとですよね?
設定ファイルで設定したいと言ったのは
コードに手を加えずに挙動を変えたいという意味でした
目的じゃなくて手段です
0318デフォルトの名無しさん (ワッチョイ f39d-Eno9)2018/08/02(木) 14:47:11.29ID:mV4uuTxi0
curl直接使うよりguzzle通じて使った方が良いよね?
よっぽどシンプルなプログラムとかでも無い限り

AWS SDK for PHPでも内部で使ってた
0319デフォルトの名無しさん (ワッチョイ f3e9-0Uuo)2018/08/02(木) 15:22:19.78ID:VtR7nk5s0
手続き型の書き方しかできないcURL関数群をラッピングして
オブジェクト指向型のインターフェースを提供するライブラリは色々とあるから
実用的にはそっち使った方がいい(もちろん今ならguzzleが第一選択肢)

車輪の再発明をする必要はないが
guzzleみたいにガッツリじゃなくて
cURLのうすーいラッパークラスを作っとくと
ちゃちゃっと何かしたい時に便利ではある
0322デフォルトの名無しさん (ワッチョイ 635b-0PbX)2018/08/02(木) 16:04:41.08ID:j3ZbymyT0
ちょうどスクレイピングとかを勉強してる俺にはなんとタイムリーな話題

>>319
> cURLのうすーいラッパークラスを作っとくと
> ちゃちゃっと何かしたい時に便利ではある

もう少しkwsk
0323デフォルトの名無しさん (ワッチョイ f3e9-0Uuo)2018/08/02(木) 16:20:05.83ID:VtR7nk5s0
>>322
例えば、http://example.com/の出力結果を取りたいってだけなら
file_get_contents('http://example.com/');
だけでいいけど、もう少しだけ色々としたい時

例えば、POSTメソッドで「hage=fuge」を投げつつ
ユーザーエージェント「Mona」、リファラ「http://2ch.net/」にした時の
http://example.com/のステータスコードを取りたいなんて時

$status = Curl_Wrapper::getInstance()
           ->requestPost('hage', 'fuge')
           ->setUserAgent('Mona')
           ->setReferer('http://2ch.net/')
           ->getStatusCode('http://example.com/');

こんな風に書けるクラスを用意しとくと気持ちいいってだけの話
大した話じゃないから意味不明ならスルーでw

>>321
うん
0326デフォルトの名無しさん (ワッチョイ f3e9-0Uuo)2018/08/02(木) 16:52:37.54ID:VtR7nk5s0
>>324
$curl = new Curl_Wrapper;
$curl->setUserAgent();
$curl->setReferer();
$status = $curl->getStatusCode();

普通はこう書くけど面倒くさいから
Curl_Wrapperクラス内のメソッド(setUserAgentやsetReferer)で
Curl_Wrapper自身のインスタンス(PHPなら$this)をreturnする
そのメソッドを鎖のように繋ぐから「メソッドチェーン」って呼ばれる
「PHP メソッドチェーン」とかでググってみるといい

上手く使えばすっきり書けるけどデメリットもあるのでケース・バイ・ケースで
0328デフォルトの名無しさん (ワッチョイ cf8a-9e/1)2018/08/05(日) 11:19:39.90ID:EoLQ53rz0
質問です

/aaa.php
/bbb.php
/ccc.php
/ddd.php
... ばらばらに作って使うのと

/xxx.php?aaa
/xxx.php?bbb
/xxx.php?ccc
/xxx.php?ddd
... 一枚にまとめて使うのと
どっちがパフォーマンスいいでしょうか?
よろしくお願いします
0331デフォルトの名無しさん (ワッチョイ 6fd5-IwSV)2018/08/05(日) 13:40:30.63ID:Klpi4erd0
バラした方が各スクリプトのサイズが小さいなら、物理的な読み取りとパースの分速くはなるんじゃね。
でもそんな細かいことよりメンテ性のいい方を選んだ方がいいんじゃないかな。
0332デフォルトの名無しさん (ワッチョイ f3e9-0Uuo)2018/08/06(月) 10:30:49.64ID:933yDlcJ0
>>328
よく100万回ループ回した時の実行速度の差を比較したりする人がいるけど
ハッキリいってやるだけ時間の無駄
そんな事を気にするならそもそもPHPなんか使わない方がいい

webアプリのボトルネックというのは
大抵はDB周りだったりするわけで
そのボトルネックを正確に計測し解決する手段を身につける事が遥かに大事

というかそんな事を気にしてるって時点で
何かしらのフレームワークは使ってないんだろうけど
なぜ使わないの?
0333デフォルトの名無しさん (ワッチョイ cf8a-9e/1)2018/08/06(月) 11:23:57.83ID:zcUvwpke0
>>332
フレームワークとか最近知ったばかりでよくわからん初心者です
DBじゃなくてテキストファイルで処理するphpをああだこうだ弄って遊んでいて
ふと思い付きで質問してみました
0334デフォルトの名無しさん (ワッチョイ 6fd5-IwSV)2018/08/06(月) 12:20:51.12ID:ng9YxNhi0
PHPに関してフレームワーク使って良かったと思える場面て正直ほとんど無いな。
PHP自体がごった煮状態にしてまでいろいろできるようにしてある中で、フレームワークで実現しようとしている目標がいまいちわからん。
生産性にも得してるように思えないどころか、フレームワーク自体のメンテがだるい。
まあそれほどフレームワーク使ったわけでもなく、古くはSmarty、ちょっと前はCakePHP使ったくらいで、それも他所のベンダが作ったのを引き継いだくらいだから偏見に満ちてる可能性はある。
0335デフォルトの名無しさん (ワッチョイ f3e9-0Uuo)2018/08/06(月) 12:22:54.58ID:933yDlcJ0
>>333
そか
フレームワークに頼らずに作るのも
DBに頼らずテキストベースで読み書きするのも
とても良い経験にはなるから頑張って

ただ○万回ループした時の実行時間の差を気にするなんてのは
本当にただの無駄でしかないから
コードの見通しの良さとか管理のしやすさとか
そっちを最優先で

root.php?mode=aaa ⇒ mode/aaa.phpを読む
root.php?mode=bbb ⇒ mode/bbb.phpを読む
root.php?mode=ccc ⇒ mode/ccc.phpを読む

なんて作り方もある
今これがベストだと思って設計しても
どうせ1年後にはもっと良い設計が閃くさ
だから色々と試してみるといい
0336デフォルトの名無しさん (ワッチョイ f3e9-0Uuo)2018/08/06(月) 12:33:44.81ID:933yDlcJ0
>>334
大規模開発をした経験がないとそうなるかもね

PHPはとてもいい加減な言語なんで
”正しく”書くにはかなりの知識と経験が必要
ネット上のPHPコードの多くが糞なのを見てもよく分かる

だから特定の規則さえ覚えれば”正しく”書ける
フレームワークってのは大規模開発では必須になる

あとは生産性の問題やね
スクリプト言語なんてものはいかに短時間で簡単にものを生産するかが鍵なので
個人開発であっても何かしらのフレームワークは使え
ってのが俺の意見

俺々マイクロフレームワークでもいいからさ
0338デフォルトの名無しさん (スププ Sd1f-j3zu)2018/08/06(月) 12:48:26.08ID:UALza30Cd
ネット上のソースのカオスさはPHPとJavaScriptが抜きん出てるよな
本ですら平気で間違った事を書いてるから
初心者ならこれを読めって本がなかなかない

if ($_POST['foo'] == 'var')
こんなコードを見ると目眩がする

>>337
それはあるな
ただ今はLaravel使っとけば間違いはないんじゃないかと
0339デフォルトの名無しさん (ワッチョイ 6fd5-IwSV)2018/08/06(月) 12:48:56.87ID:ng9YxNhi0
>>336
フレームワークを使うにしても、それをどう使うかは結局設計して周知しないといけないわけで、その手間ってフレームワーク使わない場合とそう変わらなくない?
むしろフレームワークが足かせになってそこから外れる部分をトリッキーに遠回りに書くことになったりのデメリットの方が目についてくる感じだ。
工数削減は俺々ライブラリでやれるし、それを周知する手間も前述の周知に比べて多大なわけでもなく、必要ならライブラリを好き勝手に育てられるから、むしろ身軽で早いと思うがな。
この辺はとりわけ既にいろいろお膳立てされてるPHPならではというか。
大規模開発だとどんなメリットが効いてくると考えてるかについては興味あるけどね。
0340デフォルトの名無しさん (ワッチョイ f3e9-0Uuo)2018/08/06(月) 13:00:50.54ID:933yDlcJ0
>>338
フレームワークを使わずに
リクエストパラメータを変数に入れて比較してみましょう
って超初歩的な事でも

$foo = (string) filter_input(INPUT_POST, 'foo');
if ($foo === 'var') {}
と正しく書けてる本が何冊あることやら…

$foo = (isset($_POST['foo'])) ? $_POST['foo'] : NULL;
と書けてたらまだマシで酷いのになると

$foo = $_POST['foo'];
だからPHPはヤバすぎる…
0343デフォルトの名無しさん (ワッチョイ 6fd5-IwSV)2018/08/06(月) 13:21:13.75ID:ng9YxNhi0
>>340
強制的に string でキャストして情報落とすのが正しいと言われてもなって感じだし、
$foo = $_POST['foo']; がダメというのもそんなの条件次第だろって気もするし、
大事なのは画一的な書き方じゃなくてやり方を適切に選べることなんじゃないの?
0345デフォルトの名無しさん (ワッチョイ 6fd5-IwSV)2018/08/06(月) 13:33:40.11ID:ng9YxNhi0
>>344
そのケースなら isset 使ってる。
100万回ループのパフォーマンスなんて気にするなという話の後で言うのもアレだけど、isset の方が速いし短いから。
多重配列の時もそのまま書けるし。
0346デフォルトの名無しさん (ワッチョイ f3e9-0Uuo)2018/08/06(月) 13:37:32.22ID:933yDlcJ0
>>343
リクエストパラメータを(string)キャストしてるのは
PHPの仕様的に$_POST['foo']が配列になる事があるからだよ

だから>>344だけでは駄目で
少なくともis_string()を追加する必要がある

大垣さんとかPHP界隈のセキュリティで有名な人は言及してるけど
ここら辺まともに書けてる本を俺は見た記憶がない

で、フレームワークってのはこういうところもきちんとチェックしてる
だからフレームワークを使った方がいいよという話

>>341の言う通り使う側の問題なんだけど
知らなくても動いているように見えてしまうというのは罪な事だね
0347デフォルトの名無しさん (スププ Sd1f-j3zu)2018/08/06(月) 13:50:50.84ID:UALza30Cd
>>346も書いてるが
?foo[]=1&foo[][]=2&foo[][][]=3
の時の$_GETの中身を見れば$fooがスカラー型になると決めつけていたらだめだと分かるはず
頭の良い人がせっかくフレームワークってのを作ってくれてるんだから我々凡人はそっち使えばいい
だからPHPerって馬鹿にされんだよw
0348デフォルトの名無しさん (ワッチョイ f3e9-0Uuo)2018/08/06(月) 14:07:27.66ID:933yDlcJ0
>>347
応用パターンとしては

<input type="checkbox" name="foo[]" value="1">
<input type="checkbox" name="foo[]" value="2">
<input type="checkbox" name="foo[]" value="3">

というフォームがあった時に
$_GET['foo']が一次元配列になると決めつけてしまってるケース
$_GET['foo']がスカラー型にも二次元にも三次元にもなる可能性を考慮してないから
バリデーションなんかでエラーをだす残念コードがネット上にはたくさん転がってる

そういうのを初心者が真似してしまうのが問題なんだよね
0350デフォルトの名無しさん (ワッチョイ 6fd5-IwSV)2018/08/06(月) 14:21:43.09ID:ng9YxNhi0
>>346
最後については同意。

ただ細かい話、キャストの件は filter_input のオプション無しなら配列は取得されないんじゃないかと。
元々値があったのかどうかの判定が出来なくなるのもまた問題じゃないかね。
だからフレームワークにやってもらえばいいじゃんという立場だとは思うけどさ。

>>347
その程度のバリデーションライブラリも書けない凡人のために(ありものの)フレームワークがあるということであれば、やはりあまり縁の無い話かなと思えてくる。
隣のコンビニになら歩いて行けばいいのに、なぜ車を用意してナビまでセットする?みたいな。
フレームワークってのは、端的に言えば誰が書いても同じ書き方になる仕組みで細かいこと周知しなくてもそうなるから多人数で書いても認識が共有できる、という思想なのかと思ってたよ。
思想通りに実現されるならよさそうだが、現実はそうでもないなって感じてるけど。
PHPみたいにWebに特化してない他の言語なんかは、イチからやるよりはフレームワーク使うのが現実的だと思うし、
PHPでも俺々マイクロフレームワークの話であればその実態は必要ライブラリと雛型くらいのものだろうから、そういうのに異論は無いけどね。
0351デフォルトの名無しさん (ワッチョイ f3e9-0Uuo)2018/08/06(月) 14:46:52.11ID:933yDlcJ0
>>349
Filter関数は意外と浸透してないっぽい

$foo = filter_input(INPUT_POST, 'foo');

$foo = (isset($_POST['foo']) && is_string($_POST['foo'])) ? $_POST['foo'] : false;
と書くのとほぼ同じ意味になる

上の方が楽だよね
0353デフォルトの名無しさん (ワッチョイ f3e9-0Uuo)2018/08/06(月) 15:40:31.71ID:933yDlcJ0
>>352
PHP7からはもっと短く
$foo = $_POST['foo'] ?? false;
と書けたりもする

三項演算子は別に無理して使わなくていいけど
他の言語を経験してると$fooを初期化せずに

if (isset($_POST['foo'])) {
  $foo = $_POST['foo'];
} else {
  $foo = false;
}

と$fooをif〜elseの中に入れてしまうのはとても気持ち悪い
三項演算子を使わないなら自分はこう書くかな

$foo = false;
if (isset($_POST['foo'])) {
  $foo = $_POST['foo'];
}

細かい話なのであまり気にしないくてOK
0354デフォルトの名無しさん (ワッチョイ 635b-0PbX)2018/08/06(月) 15:58:25.55ID:Hk1kxuZq0
ifとelseの中に書くのはあまりよくないのか(´・ω・`)
全部こうやって書いてた。。。
理由が理解できないあほですまんけど次からはfilter_inputを使うから許して
0355デフォルトの名無しさん (スププ Sd1f-j3zu)2018/08/06(月) 16:05:18.97ID:UALza30Cd
if (条件A) {
$foo = 'a';
} elseif (条件B) {
$foo = 'b';
}
var_dump($foo);

条件AもBも満たさなかった時にエラーになるわな
まずはvar_dumpが参照できるレベルで$fooを定義して必ず参照できることを保証しろってこと
phpしか書けないPHPerだとelseを書けばいいだろと思うかもしれんがそうじゃないそうじゃないんだ
0357デフォルトの名無しさん (ワッチョイ f3e9-0Uuo)2018/08/06(月) 16:39:22.00ID:933yDlcJ0
>>356
<?php
の次の行に

error_reporting(-1);
ini_set('display_errors', 1);

を書こう。大雑把にいうとエラーを全部出力するって意味になる
Notice: Undefined variable: foo($fooっていう変数が定義されてない)
ってエラーが出力されるはず

あと条件式は
($test == "a") じゃなくて
($test === "a") と「=」3つ使って比較しよう
理由は「PHP 型 比較」とかで適当にググって
0359デフォルトの名無しさん (ワッチョイ 635b-0PbX)2018/08/06(月) 17:25:08.30ID:Hk1kxuZq0
エラーが出たし理由もなんとなく分かったよ サンクス
でも今まで書いたやつにもエラーが出まくり 本を写しただけなのに(´・ω・`)
買う本を間違えたかな。。。初心者は何を買えばええんや。。。
0360デフォルトの名無しさん (ワッチョイ f3e9-0Uuo)2018/08/06(月) 17:36:11.38ID:933yDlcJ0
>>359
エラーの設定ってのは学習時に一番最初にやるべき事で
本来はphp.ini(PHPの設定ファイル)の方へ設定すべき事なので
それについて書かれてないのならその本はハズレだろうねw

あと本を写したって書いてるけど
ソースコードを見たまままま打ち込む(写経と呼ばれる)作業は
何かしらの言語をもう少し書けるようになってからでいいと思う
(決して無駄ってわけじゃないけど)

今の段階だとソースが付録として付いてたり
ウェブからダウンロードできるようになってる方が良いんじゃないかな

具体的にこの本が良いと答えられたらいいんだけど
知らないんだ…すまない
0361デフォルトの名無しさん (スププ Sd1f-j3zu)2018/08/06(月) 17:42:18.16ID:UALza30Cd
最近はネットで動画を見ながら学習できるサービスが色々とあるからそういうのもいいんじゃね?
本は俺も知らん
phpのまともな本を探すのってウンコの山から金の塊を探すようなもんだ
0362デフォルトの名無しさん (ワッチョイ 8395-j3zu)2018/08/06(月) 20:26:24.27ID:FCdiHJQQ0
未だにフレームワークを使う意味が分かんないとか言ってるのは中小零細の底辺ペチパーやろな
SQLとかを生で書いて文字列結合とかやってるんだぜきっと
LaravelあたりのモダンなFWを理解する頭もなさそう
0365デフォルトの名無しさん (ワッチョイ c376-SA/8)2018/08/07(火) 07:57:29.50ID:fqjZQqpG0
サーバーサイドプログラムを書くってことじゃないかな
基本的には動作するところまでも含むと思うが、
そんな表現使う人の気持ち次第ってところもあるかと
0367デフォルトの名無しさん (ワッチョイ 6f17-j3zu)2018/08/07(火) 10:42:59.89ID:5VqtIgbz0
サーバーサイドという言葉でくくってしまうとPHPはサーバーサイドで動くものなので語弊があるが
PHPは得意とするフロントを作る以外に例えばProxyサーバとして動作するものを短い行数で書いたりもできる

サーバーを書くってのはそういうものをPHPなり他の言語なりで書く時に使う表現かと
0368デフォルトの名無しさん (ワッチョイ ff7f-gWEw)2018/08/07(火) 10:50:55.53ID:uocr6YSL0
>>367
例えばオンライン要素(マルチプレイ)のあるゲームを作る際に、サーバーにあるDBにアクセスしてデータを出し入れするプログラムをPHPで書いた場合は「サーバーを書く」と言っていいの?
0369デフォルトの名無しさん (ワッチョイ 8395-j3zu)2018/08/07(火) 11:02:53.49ID:7NW2zIgs0
>>368
そういう用途では使わないと思う
Proxyみたいにサーバ上でスタンドアローンで動作するアプリと言えばいいかな?そういうものを書くイメージ
例えばwebminはhttpサーバ機能をperlで書いてるがそういうものをサーバーを書いたと言うのはしっくりと来る
0373デフォルトの名無しさん (ワッチョイ 6f17-j3zu)2018/08/07(火) 11:51:01.42ID:5VqtIgbz0
ちょっとググるとguzzleでproxy書いてるのとかあったからやってみればいいんじゃないかな
そうすればサーバーを書くというのはどういうものなのか何となく分かるのでは
0376デフォルトの名無しさん (ワッチョイ e3cc-Xflc)2018/08/08(水) 16:21:48.35ID:Ao8ga7ES0
VB/VBA(クラス無し)しか書かけないけど、PHP(5?)を触ることになった

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

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

$val = mb_convert_encoding($_POST['body'], "SJIS", "UTF-8");
body(本文)が短いとChromeでも正常に動作するのでbodyの内容が長い時に↑のエンコード時に何か異常が起きてると思うんですけどわかる方いますか?
0378デフォルトの名無しさん (ワッチョイ 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を初めて日が浅いので変な質問をすると思いますが、よろしくお願いします。
0379デフォルトの名無しさん (ワッチョイ f3e9-0Uuo)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'が入っていても空として判定されてしまう
0380デフォルトの名無しさん (ワッチョイ f3e9-0Uuo)2018/08/08(水) 17:24:45.45ID:Evm53zpf0
>>377
<a href="mailto:aaa@example.com?body={$val}">〜</a>
としてリンクをクリックした時に
メーラーの本文に$valが書かれた状態にしたいって話だろうか?

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

何かを作りながら学びたいのであれば
ドットインストールみたいなサービスも選択肢になるかも
0382デフォルトの名無しさん (アウアウカー Sa07-8Mjq)2018/08/08(水) 17:37:04.15ID:4S5+d1joa
プログラミング言語として学ぶだけならいざ知らず, PHPの場合はほぼ確実にサーバサイドプログラミングのお作法とセットだから難しい
構文だけは簡単だけど実用しようと思うと全く初心者向けじゃないと思うわ
(サーバサイドアプリケーション自体初心者向きじゃないとは思う)
0384378 (ワッチョイ ffd0-10BI)2018/08/08(水) 18:05:55.26ID:/J/gevQO0
>>378です

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

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

XAMPP(MySQLでPHP5)環境だから、大きい本屋であさって、尼で中古買うわ
0386デフォルトの名無しさん (ワッチョイ cfb8-2Kil)2018/08/08(水) 18:29:33.84ID:JZIh8c1S0
自分が始めた10年ぐらい前は赤マンモス本とかが流行ってたけどね
今はもう古いんじゃないかなあ
困ったときはとりあえずみんなオライリーって言うけど誰も言ってなかった
0387デフォルトの名無しさん (ワッチョイ f3e9-0Uuo)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ではどう判定するのか
そもそも日本語をどう定義するのかって話はあるけど
0388378 (ワッチョイ ffd0-10BI)2018/08/08(水) 19:16:28.90ID:/J/gevQO0
>>387さん
詳しいレスありがとうございます。
それぞれの関数の意味を理解するよう勉強します。
ありがとうございました。
0389デフォルトの名無しさん (ワッチョイ 4ad4-AlRe)2018/08/09(木) 10:37:03.17ID:eox88/ri0
>>380
ありがとうございます。mailtoじゃなくjavascriptですけどメーラー本文に問い合わせ内容が書かれた状態にしたいです。
私は専門はオフコンなのでほとんどPHP等の知識はないのですが、作った人がもういないので仕方なく探り探りやってる状態です。
0390デフォルトの名無しさん (ワッチョイ 0fe9-Qb5F)2018/08/09(木) 11:17:35.06ID:MNGTuu+R0
>>389
今JavaScriptでやってるという方法も
結局は内部的にmailtoスキームを使ってるのではないかと思う

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

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

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

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

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

今までも環境によっては動いてなかったんだと思うよ
0395デフォルトの名無しさん (ワッチョイ 0fe9-Qb5F)2018/08/09(木) 13:23:22.82ID:MNGTuu+R0
>>394
問い合わせ内容がメールで来るわけではなく画面に表示されて
画面内のリンクをクリックしたら返信用にメーラーが立ち上がるみたいな仕組みなのかな?

問い合わせ内容が何かしらのメールアドレス宛に届くようにしさえすれば
あとは運用で解決する問題なような気がするけど…
0396394 (ワッチョイ 4ad4-AlRe)2018/08/10(金) 10:53:33.88ID:Jh09aF/n0
>>395
まさにそう言うことです
VBAくらいは触ったことはあってもWebアプリはチンプンカンプンで一から勉強です・・・
0398デフォルトの名無しさん (ワッチョイ 8ad0-SkTr)2018/08/11(土) 17:46:10.17ID:3QKmHOOO0
$var = $_POST['var'];
よりも
$var = filter_input(INPUT_POST,'var');
が良いんですか !?
前者は危険だと聞いた(´・ω・`)
勉強中の身だけどムズカシイ 
0403デフォルトの名無しさん (オイコラミネオ MMeb-++Qy)2018/08/12(日) 00:31:14.89ID:UYzABTVRM
filter_input だと便利な場面があるというだけで、$_POST はこれまでみんな使ってきたものだし留意点を押さえれば問題があるわけじゃない。
$_POST での参照は、そもそもそのパラメタが設定されているか、期待する型かとかを自分で判定する必要があるというだけで、fi-ter_input はそれを場合によって便利にするユーティリティ関数程度のもの。
0404デフォルトの名無しさん (ワッチョイ b3b3-Qb5F)2018/08/12(日) 01:12:20.29ID:9ChOuHra0
$_POST が危険って言われるのは、変更可能なスーパーグローバルだから。
filter_input は HTTP で投げられた値を直接参照するので、$_POST とは全然別物。
ググってでてくる情報で、変数汚染に触れてる記事はないので、概要知らないとたどり着けないんだぜぃ!
0406デフォルトの名無しさん (ワッチョイ b3b3-Qb5F)2018/08/12(日) 09:08:50.60ID:9ChOuHra0
>>405
行儀の悪いモジュールやライブラリとか使うと書き換えられるかも。ってぐらい。
実際にはそれほど気にしなくて良いレベルだけど、それを気にしなきゃいけないプログラムは多い。
読みやすく/使いやすく/再利用性の高いコード書くってことは、結合を疎に保つことが重要なんで、そのあたり理解してると $_POST はまず使わん。
0408デフォルトの名無しさん (ワッチョイ de81-2km2)2018/08/12(日) 15:27:03.70ID:bsEI5sh70
>>404
>$_POST が危険って言われるのは、変更可能なスーパーグローバルだから。
>filter_input は は HTTP で投げられた値を直接参照するので、$_POST とは全然別物。

$_POST が危険って言うのは聞いたことがないんだが、
Webサーバーが受けとったリクエストをPHPが取得して変数に代入している訳だろう?
PHPスクリプトが変数の値を参照するのに誰かが割り込めるのかな
リクエスト内容を直接参照すれば他が割り込めなくなるとは思えないが
filter_input がやれるなら、他も出来ると言うことだろう
0410デフォルトの名無しさん (ワッチョイ b3b3-Qb5F)2018/08/12(日) 20:02:51.29ID:9ChOuHra0
>>408
ここで言う「危険」は「セキュアじゃない」って意味ではなくて、「コードが意図した通り動かない可能性がある」とかの意味。

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

>> 407
GET も考え方は同じ。
0411デフォルトの名無しさん (ワッチョイ de81-2km2)2018/08/12(日) 20:18:35.31ID:bsEI5sh70
>>410
そういうのはバグって行って、POSTスーパーグローバル変数の問題ではないなあ
使い方が間違えているか、ワザとそうしているかだろう

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

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

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

普通に推奨されているとは思わないよ。そんな関数初めて聞いたし。
どこでそんな事で大騒ぎになっているの?サイト教えて
0415デフォルトの名無しさん (ワッチョイ 06d5-++Qy)2018/08/12(日) 21:24:00.23ID:l4hCxpRe0
疎結合と filter_input がいまいち結び付かん。
HTTPリクエストから必要パラメタを取り出しオブジェクト化して、後はそのオブジェクトを使ってパラメタにアクセスしましょうってんならHTTPリクエストを隠蔽できて疎かなって気もするが。
$_POST の代わりに filter_input を使うと何と何が疎になるの?って感じ。
0417デフォルトの名無しさん (ワッチョイ b3b3-Qb5F)2018/08/12(日) 21:44:39.30ID:9ChOuHra0
>>415
> HTTPリクエストから必要パラメタを取り出しオブジェクト化して、後はそのオブジェクトを使ってパラメタにアクセスしましょうってんならHTTPリクエストを隠蔽できて疎かなって気もするが。
その認識で正しいと思うよ。
ただ、それはそれ。
取り出しの時に行儀の悪いモジュールやライブラリ使用したときに、邪魔される可能性は残る。
取り出しのときにでかいスコープを回避できる 読み取り専用の関数を使用すると、予防的にコードが書けるってことです。
0418デフォルトの名無しさん (ワッチョイ de81-2km2)2018/08/12(日) 22:17:31.77ID:bsEI5sh70
PHPを扱うサイトでfilter_input が話題になっている所あるの?
見つからないんだけど
普通に推奨されている位だから、たくさんあってもおかしくはないよね?
0419デフォルトの名無しさん (ワッチョイ de81-2km2)2018/08/12(日) 22:25:25.71ID:bsEI5sh70
Webサーバーからリクエストを受けとるのに隠蔽も何もないと思うけどね
グローバル変数だから書き換えられる可能性があるというのも変
書き換えているのは自分じゃないか。人のせいには出来ないでしょう
大勢で開発しているなら、その処理を行う担当以外は操作禁止にするだけだし
0424デフォルトの名無しさん (ワッチョイ 06d5-++Qy)2018/08/12(日) 22:49:31.76ID:l4hCxpRe0
>>419
んまあデバッグしたりコマンドラインでも実行できるようにしたりする可能性を考えると、HTTPリクエストの扱いは浮かせて置いた方がいいかなって気はするよ。
後は同意。
$_POST がダメで filter_input ならいいって話には繋がらないと思うし、$_POST をわざわざ書き換えるならあえてそういう設計なんだろうけど、それが甘いか明確になってないだけじゃねとしか思わん。
そういう設計はかくかく然々でお勧めしないよって話ならまだ聞ける。

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

まさか、この関数が非公開関数で秘密にしないといけないものだったりして
0430デフォルトの名無しさん (ワッチョイ de81-2km2)2018/08/12(日) 23:07:19.08ID:bsEI5sh70
そんな事実上の内部バグを問題にするよりも
リクエスト投げてくるのは、こちらが用意したフォームとは限らない、
想定外のリクエストに乗せられることが現実に発生するんだし、
そちらのチェックの方が重要だと思うよ
そういう実際的な話題を提供して議論する方が良いと思うな
0432デフォルトの名無しさん (ワッチョイ b3b3-Qb5F)2018/08/12(日) 23:09:31.00ID:9ChOuHra0
途中で投稿してしまった。

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

理由もなくスーパーグローバルを直接叩くようなコードを新しく書いたならそれだけでrejectするに足る
それ以外のグローバル変数も納得出来る説明がコードやコメントに無いならreject
0438デフォルトの名無しさん (オイコラミネオ MMeb-++Qy)2018/08/13(月) 01:59:19.53ID:eWNl9K1lM
>>436
そこからどこまで読めばお前さんの言いたいことが書いてあるのが分からんが、とりあえず外部データをサニタイズせずに使うことの危険性なんかを説明してるのかな?
それを解決するのに filter_input や filter_var を使えますよという話だよね?
グローバル使うな的な話は書いてないようだが、ただ実はもしやと思ってたんだけど、register_globals を使うなって話と混同してるんじゃない?
それは危ないから使わない方がいいよ。
そしてそれは $_POST を使うななんてこととは全く関係無い。
0439デフォルトの名無しさん (ワッチョイ b3b3-Qb5F)2018/08/13(月) 11:03:05.76ID:rjxAd60g0
>>434
ずっと同じことのループやねぇ。。。

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

>>440
PHP勉強中だけど、教本のサンプルって短いからグローバル使いまくり
いいコードの書き方ってなかなかないね
やっぱり実践のコード((またはきれいな)が見たいよ
0443デフォルトの名無しさん (オイコラミネオ MM56-++Qy)2018/08/13(月) 12:32:33.81ID:ZXAQ0ZmcM
>>440
だからさ、自分でわざわざグローバル変数作るなってことだろ、それは。
既に用意されてるものを使うなって理由としてグローバル変数だから(誰でも書き換えられるから)ってのは意味が分からんだろ。
わざわざ示されたもの読んで言ってるんだから >>438 にも答えてくれよ。
0444デフォルトの名無しさん (ワッチョイ b3b3-Qb5F)2018/08/13(月) 12:48:25.49ID:rjxAd60g0
>>443
ずっと同じことのループやねぇ。。。

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

> わざわざ示されたもの読んで言ってるんだから >>438 にも答えてくれよ。
オレが示したわけじゃないんで解釈あってるか分からんけど、普通に読めば「ググっても出てこない関数がどうして普通に推奨されていると言うのか、その根拠を聞きたかったんですが」に対するコメントだと思うぞ。
filter_input 紹介している有名記事を教えてくれたんでしょ。
0446デフォルトの名無しさん (オイコラミネオ MM56-++Qy)2018/08/13(月) 13:13:48.26ID:ZXAQ0ZmcM
>>444
あ、ごめん
別の人と混同してたわ

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

グローバル変数誰かが書き換えたら不具合が起こるって、スコープが狭いだけでクラスメンバ変数を誰かが書き換えちゃったらという話と同じような話でしょ。
早い話、選定してるものを仕様通りに使ってないという問題なんだかrさ。
0448デフォルトの名無しさん (ワッチョイ b3b3-Qb5F)2018/08/13(月) 13:41:09.92ID:rjxAd60g0
>>446
filter_input は HTTP で投げられた値を直接参照するので、$_POST とは全然別物

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

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

堅牢なコードを理解してないみたいなんで、これでも見て意識改善するといいよ。
https://youtu.be/17i1EL9pBwA
0449デフォルトの名無しさん (ワッチョイ de81-2km2)2018/08/13(月) 14:57:40.05ID:XxWurSAu0
これ以上やっても信仰する宗教のようなのでやめますが

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

今は、いくつかある対策方法の一つとして聞いておきます
0459デフォルトの名無しさん (ワッチョイ de81-2km2)2018/08/13(月) 16:44:20.77ID:XxWurSAu0
防げるのはせいぜい自分が書く内部バグくらい?
外部からの攻撃については無力
コツコツとバリッドチェックを用意することになるのは変わらない
こんなんでも堅牢なシステムだって言えるんだろうか
0461デフォルトの名無しさん (ワッチョイ 0a7f-EgBt)2018/08/13(月) 16:50:37.23ID:B8BpXPvN0
>>456 は結局のところ「注意すれば事足りるでしょ?」ってことを昨日からずっと言い続けてるよね
その注意をかける負担を減らせる手段を一つでも盛り込む事に反発する理由なんて一つもないと思うんだけどな
俺の頭がおかしいのかそうじゃないのかよく分かんなくなってくるじゃん
0463デフォルトの名無しさん (ワッチョイ 0a7f-EgBt)2018/08/13(月) 16:55:21.28ID:B8BpXPvN0
あと宗教だの信仰だの言ってるけど、頑として自分の主張を曲げずにずっと言い続けてるってのは、結局のところそれは「別の宗教(信仰)」なのでは……?
0466デフォルトの名無しさん (ワッチョイ de81-2km2)2018/08/13(月) 17:13:09.68ID:XxWurSAu0
堅牢と言っているけども、何から堅牢かと言えば、自分自身が書く記述の誤りから堅牢になると言うこと
プログラムから見たら、グローバル変数だけをガードしてからと言ってバグフリーになるわけじゃない

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

この辺が改善されたら導入を考えようと思うんですが、如何ですか?
0467デフォルトの名無しさん (ワッチョイ b3b3-Qb5F)2018/08/13(月) 17:26:15.20ID:rjxAd60g0
>>466
オマエほんとバカだろ。。。
動画見ても全然理解できないと思うけど、まず見てみ。
会話が成立しないくらいズレたことコメントしてるってだけでも理解したほうがいい。
0470デフォルトの名無しさん (オイコラミネオ MMdf-++Qy)2018/08/13(月) 18:22:02.91ID:6I003ZzcM
>>461
注意すれば足りるっつうか、$_POST に値を代入しないようにコードを書くのがそんなに大変なの?
わざわざそういう設計をしなけりゃそんなことしないし、そうしてるなら必要だからしたんだろうから仕様に沿って使えばいいんじゃね?
ということなんじゃないの。
いや別に filter_input を使うなと言ってるのではないし使えばいいじゃんと思ってるが、$_POST をそこまで忌み嫌うのが意味分からんてことだよ。
それで疎にするとか持ち出してきて、$_POST の代わりに filter_input 使えば疎になるって何のこっちゃ?って感じだろう?
堅牢になるぜならまだ分かるが、疎って?ってさ。
疎にするって話ならと >>415 みたいな手法を持ち出してみたらそれには同意してもらえてるっぽいが、filter_input 使えば疎って話ではないだろってところは通じてないっぽいんだよな。

なんつうか、意識高い系なんだろうなって感じ。
0472デフォルトの名無しさん (ワッチョイ 1b5d-2km2)2018/08/13(月) 18:55:06.81ID:LXDaPxOa0
スーパーグローバルとfilter_inputに関してはPHP特有だし多少議論があるのは理解する
それでもfilter_inputの方がベターだと思うが

しかしグローバル変数使うなが納得出来ないというのはお話にならない
0473デフォルトの名無しさん (ワッチョイ 6376-IYYR)2018/08/13(月) 19:31:08.20ID:Mozi/syi0
正直、ここしばらくフレームワークの世話になってたから
$_POSTもfilter_inputも明示的につかったことない
でも、ざっと見た限りではよっぽどトリッキーなことしない限り
filter_inputをつかわない理由はないな
0474デフォルトの名無しさん (ワッチョイ b3b3-Qb5F)2018/08/13(月) 19:59:59.97ID:rjxAd60g0
>>470
密とか疎に対して「結合」って使ったから良くなかったかもね。
結合というより、関係性かなぁ。

$_POST が変更可能な変数であり、かつどこでも使用できるため、使用箇所の関係性が密になってしまう。
値が変更になれば、当然後続が影響を受けるから密ね。

だから、http から直接値を引っ張ってくる filter_input 使用することで、どこで使用しても一律な値を保証できるよう関係性を疎に保とうよ。
って書きたかったんだわ。

結局、$_POST 使用するたびに、プロジェクト全体を grep するとかアホらしいので、新規にコード書くならまず $_POST は使わん。って程度の決意。
0476デフォルトの名無しさん (ワッチョイ b3b3-Qb5F)2018/08/14(火) 07:14:07.57ID:fH8thKa+0
>>475
回避不能だねw
基本はフレームワークに閉じ込めて、自分では $_FILES とか $_SESSION は書かない。
で、どうしても自分で書かなきゃいけないときは、念のため grep するぐらいしか対応できない。
0478デフォルトの名無しさん (ワッチョイ bbe9-hE18)2018/08/16(木) 11:14:39.29ID:wpZ5Mbd20
>>477
同じくくだらない話に今追いついたが
たったそれだけの話だよな

グローバル変数なんか感覚的・直感的に気持ち悪いと感じないようじゃ
いちいち細かい理由を説明しないと理解できない時点で
プログラマとして失格だと思う

趣味でやってて自分1人さえ理解できればよくて
メンテも一生自分1人でやるのなら好きにやりゃいいけどさ
0482デフォルトの名無しさん (オイコラミネオ MM0f-PVJR)2018/08/16(木) 12:23:26.84ID:Z+yvFL8qM
>>480
PHPの仕様として存在しPHP自体が用意してる参照が非推薦ともされていない情報に対する参照がグローバル(スーパーグローバル)というだけでなぜいけないのか?という話だよ。
自分で勝手グローバルを作ろうって話じゃない。
0486デフォルトの名無しさん (スププ Sdbf-V6hB)2018/08/16(木) 13:02:04.93ID:qFV5giwld
グローバル変数云々の話以外だと例えば
?foo[]=1&foo[][]=2&foo[][][]=3
の時の
htmlspecialchars($_GET['foo']);
はエラーになるわな

なのにis_set($_GET['foo']) や array_key_exists('foo', $_GET) 程度で満足してるウンココードだらけで
そういうウンココードが書籍にまで書かれててウンコが量産されてるのもphpの問題だな

htmlspecialchars(filter_input(INPUT_GET, 'foo'));
ならエラーにはならないが、現実的にはfilter_input()も直接は使わないわけで
フレームワークを通さずに書きたいなら$_GET['foo']よりはベターってだけ

フレームワークを使わない便利な関数を使わないって人ってのは
大した頭もないくせして車輪の再発明が大好きなんだろうとお察しする
絶対に一緒に仕事をしたくないタイプ
0487デフォルトの名無しさん (ワッチョイ bbe9-hE18)2018/08/16(木) 13:14:38.66ID:wpZ5Mbd20
register_globalsやmagic_quotes_gpcみたいなPHPの黒歴史や
伝説の名言「例えば、PHPを避ける」なんかを知らない人も
増えてるんだろうなと思う

今から10数年前のPHP4を勉強してた頃の自分なら
$_GETや$_POSTを直接使って何が悪いの?と言ってた筈

プログラミングの世界は1年前の自分ですら赤の他人だし
いつか理解できる日が来るといいね

理解できなくても食うに困らない稼ぎがあるなら
それはそれでいいんじゃない?(周りの人は迷惑だけどw)
0488デフォルトの名無しさん (アウアウカー Sa0f-Rbm/)2018/08/16(木) 13:24:30.70ID:NlvTq02Da
PHPの開発方針がめちゃくちゃ保守的だってことも知らないのだろう
https://externals.io/message/100087

php-internalsでも$_POSTや$_GETをimmutableにしないのはあくまで後方互換性が崩れるからだとしか言われてない($_ENVや$_SERVERはまた別だが)
スーパーグローバルの(スーパーグローバルの書き換えとは独立した)immutable版があればいいのにと思う
0489デフォルトの名無しさん (スププ Sdbf-V6hB)2018/08/16(木) 14:08:54.52ID:qFV5giwld
PHPしか書いた事ないやつだとimmutableという概念を知らない可能性もありそう
そもそもさ

?foo=bar
$_GET['foo'] = 'hage';
var_dump($_GET['foo']); // string(4) "hage"
var_dump(filter_input(INPUT_GET, 'foo')); // string(3) "bar"
↑これ理解できてるんだろうか?

あと素朴な疑問だが
$_GETや$_POSTを直接使ってるやつってユニットテストはどうやってんの?
ブラウザで表示させて実際に値を入力してテストとかやってそうw
0490デフォルトの名無しさん (ワッチョイ bbe9-hE18)2018/08/16(木) 14:20:27.81ID:wpZ5Mbd20
>>489
>↑これ理解できてるんだろうか?
>>442を見る限りでは勘違いしてるっぽいね

> $_GETや$_POSTを直接使ってるやつってユニットテストはどうやってんの?

その例のように
$_GET['foo'] = 'hage';
とかやってるんじゃないかな…

真面目な話
個人開発レベル程度の経験しかない人だと
PHPUnitなんて使った事ない(というかユニットテストという概念を知らない)って人がわりといたりする
0491デフォルトの名無しさん (オイコラミネオ MM0f-PVJR)2018/08/16(木) 14:26:51.20ID:Z+yvFL8qM
>>486
そこでちょろっと言ってることが本質なんじゃないの。
一番に検討しなくちゃいけないのは、外とのインタフェースをあちらこちらに書かず特定の機構に閉じ込めるということだろ。
閉じ込めた中で $_GET と filter_input のどちらを使うかなんてことは本質じゃなく、その時の都合でベストチョイスすればいいだけのこと。
どっちもPHPが用意している正当なインタフェースなんだから。
グローバルはいけないんだなんて言ってみても、結局 >>475-476 でしょ。
0493デフォルトの名無しさん (ワッチョイ ebb3-hE18)2018/08/16(木) 15:34:33.46ID:IVwSm3Wy0
>>491
> 一番に検討しなくちゃいけないのは、外とのインタフェースをあちらこちらに書かず特定の機構に閉じ込めるということだろ。
このことはだれも否定していない。

> 閉じ込めた中で $_GET と filter_input のどちらを使うかなんてことは本質じゃなく、その時の都合でベストチョイスすればいいだけのこと。
こっちを、スーパーグローバル変数を使用するのはやめようぜ。って言ってる
自前実装だろうが、PHPの仕様だろうが、グローバルな変数ってだけで悪w

> グローバルはいけないんだなんて言ってみても、結局 >>475-476 でしょ。
だから、immutable 版がほしいね。って流れ
0494デフォルトの名無しさん (ワッチョイ bbe9-hE18)2018/08/16(木) 16:04:23.82ID:wpZ5Mbd20
ざっと見て>>448あたりは結構頑張って理由を書いてると思うし
>>493はワッチョイから判断するに同じ人だと思うのだけど
自分は>>442を見た時点で説明するだけ時間の無駄だと判断した

スーパーグローバル変数(笑)なんてものを直接使う糞コードが少しでも減ってくれたらいいなとは思う
0496デフォルトの名無しさん (ワッチョイ bbe9-hE18)2018/08/16(木) 17:14:51.55ID:wpZ5Mbd20
来週の木曜0:00AMまではワッチョイ末尾4桁「hE18」はJaneStyle4.00をデフォの設定で使ってる人
すなわちUserAgentを現してる(毎週木曜リセット)

じゃぁどこ見て判断してるのかといえば「b3」で
大雑把に回線が同じHostなんだろうって事を確認して
あとは文体で判断してる(リセットされない)

プログラム板の人なんだからそれぐらいの法則性は自力で見つけて欲しいものだが…
0497デフォルトの名無しさん (ワッチョイ bbe9-hE18)2018/08/16(木) 17:19:27.02ID:wpZ5Mbd20
ちなみにこんなサービスもある
ttps://afi.click/browser/list/

プログラム板の住人なら
どうやればこのサービスを実現できるか
DB設計から考えてみたらいいんじゃないかな
0501デフォルトの名無しさん (ワッチョイ ebb3-hE18)2018/08/16(木) 20:11:17.99ID:IVwSm3Wy0
この話題の最初に書いたとおり、filter_input の使用に関して、スーパーグローバル回避のためって理由がググっても中々ヒットしない。
ある程度コードかけるようになると自明だし、フレームワーク使うようになると filter_input すら使う機会が少なくなるからだと思うけど、量産型初心者が全部 $_POST で育ってくるのでめんどいw
みんなどんどん素敵記事書いて、初心者に広報してくれんかねぇ。
0502デフォルトの名無しさん (ワッチョイ 6b95-8iSw)2018/08/16(木) 20:24:00.00ID:S/g/TLeK0
グローバル変数を使わない方がいい理由が分からないって人ってやっばりPHPしか書けない人なのかな?
他の言語では常識な事だけに何が理解できないのかが理解できない
0504デフォルトの名無しさん (ワッチョイ ef17-xQfD)2018/08/16(木) 20:51:12.43ID:0Ewq9KDZ0
メジャーなフレームワークのコードを読んでみたりはしないのだろうか
全部を確認したわけではないけど流石に$_GET $_POSTを直接ごにょごにょやってるFWは無いと思う
0506デフォルトの名無しさん (ワッチョイ ebb3-hE18)2018/08/16(木) 21:21:55.14ID:IVwSm3Wy0
>>505
これ、オレがコメントした時に参考にした記事www
これのせいで、「疎結合」とか、伝わりにくい表現使ってしまった。

ちゃんと理解した奴がまとめて記事書いてくれprz
0507デフォルトの名無しさん (ワッチョイ efd5-PVJR)2018/08/16(木) 23:22:50.51ID:IQGCIGud0
>>504
laravel 5.6.33 の新規プロジェクト作って grep してみたら、filter_input はヒットしなかったよ。
$_GET やら $_POST、$_SERVER なんかを使ってるコードはたくさんあるが、これが FW 本体なのかは知らないから見てるものが違うかもしれんが。

ついでに手元にあった古い cakephp のコードも grep してみたけど、やはり filter_input は使ってないようだね。
最新だとどうなのかは知らないけど。

どのフレームワークのコードを読んだの?
0509デフォルトの名無しさん (ワッチョイ efd5-PVJR)2018/08/17(金) 10:55:31.64ID:FbY5sXOm0
その辺はいろいろなFWのコードを読んだ >>504 がまず解説してくれると思うけど、
>>493 によればグローバルな変数ってだけで悪らしいし、それについての否定コメントも無いことを見れば共通認識なんだろうから、
この流れから言えば量産型初心者が作ってるってことなんじゃない。
スパーグローバルの差し替えなんて密結合(?)な行儀の悪いこともしてるようだから、ゴミがメジャーになった悲劇的なケースなんだろうかね。
おれはそうは思わないけど。

filter_input は多重配列に弱いし $_GET や $_POST も含めて同じパラメタ名が重複することに気付けなかったりするので必要に応じて自前で QUERY_STRING やら STDIN を読む選択もあるだろうと思ってるから、
FW の利用を含めておれはその時一番都合のいい方法を選択するから気楽なもんだ。
選択肢を絞ることを徹底するというのも品質管理の手法の一つとしてあると思ってるけどね。

何にしても解説を待ちたいね。
0510デフォルトの名無しさん (ワッチョイ abdb-mZ3i)2018/08/17(金) 11:20:01.64ID:BAgYE8OH0
グローバル変数とユニットテストについて質問です。
ユニットテストで、NULLバイトチェックのため、$_GETにユーザー入力値(ヌルバイト¥0)を
直接代入してテストしていますが、これはまずいのでしょうか?

public function test_checkNullbyte()
{
  $_GET['nullbyte'] = "abc\0xyz";
  $this->object->checkNullbyte();
}
0515513 (ワッチョイ 9fd0-QxOT)2018/08/18(土) 17:14:55.37ID:2Bt8PW+v0
>>513です

>>514さん
ISO-HTMLなのでイベントハンドラ?も使えないです。
0516デフォルトの名無しさん (ワッチョイ 0f81-ipLS)2018/08/18(土) 17:34:08.27ID:gititOy10
安易だが
ブラウザから返してくる、$_SERVER['HTTP_REFERER']の値を信じて、そこに送り返してあげる
(セットしないブラウザもあるし、嘘も書けるので、オススメはしない)

面倒だが
自分のサイトだけで遷移しているなら、直前のURLをセッションに持たせ、それを参照して戻す
(入力フォームで行ったり来たりする場合は、入力しかけのフォームの値も保持しないと行けなくなる
 こういう場合、相当面倒な処理を書かないと行けないと思うが、仕方ないね?)
0517デフォルトの名無しさん (ワッチョイ 0f81-ipLS)2018/08/18(土) 17:38:53.55ID:gititOy10
あるいは
フォームでPOSTする要領で直前のURLに遷移すると言う方法もある
その場合はサーバー側で次画面に遷移する際に、
現在の場所をフォームに埋め込む形で出来る
0518513 (ワッチョイ 9fd0-QxOT)2018/08/18(土) 17:38:54.09ID:2Bt8PW+v0
>>513です

>>516さん
セッションですか !?
身につけたいので頑張ります!
0519デフォルトの名無しさん (ワッチョイ 7b7c-mZ3i)2018/08/18(土) 18:39:50.05ID:6yCMBjdI0
>>508
$_REQUESTとかってwww-form〜専用だろ。
0521513 (ワッチョイ 9fd0-Mwiu)2018/08/20(月) 14:51:18.69ID:/k2xBvnt0
>>513です

>>517さん
お返事が遅れました。
戻る際にもフォームを使うということですか。
ありがとうございます。

>>520さん
お返事が遅れました。
>>確認から入力に戻るような話?
はい。PHPで対応したいので現在勉強中です。
始めはHTMLのtype="heidden"を採用しようと考えていたのですが、いただいたレスやセキュリティを考えた結果、セッション変数を使ってみようかと思い試行錯誤中です。
0522デフォルトの名無しさん (ワッチョイ efd5-PVJR)2018/08/20(月) 16:35:49.23ID:aXzcMKFL0
>>521
そういう遷移ならもっとシンプルに考えた方がいいんじゃね。
submit ボタンに name を設定しておけば、送信時に押されたボタンが分かるよ。
>>520 のような全部の画面は例えば form.php で処理させ、押されたボタンによって画面を出し分けるなんてのが簡単じゃないかな。
確認画面には例えば <button type="submit" name="act" value="back">戻る</button> と <button type="submit" name="act" value="send">送信</button> 置いておく感じ。
入力画面には <button type="submit" name="act" value="check">確認</button> とか。
すると form.php はこんな感じ。

$act=filter_input(INPUT_POST, 'act');
$view=入力画面;
入力値の取得とバリデーション;
if(エラー無し) {
if($act==='check') {
$view=確認画面;
}
elsif($act==='send') {
登録処理;
if(成功) {
$view=完了画面;
}
}
}
$view 表示;

セッション使ってないから、確認画面には入力値を hidden で埋めておく。
入力画面ではエラーメッセージの表示も行う感じ。
0523デフォルトの名無しさん (ワッチョイ efd5-PVJR)2018/08/20(月) 16:45:12.31ID:aXzcMKFL0
>>522
その流れだと初回表示時にバリデーションが走って必須項目未入力のエラーが出ちゃいそうだねw
説明用とは言え雑だったが、submitボタンが取れることが分かればうまいことやれるでしょ。
0524513 (ワッチョイ 9fd0-Mwiu)2018/08/20(月) 17:48:24.04ID:/k2xBvnt0
>>513です

>>522さん
そのような方法もあるんですね。
くださったレスを参考にいろいろと試行錯誤してみます。
ありがとうございました。
0525デフォルトの名無しさん (ワッチョイ 0fb8-O+0A)2018/08/21(火) 06:38:40.38ID:xkZA2QwA0
hiddenが危険という言葉を鵜呑みにする必要はない
用途による
メールフォームの確認程度なら別にhiddenでいい
そんなの改ざんする意味もなければされたところで問題ないし
最終的に受け取ったデータを通すかはPHPが判断すればいいこと
0526デフォルトの名無しさん (ワッチョイ db8a-Fz0V)2018/08/21(火) 12:56:33.44ID:RbDl1jHe0
hiddenに限らずチェックはしないとね
さもないと、支払もすんでいない商品を買ったことにされたり
ログイン認証済んでいないのに、内部に入り込まれたりするから
0527デフォルトの名無しさん (ワッチョイ 1fe7-QxOT)2018/08/22(水) 05:59:35.69ID:sXSBMfza0
質問投下です。
PHP 2chBBSをphp7.0のサーバーにアップして色々と対応させるよう書き換えましたが、これだけが分かりません。
abon.php,92行目あたり
$line = preg_replace("!<a href=\"\.\./test/read\.php/$_POST[bbs]/$_POST[key]/([\d|\-]+)\" target=\"_blank\">&gt;&gt;([\d|\-]+)</a>!e",
"'<a href=\"../test/read.php/$_POST[bbs]/$_POST[key]/'.res_num('$1',$del).'\" target=\"_blank\">&gt;&gt;'.res_num('$2',$del).'</a>'", $line);

php7ではpreg_replaceのe修飾子が廃止されており、preg_replace_callbackを使う事に
なっているようですが、ググってみても、どのように置き換えれば良いのか分かりません。

お知恵をお借りできれば助かります。よろしくお願いします。
0528デフォルトの名無しさん (ワッチョイ cb65-ipLS)2018/08/22(水) 07:23:29.30ID:XDj/gPFz0
その部分だけ見ててもすげーやべーコードなのが分かるから手直し以前にゼロから作り直した方がいいよ
つか調べたら最終更新2005年(13年前)でかつこのコードとか本格的にやべーのでもっと新しくてまともなもの探さなきゃダメだよ
0530527 (ワンミングク MMbf-ycnR)2018/08/22(水) 08:17:00.54ID:2cdwFvgEM
>>528
レスありがとうございます。
これ、ちまちまと手直しして使っておりまして。
このコードは管理機能内の記事削除部分で、管理者しか使えないですし、
第三者が入れないよう認証かけてるのでセキュリティーは多分大丈夫だと思います。

取りあえず使えるようにしたいので手直し出来るのであれば教えて欲しいです。

あと、どういう点がやばいのかご教示いただければ勉強出来るので非常に助かります。
0531デフォルトの名無しさん (ワッチョイ ef9f-vvAx)2018/08/22(水) 08:40:59.95ID:PHQZkUhf0
だから、$_POSTをいきなり正規表現の処理に入れてるところがヤバイって言いたいんだと思う。
bbsやkeyに悪意のあるコードを入れてられても、そのままノーチェックで処理を継続していたらヤバイ。

仮にチェック済だとしても、スーパーグローバルを使ってると頭悪そうにみえるしな。
0532デフォルトの名無しさん (ワッチョイ 0b5b-hE18)2018/08/22(水) 10:16:38.53ID:mlQDc+9J0
>>527
$line = preg_replace_callback(
  "!<a href=\"\.\./test/read\.php/$_POST['bbs']/$_POST['key']/([\d|\-]+)\" target=\"_blank\">&gt;&gt;([\d|\-]+)</a>!",
  'callback_hoge', $line);

function callback_hoge($matches)
{
  return "<a href=\"../test/read.php/$_POST['bbs']/$_POST['key']/" . res_num($matches[1], $del). '\" target=\"_blank\">&gt;&gt;' . res_num($matches[2], $del) . '</a>';
}

クロージャ使って書くなら

$line = preg_replace_callback(
  "!<a href=\"\.\./test/read\.php/$_POST['bbs']/$_POST['key']/([\d|\-]+)\" target=\"_blank\">&gt;&gt;([\d|\-]+)</a>!",
  function ($matches) {
    return "<a href=\"../test/read.php/$_POST['bbs']/$_POST['key']/" . res_num($matches[1], $del). '\" target=\"_blank\">&gt;&gt;' . res_num($matches[2], $del) . '</a>';
  },
  $line
);

半角スペース2個を全角スペースにして書いてるので注意
0533デフォルトの名無しさん (ワッチョイ 0b5b-hE18)2018/08/22(水) 10:25:32.15ID:mlQDc+9J0
【補足】
他の人も書いてるけど
たった1行のコードから色々とヤバさが伝わってくる代物なので
他の代替手段を使うことを強くおすすめ

少なくとも $_POST[bbs] じゃなく {$_POST['bbs']}

>>530
JVNにXSSの脆弱性がある事が報告されてる
https://jvn.jp/jp/JVN48774168/index.html

コードをざっと斜め読みしたけど他にも色々と駄目すぎてどこから手を入れるべきかアドバイスできないレベルで酷い
2005年のコードでもきちんと書いてればPHP7でも大体問題なく動くものだけど
このコードだと他にも色々と問題が出ると思う
0534デフォルトの名無しさん (ワッチョイ 0b5b-hE18)2018/08/22(水) 10:32:57.26ID:mlQDc+9J0
>>532訂正
$delって変数があるの見落としてた

$line = preg_replace_callback(
  "!<a href=\"\.\./test/read\.php/$_POST['bbs']/$_POST['key']/([\d|\-]+)\" target=\"_blank\">&gt;&gt;([\d|\-]+)</a>!",
  'callback_hoge', $line);

function callback_hoge($matches)
{
  return "<a href=\"../test/read.php/$_POST['bbs']/$_POST['key']/" . res_num($matches[1], $GLOBALS['del']). '\" target=\"_blank\">&gt;&gt;' . res_num($matches[2], $del) . '</a>';
}

クロージャ使うなら

$line = preg_replace_callback(
  "!<a href=\"\.\./test/read\.php/$_POST['bbs']/$_POST['key']/([\d|\-]+)\" target=\"_blank\">&gt;&gt;([\d|\-]+)</a>!",
  function ($matches) use ($del) {
    return "<a href=\"../test/read.php/$_POST['bbs']/$_POST['key']/" . res_num($matches[1], $del). '\" target=\"_blank\">&gt;&gt;' . res_num($matches[2], $del) . '</a>';
  },
  $line
);
0535デフォルトの名無しさん (ワッチョイ 0fb8-O+0A)2018/08/22(水) 10:41:30.78ID:jQIraJCs0
エラーを無視するような感じのエラー処理が適当なコードだから
セキュリティもそれなりなのだろうというのが容易に想像出来るんだわ
なんせPHP4時代のコードだし今ほどそのへん考慮されてないからねえ
0536デフォルトの名無しさん (ワッチョイ 0b5b-hE18)2018/08/22(水) 10:41:35.61ID:mlQDc+9J0
>>529
コード内に出てくる $_POST[bbs](本当は $_POST['bbs'] だが)は
まともにチェックされてないっぽい
unlink("../$_POST[bbs]/...");
みたいなコードが散見されるから
NULLバイト攻撃も素通りだと思う

ヤバすぎ
0537デフォルトの名無しさん (オイコラミネオ MM3f-PVJR)2018/08/22(水) 10:52:29.28ID:OKO5mG4BM
>>532
$del を受ける use が必要じゃね

あと細かい話だが、PHPが単なる即時関数もクロージャと言うのにはちょっと違和感ある。
>>532 のケースはクロージャになるけど、クロージャってやっぱスコープが特殊なところに意義があるというか。
0539デフォルトの名無しさん (ワッチョイ cb65-ipLS)2018/08/22(水) 10:58:38.85ID:XDj/gPFz0
OSに処理投げる形式のファイルシステム関数についてはnulバイト攻撃はPHP側で対策されてはいる
https://github.com/php/php-src/blob/master/ext/standard/file.c#L1510
https://github.com/php/php-src/blob/master/Zend/zend_API.h#L1011

が, 何れにせよ救いがたいコードで, 管理者しか使えないから問題ないという発想も正直ヤバい
この状態から>>527の質問のレベルで更にツギハギで直してるっていうんだからセキュリティに関しては想像もしたくないというのが正直なところ
0540デフォルトの名無しさん (ワッチョイ cb65-ipLS)2018/08/22(水) 11:04:53.85ID:XDj/gPFz0
敢えて繰り返すけど, もっと新しくてまともなもの探さなきゃダメだよ
そうするのがベターなんじゃなくて, そうしなきゃダメ, SHOULDじゃなくてMUSTだよ
0541デフォルトの名無しさん (ワッチョイ 0b5b-hE18)2018/08/22(水) 11:08:19.17ID:mlQDc+9J0
>>539
かなり昔に対策されたんだな
知らなかったサンクス

$_POST[bbs]でコード内を検索したら
unlink("../$_POST[bbs]/dat/$_POST[key].dat");
こんなコードが出てきたんでびっくりして脊髄反射してしまったww
0542デフォルトの名無しさん (ワッチョイ cb65-ipLS)2018/08/22(水) 11:35:44.27ID:XDj/gPFz0
ついでに正規表現パターンにPOSTデータ突っ込むのがどうしても我慢ならなかったから直してみた

$line = preg_replace_callback(
'!<a href="\.\./test/read\.php/(?<bbs>[^/]+)/(?<key>[^/]+)/(?<num>[\d|\-]+)" target="_blank">&gt;&gt;\k<num></a>!',
function ($matches) use ($del) {
$bbs = filter_input(INPUT_POST, 'bbs');
$key = filter_input(INPUT_POST, 'key');
if ($matches['bbs'] !== $bbs || $matches['key'] !== $key) {
return $matches[0];
}
return '<a href="../test/read.php/'.$bbs.'/'.$key.'/'.res_num($matches['num'], $del).'" target="_blank">&gt;&gt;'.res_num($matches['num'], $del).'</a>';
},
$line
);
0543デフォルトの名無しさん (ワッチョイ 0b98-IWHs)2018/08/22(水) 11:58:13.96ID:nWdToOU90
Interface用のファイルって基本的にどこに置けばいいの?
それを継承するクラス群と同じディレクトリなのか、
もしくは最初から一箇所(例えばMyApp\Contract等)にまとめていいのか
0544527 (ワンミングク MMbf-ycnR)2018/08/22(水) 12:28:34.49ID:2cdwFvgEM
>>532
手直し、ありがとうございます。
勉強させてもらいます。


件の掲示板ですが、社内LANで運用されておりまして、前任者より引き継いだものです。
設置はさらに前の前任者(退職)が行ったようです。
お察しの通り、phpのスキルはそれ程高くはありません。

移行を検討するよう進言してみます。
ありがとうございました。
0545デフォルトの名無しさん (ワッチョイ ef9f-vvAx)2018/08/22(水) 13:23:13.49ID:PHQZkUhf0
社内でしかも管理者限定なら急ぐことはないか…
でもコードの品質全てが問題ありそうだから、仲間内で注意喚起はした方がいいな。
JVNで周知されてるのも良い理由になると思う。
0547デフォルトの名無しさん (ワッチョイ 9fd0-Mwiu)2018/08/22(水) 15:37:33.16ID:bZebMi5p0
メールヘッダーインジェクションって現バージョンのPHPではどうなんですか?
mail()やmb_send_mail()で対策されたとネット上で見かけたのですが(´・ω・`)
0548デフォルトの名無しさん (ワッチョイ 0b5b-hE18)2018/08/22(水) 18:00:41.89ID:mlQDc+9J0
>>547
英語版のPHPマニュアルの改変履歴追ってみると7.2.0での対応で一段落って感じだけど
日本語版には書かれてないな

NULLバイトや改行コードを悪用したインジェクションなら
mail()やmb_send_mail()に渡すデータをバリデーションしてたら7.2.0未満でも問題ない筈だが
0550デフォルトの名無しさん (ワッチョイ a5b8-EM0A)2018/08/25(土) 11:28:42.39ID:9SggU+bE0
例外を投げるとき、Exceptionを投げるのは良くないのでしょうか?

Exception は、すべての例外の基底クラスだからユーザーが投げるのは
良くないという記事を以前に何かで見たので気になります。
ただ、PHPマニュアルでは、普通にExceptionを投げる例が載ってます。
http://php.net/manual/ja/language.exceptions.php

<?php
function inverse($x) {
if (!$x) {
throw new Exception('ゼロによる除算。');
}
return 1/$x;
}
0554デフォルトの名無しさん (ワッチョイ 5ed5-ISgX)2018/08/25(土) 14:31:15.65ID:C8WKBJJ50
>>553
それは $_POST を取ってるわけじゃない。
POSTされたデータを取る手段として $_POST と filter_input がある。
他の標準的な手段として用意されてるものは無いと思うけど、リクエストを自分で処理するという手段はある。
0561デフォルトの名無しさん (ワッチョイ 2ad0-wF79)2018/08/27(月) 17:28:58.93ID:BWUwoBqV0
PHPを初めて間もないので知らなかったです(´・ω・`)
文字化けが自分で作った環境が原因でおこるのか、
ユーザーの環境によっておこるのか、
それすらも現在進行形で勉強中です。
0563デフォルトの名無しさん (ワッチョイ 5ed5-ISgX)2018/08/28(火) 10:03:40.00ID:eY+qymJM0
JIS だと扱えない文字が結構あって面倒なんだよね。
氏名を埋め込もうとするだけでもすぐ問題が起こる。
個人的には結構保守的なんで極力 JIS にしたいが、utf8 も仕方ないかなと思うこともある。
0565559 (ワッチョイ 2ad0-wF79)2018/08/28(火) 15:49:05.60ID:hBn2GmOT0
>>559
>>561です

>>564さん
どちらも化けてないです。
ただ文字化けする状況がよくわからなかっただけです。
自分の環境を全てutf8に統一すれば化けないですかね(´・ω・`)
0566デフォルトの名無しさん (ワッチョイ 9e9f-bqhm)2018/08/28(火) 18:24:33.50ID:Bhr6KAhH0
どちらかと言えば、送信したサーバー側にあると思うよ。
ヘッダをMIMEエンコードしてないとか、
本文をJISと宣言しておいてSJISとか良く見る。
作る側が理解してない。

それを受信すらメールソフトが何とか正しく表示しようと努力して、
それでもダメだった場合に化ける。

あと稀に、ソースからしてそもそも化けてるという
バカが書いたメールもあるw
0570565 (ワッチョイ 2ad0-wF79)2018/08/29(水) 16:28:12.93ID:Fy8w4QmX0
>>565です

>>566さん
こちらがしっかりと設定すれば大丈夫そうですね。
後は山のように試行錯誤を積み重ねていきたいと思います(´・ω・`)

今はmail($to・・・)の$toに自分のメールアドレスをどのようにして入れるか考えてます。
define関数で定義した方が安全?なんでしょうか。
勉強がんばります。
0571デフォルトの名無しさん (ワッチョイ bd5b-vl9i)2018/08/29(水) 16:47:55.26ID:pmPs3x9R0
>>570
メンテナンス性を考慮すれば定数で定義しとく方が好ましい
”ハードコーディング”でググるんだ

あとPHP5.3未満だという理由でもない限りは
定数の定義はdefine()じゃなくconstでいい

define()にしかできない事をやる時だけdefine()を使う
…というかdefine()にしかできないような定数の定義の仕方は
しない方がいいというか
0573570 (ワッチョイ 2ad0-wF79)2018/08/29(水) 18:04:53.37ID:Fy8w4QmX0
>>570です

>>571さん
constでも定義できるんですね。
他にも詳しいアドバイスありがとうございます。

>>572さん
設定値を管理するファイルを作る、メモしました。
定数名は大文字がマナー?なんですかね。

お二方、アドバイスありがとうございます。
ずっと画面と見つめ合ってたので頭が痛いです。
体調管理に気を付けます。
ありがとうございました。
0577デフォルトの名無しさん (オイコラミネオ MM21-SMhC)2018/08/30(木) 20:10:41.63ID:b1WMdnEwM
共用のレンタルサーバーだと、
Permissionを0604にするのもありだな。

最初の0は気にしない。
次の6は自分の読み書き権限
次の0は同居してるユーザーに権限剥奪
最後の4はApacheに読み取り権限
0579デフォルトの名無しさん (ワッチョイ 5b9f-SMhC)2018/08/30(木) 20:58:13.62ID:EWk4rtO80
ほとんどの共用レンタルサーバーは、
webユーザーは同一グループに所属するから、
xx0xで引っ掛けて拒否させるんだよ。
最後の4は付けないとApacheが読めない。

https://www.xserver.ne.jp/manual/man_server_permission.php

グループ設計がどうなってるかとか、
PHPの実行ユーザーが誰になるかとか、
事前に確認しないといけないな。
suEXEC、FastCGIなんかで変わってくる場合もあるし。
0583デフォルトの名無しさん (ワッチョイ 1d9f-GNu9)2018/09/02(日) 10:08:19.04ID:ub6GWDzd0
ど素人です
質問させてください
cakephp3のwebroot以下にある.htaccessで、mod_rewriteの括弧外にrewritecondやrewriteruleが書かれているものを人様のサイトで拝見しました
括弧外に置かれても、機能するものなのでしょうか
0585デフォルトの名無しさん (ワッチョイ 1d9f-J7KC)2018/09/02(日) 13:32:00.09ID:ub6GWDzd0
そうです

すみません、>>583は携帯から書き込んでいたので正確ではありませんでした
質問するにしても良くなかったですね

===================
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>
===================

このようなものなのですが
0586デフォルトの名無しさん (ワッチョイ 5b9f-SMhC)2018/09/02(日) 15:33:48.84ID:afimrVjB0
それは、そのモジュールが有効化されていたら設定するって意味で、
何のモジュールのディレクティブなのか明確になる以外にメリットない。

だから書かない方が良い。
ifを書かなければ、モジュールが無効なら即500エラーで設定ミスに気付ける。
モジュールが無効なのにエラーにならず、
設定したつもりでいる方が危ないからね。
0588デフォルトの名無しさん (ワッチョイ 1d9f-J7KC)2018/09/02(日) 18:59:05.09ID:ub6GWDzd0
>>586
返答ありがとうございます

リファレンスにしていたものが、全てディレクティブを括弧内に書いていたのと
cakephpのインストール直後のプロジェクトに入っていた.htaccessでも
ディレクティブが<ifmodule>で囲まれていたので、
基本的には囲う必要があり、外に出る方がおかしいと思い込みがありました

まさにおっしゃられていた通り、apache2.confを見てみたら
Loadmoduleでmod_rewriteを有効化していたつもりで、実際にはコメントアウトされていたのですが
それにも気付いていませんでした

どうもありがとうございます
0590デフォルトの名無しさん (ワッチョイ 955b-zBrR)2018/09/03(月) 11:36:23.62ID:Shssq38w0
>>587
ネタにマジレスしとくと
dieの発音は「ディエ」じゃなく「ダイ」だし
exitとdieは等価なので、エラーログに残るとかは嘘

exitの方が一般的だとは思うが好きな方を使えばOK
あくまで予想だが、die()はperl言語出身者に配慮して作ったんじゃなかろうか
0592デフォルトの名無しさん (ワッチョイ 5b9f-SMhC)2018/09/03(月) 12:08:27.54ID:lQhKIzFA0
>>590
すまん。perlの関数と勘違いしてた…
PHPにおいてはexitもdieも同じらしい。
dieの引数も標準出力されたw

プログラムは読み手に意図を伝えた方が良い場合もあるから、
exit(1)よりdieの方が致命的エラーなのかなと思わせることはできるかな。
しかし標準出力されるんじゃあ使えないな。

嘘こいてすまん。
0594デフォルトの名無しさん (ワッチョイ 955b-zBrR)2018/09/03(月) 12:27:19.50ID:Shssq38w0
>>591
ハイト
アライン
アラウ
ディナイ

どれも高校入試の時の発音問題頻出単語(要するに中学レベルの単語)だったような遠い20年以上前の記憶
うんざりする程しつこく教えてくれた当時の英語担任に感謝しないといかん
0598デフォルトの名無しさん (スププ Sd43-Oaw6)2018/09/03(月) 12:55:17.57ID:Nk9MF4uYd
ネタなのかマジなのかわからなくなってきたけど正解はもちろん>>594
allow,denyをアローデニーと読んでいた自称サーバー管理者が設定したウンコみたいなサーバーに泣かされて以来トラウマです
そして今なおallow,denyという単語を目にするという事はそれ即ち、去年末にサポートが終わったApache2.2系をまだ使い続けてるというトラウマの再来になる可能性がががが
0603デフォルトの名無しさん (ワッチョイ 5b9f-SMhC)2018/09/03(月) 14:53:06.39ID:lQhKIzFA0
あんまりこだわると意識高い系とか嫌味を言われそうだし、
まあわかればいいやね…

ここじゃないかもだかど、どっかのPHPスレで
エチョーと書いたらウケたよ。
0605デフォルトの名無しさん (アウアウカー Sa61-lQkG)2018/09/03(月) 15:27:39.33ID:/uGmskjCa
allowというかau音はアゥからオゥに寄った側に聞こえるからカタカナ英語的にはアロゥはアリかなと思う
arrowと区別したいときはアラゥと言うべきだと思うけど

デニーとかアリグンは流石にねーなw
0607デフォルトの名無しさん (ワッチョイ 955b-zBrR)2018/09/03(月) 17:56:38.19ID:Shssq38w0
array:アレイ

ini:initializationの略
stripos:string case-insensitive postionの略だと勝手に思ってる
strrpos:string reverse positionの略だと勝手に思ってる

かっこよく読みたいなら元の単語を略さずに読めばいいんだろうが
実用的にはアルファベットをそのまま読めばいいじゃなかろうか
0609デフォルトの名無しさん (ワッチョイ 1d9f-J7KC)2018/09/04(火) 00:34:18.87ID:3EnQXiZU0
すみません、>>583で質問したのですが、
再度質問してよろしいでしょうか

サーバのドキュメントルートに置いた
CakePHPプロジェクトフォルダ(仮にCakeとします)
直下の.htaccessを消去しても
http://{hostIP}/cake/
をアドレスバーに打ち込むと、なぜか
https://{hostIP}/cake/webroot/
にリダイレクトされる現象が起きています

.htaccess以外にリダイレクトが起きる原因として考えられるものがあれば
教えていただきたくお願い申し上げます
なお、サーバはapache2.4.10、OSはDebian8.0です
0611デフォルトの名無しさん (ワッチョイ db9e-J7KC)2018/09/04(火) 21:34:32.07ID:8BTVVQRQ0
include('/path/file.txt');
include('http://www.example.com/path/file.txt');
って何か違いはありますか?
0614デフォルトの名無しさん (ワッチョイ a3d0-hHnA)2018/09/05(水) 16:46:47.73ID:dwWFM3zt0
公式のmail()とmb_send_mail()のページを見ていたのですが、
mail()のsubjectは表題、messageはメッセージ、
mb_send_mail()のsubjectは件名、messageは本文となっていました。
これは何かが違うということでしょうか。
くだらない質問と思いますが、よろしくお願いします。
0619デフォルトの名無しさん (ワッチョイ 969e-O+me)2018/09/06(木) 17:01:57.65ID:kzkzi/Yy0
<form method="get" でsubmitした場合、
$_GETを使うのが普通だと思うのですが
$_POSTでも値が取れるのですが、そういうもんですか?
0622デフォルトの名無しさん (ワッチョイ 969e-O+me)2018/09/06(木) 20:05:38.46ID:kzkzi/Yy0
>>621
WordPressなんですが、
form タグを埋め込んでbuttonクリックでsubmitしているので間違は無いと思います。
でも何故か$_GETでも$_POSTも値が取れるんです。
0624デフォルトの名無しさん (ワッチョイ 8b80-f65Y)2018/09/06(木) 21:15:35.52ID:64ZwjQvb0
methodをgetでサブミットしてるなら
HTTPプロトコルではcontent bodyの部分は空になる
そういう仕様だからな
つまり通常postで取得できる部分はからっぽ

methodをpostでサブミットしてるなら
そういう状況はHTTPプロトコルでも十分にありえる
uriにurlエンコードされた文字列が含まれる状況でpostしたケースならありえるということになる

ちなみにオレはスクリプトの変数にその値がどう格納されるかは知らない

質問してるヤツは

 getでサブミットしてんのになんでそんなことがおきんの?

というのが質問の主旨と理解した
低学歴知恵遅れがその質問をどう解釈したかは知らない
0627デフォルトの名無しさん (ワッチョイ 8b80-f65Y)2018/09/06(木) 22:27:25.22ID:64ZwjQvb0
はい低学歴知恵遅れ図星
ごまかそうとしても
もうバレてるからな

分かりやすいわ。。。
0630デフォルトの名無しさん (ワッチョイ 569f-vdZN)2018/09/06(木) 22:59:57.65ID:bmlthp5L0
冗談とは言え、とりあえずパケットキャプチャしてみたら?に行き着いて欲しかったんだけどな。
その後、フレームワークなりの変数の検査するとか。

やり方を切り分けて絞り込んでいかないといけない。
0631デフォルトの名無しさん (ワッチョイ 7ad0-O+me)2018/09/07(金) 09:44:56.47ID:9ghtkfrV0
PHPを始めたのですが分からないことがあるので教えてください。

https://qiita.com/mpyw/items/2f9955db1c02eeef43ea
上記ウェブサイトに次のコードがあるのですが、配列?を使用する理由を教えてください。

if (!isset($_POST['email'])) {
 $errors[] = 'Eメールアドレスが送信されていません';
} elseif ($_POST['email'] === '') {
 $errors[] = 'Eメールアドレスが入力されていません';
}

よろしくお願いします。
0633631 (ワッチョイ 7ad0-O+me)2018/09/07(金) 10:16:38.86ID:9ghtkfrV0
>>632
このような使い方もあるんですね。
教えてくださり、ありがとうございました。
0634デフォルトの名無しさん (ワッチョイ 7ad0-O+me)2018/09/09(日) 16:54:11.51ID:kcIkPUJb0
HTMLとPHPを使ってメールを送信するため、次のように書いたのですが、良いか悪いか判断ができません。
右も左も分からないため、どのようなことでも構いませんのでアドバイスをください。
メールは【入力】→【確認】→【送信】の流れで送信されます。
どうか、よろしくお願いします。

【input.php】
https://ideone.com/cEGHAA



【check.php】
https://ideone.com/R9GueN



【thanks.php】
https://ideone.com/R2mR1b
0636634 (ワッチョイ 7ad0-O+me)2018/09/10(月) 14:59:46.15ID:Jh3v7l2E0
>>635
アドバイスありがとうございます。
辞書を引いたら納得しました。
さっそく反映したいと思います。
0637デフォルトの名無しさん (ワッチョイ 569f-vdZN)2018/09/10(月) 20:03:31.22ID:LEZi3nV80
ネタにマジレスしてるんで、仕方ないからチラ見してみた。
このスレのダメな例の集大成みたいだな。

受け取った値の長さに制限を掛けて、巨大データを受け入れないようにする。
HTML側でもmaxlengthやtype="email"やrequiredを使うと気休めになるかも。
PHP側でも長さをチェックする。

filter_inputの使い方が違う。
受け取った価をあえて$_SESSIONに入れてどうする?
それは使わずに$subjectとかに代入する。

mail関数に入れるデータはエンコードするか、mb_send_mailを使う。

あとは動いてるならいいんじゃない?
0639デフォルトの名無しさん (ワッチョイ 532a-5rD0)2018/09/11(火) 12:49:51.36ID:swAVBRLl0
class内のプロパティに関数って指定できないでしょうか?

class Test {
public $date = date("Y-m-d");
}

というイメージです。これを記述しても
Parse error: syntax error, unexpected '(', expecting ',' or ';'

というエラーが出るので無理だと思っているのですが、
できる方法があれば教えてください。
0642634 (ワッチョイ 7ad0-O+me)2018/09/11(火) 17:53:48.50ID:sA/7deNB0
>>637
アドバイスありがとうございます。
次を課題に学習を進めたいと思います。
・HTMLとPHPで値の長さに制限を掛ける
・filter_inputの使い方を理解する

mail関数に関してもmb_send_mail関数と合わせて考え直します。
セッション変数については入力されたデータを持ちまわる体で使用しようと考えているのですが、type="hidden"の方が良いのでしょうか。
今は自身の理解が不足しているので、もう一度最初から取り組みます。

アドバイスありがとうございました。

>>638
アドバイスありがとうございます。
やはり既存のサービスの方が安全ですか。
今は自身のために勉強したいと思います。

アドバイスありがとうございました。
0646634 (ワッチョイ 7ad0-O+me)2018/09/12(水) 08:16:38.34ID:uWMSldyR0
>>643
参考URLありがとうございます。
hiddenとセッションの使い分けを勉強します。
0647デフォルトの名無しさん (ワッチョイ 569f-vdZN)2018/09/12(水) 08:31:17.86ID:t1WfAWi+0
>>646
う、うん。
でも一番はそこじゃないんだな。
スーパーグローバル変数を書き換えるべきではないのに、
そらをしてしまっているところね。
そもそもスーパーグローバルを使わないためのfilter_inputだから。
最初は誰でもそんなもんだから頑張ってね。
0648634 (ワッチョイ 7ad0-O+me)2018/09/12(水) 08:36:21.52ID:uWMSldyR0
>>647
さっそく勘違いしてしまいました。
アドバイスありがとうございます。
0649デフォルトの名無しさん (ワッチョイ 5e92-fTNn)2018/09/12(水) 11:26:01.33ID:/jhmkHwQ0
どうしてもわからないので質問お願いします。

私はWindows7でxamppを使いPHPを動かしています。
類似画像の比較のため「libpuzzle」というライブラリを使いたいのですが、インストールのやり方がわかりません。
インストールが簡単とのことで下記のページを参考にしようと思っているのですが、何をやっているのかわかりません。

https://fei-yen.jp/maya/wordpress/blog/2011/05/05/php%E3%81%A7%E7%94%BB%E5%83%8F%E3%81%AE%E9%A1%9E%E4%BC%BC%E5%BA%A6%E5%88%A4%E5%AE%9A%E3%81%AE%E3%81%A7%E3%81%8D%E3%82%8B%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA/

ひとまず「libpuzzle-0.11.tar.bz2」はダウンロードしました。
0650デフォルトの名無しさん (ワッチョイ 569f-vdZN)2018/09/12(水) 12:09:08.51ID:t1WfAWi+0
そのURLを見たけど、tarファイルを展開してLinuxでコンパイルしてるよね。
この時点でWindowsはまったく該当しないので見てもわかるわけない。
Windows用のコンパイル済みバイナリをインストールするのが正解かと。
それか、そのファイルをWindowsで自前コンパイルするか。
0651デフォルトの名無しさん (ワッチョイ 5e92-fTNn)2018/09/12(水) 12:24:56.89ID:/jhmkHwQ0
ありがとうございます。

いくつか調べてlibpuzzleがC言語で作られているはわかりました。
Windowsだとsoファイルではなくdllファイルで動かすみたいだから
libpuzzle.cをコンパイルしてdllにする、という感じなのでしょうか?
0655デフォルトの名無しさん (ワッチョイ 569f-vdZN)2018/09/12(水) 19:23:24.37ID:t1WfAWi+0
>>654
そう。
言われてハッとしたんだが、もしかして俺すげー嘘ついてる?
フレームワーク無しなら$_SESSIONに代入せざるを得ないか?
何かもう忘れたわ。

適当な記憶でたまに嘘ぶっこくから少し自重する。
0657デフォルトの名無しさん (ワッチョイ 96d5-tygy)2018/09/12(水) 21:31:55.13ID:bjh9HqnE0
>>655
うん、$_SESSION はこれを直接触る以外のアクセス方法は無いと思う。
そしてセッションのクリアとか考えるのも面倒なので、今回のケースだと hidden の方が手軽だと思う。
0658デフォルトの名無しさん (ワッチョイ 5e92-fTNn)2018/09/12(水) 23:14:04.91ID:/jhmkHwQ0
libpuzzleはインストールが困難と判断したので、
他のものを調べたところ、Perceptual Hashが良さそうだったので変更しました。

コンポーザーをダンロードして、インストールはできました。

ですが、実行すると「Uncaught Error: Class 'Jenssegers\ImageHash\ImageHash' not found」といったように認識されません。
Windows7のXAMPPだとuseの書き方が違うのでしょうか?
ソースは以下の通りです。


use Jenssegers\ImageHash\ImageHash;
use Jenssegers\ImageHash\Implementations\DifferenceHash;

$hasher = new ImageHash(new DifferenceHash());
$hash = $hasher->hash('path/to/image.jpg');

echo $hash;
// or
echo $hash->toHex();
0662デフォルトの名無しさん (ワッチョイ 17b3-+ow7)2018/09/13(木) 08:13:46.95ID:1dHQYyj40
投稿フォームは、確認画面なくすと session 使う必要がなくて、スマートな実装になるよ。
そもそも確認が必要な内容かどうか検討してみると良いです。
確認が必須なら、モーダルで一旦表示させて投稿させると UX も向上して happy。
ただ、画面はちょっとややこしくなるけどねぇ。。。
0666デフォルトの名無しさん (スッップ Sdbf-t6RF)2018/09/14(金) 11:13:27.37ID:LYVyvVvXd
提唱者が逃げ出したから、
こういう時にどう使ったら良いか
教えてくれない
0669デフォルトの名無しさん (ワッチョイ 97b8-Moip)2018/09/16(日) 09:00:18.99ID:yeSA5Nar0
考えられるパターンとしては
1.入力値の検証はせずそのまま出力する
2.入力値の検証はせずhtmlspecialcharsを使う
3.入力値の検証→問題はないのでそのまま出力
4.入力値の検証→問題なのでhtmlspecialcharsを使う
5.入力値の検証→問題はないがhtmlspecialcharsを使う
6.入力値を出力前に無害化してそのまま出力

1は当然やっちゃだめ
6は元の入力値と異なる可能性が生まれるので使うなら重要でない箇所限定(非推奨)
5は冗長だが5が一番おすすめ
0670デフォルトの名無しさん (ワッチョイ 9f80-bWaM)2018/09/16(日) 19:43:02.43ID:Fs79WbqO0
phpの質問じゃないかもしれないんだけど
URLから指定のディレクトリにアクセスした時に
ファイル名が何だろうと指定のファイルを参照させることって出来ますか?

hoge.com/rand/test.txt
hoge.com/rand/aaa.jpg

randディレクトリにアクセスしたら
ファイルの有無に関わらず
hoge.com/rand/index.phpを参照させて
test.txtやaaa.jpgのURL文字列に応じて
phpが振る舞いを変えてコンテンツを表示させたいです

そんなこと可能でしょうか?
0675デフォルトの名無しさん (ワッチョイ ff81-okpm)2018/09/17(月) 01:27:02.97ID:aY8QKU/10
>>671
mod_rewriteを使って、

RewriteCond %{REQUEST_FILENAME} hoge.com/rand/(.*)$
RewriteRule ^hoge.com/rand/(.*)$ %1/%2/index.php?q=$1

こんな感じでリクエストを書き直す?
うまく行くかちょっと自信ない
0677デフォルトの名無しさん (ワッチョイ bfd5-Un1/)2018/09/17(月) 12:21:19.45ID:hbuTlOjm0
>>676
その方がいいと思うよ。
HTMLを修正する理由と処理を修正する理由は大抵違うから、それぞれ分けておくと都合がいいと思う。
分業の面でもいいし、処理の見通しも良くなる。

ただそう作るなら、表示(見た目)のためのコードは処理側から排除するのがいいと思う。
エスケープはもちろん、例えばマイナスの数値を表示するのに▲を付ける仕様だったとして、それを行うコードはHTML側に実装する感じ。
処理側で▲付きの文字列を作るようなことするとカオスになっていく。
0678デフォルトの名無しさん (ワッチョイ bfd5-Un1/)2018/09/17(月) 12:29:30.95ID:hbuTlOjm0
>>676
そしてPHPはHTMLを分けるというのが非常に簡単にできるから、やらなくちゃ損くらいに思った方がいい。

<?php
:
いろいろ処理;
:

include 'gamen.html';
?>

みたいに include するだけで表示されるんだから。
実際には gamen.html にはわずかなPHPコードも入る純粋な HTML ではないから拡張子を .html とするよりは、.php なり .tpl(テンプレート)なりそれっぽいのにしておくといいと思う。
案外 .php にしておくと、ブラウザからそれを直接見てもPHPのコードは直接見えないから手軽な安全策かも。
0680デフォルトの名無しさん (アウアウカー Saeb-Gwc+)2018/09/18(火) 18:36:46.23ID:LS9+DTCza
今回乗っ取りが可能な脆弱性が発見されましたが、その脆弱性を試したいです。
どうすればいいのでしょうか?
0681デフォルトの名無しさん (ワッチョイ 97b8-Moip)2018/09/19(水) 12:22:09.46ID:hsm6EpoV0
Bug #76582が原因らしいからバグレポート読んでみたら?
再現コードも書いてるよ
まぁ単にXSSが可能だったってだけでそれ以上でもそれ以下でもないが
0682デフォルトの名無しさん (ワッチョイ bf4b-72gh)2018/09/19(水) 20:12:04.29ID:2g+A18ll0
laravelを始めようと思うのですがrailsと比べて何が良くて何が悪いのか聞きたいです
僕自身railsはチュートリアルやったくらいしか知りません
0683デフォルトの名無しさん (ワッチョイ 2d8a-Lcjh)2018/09/20(木) 08:52:56.46ID:2cUVSblD0
set_file_buffer (stream_set_write_buffer)が動作しないということが2003年ごろから言われているみたいですが
今さっき検証してみたところやはり-1が返ってきて動作していないようです
何故こんな関数が未だに存在しているのか、わかる方よろしくお願いします
http://jp2.php.net/stream_set_write_buffer
0684デフォルトの名無しさん (ワッチョイ 82d0-Y82R)2018/09/21(金) 10:36:19.22ID:0nwAv71v0
POSTされた値を最初に変数に代入してから検証するのと、
検証してから変数に代入するのとでは安全性に違いはありますか?

変な質問で申し訳ない(´・ω・`)
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
なるほどわかりました
それで一つ質問なのですがある端末の識別情報を別の端末が偽装して使って成り済ます
という事はどうやって防ぐのでしょうか?
0771デフォルトの名無しさん (ワッチョイ c723-WBp8)2018/10/11(木) 13:51:16.45ID:Ub0lOJUx0
その質問はまず偽装の方法を自分で調べて理解してからの方がいいよ
偽装の方法によって対策が変わるんだからそんなざっくりとした質問は答えようがない
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
何をしたら良いか分からないはずと言うのは、かなり甘い見通し
ゲーム会社はそんな甘い考えは持っていない
例えばクライアントソフトをデバッガー環境下で起動されると
サバクラ間のやり取りの相当部分が解析されてしまう
ゲーム会社はそれをさせまいと独自のメモリ保護機構を構築し
そのようなハッキングを検出したら終了させている
0788デフォルトの名無しさん (ワッチョイ 27e4-PLlx)2018/10/13(土) 10:43:20.37ID:vROhTmSS0
>>787
いやいや、言い方が悪かったか。
何も出来ないんだよ。毎週変えられたら実質解析なんて不可能なんだから。
やるべきことをやった上での話なのは当然に決まっとろう…
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
0849デフォルトの名無しさん (ワッチョイ f39e-YQEo)2018/10/18(木) 21:10:48.74ID:RrGSa6XE0
自分も誤読した立場なんでどっちでも取れるレスだったなあと思えたけど、
こうやって一々煽りに来るのが一番悪いと思いますね
いつまで続けるんです?
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はバインドしてないから
文字扱いにしてるんやろね
んで、文字列でシングル使いたいから全体はダブルで括るという
0867デフォルトの名無しさん (ブーイモ MMf3-JP9K)2018/10/28(日) 06:36:36.32ID:75+SpqZNM
SQLでは文字列リテラルはシングルクオーテーションで囲まないと駄目ってだけだぞ
SQL文として正しくなるように文字列を組み立ててるだけって事を理解しろ
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')
だったらクォートいらないけどな
0871デフォルトの名無しさん (ワッチョイ 859e-o1DS)2018/10/31(水) 09:43:19.86ID:J8G9WBiJ0
http://php.net/manual/ja/language.variables.scope.php

例1 global の使用
を実行すると3ではなくて2になるのですが、なぜですか?
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']ってする癖をつけておくべきだと俺は思うけどな
0913デフォルトの名無しさん (ワッチョイ 769f-4Mp1)2018/11/05(月) 20:22:17.03ID:Wuac1AE/0
xamppでPHPUnitの連続実行ってどうやるの?
shスクリプトでは複数行書けば全部実行してくれる。
batファイルだと最初の1行を実行して終了する。
おま環?
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文をつなげられないようにしている
0993デフォルトの名無しさん (ワッチョイ 73e9-Kv/S)2018/11/27(火) 19:01:55.97ID:aBLKPQ100
>>991
そのコードだと、trim(fgets(STDIN))の値が (bool) true であった場合に永久ループになるw

実際は

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


こう書くべき処理なのでは?
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判定されて終わっちゃうんじゃないか
試してないけど
0996デフォルトの名無しさん (ワッチョイ cf80-fhi1)2018/11/28(水) 12:01:30.07ID:eIHsuPDh0
Ruby では、nil, false の偽が2つだけ。
一方、JavaScript, Python, PHP などは、偽が10個ぐらいあるから、超危険!

基本的に、Ruby 以外は、バグってどうしようもない
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;
}

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


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

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

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

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

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