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

レス数が1000を超えています。これ以上書き込みはできません。
PHPに関する質問スレです

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

次スレは>>980以降
本文の1行目に以下を追加すること
!extend:on:vvvvv:1000:512
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured

関連リンク
■PHPマニュアル    http://www.php.net/manual/ja/
■日本PHPユーザ会  http://www.php.gr.jp/
■PHPNG        https://wiki.php.net/phpng
■メーリングリスト   http://ml.php.gr.jp/mailman/listinfo/

(以下英語)
■公式リポジトリ     http://git.php.net/
■PHP-RFC       https://wiki.php.net/rfc
■PECL          http://pecl.php.net/
■Composer       https://getcomposer.org/
■Packagist        https://packagist.org/
■Zend Tech. Ltd.    http://www.zend.com/

フレームワーク(一部)
■Zend Framework   https://framework.zend.com/
■Symfony        https://symfony.com/
■Laravel         https://laravel.com/
■CodeIgniter       https://codeigniter.com/
■Yii            http://www.yiiframework.com/
■FuelPHP        https://fuelphp.com/
■CakePHP        https://cakephp.org/

テンプレートエンジン(一部)
■Twig           https://twig.symfony.com/
■Blade          https://laravel.com/docs/5.1/blade

evernoteのENEXファイルをパースする処理を書いていますが

$str = '<?xml version="1.0" encoding="UTF-8"?>
<en-note><div>てすと</div><div>てすと</div></en-note>';


$xml = simplexml_load_string($str);


var_dump($xml);

とすると
object(SimpleXMLElement)#1 (1) {
["div"]=>
array(2) {
[0]=>
string(9) "てすと"
[1]=>
string(9) "てすと"
}
}
となり、en-note要素がどこかにいってしまいます
en-noteを取り出してasXML()したいのですが、
何故かsimplexmlオブジェクトの中にありません
en-noteという名前が悪いのかと思ってdivとかhとかにしてみましたが
それでも一番外側の要素はsimplexmlオブジェクトに入っていません
何故こうなるのでしょうか?

4デフォルトの名無しさん (アウアウウー Sa8f-BQEm)2018/01/08(月) 13:03:30.26ID:4m/0uKGZa
>>3
これ消えているのではなくて、
一番外側のオブジェクトがまさにそれですね?
xmlタグが一番外側の要素で、
その次のタグがその子要素になると思い込んでいました

shell_execなどは、mod_phpから実行した時には
何か制限を受けるのでしょうか?
echo shell_exec('"C:/Program Files (x86)/Evernote/Evernote/ENScript.exe" exportNotes /q "ほにゃらら"');
これでevernoteのノートを出力出来るはずなのですが
mod_phpから呼び出した時には何も表示されません
コマンドラインから呼び出すと普通に表示されます
echo shell_exec('cd')
のように単純なコマンドで試すと、mod_phpでも問題なく実行されています
メモリ制限の問題かと思ってmemory_limitを-1にしても何も変わりません

>>5についてですが
外部実行ファイルはドキュメントルート下に置かないと実行できないみたいな情報があったので
ENScript.exeを呼び出すバッチファイルをドキュメントルートに置いて実行してみましたが駄目でした
mod_phpからwhoamiを実行すると
nt authority\systemという権限で動いていることが分かりました
この権限が制限を実現しているのでしょうか?

また、セーフモードではありません
外部プログラムの制限についてドキュメントに書いていないのが解せません…
Windows版だけの現象なのでしょうか

Evernoteとか使ったことないから知らんけど, その実行者の権限で見える, 見えてよい或いは見えるべきものを扱ってんの?

Evernoteは非常に個人的なものなので、
確かにウェブサーバからデータが見えたらどうなのかっていうのはありますね
自分用アプリを作るためにApacheとブラウザを使っていましたが
本来ウェブサーバはネットに公開するためのものなので
権限が低くされるのも当然といえば当然。
そう考えるとウェブサーバを使ったアプリ構築を脱却して
Electronとかを使って作った方がいいですね
ありがとうございました

10デフォルトの名無しさん (ワッチョイ 1fae-nOrU)2018/01/10(水) 13:35:01.59ID:70pYzGse0
include先での$_POSTの参照について質問です。
index.html(httpd.confいじってhtmlファイルでもphp使えるようにしてる)からfile1.phpをincludeし、file1.phpの中でfile2.phpをincludeしています。(処理の関係上そうしたい)

index.htmlにPOSTがあった場合に、file1.phpでは$_POSTを参照出来るのですが、file2.phpからは何故か出来ません。
index.htmlで直接file2.phpをincludeするとPOSTの参照は出来ます。

そこら辺のルールに詳しい方いましたら解説していただけないでしょうか。よろしくお願いします。

11デフォルトの名無しさん (ワッチョイ 6661-QpsD)2018/01/13(土) 10:49:54.90ID:By98rTnD0
$_POSTに上書きしちゃってる可能性

12デフォルトの名無しさん (ワッチョイ 85c3-3Ttg)2018/01/20(土) 00:15:59.55ID:MzOH7w6y0
ドがつく素人です。
しょーもない質問ですいません。

【困りごと】
ドキュメントルートにphpinfo関数を実行するファイルを作成したが、
ブラウザ上でうまく表示されない。(スクリプトの記述のまま表示されてしまう)

【状況】
ApacheとPHPをインストールしたんですが、
以下URLのようにphpinfoコマンドで記述したphpを、
ドキュメントルートに入れて、http://localhost/phpinfo.php
実行したのですが、

<?php
phpinfo();
?>

と、スクリプトの記述そのまま表示されてしまいます。
何か設定ミスだとは思うのですが、なかなか原因が分からず・・・・

【URL】
https://i-bitzedge.com/php/how-to-use-phpinfo

13デフォルトの名無しさん (ワッチョイ 755d-GP+B)2018/01/20(土) 01:00:58.30ID:6KDbA8qD0
XAMPPじゃなくてApacheとPHPを個別に手でインストールしたのか?
手でインストールするならApache側の設定を修正してPHP用モジュールをロードする必要があるぞ

何か今になってもXAMPPやらApacheやらの導入を最初にやらせるサイト結構あるけど, きちんとしたWebサーバが本当に必要になるまではPHPのビルトインサーバが楽でいいよ

http://php.net/manual/ja/features.commandline.webserver.php

14デフォルトの名無しさん (ワッチョイ 0b80-H9dj)2018/01/20(土) 01:12:47.90ID:6q5j1Hcg0
>>5-9
その書き方で、notepad は、起動できるのか?

もし起動できるのなら、ENScript.exe に与える引数がおかしいのかも

15デフォルトの名無しさん (ワッチョイ 559f-x16F)2018/01/20(土) 01:32:09.29ID:bSTKludV0
>>12
ちな俺はXAMPP/Windowsで使っているけど、最初からPHPは使えた。
(もちろん13の言うとおり、最初から設定してあるという意味で)

一般論になるが、環境の立ち上げはずぶの素人だと辛い。
(はまった場合に回避できない)
だから13の言っていることは正しくて、知らないのならまずはお手軽環境でやったほうがいい。
XAMPPも十分お手軽だし俺はいいと思うけどね。
最初からガチ鯖で、というのも一理あるのだが、それは後付けの意見でしかないことも多い。

16デフォルトの名無しさん (ワッチョイ 0b96-Qbx4)2018/01/20(土) 10:53:53.90ID:bpfiGwqM0
初めてc#でプログラミング始めたんですが、
Visual studioを使ってると頻繁に行末に移動する「end」やカーソルキーを使いたくなるけど、
ショートカットってないんでしょうか?
nemacsとかだとctrl+eとかで行末に移動してくれたようなおぼろげな記憶があるんですけど。

17デフォルトの名無しさん (ワッチョイ 0b96-Qbx4)2018/01/20(土) 10:54:20.52ID:bpfiGwqM0
ほんとくだらない質問ですいません。
ググったけどショートカット見つからなかったもので。

スレタイ読めねぇほどバカなのか

19デフォルトの名無しさん (ワッチョイ 5dd2-k4Q3)2018/01/22(月) 17:07:06.70ID:YXQIUh040
>>12
AddHandler とかFilesMatch とかが
コメントになってるだろう
AddHandlerはファイルを特定する方法が甘いから使い方注意だが

20デフォルトの名無しさん (ワッチョイ 27e9-7ZJK)2018/01/26(金) 16:45:32.90ID:aV9eTo+Y0
よくあるファイルアップロードフォームと受け取り側PHPの構成なんですが、
アップロードされたファイル名がマルチバイトだと文字化け・・・というより、「あ.txt」なら「あ.txt」
となってしまいます。

Windows + XAMPP 環境ですが、

mb_convert_encoding($uploadfile, "SJIS", "auto");

mb_convert_encoding($uploadfile, "CP932", "auto");

を行っても結果は変わりません。
何かチェックすべき項目を見落としていると思うのですが、お助け下さい。

21デフォルトの名無しさん (ワッチョイ 27e9-7ZJK)2018/01/26(金) 16:47:17.43ID:aV9eTo+Y0
おうふ

「あ.txt」が「&#12354;.txt」(半角)となります。

22デフォルトの名無しさん (ワッチョイ 27e9-7ZJK)2018/01/26(金) 17:20:40.16ID:aV9eTo+Y0
自己解決しました。
これでいけますね。
mb_convert_encoding($uploadfile, "SJIS", "HTML-ENTITIES");

ところで、これって環境によって不要だったりするのですか?

23デフォルトの名無しさん (ワッチョイ ef99-fPTX)2018/01/27(土) 15:17:32.64ID:MzrwFkn+0
$a = [
[1, 5],
[9, 1],
[8, 2],
[1, 2],
];

みたいに宣言しているところがあって、これの2個目と3個目を変数で宣言したいわけよ


$a = [
[1, 5],
$b,
[1, 2],
];

みたいに。

この時 $b にはどういう入れ方すれば最初の形を再現してくれます?

無理じゃね

25デフォルトの名無しさん (ワッチョイ ef99-fPTX)2018/01/27(土) 17:00:21.87ID:MzrwFkn+0
やはりか

$b = [
 [9, 1],
 [8, 2],
];
にしちゃうと形変わっちゃうよな?

26デフォルトの名無しさん (ワッチョイ e365-4wfc)2018/01/27(土) 17:16:07.80ID:mUh+GRjL0
array_merge使うのがいいと思うが

27デフォルトの名無しさん (ワッチョイ 566a-grVD)2018/01/31(水) 21:00:18.89ID:68O1HbzJ0
Docコメントはツール使って書いてますか?
それとも使わず書いてますか?(*´ڡ`●)

28デフォルトの名無しさん (ワッチョイ bf6a-qmJt)2018/02/02(金) 20:59:07.10ID:angTjduf0
忘れてください(`・ω・´)ゞ

29デフォルトの名無しさん (ワッチョイ f72a-CNA0)2018/02/03(土) 19:45:51.02ID:bLLjGwhG0
画像アップロードする時に、1つのフォルダにアップロードするのではなく、
/年/月/ファイル名

とわける方法があります。(WordPressとか)

しかしこの場合、ファイルを編集(入れ替える)時に以下の処理が必要になります。

1:編集するファイルの登録日を取得
2:1のフォルダ内にファイルが存在するか確認
3:存在していたら削除する
4:更新日のフォルダを作成
5:4のフォルダにファイルをアップロード

この処理を行うと「登録日のフォルダにファイルがひとつも存在しない」
と言った可能性があり、空フォルダになります。

空のままにしたくない場合は
{他にファイルが存在しない場合はフォルダごと削除}
と言った処理も必要になります。

ファイルをDBで管理している場合は、何度もクエリーを投げる必要があり、
無駄が多い気がするのですが、いかがでしょうか?

30デフォルトの名無しさん (ワッチョイ 1781-hxSR)2018/02/03(土) 22:08:01.43ID:uf1OevP30
>>29
ファイル操作はDB更新とは別に出来るだろう
PHP単独でファイル存在チェック、削除、DIR操作、アップロードやって
DBは必要な事だけすれば良いんじゃないの?

31デフォルトの名無しさん (ワッチョイ 1774-2GDW)2018/02/03(土) 22:11:48.87ID:w5tgMa2Q0
Readに対してWriteの回数は極めて少ないと思えば大した問題ではないのでは

32デフォルトの名無しさん (ワッチョイ f72a-CNA0)2018/02/04(日) 00:58:09.63ID:e+yYqllI0
>>30-31
ご意見ありがとうございます。
WordPressとか他のCMSを見たのですが、
一度登録した画像を編集(作り直す)のは止めようと思います。
無駄が多いですし、ファイル操作で入れ替えるみたいな処理もおかしい気がして。
入れ替えるなら一旦削除してアップロードし直すのが通常だと思いますし

33デフォルトの名無しさん (ワッチョイ 57b3-ycng)2018/02/07(水) 20:59:50.48ID:MJqvUrQe0
例えば↓みたいなループがあったとして、<br>
error_logがなかったら0.001秒で処理が終わって、
ある場合は5秒くらいかかるんだけど、error_logって結構コストの掛かる処理なん?

for ($i = 0; $i < 100000; $i++) {
error_log("hoge");
}

ちなみに手元の環境はPHP7.2.0

34デフォルトの名無しさん (ワッチョイ 9dd2-7Au1)2018/02/08(木) 12:29:07.56ID:E75692Mg0
ログを実際にコンソールに出してるなら
その分遅くなる、もし出してるならファイルにリダイレクトしてみ

35デフォルトの名無しさん (ワッチョイ 8237-nHV3)2018/02/09(金) 21:42:53.67ID:DI5fWWyV0
すいません。
mysqliで接続されません。
dbサーバーとwebサーバーは同一です。
ワードプレスを導入しているのですが、そちらはインストールされて記事等もdbに入って更新も出来ます。
phpadminも入りました。

ただそれ以外のページからだと接続すらできてないです。(接続を行うとエラーも出ない上、phpが空白で表示される。echo等も死ぬ)

何か考えられる原因等ありますか?phpの権限とかですか?

36デフォルトの名無しさん (ワッチョイ 8237-nHV3)2018/02/10(土) 00:18:04.71ID:Yu/cvnD90
自己解決しました

37デフォルトの名無しさん (スップ Sdc2-nQD2)2018/02/13(火) 11:26:59.19ID:2Q2AHgA2d
質問させてください。
JWTを使いたいです。
HTTPでリクエストして、レスポンスとしてJSON形式のテキストを受け取る際の署名にJWTを用いたいです。
JSONに電子署名をして、URL-safeな文字列にする手順の規約、と言うのは分かりましたが具体的にはどうすればそうなるのか分かりません。
署名する処理は JwtHS256Encodeメソッド でやりたいです。
hash_hmac()は使ったことがあります。
具体的なソースコードなど提示してくれるとありがたいです。
とんちんかんなことを言っていたらすみません。
よろしくお願いします。

38デフォルトの名無しさん (ワッチョイ 3174-jA6l)2018/02/13(火) 12:03:56.31ID:cOH/iFjL0

39デフォルトの名無しさん (スップ Sdc2-nQD2)2018/02/13(火) 12:49:59.79ID:2Q2AHgA2d
>>38
ありがとうございます!
まだ試してないんですが、軽く目を通したところdownloadの文字があるので何かしらのファイルをダウンロードしてどっかのディレクトリに置いておいてその都度呼び出して使う、みたいな感じのものなんですかね?
とりあえず一回色々やってみます!

>>39
とりあえずcomposerでググれ

4137 (ワッチョイ 2205-EuZI)2018/02/14(水) 21:58:29.96ID:TtACcl/J0
簡単ではありますが報告を。
composer使ってphp-jwtインスコして>>38のサンプルにrequire_onceでjwt.php指定して
でecho $jwtしてやったら暗号的な英数字がだだーっと出たので使い方はわかった気がしてます。

42デフォルトの名無しさん (ワッチョイ 3174-jA6l)2018/02/14(水) 22:25:21.84ID:X6WT15xX0
composer使うならvendor/autoload.phpをrequireすればよかろう

43デフォルトの名無しさん (ワッチョイ f7e0-T3WU)2018/02/16(金) 06:19:14.89ID:W1XJdyx10
☆ 日本の、改憲を行いましょう。現在、衆議員と参議院の
両院で、改憲議員が3分の2を超えております。
『憲法改正国民投票法』、でググってみてください。国会の発議は
すでに可能です。平和は勝ち取るものです。お願い致します。☆☆

44デフォルトの名無しさん (ワッチョイ ae3b-x4Or)2018/02/22(木) 22:26:42.20ID:JaCEqDtL0
switch-case文について質問です。
通常こういった条件式は自分で書いていくと思うのですが、このcaseリストを
ここより前に定義して動的にcaseを増やしていくことは可能でしょうか?

switch ($i) {
case "A";
break;
case "B;"
break;

}の
caseを一か所に記述して(A,B,C,D,…)と後から編集したらcaseの部分も動的に記述されたことになる
というのは可能ですか?ということです

なんと表現したらいいかわからないのでわかりにくいと思うのですが、
わかるかたおられましたらご教授ください。

45デフォルトの名無しさん (ワッチョイ 7974-x4Or)2018/02/23(金) 00:16:33.70ID:heeL5/0a0
何でそんなことが可能だと思ったのかご説明頂けるかな?

何がしたいのか分からんけどエスパーするとそういうことはState/Strategyパターン使ったらええんちゃう

46デフォルトの名無しさん (ワッチョイ 0e81-snzV)2018/02/23(金) 00:42:42.74ID:kCRA+Aya0
エディタなり開発するフレームワーク側で補完してくれるかと聞いているのかな

47デフォルトの名無しさん (ワッチョイ 019f-SJjx)2018/02/23(金) 00:46:17.66ID:Hlk4jzyw0
>>45
Java鹿は死ねよ。欠陥言語使っているからそんな発想しか出来なくなる。

>>44
それは関数ポインタをハッシュに入れてcaseのところで引くんだよ。

48デフォルトの名無しさん (ワッチョイ ae3b-x4Or)2018/02/23(金) 21:22:58.57ID:859K0GLT0
>>47
うまいことできましたありがとうございます!
>>45
なんでそんなことが不可能だと思ったのか
ご教授頂けるかな?

49デフォルトの名無しさん (ワッチョイ d49f-GaPa)2018/02/24(土) 15:35:12.76ID:YXQeh0ci0
cakephp3.5を使ってるんですが、
フォルダ名はsrcなのに
namespaceやuseの指定はappなのはなぜですか?

50デフォルトの名無しさん (ワッチョイ 7974-x4Or)2018/02/25(日) 14:13:11.68ID:bGLkxUMu0

51デフォルトの名無しさん (アウーイモ MM2b-RQfV)2018/03/02(金) 12:53:23.46ID:YTlkYdzxM
/zzz/a.php
/xxx/b.php
のように
a.php , b.php を別々のフォルダに用意して
b.phpでrequire (a.php)した時にb.phpのあるフォルダ名xxxを返すには
a.phpになんと記述すればいいですか?

52デフォルトの名無しさん (ワッチョイ 87e9-k3ZN)2018/03/02(金) 13:05:46.96ID:pRJ4HJDk0
>>51
とりあえず
print_r(debug_backtrace());
って書いてみ

>b.phpでrequire (a.php)した時にb.phpのあるフォルダ名xxxを返す
この考え方自体が間違ってる気がするので
もっと前の段階の「結局何がしたいのか?」を書いた方がいいかもな

53デフォルトの名無しさん (ワッチョイ df80-zeCZ)2018/03/02(金) 13:44:06.10ID:mIGjbFX+0
a は、b からrequire されるので、b はa の場所を知っているけど、

aは、どのファイルからrequireされるのか、あらかじめ分からないはずだから、
aからbの場所は、わからないはず

54デフォルトの名無しさん (ワッチョイ 87e9-k3ZN)2018/03/02(金) 14:16:46.22ID:pRJ4HJDk0
debug_backtrace()を勧めてるぐらいだから
さすがそれぐらいは分かってるw

aからbの場所が知りたい時(requireしたファイルのパスが知りたい時)
ってじゃぁどんな時よ?って話を俺はしてる
autoloadとか使えば済む話なんじゃないかと思ったもんでね

55デフォルトの名無しさん (ワッチョイ bf76-m1UI)2018/03/02(金) 14:54:30.21ID:d+rY3YvF0
>>52-54
どんな時というかやりたい操作は、
b.phpがあるフォルダ名をDB名にしていて、
a.phpには接続先のDBに対する処理を書いていたので
b.phpがあるフォルダによって動的にa.phpの処理をする、です。
debug_backtrace()で値が返ってこず
色々試していたら
$watgame = $_SERVER['SCRIPT_NAME'];
$watgame = explode("/",$watgame,-1);
$watgame = $watgame[2];
で取得できました。お騒がせしてすいませんでした。

56デフォルトの名無しさん (ワッチョイ 87e9-k3ZN)2018/03/02(金) 15:47:35.06ID:pRJ4HJDk0
>>55
なるほど
dirname(__FILE__);
をオススメしとく

57デフォルトの名無しさん (アウーイモ MM2b-RQfV)2018/03/04(日) 22:44:50.40ID:85QkEt6wM
配列にしたhtmlを一つつなぎで
出力するのって
$output= implode("", $html);
ってするのが普通ですか?
他にいい方法ありますか?

58デフォルトの名無しさん (ワッチョイ bf71-7ORe)2018/03/04(日) 22:48:34.40ID:NLYmVhvS0
出力したいだけなら普通にforeachでいいんじゃないの

59デフォルトの名無しさん (アウーイモ MM2b-RQfV)2018/03/04(日) 23:25:14.60ID:85QkEt6wM
>>58
ありがとうございます。

とりあえず変数に1つつなぎにしておいとく場合なら
上記のようにimplodeでつなぐという認識で間違いないでしょうか?

自由でいんじゃね

61デフォルトの名無しさん (アウアウカー Sabb-En5O)2018/03/06(火) 09:19:42.58ID:Ejp9PzXia
>>59
どんな感じでhtmlが入ってるかによるけど
出力するときに配列の中にあるやつをエスケープしたりhtmlspecialchars
したり変数を展開したりするんだったらforeachとかあたりの方がいいんじゃね?
テンプレートエンジン使ったほうがいいかもしらんが

62デフォルトの名無しさん (ワッチョイ 27b8-8otX)2018/03/06(火) 13:23:07.10ID:HCeE6DOL0
配列を順に出力するだけならforeach
配列をくっつけて別の変数にしたいならimplode
implodeしたあとに何かをするわけでないなら
おとなしくforeachで出力すべき

63デフォルトの名無しさん (ワッチョイ 7feb-YJwB)2018/03/06(火) 23:15:13.68ID:1vXAI1T90
phpを7から5にインストールしなおして
php.info()を表示させようとしたんですが

PHP Fatal error: Unknown: Failed opening required '/var/www/html/index.php' (include_path='.:/usr/share/php:/usr/share/pear') in Unknown on line 0

というエラーが出ます
どこがまずいんでしょうか?

OSはubuntu16です

64デフォルトの名無しさん (ワッチョイ 87e9-k3ZN)2018/03/07(水) 11:19:38.20ID:DyyIOy9m0
>>63
'var/www/html/index.php'
をrequireしようとしたけど
そんなファイルはないぞというエラー

とりあえず
<php

書いてるまんまなので
これを読んで意味が理解できないようではこの先苦労するかも

65デフォルトの名無しさん (ワッチョイ 87e9-k3ZN)2018/03/07(水) 11:20:30.40ID:DyyIOy9m0
変なタイミングで送信してすまない

とりあえず
<php
phpinfo();

とだけ書いた適当なファイルを1個用意して
それを表示してみればいい

66デフォルトの名無しさん (ワッチョイ 87d2-tbYy)2018/03/07(水) 15:05:17.25ID:nuhunf1G0
<?php

67デフォルトの名無しさん (ワッチョイ 5beb-9gxW)2018/03/08(木) 00:53:30.35ID:Niz7TFw70
>>65
ありがとうございます

やってみたけどブラウザが真っ白なままでした
permissionも755にしてます

68デフォルトの名無しさん (ワッチョイ 23b3-FnNq)2018/03/09(金) 00:42:10.02ID:lzIhgFgZ0
PHP7で関数の戻り値を指定できるようになったので、
function test(int $i) :int {
if ($i != 1) {
return false;
}
return $i;
}
上記のような関数の場合、戻り値の型が複数あるためfalseの際にエラーになるかと思います。

PHP5時代では上記のようなコードを書くことができましたが、
今後(PHP7以降)では推奨されないようになっていくのでしょうか?
また今まではif文で判定してダメならfalseを返すという関数をよく書いていたのですが、
今後上記のようなコードは避けるべきなのでしょうか?

69デフォルトの名無しさん (ワッチョイ 73b8-NCig)2018/03/09(金) 03:00:34.50ID:ciB3VK7a0
mixedを指定できるようにする案は提案されてるけど話し合いの段階に至ってない
ビルトイン関数がmixed返すならしょうがないけど
ユーザ定義関数なら7.1から使える?intでNULL許容してint or NULL返すのも考慮してみては
7.2からはobjectも返せるからオブジェクトで包めばどうにでもなるけど

なんやこの糞コード…

71デフォルトの名無しさん (ワッチョイ 23b3-FnNq)2018/03/09(金) 09:33:46.53ID:lzIhgFgZ0
>>69
ありがとうございます。
?intで実装してみます。

>>70
クソコードというのは返り値がint or booleanになっているからでしょうか?

>>71
>>70ではないがいくら動的型付け言語とはいえ、戻り値の型が違うのはあまりお行儀がよろしくないと思う

73デフォルトの名無しさん (ワッチョイ 0b74-uQtz)2018/03/09(金) 11:21:10.75ID:2KAyapC60
完全に同意するんだけどPHPの標準関数がそうなってるから何も言えねぇ

74デフォルトの名無しさん (ワッチョイ 6676-uQtz)2018/03/10(土) 17:49:48.91ID:g4l3jXG40
phpでcookieみたいにlocalstorage扱うことできますか?

75デフォルトの名無しさん (ワッチョイ 0b74-uQtz)2018/03/10(土) 18:03:05.47ID:zHYllTGn0
localStorageってクライアントサイド実装だと思ってたんだけど俺の理解が間違ってたかな

76デフォルトの名無しさん (ワッチョイ 6676-uQtz)2018/03/10(土) 18:10:47.87ID:g4l3jXG40
cookieもクライアントサイドだから
同じように扱えないかなと思ったのですが
違うのでしょうか?
トンチンカンなこと言ってたらすいません

77デフォルトの名無しさん (ワッチョイ 73b8-NCig)2018/03/10(土) 19:20:34.01ID:NQUwT7o+0
localStorageAPIをPHPで実装すれば可能だろうけど
そのような実装があるかは知らないな
Cookieのように仕様が単純なら簡単に実装できるだろうけど
でもそれをPHPでやる意味は・・・?
DB使ったりJSONやシリアライズ使ったり他の方法をとるべきだと思うね

78デフォルトの名無しさん (ワッチョイ 6676-uQtz)2018/03/10(土) 19:43:13.33ID:g4l3jXG40
jQueryやjavascriptが切り貼りで動かせる程度の知識しかなく
PHPとmySQLなら色々と慣れていてやりやすいので
なんとかならないかなと思った次第です
色々と調べて他の方法探してみます
ありがとうございました

79デフォルトの名無しさん (ワッチョイ 73b8-NCig)2018/03/10(土) 19:49:40.80ID:NQUwT7o+0
あ、Cookie要求ヘッダーを$_COOKIE['key']で扱えるという話かな?
だとすると無理ですね
Cookieのようにヘッダーに含めてやり取りするわけじゃないので
そもそも小細工しなければlocalStorageからのデータかどうかも分からないし
小細工してls_keyとかの名前でpostすれば$_POST['ls_key']で取れるのでは

80デフォルトの名無しさん (ワッチョイ 663b-rkOG)2018/03/13(火) 06:41:43.09ID:3S6NtZAK0
cron.phpを
function Cron ($table) {
require_once("./pdo.php"); //DB接続
$sql = "SELECT `feed` FROM `{$table}`";
$stmt = $pdo->query($sql);
}
として、他のrun.phpから
require_once("./cron.php");
Cron("aclass");
としてもエラーはでないのですが
require_once("./cron.php");
Cron("aclass");
Cron("bclass");
とするとFatal error: Uncaught Error: Call to a member function query() on null
とエラーがでるのですがこれはどのように修正すればよいのでしょうか?

81デフォルトの名無しさん (ワッチョイ 3fc9-0aB1)2018/03/13(火) 10:52:58.55ID:RXShV79h0
cron.phpを

require_once("./pdo.php"); //DB接続
function Cron ($table) {
$sql = "SELECT `feed` FROM `{$table}`";
$stmt = $pdo->query($sql);
}

こうしたらいいんじゃね?

82デフォルトの名無しさん (アウーイモ MM1f-edyV)2018/03/13(火) 19:54:39.54ID:mdBQKmC7M
そのようにしたら
Cron(“aclass”)だけでも
同じエラーがでました

83デフォルトの名無しさん (ワッチョイ 2fe3-eXi2)2018/03/13(火) 20:42:12.63ID:Xu1UKUsw0
$pdoがpdo.phpでグローバルになっていない、とかのヲチでは?

84デフォルトの名無しさん (ワッチョイ be81-uQtz)2018/03/13(火) 21:18:41.23ID:U9FOV+VD0
>>80
function Cronの最後の所で
$pdoと$stmtにnullを代入してみたら?

8580 (アウーイモ MM1f-edyV)2018/03/14(水) 00:06:06.83ID:0ajxFWw5M
どちらをやってもうまく動きませんでした
設計を大幅に変えて他のやり方で試して見ます
ありがとうございました

86デフォルトの名無しさん (ワッチョイ be80-csLy)2018/03/14(水) 00:11:37.24ID:QheYb9tS0
>>74-79
Node.js では、

cookie はクライアントから、
HTTP request headers の、cookie に入れられて、サーバーへ送られる

一方、LocalStorage は、Form のhidden などに自分で詰めて、
サーバーへ送るように書く

87デフォルトの名無しさん (ワッチョイ be80-csLy)2018/03/14(水) 00:26:02.24ID:QheYb9tS0
結局、こういうSQL文になるのだろ。
だから、aclass, bclass のテーブルが無ければ、エラーになる

SELECT feed FROM aclass;
SELECT feed FROM bclass;

88デフォルトの名無しさん (ワッチョイ 0b74-uQtz)2018/03/14(水) 00:46:02.96ID:PZuim+KR0
設計がキモいからアレだけど

require_once("./pdo.php"); //DB接続
function Cron ($table) {
global $pdo;
$sql = "SELECT `feed` FROM `{$table}`";
$stmt = $pdo->query($sql);
}

じゃね

89デフォルトの名無しさん (ワッチョイ 3fe9-hn8E)2018/03/14(水) 10:29:49.46ID:VrVVPjKa0
いや設計からやり直すで正解
requireやらglobalやら何年前の話だw

90デフォルトの名無しさん (ワッチョイ 8f7c-eXi2)2018/03/14(水) 11:04:36.09ID:k2P8bAPR0
それはそうだけど、globalに限らず、PHPの悪いところを知ることはとても重要だ。

91デフォルトの名無しさん (ワッチョイ 7e9e-0aB1)2018/03/14(水) 12:46:27.39ID:nr/g/ZaE0
phpで他のサイトのhtmlを読み込む方法を教えて。

92デフォルトの名無しさん (ワッチョイ 3fe9-hn8E)2018/03/14(水) 12:54:58.15ID:VrVVPjKa0
組み込み関数使う一番簡単な方法は
$html = file_get_contents('http://');

guzzleとかスクレイピングしたいならGouttteとか
何らかのライブラリを使った方がいいとは思うが
たぶんそういうレベルじゃないよね

93デフォルトの名無しさん (ワッチョイ 663b-uQtz)2018/03/14(水) 18:27:19.65ID:0BiLJwj+0
>>89
こういった操作をするにはどう設計するのが
いいんでしょうか?

94デフォルトの名無しさん (ワッチョイ 3fe9-hn8E)2018/03/14(水) 19:43:27.01ID:VrVVPjKa0
>>93
Magento最新版のソース辺りでも見てみれば?
>>80のソースコードはPHP4時代を彷彿とさせるし
10年は古いと思っておいて間違いない

95デフォルトの名無しさん (ワッチョイ 09fb-NGr0)2018/03/15(木) 21:50:22.39ID:Qb1XFtti0
Call to a member function query() on null

これは2回目のquery()を呼びだせていないエラーじゃないの?
require_once("./pdo.php");してるから1回目は呼び出せる。
だけど、2回目は読み込まれないから呼び出せない。
require_onceだから。

96デフォルトの名無しさん (ワッチョイ 6b3b-/kXb)2018/03/16(金) 05:55:28.99ID:Rb17xQxt0
PHP質問スレ無能さ自慢大会開催してるのに
本質ついてくるのやめろ

97デフォルトの名無しさん (ワッチョイ ebe9-hKdO)2018/03/16(金) 06:05:56.53ID:gZCff7dQ0
英語が出来るかどうかってプログラミングの習得効率をだいぶ変えるよな

98デフォルトの名無しさん (ワッチョイ 1be9-MOYc)2018/03/16(金) 10:23:55.97ID:tytL0PIQ0
PHPみたいなスクリプト言語のエラーメッセージって
中学レベルの英語力で理解できると思うけど
英語アレルギーな人はちょっとエラーが出ただけで
もうダメだ〜おしまいだ〜ってなるっぽい
ソースはプログラミング言語の講師経験がある俺

英語力以前に問題解決能力の問題

99デフォルトの名無しさん (ワッチョイ 45ed-CAlO)2018/03/17(土) 13:01:40.05ID:gJ/QHesH0
下らない質問します

PHP でフォルダのファイルを監視することは出来ますか?

初心なので、どういう仕組みにすれば良いのか、よくわかりません。

まず、各種センサーデバイスから、任意のフォルダにデータがUSB やLAN で放り込まれます。
(例log.txt)日時、デバイス番号、温度℃、湿度%
20180316,12:45:32,978456321,18,36
20180316,12:45:32,978456321,18,36

100デフォルトの名無しさん (ワッチョイ 45ed-CAlO)2018/03/17(土) 13:05:39.17ID:gJ/QHesH0
カンマ区切りのログデータを監視して
20180316,12:45:32,978456321,18,36

更新されたら、MySQLにアップデートして
ウェブページを見たら温湿度状態が表示されるようにしたいです。

よろしくお願いいたします。

101デフォルトの名無しさん (ワッチョイ ebc9-0FUd)2018/03/17(土) 13:56:59.02ID:RbO0oToK0
PHPのお仕事にも出来るが、単純に、Cronのお仕事にした方が良いと思いマッスル。

102デフォルトの名無しさん (ワッチョイ ebb8-B9xj)2018/03/17(土) 22:08:41.96ID:dntUHK5y0
set_time_limit(0);
$size = filesize("test.log");
while (1) {
 clearstatcache();
 $tmp = filesize("test.log");
 if ($size < $tmp) {
  $fp = fopen("test.log", "r");
  fseek($fp, $size);
  $data = fread($fp, $tmp - $size);
  fclose($fp);
  //$dataを整形してupdate
  $size = $tmp;
 }
 sleep(60); //インターバル
}

ログが追記されることを想定して
ログが0になったり途中に追記されたりおかしくなるのまでは想定してない
まぁ>>101

10399-100 (ワッチョイ 45ed-CAlO)2018/03/18(日) 19:13:17.39ID:8gph5VGe0
>>101
CronというのはLinux でしょうか?
win7proでも出来るのかよくわかりません。
検索してみます。ありがとぉごじゃりまスルメ。

104>>99-100 (ワッチョイ 45ed-CAlO)2018/03/18(日) 19:15:42.94ID:8gph5VGe0
>>102
出来ました。完璧です。誠にありがとうございました。

105デフォルトの名無しさん (ワッチョイ 8781-hKdO)2018/03/18(日) 19:18:04.80ID:CAYOd0hL0
windowsの場合はタスクスケジューラって言うのがあってそれで同等(?)のことが出来る

106デフォルトの名無しさん (ワッチョイ 2de4-B9xj)2018/03/19(月) 16:50:04.15ID:YxMyNHU90
ファイル変更をトリガーとするのはLinuxではincrontabってのがあるみたいだけど
Windowsだと
https://forest.watch.impress.co.jp/library/software/folderkanshi/
こういうの使うといいっぽい
やってることは>>102と大差ないけど

107デフォルトの名無しさん (ワッチョイ 779f-hKdO)2018/03/20(火) 17:14:51.77ID:isVnec710
アップローダーを作りたいのですが作り方を教えてください
プログラミングはC#しかやったことありません
初心者向けのphpの本やサイトなどがあると嬉しいです

108デフォルトの名無しさん (ワッチョイ 43d2-H2VO)2018/03/20(火) 21:09:56.52ID:ZUZCPXH00
C# を 学ぶ時に googleは 使いましたか?
php アップローダー で 検索すると  作り方 を 一通り 
紹介する ページが 出てくる と思います よ

109デフォルトの名無しさん (ワッチョイ dfe4-B9xj)2018/03/20(火) 22:51:05.80ID:iQ0ukGuu0
アップロード処理
http://php.net/manual/ja/features.file-upload.post-method.php

htmlのformからphpにpostする
php側ではグローバル変数(配列)$_FILESにアップロードされたファイルの情報が入るので
それを操作する(デフォルトではテンポラリフォルダに入るので保存フォルダに移動したりリネームする)

あとはアップロードフォルダを読み取って中にあるファイルリストとリンクを表示するなり
投稿者のコメントやら削除やら高度な管理が必要ならデータベースやらに情報入れてそれ使うなりお好きに

110デフォルトの名無しさん (ワッチョイ 779f-hKdO)2018/03/21(水) 14:40:17.92ID:u4wtWd010
ありがとう!
右も左もわからないくらいの超初心者だけど頑張って作ってみる

111デフォルトの名無しさん (ワッチョイ fa6c-mRzn)2018/03/23(金) 17:19:12.88ID:D5VJHy400
スレ違いだったらすみません
ネットの中の情報ってどこかに保存されてて僕はそれを引き出して見てるんですか?もしそうだったらどこに保存されてるんですか?
曖昧な質問すみません

112デフォルトの名無しさん (ワッチョイ c7e9-fzSc)2018/03/23(金) 18:27:48.68ID:R9lXxg8x0
いわゆるサーバー
とりあえず仮想環境でサーバー作ってみて
慣れたらどこか適当なところでVPSでも借りて好きにやってみればいい
サーバーを触れないPHPerなんて話にならん

113デフォルトの名無しさん (ワッチョイ 9aad-fzSc)2018/03/23(金) 21:09:42.83ID:es4801GY0
サーバーを触れるようになるにはlinax系のOSも勉強しないといけませんか?

114デフォルトの名無しさん (ワッチョイ 1ad2-QTIh)2018/03/23(金) 23:25:31.14ID:2DgZhzwv0
linux知識は必須だ
せっかくこんなスレにくるくらいだから
LAMPシステムの概要読んだり
apacheでhttpサーバー立ち上げたり
php.ini読むことから始めてみては?

それやった上でのhello world は感慨深いものがあるぞ

115デフォルトの名無しさん (ワッチョイ c7c9-3KaU)2018/03/24(土) 10:28:57.13ID:xLRXLjE70
>php.ini読むことから始めてみては?

ええぇぇぇ…

116デフォルトの名無しさん (ワッチョイ 7671-9mdf)2018/03/24(土) 10:49:10.52ID:g1GPKhFr0
サーバもよくわからんレベルに勧める話かなあそれ

117デフォルトの名無しさん (ワッチョイ f68a-fzSc)2018/03/24(土) 13:25:20.05ID:j9SPmTfd0
>>113
私の場合、WindowsのPCにVirtualBoxで仮想マシンを仕立て、そこにLinuxをインストールしてます。
これに >>114 のようにそれぞれ個別にapache、PostgreSQL、PHPを入れて遊んでますね。

118デフォルトの名無しさん (ワッチョイ 4ee4-NuQV)2018/03/24(土) 16:46:27.21ID:1+DXMJWu0
LinuxっていってもデスクトップはWindowsと変わらないけど
いわゆるガチのサーバ機はデスクトップ環境でやらないので
WindowsならDOSプロンプトで遊ぶところからがいいのでは

119デフォルトの名無しさん (ワッチョイ 4e81-zkh5)2018/03/24(土) 16:53:10.58ID:qYWJwKPe0
>>107が希望しているアップローダーは、どこに置いて実現したいのかな

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

それとも、どこかのレンタルサーバーを借りて、そこにPHPスクリプトを置いて
WindowsPCはレンタルサーバーのHTMLを使い、ブラウザでフォームを表示させ、
そのフォームに手元のファイル名を指定し、ボタンを押してアップロードする?

120デフォルトの名無しさん (ワッチョイ dbf7-gBYh)2018/03/27(火) 23:04:42.45ID:yJnfuO2v0
諸事情でララベルしなきゃいけないんだがSQLが俺は全く出来ないていう状態なんだが
ララベルとSQLはそれぞれ並行してやった方がええかな?分担してやった方がええかな?

121デフォルトの名無しさん (ワッチョイ c7e9-fzSc)2018/03/28(水) 10:37:13.14ID:r6P5fkin0
Laravelみたいなフレームワークは
普通はSQL文を直接書かずにクエリビルダーを通すんだが
何らかのフレームワークは使った事あるのかね

その質問レベルで分業できるのか疑問

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

どの道ララベルとMySQLを覚えなきゃいかんのだが、今は最優先でララベルで二、三個モノを作らなきゃいかん
ガチれば一夜漬けでSQLデータの出し入れ位は出来るようなるかな?

123デフォルトの名無しさん (ワッチョイ db14-yiKA)2018/03/29(木) 01:14:54.39ID:Nvn7VfZa0
なる。今からやれよ

124デフォルトの名無しさん (ワッチョイ d1f7-f7sf)2018/03/29(木) 03:24:11.08ID:6VZpXAAL0
>>123
おおありがとうな
本当にやったんだがMySQLのインスコ時に沢山エラー出ただけで
phpから中身吐くの簡単やなぁ

125デフォルトの名無しさん (ワッチョイ 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']としても値を得れません

データベースのカウント後を受け取るにはどう書けばいいんでしょうか?

126デフォルトの名無しさん (ワッチョイ 93ad-uaFS)2018/04/02(月) 14:06:22.32ID:1ZK7Ts6x0
データベースのcountを普通の変数として受け取りたいです。

127デフォルトの名無しさん (ワッチョイ b9d2-d1ON)2018/04/02(月) 15:38:47.00ID:tUzkKP1X0
たぶん名前はcountになってると思うけど
SQLのほうで as つけて好きな名前にしたら確実かと思う

128デフォルトの名無しさん (ワッチョイ d108-bCzG)2018/04/02(月) 20:38:33.73ID:cnm0+0Yi0
>>126
$count = $stmt->fetchColumn();

129デフォルトの名無しさん (ワッチョイ 93ad-uaFS)2018/04/03(火) 09:34:38.07ID:vHkqWM6i0
>>128
ありがとうございます
できました。

130デフォルトの名無しさん (ワッチョイ b9d2-d1ON)2018/04/03(火) 12:25:18.58ID:FsceX5l00
$count['count'] か
$sql = 'select count(bang) as bang from tbk';
でもよかったのよ、ってこれ意味わからなかったのか

131デフォルトの名無しさん (ワッチョイ 93ad-uaFS)2018/04/03(火) 17:32:37.82ID:8BbSY5bZ0
>>130
ありがとうございます
理解できてませんでした
$count['count'] のほうではできませんでしたが
$sql = 'select count(bang) as bang from tbk';のほうでcount['bang']としたら通りました。
難しいですね・・・

132デフォルトの名無しさん (ワッチョイ c69e-6Vn5)2018/04/07(土) 05:27:46.16ID:dDGDds4R0
include_once って読み込むファイルを http://・・・ で指定する方法は
無いの?

133デフォルトの名無しさん (ワッチョイ 4ad2-2KfT)2018/04/07(土) 20:02:10.23ID:MtEcxTjp0
php.iniでallow_url_includeをOnにして
include_onceすればオッケー

134デフォルトの名無しさん (ワッチョイ 4ad2-2KfT)2018/04/07(土) 20:04:48.52ID:MtEcxTjp0
なお

135デフォルトの名無しさん (ワッチョイ 5d74-vJpg)2018/04/07(土) 21:54:01.07ID:wQfk+GMe0
おっけーだけど実際何もおっけーじゃねぇな, HTTPとか正気の沙汰ではない

136デフォルトの名無しさん (ワッチョイ 8681-vJpg)2018/04/07(土) 23:51:41.07ID:xgDbOcv/0
>>131
$sql = 'select count(bang) from tbk';
このままで実行したときは、

$count['count(bang)'] に入っている

137デフォルトの名無しさん (ワッチョイ c69e-6Vn5)2018/04/08(日) 10:00:09.99ID:8Q7B3DS20
>>135
>HTTPとか正気の沙汰ではない
なんでよ?

改竄されたら任意コード実行に直結やぞ
せめてちゃんとした証明書付きのHTTPSは必要
それでも何か嫌だけど

139デフォルトの名無しさん (ワッチョイ c69e-6Vn5)2018/04/08(日) 14:40:24.98ID:8Q7B3DS20
>>138
>改竄されたら任意コード実行に直結やぞ
それは今回の質問の件と関係なく
改竄された時点で危険なんじゃないの?

140デフォルトの名無しさん (ワッチョイ 5d74-ovq6)2018/04/08(日) 14:49:16.99ID:ZJwweAqK0
>>139
中間者攻撃をご存じないか?

141デフォルトの名無しさん (ワッチョイ 4dad-lfby)2018/04/08(日) 22:47:34.68ID:QubCLyU70
>>136
var_dumpで調べたとき確かそうでました。
そのまま括弧もつけて書くとは思いませんでした。
勉強になります。ありがとうございます。

142デフォルトの名無しさん (ワッチョイ a17b-6Vn5)2018/04/09(月) 04:13:29.94ID:/CzDp9JH0
文法を一通り習って、Laravelなるフレームワークが主流と聞いて調べてみたのですが、自分の知ってるPHPとだいぶ違って面食らいました。
これはオブジェクト指向プログラミングなるものを習えばわかるようになるのでしょうか?
公式のドキュメント読むとルーティングとかコントローラーとか解説なしで当然のごとく出てきて激鬱です。
何をすればLaravelが使えるようになるか書籍・ウェブサイト等、指針を示して頂きたいです。

143デフォルトの名無しさん (ワッチョイ 86b8-QncF)2018/04/09(月) 05:52:33.60ID:pdsBUMq90
フレームワークはコーディングにルールや制約を持たせることで
簡単に構築できるようになってるので
自分の知らないことや言葉に惑わされず
とりあえず書かれてる通りに従って真似してみればいいだけだよ
サンプルを何個かやってくうちにどんなもんかわかるだろうし

144デフォルトの名無しさん (ワッチョイ 5d74-vJpg)2018/04/09(月) 05:55:00.05ID:REpY3VRE0
>>142
とりあえずLaravelのチュートリアルでもやったらいいんではないか
あとMVCの基本的な構成は勉強してもいいかもね

145デフォルトの名無しさん (ワッチョイ 4ad2-kuJV)2018/04/09(月) 08:24:42.06ID:xFzcbrnT0
フレームワークまじでわからん
内容や構造を理解、構築しようとするのではなく、ひたすら「手法」を学べ
ってアドバイスされたがそれでもわからん、ってかこのアドバイス本当にあってんの?俺の頭がイカれてるのかと思い始めてきた

146デフォルトの名無しさん (ワッチョイ 3e14-3orc)2018/04/10(火) 00:12:53.40ID:cSkLylsH0
>>145
どれほどやったの?

>>145
フレームワークは構造を理解した上で使うもの。職場でそれ言われたんならすぐ他行ったほうがいい。

148デフォルトの名無しさん (ワッチョイ a17b-6Vn5)2018/04/10(火) 04:47:34.57ID:RNPBEaXU0
>>143-144
ありがとうございます
とりまやってみます

149デフォルトの名無しさん (オッペケ Sred-6wO2)2018/04/11(水) 02:01:00.17ID:mBTJQa8Ur
48都道府県名が格納されてる配列があるとして
例えば東京都が格納されてる配列番号を知りたいときはpreg_grepとprint_rを使った結果を確認すればいいみたいですが
検索して結果の配列番号だけを変数に格納するにはどうすればいいのでしょうか?

150デフォルトの名無しさん (ワッチョイ 86b8-QncF)2018/04/11(水) 05:07:22.04ID:RGen9FXo0
下手にarray系の関数使うよりforeachでやったほうがたいていパフォーマンスはいい

151デフォルトの名無しさん (ワッチョイ 86b8-QncF)2018/04/11(水) 06:16:19.84ID:RGen9FXo0
と書いてみて気になって測ってみたけど
array_searchのほうが早かったな
php5時代の常識はもはや通用せんね

152デフォルトの名無しさん (ワッチョイ b9e9-lfby)2018/04/11(水) 12:26:22.50ID:beJeAwMY0
>>149
$ken = ['東京', '京都', '大阪'];
$kenFlip = array_flip($ken);
var_dump($kenFlip['京都']);

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にこういうのありますか?

作りゃいいじゃん

155デフォルトの名無しさん (アウーイモ 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以外も対応している

156デフォルトの名無しさん (ワッチョイ 8aeb-Mp6C)2018/04/20(金) 20:18:51.62ID:JYYXAoL40
グラフ画像を作って保存したいんですけど簡単なライブラリみたいなのってありませんか?
グラフを表示するhtmlやCSSをはくとかはあるみたいなんですけど
グラフ画像を作るのはさがしてもみあたらなくて…

157デフォルトの名無しさん (ワッチョイ 8aeb-Mp6C)2018/04/21(土) 02:18:17.85ID:GJF07GGo0
レンタルサーバーを借りてphpの勉強はじめたんですけど

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

関数全部に@つけるのも微妙だし
何かの拍子でアカウント名みえちゃうのいやなんですよね

レンタルサバのエラーディスプレイいじれるんならいじる

159デフォルトの名無しさん (ワッチョイ b365-9jjH)2018/04/21(土) 08:51:13.24ID:rs60STnG0
.htaccessか.user.iniでdisplay_errorsをoffにしてerror_logを設定しておくのが普通では

160デフォルトの名無しさん (ワッチョイ 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
ってなってるんですけどこれどこに表示されるんでしょうか

エラーがまったく表示されないのもそれはそれで困るかも…

161デフォルトの名無しさん (ワッチョイ b365-9jjH)2018/04/22(日) 00:03:29.49ID:ZgYxHCJE0
>>160
だからerror_logを指定城

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

デフォルトのエラーメッセージに絶対パスを表示させたくないだけなんですけど結構大変なんですね…

163デフォルトの名無しさん (ワッチョイ 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

164デフォルトの名無しさん (ワッチョイ 8aeb-Mp6C)2018/04/22(日) 11:55:07.76ID:pMZeO9w/0
うまくいかない…

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

せっかく丁寧に回答もらったのに申し訳ないんですがもうパス表示されたままであきらめます
phpのコードの勉強がしたいのにサーバーの設定だけで土日つぶれそう…

165デフォルトの名無しさん (ワッチョイ 8713-9jjH)2018/04/22(日) 12:15:18.27ID:RCbhuHms0
xamppでもいれて自鯖でやれよ
レンサバでやる意味がわからん

166デフォルトの名無しさん (ワッチョイ ff73-fvqh)2018/04/22(日) 22:52:07.39ID:6Gp3Qhv/0
>>164
<?php
ini_set('display_errors', 0);
ini_set('log_errors', 'On');
ini_set('error_log', '/home/アカウント名/サーバー名/errors/error.log');

167デフォルトの名無しさん (ワッチョイ 8aeb-Mp6C)2018/04/23(月) 15:07:39.91ID:jrWtf7ql0
>>16
ありがとうございます

/homeからのパスを設定しないといけなかったんですね…
php.ini に設定すればログがふえるようになりました
本当に感謝です

168デフォルトの名無しさん (ワッチョイ 8aeb-Mp6C)2018/04/23(月) 15:08:09.54ID:jrWtf7ql0
アンカ >>166 さんでした

169デフォルトの名無しさん (ワッチョイ 93ad-c97c)2018/04/26(木) 02:51:42.22ID:4mqP60uz0
c言語から勉強初めてjava→html/css→javascript→php→mysql→jqueryときてwordpressの本読んだけど
ウェブやるならこれだけでいい気がして今までの時間が凄く無駄に思えてきた・・・
phpとかできたほうが有利な点を教えてください・・・
モチベーションが・・・

170デフォルトの名無しさん (ワッチョイ 2be4-iMQz)2018/04/26(木) 11:41:18.07ID:vpKHU58Q0
何かウェブサービスをやりたいとか
スマホでゲームとか作ってユーザのデータを集約させるバックグラウンドが必要とかでなく
ただWebサイトを構築したいってだけなら別にWPでいいんじゃない?
モチベが欲しいならWPなしでサイト構築するためにPHP学ぶでもいいのでは?
PHPerは無駄が好きなのでJava脳で車輪の再発明嫌いな人はPHP向いてないかもね

171デフォルトの名無しさん (ワッチョイ 2be8-HzgJ)2018/04/27(金) 20:59:04.65ID:4+bpK0C+0
同じサーバー内で、自プログラムが置かれているディレクトリとは異なるディレクトリにある
ファイルを読み込みたいのですが、そのディレクトリはBASIC認証をかけています。
この場合、phpプログラムから認証を突破するための手続きはどうすればいいでしょうか?
IDとパスワードはもちろん分かっている状態です。

172デフォルトの名無しさん (ワッチョイ 2165-luqG)2018/04/27(金) 22:21:06.56ID:7/omQtan0
>>171
何か試してから聞いてる?

173デフォルトの名無しさん (ワッチョイ 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');

174デフォルトの名無しさん (ワッチョイ 2be8-HzgJ)2018/04/28(土) 02:34:18.68ID:PnxQ5sIY0
>>172-173
思い違いと動作確認でもミスがあり、何か処理が必要と思い込んでいました。
すっぱり整理してやり直しをし、無事動作することが確認できました。

どうもありがとうございました。

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

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

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

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


前提としてはここまでで、ここからが質問なのですが
5年以上前に作ったサイトの、5年以上前のフレームワークをそのまま扱っていくリスクというのは、どう見積もれば良いものでしょうか?
古いシステムをそのまま使い続けてる現場に入ったなら、どのように考えますか?
一応進言すれば、現状は変えられる可能性が高いのですが、判断に悩んでいます。

176デフォルトの名無しさん (ワッチョイ 2be4-iMQz)2018/04/30(月) 15:33:03.01ID:jgwIHR0D0
動かなくなったらまずいといいつつ、
よくわからないものをいじって、なんとなく動いてるってことだよね?
その現状に危機感を抱くべきでは?
個人がフォークしたEthnamという後継プロジェクトはあるみたいだけど、
5.4で動くなんてのをウリにしてるあたり、
オリジナルはサポート切れのPHPバージョンを使ってるのだろうけど、
それだけで十分置き換え理由になるのでは?

177デフォルトの名無しさん (ワッチョイ 2165-luqG)2018/04/30(月) 16:33:45.75ID:xsz5GBeT0
>>175
コスト面では定量してTCOで比較すればよい
リスク評価も定量して算入するならリスクを分類した上でリスク発生率と予想損失額の積で損失見積もりとする

178デフォルトの名無しさん (ワッチョイ 81eb-NYJU)2018/04/30(月) 17:17:04.35ID:jhlqCVp+0
サイトの仕様を解析して理解する所から始める。
仕様さえ分かれば、フレームワークなんて大したことないって気づきそう

179デフォルトの名無しさん (ワッチョイ 19e9-Zmkj)2018/04/30(月) 17:20:23.74ID:Fr6QpWrH0
よく知らないけど、5年以上前のフレームワークってセキュリティ的にどうなの

180デフォルトの名無しさん (ワッチョイ 2141-nMkC)2018/05/01(火) 05:57:16.67ID:YFbi6kAs0
使い道あるの?

181デフォルトの名無しさん (ワッチョイ 272b-XJxX)2018/05/04(金) 18:08:52.10ID:ZORKHZxp0
FastCGIで動かす時にアプリケーション初期化のコードは最初の1回だけ実行したい
というより予め実行済みの状態でリクエストを待機させたいんだけど、どうすればいいの?

182デフォルトの名無しさん (ワッチョイ 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)
}

でうごきますか?

ロックファイルはわける必要がありますか?
ロックがぶつかるケースをデバッグできないので大丈夫なのかどうかがよくわかりません

183デフォルトの名無しさん (ワッチョイ bfad-pRpi)2018/05/05(土) 02:45:58.52ID:r2NCQwWJ0
てす

184デフォルトの名無しさん (ワッチョイ 1ee4-jSIs)2018/05/05(土) 05:47:07.80ID:ai+BlqsN0
$fp = fopen($filename, 'c+');
if (flock($fp, LOCK_EX)) {
$buf = '';
while ($tmp = fread($fp, 1024)) {
$buf .= $tmp;
}
rewind($fp);
ftruncate($fp, 0);
fwrite($fp, $buf.$buf);
flock($fp, LOCK_UN)
}

185デフォルトの名無しさん (ワッチョイ 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)に上記を書いても折り返してくれません。

他に何かお作法が必要でしょうか?

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

なんにせよ再現できる全体ソースが出ないことには答えようがない

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

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

どうもありがとうございました。

188デフォルトの名無しさん (ワッチョイ 1fe9-bmQX)2018/05/05(土) 18:24:56.30ID:XYMHadsA0
連投すみません。
nl2brを使えばすぐでしたね。
初歩的なことですみませんでした。

189デフォルトの名無しさん (ワッチョイ 0beb-pRpi)2018/05/05(土) 21:35:48.44ID:i6PqpWH90
>>184
やっぱりロックとる場合はロックをとったファイルディスクリプタに
fread, fwriteで読み書きする必要があるんですね
コード参考にさせていただきます
ありがとうございました

190デフォルトの名無しさん (ワッチョイ 277f-U8nf)2018/05/06(日) 01:38:07.25ID:qVg6wQW80
プログラムの基本を教えてください。

一つのphpファイルが300行をオーバーしてしまったから、汎用性はないけど一まとまりの機能があって、色んな所から呼び出す処理を別のphpファイルにしてインクルードで呼び出す、
という形で小分けにしていこうと思ってますが、そんな風にバラバラにしてしまってもいいんでしょうか?

191デフォルトの名無しさん (ワッチョイ 1ee4-jSIs)2018/05/06(日) 06:09:15.48ID:P7v+SOn20
その考えの行きつく先にオブジェクト指向があるのでオブジェクト指向入門するといいかな
方向性としてはあってるのでとりあえずは思った通りにやってみては?
あと行数に関していえば1万行クラスのソースコードはざらなので(半分はコメントだったりするけど)
長い行数になったときのソースコードの管理の仕方をIDE使って覚えていくといいよ

192デフォルトの名無しさん (ワッチョイ 277f-U8nf)2018/05/06(日) 06:33:20.08ID:qVg6wQW80
>>191
返信ありがとうございます。1万行はぞっとします。とりあえずはこの方向性で行きたいと思います。

193デフォルトの名無しさん (ワッチョイ 2fe9-pRpi)2018/05/07(月) 18:56:32.81ID:VgAGErm20
>>189
ファイルロックについてはその通り
stream_get_contents()を使うと>>184よりはもう少しスッキリ書けるかと

194デフォルトの名無しさん (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);
}
}

エラーログは読んだの?
超能力者じゃない限りソースだけ貼られても分からんよ

196デフォルトの名無しさん (ササクッテロラ Sp23-a7mP)2018/05/08(火) 21:06:53.22ID:XEaTgBIDp
>>195

errorが全くでなくて、むしろ真っ白なページが表示されます・・・
関数単体だときちんとreturn viewしたページに飛んで、処理もできているのに、こっちだとできないです

197デフォルトの名無しさん (ワッチョイ 27ff-NrvC)2018/05/08(火) 21:11:07.16ID:r4cHd3Kx0
>>194
elseまで流れてるとか

198デフォルトの名無しさん (ササクッテロラ Sp23-a7mP)2018/05/08(火) 21:22:37.44ID:XEaTgBIDp
>>197
return でelse以降に入ると数値が表示させるようにして確認しましたが、今のところ流れてはなさそうです
分岐を一切作らずに
$this->create_qa($request,$session_id);
だけ入れてもおかしなことになるので、
$this->〜〜〜っていう表記が間違っているような気がするのですが何がおかしいのか全く分からず・・・

199デフォルトの名無しさん (ワッチョイ 27ff-NrvC)2018/05/08(火) 21:33:50.33ID:r4cHd3Kx0
>>198
簡単な別のメソッドを作って呼び出せるか試してみたら

200デフォルトの名無しさん (ワッチョイ 46d2-a7mP)2018/05/08(火) 21:46:05.47ID:ZabFV5ph0
>>199

引数なし、return0をするだけの別の関数を作って、同じように呼び出しをしてみましたがだめでした、
やっぱりthis〜の行が何かしら影響を及ぼしてるようです・・・

201デフォルトの名無しさん (ワッチョイ bb65-y/Bc)2018/05/08(火) 22:12:48.09ID:Wxx1HImu0
error_logでファイルにエラー吐いてないのか?
画面出力はエラー出力でHTTPヘッダとか壊れてまともにならんことも多いぞ

202デフォルトの名無しさん (ワッチョイ 46d2-a7mP)2018/05/08(火) 22:27:49.92ID:ZabFV5ph0
>>201
ためしにエラー出力してみましたが、全く何もでてないようで・・・

203デフォルトの名無しさん (ワッチョイ 46d2-a7mP)2018/05/08(火) 22:40:25.33ID:ZabFV5ph0
>>194
ですが解決しました!
分岐文の内部でreturn viewができてないのが原因でした
すみませんお騒がせしました

204デフォルトの名無しさん (ワッチョイ 6bb3-G8ur)2018/05/09(水) 00:23:01.03ID:SCT1xJRf0
変数の$〜〜の$ってなんて読むの??
ドルなんとかって読んでるんだけど間違い?

205デフォルトの名無しさん (ワッチョイ c5eb-bFqk)2018/05/16(水) 06:54:52.26ID:U06fQouG0
文字列全体を正規表現判定するのってどうすればいいんですか?

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

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

だと一部にマッチしてもtrueになっちゃうので
文字列全体で数字アルファベットしか使われてないことを確認したいです

206デフォルトの名無しさん (ワッチョイ cbb8-mmKM)2018/05/16(水) 07:46:14.68ID:kggTFXx50
^[0-9a-zA-Z]+$
そういう単純なものは正規表現使うまでもなく
他の関数が用意されてると思ったほうがいい
http://php.net/manual/ja/ref.ctype.php

207デフォルトの名無しさん (ワッチョイ c5eb-bFqk)2018/05/16(水) 07:53:08.47ID:U06fQouG0
ctype_alnumを使えばいいんですね
ありがとうございました!

208デフォルトの名無しさん (ワッチョイ 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 を検索するんでしょうか?

メモリにははいるけどキャッシュにははいらないそこそこ大きなテーブルデータを扱ってるので気になりました

209デフォルトの名無しさん (ワッチョイ 89fa-9WOx)2018/05/23(水) 19:27:20.90ID:Au5e7VGg0
僕の知り合いの知り合いができたパソコン一台でお金持ちになれるやり方
役に立つかもしれません
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』

Q3682

210デフォルトの名無しさん (ワッチョイ 29f7-KY9h)2018/05/24(木) 10:46:13.86ID:cPlRxlDn0
Q3682

211デフォルトの名無しさん (ワッチョイ 398a-EdLk)2018/05/24(木) 16:05:36.14ID:6FiN0bsr0
114.149.223.252

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

そんなのどれ使っても手軽だろw
こんなところに書いて待ってる間に処理一つくらい書けるし、
まずは分かりやすそうなのどれか一つ使って書いてみればいい

214デフォルトの名無しさん (ワッチョイ b1d2-u72h)2018/06/04(月) 11:58:13.68ID:xotzaECi0
どれもベースがGD
GDに皮をかぶせて使いやすくしたものだが皮の厚さが違う

215デフォルトの名無しさん (ワッチョイ 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);みたいなのがコンストラクタのなかにあるのって
どういうふうに動いてるのかわからないです。

216デフォルトの名無しさん (ワッチョイ b15d-ROyu)2018/06/07(木) 17:08:53.75ID:GEMO2qjs0

217デフォルトの名無しさん (ワッチョイ 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;
}

みたいなのときとかもうわけわからん

218デフォルトの名無しさん (ワッチョイ 3315-WL+L)2018/06/07(木) 17:38:09.15ID:XK0BD38x0
static::$piyoですね

219デフォルトの名無しさん (ワッチョイ b15d-ROyu)2018/06/07(木) 18:19:33.09ID:GEMO2qjs0
>>217
まんま>>216のマニュアルに書いてあるんだけど読んだの?

220デフォルトの名無しさん (ワッチョイ 3315-psTc)2018/06/07(木) 19:00:51.08ID:XK0BD38x0
>>219
書いてある?
あんまりインスタンス化して使ってるような例ないぽいけど

221デフォルトの名無しさん (ワッチョイ 3315-psTc)2018/06/07(木) 23:45:31.41ID:XK0BD38x0
>>217はClass Hogeとして
$aho = new Hoge()とするとインスタンス化した時にHogeの静的プロパティも初期化されるってことだよね。staticとparentがチェーンしてると訳わからんくなる

222デフォルトの名無しさん (ワッチョイ 3315-psTc)2018/06/07(木) 23:53:42.93ID:XK0BD38x0
Hogeを継承したpooクラスがあったらpooクラスのstaticプロパティも初期化されるけどselfとどう違うのかわからん。。

223デフォルトの名無しさん (ワッチョイ eb96-LHz9)2018/06/10(日) 00:33:54.58ID:4f+KYqKd0
トランプゲームみたいな感じで写真の入ってるカードを並べ替えさせるゲームを作ろうと思っています。

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

こういったことを簡単に実現できるおすすめの言語があったら教えてください。
使ったことのある言語はCとC#だけです。

224デフォルトの名無しさん (ワッチョイ 2176-QX4S)2018/06/10(日) 01:34:40.62ID:EYgmWGdc0
なぜPHPのスレで聞くのか?
てか、ハブリッシュするプラットフォームに依存する話しだから
それを言わないとだれも答えられない
ロジックだけ実装するならどんな言語でも作れる

225デフォルトの名無しさん (ワッチョイ eb96-LHz9)2018/06/10(日) 06:39:55.08ID:4f+KYqKd0
>>224
すいません。
スレタイ読み違えて誤爆しました・・・。

226デフォルトの名無しさん (ワッチョイ 92eb-m0US)2018/06/20(水) 05:45:13.05ID:gdouP6aq0
フォームで受け取ったデータをそのままディレクトリ名にしたいんですけど
ディレクトリ名に使われて危険な文字をはじく関数みたいなのってないですか?
. と / だけはじけば大丈夫なのかな

227デフォルトの名無しさん (ワッチョイ e976-81tK)2018/06/20(水) 08:36:32.28ID:CZWJJc7y0
入力できる文字を絞った方がいいよ
アルファベット数字のみとかにすれば一番無難
それ以外の文字が一文字でも入ってたらエラーで返す

228デフォルトの名無しさん (ワッチョイ 92eb-m0US)2018/06/20(水) 17:19:49.17ID:gdouP6aq0
なるほどー
ありがとうございます

ctype_alnumのおでましか

230デフォルトの名無しさん (ワッチョイ 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するケースだけでおかしい。
原因の心当たりって無い?

ツッコミどころだらけで笑うわ
* SSIはWebサーバの機能(スレ違い)
* その構成にする意味が分からない
* というかSSIってマジ?

232デフォルトの名無しさん (ワッチョイ c976-on65)2018/07/02(月) 21:16:52.40ID:wd1ntAgJ0
SSIって10年以上ぶりに聞いた
なんでそんなトリッキーなことしてんだw

233デフォルトの名無しさん (ワッチョイ 46d5-MIFy)2018/07/02(月) 21:25:25.66ID:WBjy4TX+0
>>231
> * SSIはWebサーバの機能(スレ違い)
あぁ、それもそうだ。おっしゃる通り。
残りについては、そういう都合があるとしか言えない。
SSI もまじ。<!--#include ... のやつな。
いろんなもの SSI してるのよ。

SSIの時点でもうアレだけど更にPHPを絡められて試す気がなぁ

235デフォルトの名無しさん (ワッチョイ c976-on65)2018/07/02(月) 22:05:59.18ID:wd1ntAgJ0
とりあえずApache側の設定か?
同期、非同期の問題ならpreforkとworkerで挙動変わるか試してみるとか
まあ、どっちにせよ激しくスレ違いな気がする

236デフォルトの名無しさん (ワッチョイ ade9-PNnE)2018/07/04(水) 02:05:21.42ID:D7cT+Okb0
更新履歴〜
みたいなページでSSI使ってたことはある
これはこれで便利やしトリッキー言うほどじゃないだろ

まあ今時としては、SSIみたいな挙動をするphpコード書くだけになるか

237デフォルトの名無しさん (ワッチョイ 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);}

238デフォルトの名無しさん (ワッチョイ 1167-HDH5)2018/07/04(水) 12:24:35.05ID:0wBgZClm0
クロージャの$hogeと最初の引数の$hogeの繋がり

239デフォルトの名無しさん (ワッチョイ 1167-HDH5)2018/07/04(水) 12:32:44.93ID:0wBgZClm0
クロージャになっても最初に渡された$hogeは生きてるんやな。。
知らなかった

240デフォルトの名無しさん (ワッチョイ 9de9-VCRa)2018/07/04(水) 13:58:24.36ID:CT674Y3Q0
>>236
PHPを使ってるんだったら
SSIの<!--#include...に該当する処理は
取り込み対象をPHPのコードとして評価したいならinclude、
文字列として評価したいならfile_get_contets()するだけの
1行で済む話

SSIはサーバー環境依存だし今どきSSIが有効になってる古いサーバーを
これから先も使い続けるのか?という疑問もある

241デフォルトの名無しさん (スププ Sd22-k7OW)2018/07/04(水) 14:03:16.97ID:YNDCbrWOd
SSIってJavaScriptもiframeタグもブラウザ標準ではなかったそれこそ10年以上前の遺物よな

242デフォルトの名無しさん (ワッチョイ 027f-7be3)2018/07/04(水) 16:51:50.97ID:n4h9hTEh0
このゲーム面白すぎてずっとやってる
https://goo.gl/2UVYAA

243デフォルトの名無しさん (ワッチョイ 45fa-2e90)2018/07/04(水) 21:46:16.37ID:gFgZc5FG0
CTP

244デフォルトの名無しさん (ワッチョイ 4281-yQv9)2018/07/04(水) 21:48:15.59ID:dy7fWBja0
メンテしているperlのサイトで確か使ってたな
phpで使おうと思うほど猛者じゃないので勘弁

245デフォルトの名無しさん (ワッチョイ bff7-SVZQ)2018/07/05(木) 16:22:58.50ID:AeL6VB/V0
CTP

246デフォルトの名無しさん (ワッチョイ bf9f-wasm)2018/07/08(日) 17:52:24.96ID:V6T9ucEP0
PHPでerrnoを取得することはできますか?

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

file_existsとis_readableを組み合わせるしかないですか?

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

ということが分かったので、適当に回避した。
apacheの設定によるところもあるかもしれないけど、そこまで検証してない。

248デフォルトの名無しさん (ワッチョイ 0776-N6TJ)2018/07/08(日) 22:36:55.30ID:QF2djuw30
なんか普通の話だな
グローバル変数なんて使ってたらそんなの当たり前だろ

>>246
自己レスです。
ググってたら、それらしきものがありました。
非推奨などもなさそうで行けそうです。
http://php.net/manual/ja/function.posix-strerror.php

250デフォルトの名無しさん (ワッチョイ e7e9-sule)2018/07/09(月) 14:41:02.89ID:p8VxNcvv0
>>247
ユーザー定義のグローバル変数や名前空間をもたない定数なんかもう何年も使ったことないけど

251デフォルトの名無しさん (ワッチョイ 6723-mSbI)2018/07/09(月) 16:51:13.69ID:snrXTXq90
よく分かってないので、スマソ。
モジュール版PHP5.3環境で動かしていたのを、

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

@、Aともにソースコードの書き換えは必須なの?
また、簡単なのはどっち?

252デフォルトの名無しさん (ワッチョイ 6723-N6TJ)2018/07/09(月) 17:11:56.44ID:P+nm3UzA0
それだけじゃなんとも言えんよ…
エスパーでも答えられんと思われ
上の話と同じでグローバル変数とか使ってるとかなら書き換える必要あるかもね
使われてるモジュールやライブラリが対応してるかどうかもあるし
同じ環境を用意して実際に動かしてテストするしかないと思う

253デフォルトの名無しさん (ワッチョイ a781-UVFs)2018/07/09(月) 17:22:57.00ID:YsFJMBw40
5.6でサポートやめたり、推奨からは図したりしたものがあれば
良くて警告、悪くて動作せずとなる
やってみないと分からないから、試験環境を作って試すのが最善

254デフォルトの名無しさん (ワッチョイ e7e9-sule)2018/07/09(月) 18:02:41.46ID:p8VxNcvv0
5.2.X⇒7.2.Xに以降した環境がいくつもあるけど
PHPコンパイルで何度かこけた(コアに取り込まれて使えなくなってるオプションがあった)ぐらいで
コードを手直しをした記憶が全くないなぁ

逆にどんな書き方をしてたら動かなくなるのやら…

255デフォルトの名無しさん (スププ Sd7f-w8Cw)2018/07/09(月) 18:09:44.47ID:U1ydYGt1d
開発を
error_reporting=E_ALL(PHP5.4以前ならE_ALL|E_STRICT)
でしてなかったりすると環境移行でエラー出まくったりするかもな
初心者はまずエラーを正しく出すところから学習しないとな

256デフォルトの名無しさん (ワッチョイ bfd5-Jsga)2018/07/10(火) 02:26:11.43ID:wjyVwwQl0
>>248
同じインスタンスで動くならそりゃそうだろって話だけど、virtual はともかく SSI が同じインスタンスで動かすのが当たり前かと言われれば微妙じゃね?
$_GET みたいなスーパーグローバルとかどうなっちゃうんだよって問題もあるし、実際出力バッファはまぜこぜになって使い物にならないわけだし。
わざわざ SSI でやるのなんて、他所の誰かが作った全く関係ないものを自分の処理と隔離してページ上に取り込みたいなんてケースだったりするわけで、隔離できないならあんまり意味が無いというか。
そういうものだということが分かってりゃやり方考えるからいいんだけど、なんでそうする?っていう仕様だと思う。
PHPそのものの問題じゃないであろうこと引っ張ってすまないけど。

257デフォルトの名無しさん (ワッチョイ 07b8-Ww/5)2018/07/10(火) 12:06:55.09ID:0tZHlanb0
前バージョンと同じように、必要なモジュール・ライブラリがロードされていて、
基本的な環境に差異がないのを前提とすれば、
あとは廃止変更された機能や関数が影響を受ける。
なので動かない場所が出てきて、書き換えが必要になる場合はあるが、
それはコードの1%にも満たないぐらいの量のはずだから、
大規模なアプリケーションでも書き換えに1日はかからないだろう。

258デフォルトの名無しさん (ワッチョイ e7e9-sule)2018/07/10(火) 16:01:47.12ID:Whumi4Kc0
>>256
> 他所の誰かが作った全く関係ないものを自分の処理と隔離してページ上に取り込みたい
SSIを使う理由になってないしSSI以外の知識がないだけ
サーバーの知識が多少ある人間なら今この時代にSSIを使うのがいかに馬鹿げているかすぐ分かる

259デフォルトの名無しさん (スププ Sd7f-w8Cw)2018/07/10(火) 16:24:53.40ID:XJrRuzBNd
SSIもhtaccessも無駄にサーバーに負荷をかけわ、遅いわ、セキュリティリスクの管理もしにくわで何1つ良いことないから無効にしろと大昔に教わったな
結構最近でもSSIインジェクションで資生堂の小会社がが情報漏えい起こしてたけど資生堂みたいな大きなところが未だにSSI使ってることに驚いた
includeしたいだけなら他にいくらでも代替案あるのにさ

SSIインジェクションやらかすようなやつはSQLインジェクションだってやらかしかねないんだから、それはSSIを使わない理由としては弱いでしょ。

261デフォルトの名無しさん (スププ Sd7f-cREG)2018/07/10(火) 16:43:24.55ID:b+YyloMOd
素人だからよく分かんないんだけど
ssiでincludeするのとhtmlで<iframe> or phpでfile_get_contents するのは何が違うの?
ssiを使う理由って何?

>>261
旧来からのスタイルを踏襲しているとか、
SSIはPHP知らなくてもHTML(と言えるか微妙だが)分かれば使えるってのもあるかもね。
サイト全部がPHPじゃないし、みんながみんなPHP使えるわけじゃないからな。
PHP使うなら PHP の include しても file_get_contents しても、適用できるなら得られる結果は一緒でしょ。

263デフォルトの名無しさん (ワッチョイ 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>+αで片付く程度の低レベルの事しかしてないね
繰り返すけど今更使う必要性は全くない過去の遺物です

264デフォルトの名無しさん (スププ Sd7f-w8Cw)2018/07/10(火) 18:40:58.20ID:b+YyloMOd
>>263
詳しくありがとう

include と file_get_contents が等価だなんて言ってないぞ。
別のコンテンツを差し込む方法として適用できるケースがあると言ってるだけで。
例えばページのヘッダやらフッタやらを別ファイルに浮かせたとして、それが include できるなら include で、file_get_contents できるなら file_get_contents で差し込めるだろ。

266デフォルトの名無しさん (ワッチョイ e7e9-sule)2018/07/10(火) 18:59:01.25ID:Whumi4Kc0
>>265
> PHP使うなら PHP の include しても file_get_contents しても、適用できるなら得られる結果は一緒
一緒じゃないでしょって話だと思う
実際全然違うし

>>266
例えばただのHTMLファイルがあったとして、それを include した場合と file_get_contents 使って出力した場合とで得られる出力結果にどんな違いがあるの?
もちろんただのHTMLじゃないものを扱おうとすれば、得たい出力を得るために適用できないこともあるよ。
>>263 の PHPのコードとして評価するというのも語弊があると思うよ。
パースはテキストとして始まるわけだから。

268デフォルトの名無しさん (ワッチョイ 475b-MSAO)2018/07/10(火) 19:24:15.15ID:lHg/M16h0
初心者も見てるだろうから実例を出しとく

・test.php
------------
test
<?php
echo $a;
------------

269デフォルトの名無しさん (ワッチョイ 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
*/
------------

この違いを理解してるならこれ以上俺から言う事は何もない

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

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

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

参考になるサイトや書籍のアドバイスなどもいただけると嬉しいです。
よろしくお願いします。

271デフォルトの名無しさん (ワッチョイ 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を書かれると、それを踏まされちゃうかもしれない。
対策はいろいろあると思うけど完璧な対策は難しく、どこかを妥協することになると思う(メール送るのやめるとか)。

272270 (ワッチョイ 2ad0-kMcx)2018/07/16(月) 14:33:10.45ID:HXh/vnsc0
>>270です。

>>271さん
詳細なレスをくださり、ありがとうございます。
今回いただいたアドバイスを元にセキュリティを強化していきます。
本当にありがとうございました。

273デフォルトの名無しさん (ワッチョイ c576-4qPP)2018/07/16(月) 15:47:41.60ID:+45YTdov0
>>272
こんなところで聞くだけじゃなく、本買ってちゃんと勉強した方がいいよ
得丸さんって有名な人が最近本出したから買って損はない

274270 (ワッチョイ 2ad0-kMcx)2018/07/16(月) 15:53:45.47ID:HXh/vnsc0
>>270です。

>>273さん
書籍情報ありがとうございます。
独学なのでありがたいです。

275デフォルトの名無しさん (ワッチョイ c576-4qPP)2018/07/16(月) 16:20:11.41ID:+45YTdov0
>>274
ごめん、名前間違えてた

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

PHPがサンプルで使われてるので参考になると思うよ

276270 (ワッチョイ 2ad0-kMcx)2018/07/16(月) 19:00:14.50ID:HXh/vnsc0
>>270です。

>>275さん
徳丸 浩ですね 了解しました。
重ね重ねありがとうございました。

277デフォルトの名無しさん (ワッチョイ ead2-1dqK)2018/07/16(月) 21:18:00.33ID:UPJrQacm0
書きっぷりから本人の気がするな

278デフォルトの名無しさん (ワッチョイ 6d5d-LQig)2018/07/16(月) 21:23:20.97ID:ui8Qw0tX0
練習なら色々気を遣うトレーニングになるからいいけど, 実際に公開する場合にはよく使われてるメールライブラリを使うべきだろうな

279デフォルトの名無しさん (ワッチョイ b5b3-Y8gp)2018/07/16(月) 21:31:31.14ID:KfOaKyfW0
>>278
スパムメール基地化に対しての対策とってるライブラリなんて見たこと無い。
正直、自動返信は鬼門だと思う

280デフォルトの名無しさん (ワッチョイ 5ed5-uzwL)2018/07/16(月) 22:09:49.12ID:S86tTn750
>>279
それはライブラリでどうこうできる問題じゃなさそうだよね。
個別にトレードオフ見て仕様化してる。
送信されることを緩和するならボットチェック(と言うのか知らんが)入れるとか、本文の悪用防止ならメールに入力本文は転記しないとか入力本文中のURLを伏せて転記するとか、
あるいはそもそもメール送らないとか、悪用元が分かってるならIPアドレスチェックして内部処理変えるとか。
本文転記のニーズは高いから難しいのよね。

281デフォルトの名無しさん (ワッチョイ 89e9-Y8gp)2018/07/17(火) 15:39:21.70ID:7HO9UDJa0
自動投稿系のスパムはハニーポットしかけるのが楽

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

初心者でも簡単に実装できるのがメリット

282デフォルトの名無しさん (ワッチョイ 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になってしまいます
親クラス側から子クラスで読み込む前提のクラスに対しての操作を書く方法はありますでしょうか?

>>282
コード無いからエスパーするとinterface使え

284デフォルトの名無しさん (ワッチョイ ffb8-2T1L)2018/07/25(水) 23:37:30.51ID:DQL2gxnr0
エスパーすると設計がおかしい

285デフォルトの名無しさん (ワッチョイ f2ab-53i4)2018/07/26(木) 12:53:46.16ID:kn/Cla8U0
少しマニアックな可能性はありますが
シーサーブログへの自作エディタを作成したいと思っています。
プルダウン方式で時刻を簡単に選んだり
その他を大分楽にすすめる事ができるのが目的です。

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

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

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

現状、攻めれそうな言語、もしくは方法を・・
本当にすみませんが、大まかなアドバイスでもいただけたら有難いです・・
よろしくお願いします。

286デフォルトの名無しさん (ワッチョイ d3e9-tjON)2018/07/26(木) 14:21:12.96ID:YpwlC3d50
>>285
結局APIをAPIの仕様に沿って叩くだけなんだから
言語なんか別に何でもいい

SeesaaのAPIはXML-RPC互換らしいが
XML-RPCを採用しているPHP製CMSで有名なのはWordPress
だから情報は豊富にあるかと

287デフォルトの名無しさん (ワッチョイ f2ab-53i4)2018/07/26(木) 14:36:09.87ID:kn/Cla8U0
>>286
有難うございます。なるほど、そういう事ですか…。

確かにWordPressのそういう解説はある程度あると思われますし、
まずそこを自分も作って、それをシーサー向きにカスタマイズ、
という方向にもっていってみるのが得策ですかね。
プログラム等々色々しっかり理解できていないので
例えば、テストのワードプレスに投稿がうまくいっても
それをシーサーに対応させる、その箇所でいかにも自分はつまずきそうですが…
やってみようと思います!ありがとうございました!

288デフォルトの名無しさん (ワッチョイ d68a-tjON)2018/07/26(木) 19:50:32.44ID:3rgn08oe0
formからfileタイプでファイルを送信するとき、一緒にカスタムデータも渡したいんですが
phpでカスタムデータを取得するにはどうすればいいんでしょうか

289デフォルトの名無しさん (ワッチョイ 1ed5-Q2wQ)2018/07/26(木) 20:08:56.19ID:scJUypQr0
カスタムデータってなに

ほんと質問の意味が全く分からんなw

カスタムデータはバックエンドやのうてフロントエンドで使うもんや

292デフォルトの名無しさん (ワッチョイ 92d2-YcwS)2018/07/27(金) 04:29:13.10ID:2LlMOc7f0
javascript じゃないの?
MDNとにらめっこするよろしー

https://developer.mozilla.org/ja/docs/Web/API/File/Using_files_from_web_applications

293デフォルトの名無しさん (ワッチョイ 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自体ができなくなるが
そっちのほうが開発者には都合がいい

294デフォルトの名無しさん (ワッチョイ 92d2-YcwS)2018/07/28(土) 19:53:18.72ID:lnl3z2ED0
スレチ

295デフォルトの名無しさん (ワッチョイ 16b8-/DSX)2018/07/28(土) 21:32:05.50ID:zAnhzC560
スレチちゃうやろー

296デフォルトの名無しさん (ワッチョイ 4b81-53i4)2018/07/28(土) 21:36:21.75ID:aLrZyGnX0
質問内容がPHPに関してではないし
回答もjavascriptを使用してと言うことだし
Web製作板なら全般に渡って質疑しても良いけど
プログラム板に設置したPHPスレとしては
ちょっと違う感じを否めない

297デフォルトの名無しさん (ワッチョイ 16b8-/DSX)2018/07/28(土) 22:21:44.16ID:zAnhzC560
webprogのほうは手取り足取りしてほしけりゃこっちこいって
初心者こっちに丸投げしてんだよな
だから多少ズレててもしょうがない

298デフォルトの名無しさん (ワッチョイ 4b81-53i4)2018/07/28(土) 22:36:05.72ID:aLrZyGnX0
難民受け入れる?
嫌がる人がいないなら、自分は反対はしない

開発者都合を優先する愚か者がいると聞きまして

300デフォルトの名無しさん (ワッチョイ 16b8-/DSX)2018/07/29(日) 09:07:26.00ID:6Xs8CgHh0
今どきレガシーIE使ってるのとJavaScript使えない環境なんて考慮する必要ある?
そういう人たちの考えを改めさせるためにも甘やかしてはだめだ
あと広告ブロッカーなど入れてる人間にはおかえりいただくのだ

301デフォルトの名無しさん (ワッチョイ 1222-Hl5m)2018/07/31(火) 22:09:39.35ID:jEXf5efo0
IE11は新機能も追加されないのに
2025年10月までサポート続く
頭の固い奴がいつまでも使い続けそう

そのレベルまで言うならサーバサイド使う必要性あるか?

303デフォルトの名無しさん (ワッチョイ 16b8-/DSX)2018/08/01(水) 07:58:48.60ID:Vw19BKKS0
>>301
現状まだIE11はいいんだけど
このまま取り残されるつもりなら害悪だね
ITリテラシーのないユーザーが悪いわけではないが

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

>>300で言いたかったことは
閲覧者様ありがとう!1人でも多くの閲覧者様に奴隷のように対応します
ではなくサイト開設者側が閲覧者を選んでもいいということだ

JS書けないオジサンだな

305デフォルトの名無しさん (ワッチョイ d3e9-tjON)2018/08/01(水) 17:38:42.26ID:bHIdHVss0
うむ

306デフォルトの名無しさん (ワッチョイ 4b81-53i4)2018/08/01(水) 17:48:51.49ID:a1G0tkY30
オジサンだとPHPも難しいと思う

307デフォルトの名無しさん (ワッチョイ 2346-gKJj)2018/08/01(水) 18:05:25.96ID:zQceqn770
cakePHP3を使ってます。
mysqlに保存する場合、メールアドレスも暗号化した上で保存したほうがいいの?

308デフォルトの名無しさん (ワッチョイ d3e9-tjON)2018/08/01(水) 18:07:30.41ID:bHIdHVss0
CakePHPの名前を出す意味が分からんが
動かす環境や設計思想によるとしか

curl_setoptをphp.iniの中で設定したいのですが、そんなこと出来ますか?

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ファイルで設定するのはやはり無理なのでしょうか?

curl使うタイミングで関数使ってやってください

そうですか
VPSで動かしているTinyTinyRSSで、HTTPSのスクレイピング時にエラーが出ていて
CURLOPT_SSL_CIPHER_LISTを設定すればいいということまでは分かったのですが
コードを書き換えたとしてもアップデートで上書きされてしまう可能性があるので
設定ファイルでデフォルト値を設定できないかと思ったのですが、残念です・・
ありがとうございました

313デフォルトの名無しさん (ワッチョイ 5381-Xflc)2018/08/02(木) 00:37:20.93ID:xZR22mJ60
>>310
自前のiniファイルを適当に用意し、parse_ini_file関数で読み込む

314デフォルトの名無しさん (アウアウウー Saa7-lVen)2018/08/02(木) 02:01:14.88ID:ZUaPNP+za
それだとcurl呼び出し部分のコードを結局書き換えないとですよね?
設定ファイルで設定したいと言ったのは
コードに手を加えずに挙動を変えたいという意味でした
目的じゃなくて手段です

315デフォルトの名無しさん (ワッチョイ a35d-Xflc)2018/08/02(木) 11:54:14.81ID:G7lRGrKt0
>>314
infoで出てくるcURLライブラリの情報出して
cURLのビルド設定によっては楕円曲線をデフォルトで無効にしているケースがある(あった?)

316デフォルトの名無しさん (ワッチョイ a35d-Xflc)2018/08/02(木) 11:56:18.56ID:G7lRGrKt0
infoじゃねぇや curl -v だわ

317デフォルトの名無しさん (ワッチョイ f3e9-0Uuo)2018/08/02(木) 12:20:37.41ID:VtR7nk5s0
>>314
そこまで説明しなくても普通は>>310読みゃ分かるよw

そういう時は普通はラッパークラスを作る
Adapterパターンとかでググるといい

318デフォルトの名無しさん (ワッチョイ f39d-Eno9)2018/08/02(木) 14:47:11.29ID:mV4uuTxi0
curl直接使うよりguzzle通じて使った方が良いよね?
よっぽどシンプルなプログラムとかでも無い限り

AWS SDK for PHPでも内部で使ってた

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

車輪の再発明をする必要はないが
guzzleみたいにガッツリじゃなくて
cURLのうすーいラッパークラスを作っとくと
ちゃちゃっと何かしたい時に便利ではある

320デフォルトの名無しさん (ワッチョイ a35d-Xflc)2018/08/02(木) 15:39:52.12ID:G7lRGrKt0
>>312を読んでないのか読んでて無視してるのか

TinyTinyRSSを使うこと自体アレじゃねってのはあるけども

321デフォルトの名無しさん (スププ Sd1f-9bbN)2018/08/02(木) 15:46:53.52ID:qudvT6qVd
TinyTinyRSSの中でguzzleを使った方がいいよねなんて話は誰もしてないかと

322デフォルトの名無しさん (ワッチョイ 635b-0PbX)2018/08/02(木) 16:04:41.08ID:j3ZbymyT0
ちょうどスクレイピングとかを勉強してる俺にはなんとタイムリーな話題

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

もう少しkwsk

323デフォルトの名無しさん (ワッチョイ 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
うん

324デフォルトの名無しさん (ワッチョイ 635b-0PbX)2018/08/02(木) 16:38:35.04ID:j3ZbymyT0
>>323
なるほど
やりたい事を書いた文章がそのままPHPのソースになってる感じですごく分かりやすい

->setUserAgent('Mona')
->setReferer('http://2ch.net/')
こういう書き方ははじめて見た
;のつけ忘れではないよね?

325デフォルトの名無しさん (ワッチョイ a35d-Xflc)2018/08/02(木) 16:40:40.32ID:G7lRGrKt0
>>324
メソッドチェーン
setうんたら系のメソッドで$thisを返すようにすればよい

ただ(薄いwrapperだからアレだけど)getうんたら系のメソッドで副作用があるのはキモい

326デフォルトの名無しさん (ワッチョイ 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 メソッドチェーン」とかでググってみるといい

上手く使えばすっきり書けるけどデメリットもあるのでケース・バイ・ケースで

327デフォルトの名無しさん (ワッチョイ 635b-0PbX)2018/08/02(木) 17:07:33.04ID:j3ZbymyT0
>>325
>>326
詳しくありがとう
メソッドチェーンって呼び方がかっこいいな
すごい勉強になった

328デフォルトの名無しさん (ワッチョイ 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
... 一枚にまとめて使うのと
どっちがパフォーマンスいいでしょうか?
よろしくお願いします

329デフォルトの名無しさん (ワッチョイ 5381-Xflc)2018/08/05(日) 11:27:52.65ID:ekimy5CU0
まとめても数百行程度なら、性能上は変わらないと思うが
メンテナンスする上では、機能別に分けて置く方が楽かも

330デフォルトの名無しさん (ワッチョイ a35d-Xflc)2018/08/05(日) 11:31:24.74ID:gTgyUF8y0
実体は別ファイルにしてエントリポイントからrouterで振り分ける

331デフォルトの名無しさん (ワッチョイ 6fd5-IwSV)2018/08/05(日) 13:40:30.63ID:Klpi4erd0
バラした方が各スクリプトのサイズが小さいなら、物理的な読み取りとパースの分速くはなるんじゃね。
でもそんな細かいことよりメンテ性のいい方を選んだ方がいいんじゃないかな。

332デフォルトの名無しさん (ワッチョイ f3e9-0Uuo)2018/08/06(月) 10:30:49.64ID:933yDlcJ0
>>328
よく100万回ループ回した時の実行速度の差を比較したりする人がいるけど
ハッキリいってやるだけ時間の無駄
そんな事を気にするならそもそもPHPなんか使わない方がいい

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

というかそんな事を気にしてるって時点で
何かしらのフレームワークは使ってないんだろうけど
なぜ使わないの?

333デフォルトの名無しさん (ワッチョイ cf8a-9e/1)2018/08/06(月) 11:23:57.83ID:zcUvwpke0
>>332
フレームワークとか最近知ったばかりでよくわからん初心者です
DBじゃなくてテキストファイルで処理するphpをああだこうだ弄って遊んでいて
ふと思い付きで質問してみました

334デフォルトの名無しさん (ワッチョイ 6fd5-IwSV)2018/08/06(月) 12:20:51.12ID:ng9YxNhi0
PHPに関してフレームワーク使って良かったと思える場面て正直ほとんど無いな。
PHP自体がごった煮状態にしてまでいろいろできるようにしてある中で、フレームワークで実現しようとしている目標がいまいちわからん。
生産性にも得してるように思えないどころか、フレームワーク自体のメンテがだるい。
まあそれほどフレームワーク使ったわけでもなく、古くはSmarty、ちょっと前はCakePHP使ったくらいで、それも他所のベンダが作ったのを引き継いだくらいだから偏見に満ちてる可能性はある。

335デフォルトの名無しさん (ワッチョイ 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年後にはもっと良い設計が閃くさ
だから色々と試してみるといい

336デフォルトの名無しさん (ワッチョイ f3e9-0Uuo)2018/08/06(月) 12:33:44.81ID:933yDlcJ0
>>334
大規模開発をした経験がないとそうなるかもね

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

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

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

俺々マイクロフレームワークでもいいからさ

337デフォルトの名無しさん (ワッチョイ 5381-Xflc)2018/08/06(月) 12:38:09.33ID:Xt7Beabr0
フレームワークの選択を誤ると、
数年後「まだそんなの使っているのか!」
ってエラーが頻発して苦労する

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

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

>>337
それはあるな
ただ今はLaravel使っとけば間違いはないんじゃないかと

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

340デフォルトの名無しさん (ワッチョイ 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はヤバすぎる…

341デフォルトの名無しさん (ワッチョイ 5381-Xflc)2018/08/06(月) 13:13:28.36ID:Xt7Beabr0
PHPがヤバいのではなく、使う奴がいい加減なだけだろう
きちんと書ける奴は、何使っても大丈夫

342デフォルトの名無しさん (スププ Sd1f-j3zu)2018/08/06(月) 13:19:55.19ID:UALza30Cd
フレームワークの重要性が理解できない内は3流以下と自覚すべき
php以外の言語を書けない人に多い

343デフォルトの名無しさん (ワッチョイ 6fd5-IwSV)2018/08/06(月) 13:21:13.75ID:ng9YxNhi0
>>340
強制的に string でキャストして情報落とすのが正しいと言われてもなって感じだし、
$foo = $_POST['foo']; がダメというのもそんなの条件次第だろって気もするし、
大事なのは画一的な書き方じゃなくてやり方を適切に選べることなんじゃないの?

344デフォルトの名無しさん (ワッチョイ 5381-Xflc)2018/08/06(月) 13:28:14.07ID:Xt7Beabr0
オレはこんな感じで書いてるな

$foo = "";
 if (array_key_exists('foo', $_POST)){
$foo = $_POST['foo'];
}

345デフォルトの名無しさん (ワッチョイ 6fd5-IwSV)2018/08/06(月) 13:33:40.11ID:ng9YxNhi0
>>344
そのケースなら isset 使ってる。
100万回ループのパフォーマンスなんて気にするなという話の後で言うのもアレだけど、isset の方が速いし短いから。
多重配列の時もそのまま書けるし。

346デフォルトの名無しさん (ワッチョイ f3e9-0Uuo)2018/08/06(月) 13:37:32.22ID:933yDlcJ0
>>343
リクエストパラメータを(string)キャストしてるのは
PHPの仕様的に$_POST['foo']が配列になる事があるからだよ

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

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

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

>>341の言う通り使う側の問題なんだけど
知らなくても動いているように見えてしまうというのは罪な事だね

347デフォルトの名無しさん (スププ Sd1f-j3zu)2018/08/06(月) 13:50:50.84ID:UALza30Cd
>>346も書いてるが
?foo[]=1&foo[][]=2&foo[][][]=3
の時の$_GETの中身を見れば$fooがスカラー型になると決めつけていたらだめだと分かるはず
頭の良い人がせっかくフレームワークってのを作ってくれてるんだから我々凡人はそっち使えばいい
だからPHPerって馬鹿にされんだよw

348デフォルトの名無しさん (ワッチョイ 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']がスカラー型にも二次元にも三次元にもなる可能性を考慮してないから
バリデーションなんかでエラーをだす残念コードがネット上にはたくさん転がってる

そういうのを初心者が真似してしまうのが問題なんだよね

349デフォルトの名無しさん (ワッチョイ 635b-0PbX)2018/08/06(月) 14:19:09.94ID:Hk1kxuZq0
filter_inputというものをはじめて知った(´・ω・`)
issetでチェックしなさいというのは最近覚えたけどこっちの方が短く書けるね
勉強になるなあ

350デフォルトの名無しさん (ワッチョイ 6fd5-IwSV)2018/08/06(月) 14:21:43.09ID:ng9YxNhi0
>>346
最後については同意。

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

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

351デフォルトの名無しさん (ワッチョイ 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;
と書くのとほぼ同じ意味になる

上の方が楽だよね

352デフォルトの名無しさん (ワッチョイ 635b-0PbX)2018/08/06(月) 15:06:29.57ID:Hk1kxuZq0
>>351
下の?を使う書き方が苦手なんよね
頭がわるいからこう書かないと理解できない(´・ω・`)
if(isset($_POST['foo'])){
$foo = $_POST['foo'];
}else{
$foo = false;
}

353デフォルトの名無しさん (ワッチョイ 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

354デフォルトの名無しさん (ワッチョイ 635b-0PbX)2018/08/06(月) 15:58:25.55ID:Hk1kxuZq0
ifとelseの中に書くのはあまりよくないのか(´・ω・`)
全部こうやって書いてた。。。
理由が理解できないあほですまんけど次からはfilter_inputを使うから許して

355デフォルトの名無しさん (スププ 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を書けばいいだろと思うかもしれんがそうじゃないそうじゃないんだ

356デフォルトの名無しさん (ワッチョイ 635b-0PbX)2018/08/06(月) 16:29:32.52ID:Hk1kxuZq0
>>355
$test = "c";
if ($test == "a") {
$foo = 'a';
} elseif ($test == "b") {
$foo = 'b';
}
var_dump($foo);

エラーはでずにNULLと出るんだが。。何か間違ってる?

357デフォルトの名無しさん (ワッチョイ 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 型 比較」とかで適当にググって

358デフォルトの名無しさん (スププ Sd1f-j3zu)2018/08/06(月) 17:11:21.74ID:UALza30Cd
>>356
エラーレベルってのがあってデフォの設定だとnoticeレベルのエラーとかは出ないようになってる
http://php.net/manual/ja/errorfunc.configuration.php#ini.error-reporting

undefineってのは未定義ってエラーなんで消したいなら最初に
$foo = null; なり $foo = ""; なりまずは$fooを定義(define)しろって事

359デフォルトの名無しさん (ワッチョイ 635b-0PbX)2018/08/06(月) 17:25:08.30ID:Hk1kxuZq0
エラーが出たし理由もなんとなく分かったよ サンクス
でも今まで書いたやつにもエラーが出まくり 本を写しただけなのに(´・ω・`)
買う本を間違えたかな。。。初心者は何を買えばええんや。。。

360デフォルトの名無しさん (ワッチョイ f3e9-0Uuo)2018/08/06(月) 17:36:11.38ID:933yDlcJ0
>>359
エラーの設定ってのは学習時に一番最初にやるべき事で
本来はphp.ini(PHPの設定ファイル)の方へ設定すべき事なので
それについて書かれてないのならその本はハズレだろうねw

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

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

具体的にこの本が良いと答えられたらいいんだけど
知らないんだ…すまない

361デフォルトの名無しさん (スププ Sd1f-j3zu)2018/08/06(月) 17:42:18.16ID:UALza30Cd
最近はネットで動画を見ながら学習できるサービスが色々とあるからそういうのもいいんじゃね?
本は俺も知らん
phpのまともな本を探すのってウンコの山から金の塊を探すようなもんだ

362デフォルトの名無しさん (ワッチョイ 8395-j3zu)2018/08/06(月) 20:26:24.27ID:FCdiHJQQ0
未だにフレームワークを使う意味が分かんないとか言ってるのは中小零細の底辺ペチパーやろな
SQLとかを生で書いて文字列結合とかやってるんだぜきっと
LaravelあたりのモダンなFWを理解する頭もなさそう

363デフォルトの名無しさん (ワッチョイ 5381-Xflc)2018/08/06(月) 21:01:33.08ID:Xt7Beabr0
ウンコはすぐ分かる
まずそれを踏まないようにしよう

「サーバーを書く」っていうのはどういう意味?phpで書いたプログラムをサーバーに置いて動作するようにすることも含むの?まったく違う概念?

365デフォルトの名無しさん (ワッチョイ c376-SA/8)2018/08/07(火) 07:57:29.50ID:fqjZQqpG0
サーバーサイドプログラムを書くってことじゃないかな
基本的には動作するところまでも含むと思うが、
そんな表現使う人の気持ち次第ってところもあるかと

366デフォルトの名無しさん (ワッチョイ ff7f-gWEw)2018/08/07(火) 08:28:33.60ID:uocr6YSL0
>>365
ありがとう

367デフォルトの名無しさん (ワッチョイ 6f17-j3zu)2018/08/07(火) 10:42:59.89ID:5VqtIgbz0
サーバーサイドという言葉でくくってしまうとPHPはサーバーサイドで動くものなので語弊があるが
PHPは得意とするフロントを作る以外に例えばProxyサーバとして動作するものを短い行数で書いたりもできる

サーバーを書くってのはそういうものをPHPなり他の言語なりで書く時に使う表現かと

368デフォルトの名無しさん (ワッチョイ ff7f-gWEw)2018/08/07(火) 10:50:55.53ID:uocr6YSL0
>>367
例えばオンライン要素(マルチプレイ)のあるゲームを作る際に、サーバーにあるDBにアクセスしてデータを出し入れするプログラムをPHPで書いた場合は「サーバーを書く」と言っていいの?

369デフォルトの名無しさん (ワッチョイ 8395-j3zu)2018/08/07(火) 11:02:53.49ID:7NW2zIgs0
>>368
そういう用途では使わないと思う
Proxyみたいにサーバ上でスタンドアローンで動作するアプリと言えばいいかな?そういうものを書くイメージ
例えばwebminはhttpサーバ機能をperlで書いてるがそういうものをサーバーを書いたと言うのはしっくりと来る

370デフォルトの名無しさん (ワッチョイ ff7f-gWEw)2018/08/07(火) 11:04:40.27ID:uocr6YSL0
>>369
完全に理解した!!(大嘘)
ありがとう

371デフォルトの名無しさん (ワッチョイ 3323-SA/8)2018/08/07(火) 11:16:29.34ID:i+V5/5w80
てか、こんなイミフ表現使うなよw

372デフォルトの名無しさん (ワッチョイ 8395-j3zu)2018/08/07(火) 11:20:35.05ID:7NW2zIgs0
イミフか?知らないだけだろ

373デフォルトの名無しさん (ワッチョイ 6f17-j3zu)2018/08/07(火) 11:51:01.42ID:5VqtIgbz0
ちょっとググるとguzzleでproxy書いてるのとかあったからやってみればいいんじゃないかな
そうすればサーバーを書くというのはどういうものなのか何となく分かるのでは

374デフォルトの名無しさん (ワッチョイ cfb8-2Kil)2018/08/07(火) 13:53:06.05ID:XXpusaA40
サーバってのはsocket関数使ってポートlistenしたデーモンであること
>>368はたんにバックエンドなだけ

375デフォルトの名無しさん (ワッチョイ ff7f-gWEw)2018/08/07(火) 14:37:02.01ID:uocr6YSL0
>>373
今のところ使い道が浮かばないからやめておくよ。でもありがとう

>>374
これで完全に合点がいった。ありがとう

376デフォルトの名無しさん (ワッチョイ e3cc-Xflc)2018/08/08(水) 16:21:48.35ID:Ao8ga7ES0
VB/VBA(クラス無し)しか書かけないけど、PHP(5?)を触ることになった

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

「これ買え」ってのない?
内容全部が役に立つわけないのはわかってるから、本の特徴が知りたい

377デフォルトの名無しさん (ワッチョイ 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の内容が長い時に↑のエンコード時に何か異常が起きてると思うんですけどわかる方いますか?

378デフォルトの名無しさん (ワッチョイ ffd0-10BI)2018/08/08(水) 17:06:31.24ID:/J/gevQO0
input要素の入力の有無を確認する方法で一般的な方法を教えてください。

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

PHPを初めて日が浅いので変な質問をすると思いますが、よろしくお願いします。

379デフォルトの名無しさん (ワッチョイ 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'が入っていても空として判定されてしまう

380デフォルトの名無しさん (ワッチョイ 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使ってメールを飛ばすようにした方がいい

381デフォルトの名無しさん (ワッチョイ f3e9-0Uuo)2018/08/08(水) 17:30:58.81ID:Evm53zpf0
>>376
ちょっと上でも話が出てるがPHPには初心者ならこれ!という本が本当にない
強いていうならPHP公式サイトにあるPHPマニュアルが一番いい

何かを作りながら学びたいのであれば
ドットインストールみたいなサービスも選択肢になるかも

プログラミング言語として学ぶだけならいざ知らず, PHPの場合はほぼ確実にサーバサイドプログラミングのお作法とセットだから難しい
構文だけは簡単だけど実用しようと思うと全く初心者向けじゃないと思うわ
(サーバサイドアプリケーション自体初心者向きじゃないとは思う)

383デフォルトの名無しさん (ワッチョイ 3323-SA/8)2018/08/08(水) 17:44:35.51ID:tT8nsbXK0
本屋で色々見て一番読みやすそうなの買えばいいんだよ
何が読みやすいなんて人それぞれなんだから

384378 (ワッチョイ ffd0-10BI)2018/08/08(水) 18:05:55.26ID:/J/gevQO0
>>378です

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

385デフォルトの名無しさん (ワッチョイ e3cc-Xflc)2018/08/08(水) 18:19:09.01ID:Ao8ga7ES0
>>381-383

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

XAMPP(MySQLでPHP5)環境だから、大きい本屋であさって、尼で中古買うわ

386デフォルトの名無しさん (ワッチョイ cfb8-2Kil)2018/08/08(水) 18:29:33.84ID:JZIh8c1S0
自分が始めた10年ぐらい前は赤マンモス本とかが流行ってたけどね
今はもう古いんじゃないかなあ
困ったときはとりあえずみんなオライリーって言うけど誰も言ってなかった

387デフォルトの名無しさん (ワッチョイ 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ではどう判定するのか
そもそも日本語をどう定義するのかって話はあるけど

388378 (ワッチョイ ffd0-10BI)2018/08/08(水) 19:16:28.90ID:/J/gevQO0
>>387さん
詳しいレスありがとうございます。
それぞれの関数の意味を理解するよう勉強します。
ありがとうございました。

389デフォルトの名無しさん (ワッチョイ 4ad4-AlRe)2018/08/09(木) 10:37:03.17ID:eox88/ri0
>>380
ありがとうございます。mailtoじゃなくjavascriptですけどメーラー本文に問い合わせ内容が書かれた状態にしたいです。
私は専門はオフコンなのでほとんどPHP等の知識はないのですが、作った人がもういないので仕方なく探り探りやってる状態です。

390デフォルトの名無しさん (ワッチョイ 0fe9-Qb5F)2018/08/09(木) 11:17:35.06ID:MNGTuu+R0
>>389
今JavaScriptでやってるという方法も
結局は内部的にmailtoスキームを使ってるのではないかと思う

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

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

Googleフォームみたいに
問い合わせフォームを簡単に作れるサービスがたくさんあるので
そういうのを使ってみるのはどうだろう?
「問い合わせフォーム 作成」とかでググってみるとか

391デフォルトの名無しさん (ワッチョイ 0fe9-Qb5F)2018/08/09(木) 11:27:54.29ID:MNGTuu+R0
>>389
試しに実験してみたけど
Chromeはやはり?body=に長過ぎる文字列を指定してると
mailtoが反応しなくなるっぽいね

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

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

今までも環境によっては動いてなかったんだと思うよ

392デフォルトの名無しさん (ワッチョイ 6781-2km2)2018/08/09(木) 11:39:44.99ID:2CPDzClL0
>>389
GETじゃなく、POSTでやってみたら
PHPの知識というよりWebの動作についての知識

393デフォルトの名無しさん (スププ Sdea-jQgE)2018/08/09(木) 11:51:13.12ID:icZP1PWcd
>>392
いやそういう問題じゃないだろ

394デフォルトの名無しさん (ワッチョイ 4ad4-AlRe)2018/08/09(木) 13:07:46.86ID:eox88/ri0
>>390-391
やはりそうですかありがとうございます。
問い合わせフォーム自体はあるのですが、返信する時にメーラーを使っています。

>>392 POST勉強してみます

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

問い合わせ内容が何かしらのメールアドレス宛に届くようにしさえすれば
あとは運用で解決する問題なような気がするけど…

396394 (ワッチョイ 4ad4-AlRe)2018/08/10(金) 10:53:33.88ID:Jh09aF/n0
>>395
まさにそう言うことです
VBAくらいは触ったことはあってもWebアプリはチンプンカンプンで一から勉強です・・・

397デフォルトの名無しさん (ワッチョイ 06d5-++Qy)2018/08/10(金) 12:02:22.10ID:9AhDfxBI0
運用でカバーするなら今のままでIE使わせればいいって話でもあるわな。

398デフォルトの名無しさん (ワッチョイ 8ad0-SkTr)2018/08/11(土) 17:46:10.17ID:3QKmHOOO0
$var = $_POST['var'];
よりも
$var = filter_input(INPUT_POST,'var');
が良いんですか !?
前者は危険だと聞いた(´・ω・`)
勉強中の身だけどムズカシイ 

399デフォルトの名無しさん (ワッチョイ 6376-IYYR)2018/08/11(土) 17:51:08.49ID:sk2SMDv70
filter_inputで少しぐぐれば出てくるでしょ
分からない単語出てきたらまたぐぐるってやってけば分かるさ

400デフォルトの名無しさん (ワッチョイ b3b3-Qb5F)2018/08/11(土) 21:17:42.60ID:8ZYocvEQ0
>>399
前者が危険な理由はキーワード知らないと filter_input でググってもでてこないと思うけど。

401デフォルトの名無しさん (ワッチョイ 6376-IYYR)2018/08/12(日) 00:03:01.67ID:iFUBY5JA0
>>400
実際にググってみた?
キーワード知らなくても検索結果の上から5つくらい見ればそれなりには理由分かるよ

402デフォルトの名無しさん (ワッチョイ 6781-2km2)2018/08/12(日) 00:08:01.15ID:B+zL8m/c0
単刀直入にやらないと、無駄にスレを消費する

filter_input だと便利な場面があるというだけで、$_POST はこれまでみんな使ってきたものだし留意点を押さえれば問題があるわけじゃない。
$_POST での参照は、そもそもそのパラメタが設定されているか、期待する型かとかを自分で判定する必要があるというだけで、fi-ter_input はそれを場合によって便利にするユーティリティ関数程度のもの。

404デフォルトの名無しさん (ワッチョイ b3b3-Qb5F)2018/08/12(日) 01:12:20.29ID:9ChOuHra0
$_POST が危険って言われるのは、変更可能なスーパーグローバルだから。
filter_input は HTTP で投げられた値を直接参照するので、$_POST とは全然別物。
ググってでてくる情報で、変数汚染に触れてる記事はないので、概要知らないとたどり着けないんだぜぃ!

405デフォルトの名無しさん (ワッチョイ 06d5-++Qy)2018/08/12(日) 07:20:34.52ID:l4hCxpRe0
変更可能だとどんな危険が考えられるの?

406デフォルトの名無しさん (ワッチョイ b3b3-Qb5F)2018/08/12(日) 09:08:50.60ID:9ChOuHra0
>>405
行儀の悪いモジュールやライブラリとか使うと書き換えられるかも。ってぐらい。
実際にはそれほど気にしなくて良いレベルだけど、それを気にしなきゃいけないプログラムは多い。
読みやすく/使いやすく/再利用性の高いコード書くってことは、結合を疎に保つことが重要なんで、そのあたり理解してると $_POST はまず使わん。

407デフォルトの名無しさん (ワッチョイ 0a7f-EgBt)2018/08/12(日) 15:04:58.70ID:9ilCyu/u0
GETも同じ?

408デフォルトの名無しさん (ワッチョイ de81-2km2)2018/08/12(日) 15:27:03.70ID:bsEI5sh70
>>404
>$_POST が危険って言われるのは、変更可能なスーパーグローバルだから。
>filter_input は は HTTP で投げられた値を直接参照するので、$_POST とは全然別物。

$_POST が危険って言うのは聞いたことがないんだが、
Webサーバーが受けとったリクエストをPHPが取得して変数に代入している訳だろう?
PHPスクリプトが変数の値を参照するのに誰かが割り込めるのかな
リクエスト内容を直接参照すれば他が割り込めなくなるとは思えないが
filter_input がやれるなら、他も出来ると言うことだろう

409デフォルトの名無しさん (ワッチョイ de81-2km2)2018/08/12(日) 15:35:31.72ID:bsEI5sh70
$HTTP_POST_VARS って変数があり、
これはスーパーグローバルではないけれど
現在は非推奨となってる

410デフォルトの名無しさん (ワッチョイ b3b3-Qb5F)2018/08/12(日) 20:02:51.29ID:9ChOuHra0
>>408
ここで言う「危険」は「セキュアじゃない」って意味ではなくて、「コードが意図した通り動かない可能性がある」とかの意味。

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

>> 407
GET も考え方は同じ。

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

普通に推奨されている方法をあえてとらないって 意味が無いと思う
自分だけでやってシステムが終わるまでメンテするって言うなら良いけど

412デフォルトの名無しさん (ワッチョイ 0a7f-EgBt)2018/08/12(日) 20:51:00.05ID:9ilCyu/u0
>>410
なるほど、ありがとう

413デフォルトの名無しさん (ワッチョイ b3b3-Qb5F)2018/08/12(日) 20:56:57.73ID:9ChOuHra0
>>411
バグの入る余地をなくして、読みやすく/使いやすく/再利用性の高い危険を回避したコードを書くには、結合を疎に保つことが重要
で、結合を疎に保つには filter_input を使用することが推奨されるって話なんだけど、通じてる?

普通に推奨されている方法をあえてとらないって 意味が無いと思う
自分だけでやってシステム終わるまでメンテするって言うなら良いけど

414デフォルトの名無しさん (ワッチョイ de81-2km2)2018/08/12(日) 21:02:18.40ID:bsEI5sh70
あえて書き直すほどの事は無いと思う
開発する人間が注意すれば避けられること

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

普通に推奨されているとは思わないよ。そんな関数初めて聞いたし。
どこでそんな事で大騒ぎになっているの?サイト教えて

415デフォルトの名無しさん (ワッチョイ 06d5-++Qy)2018/08/12(日) 21:24:00.23ID:l4hCxpRe0
疎結合と filter_input がいまいち結び付かん。
HTTPリクエストから必要パラメタを取り出しオブジェクト化して、後はそのオブジェクトを使ってパラメタにアクセスしましょうってんならHTTPリクエストを隠蔽できて疎かなって気もするが。
$_POST の代わりに filter_input を使うと何と何が疎になるの?って感じ。

416デフォルトの名無しさん (ワッチョイ b3b3-Qb5F)2018/08/12(日) 21:37:43.85ID:9ChOuHra0
>>414
変数のスコープのの話なんて、適当に探せばいくらでも出てくるだろうに^^;

堅牢なコードを理解してないみたいなんで、これでも見て意識改善するといいよ。
https://youtu.be/17i1EL9pBwA

417デフォルトの名無しさん (ワッチョイ b3b3-Qb5F)2018/08/12(日) 21:44:39.30ID:9ChOuHra0
>>415
> HTTPリクエストから必要パラメタを取り出しオブジェクト化して、後はそのオブジェクトを使ってパラメタにアクセスしましょうってんならHTTPリクエストを隠蔽できて疎かなって気もするが。
その認識で正しいと思うよ。
ただ、それはそれ。
取り出しの時に行儀の悪いモジュールやライブラリ使用したときに、邪魔される可能性は残る。
取り出しのときにでかいスコープを回避できる 読み取り専用の関数を使用すると、予防的にコードが書けるってことです。

418デフォルトの名無しさん (ワッチョイ de81-2km2)2018/08/12(日) 22:17:31.77ID:bsEI5sh70
PHPを扱うサイトでfilter_input が話題になっている所あるの?
見つからないんだけど
普通に推奨されている位だから、たくさんあってもおかしくはないよね?

419デフォルトの名無しさん (ワッチョイ de81-2km2)2018/08/12(日) 22:25:25.71ID:bsEI5sh70
Webサーバーからリクエストを受けとるのに隠蔽も何もないと思うけどね
グローバル変数だから書き換えられる可能性があるというのも変
書き換えているのは自分じゃないか。人のせいには出来ないでしょう
大勢で開発しているなら、その処理を行う担当以外は操作禁止にするだけだし

420デフォルトの名無しさん (ワッチョイ b3b3-Qb5F)2018/08/12(日) 22:26:50.06ID:9ChOuHra0
>>418
filter_input じゃ、ググれないよ。
グローバル変数を使用しない理由を検索してみるといい。
キーワード知らないと、ググれないっていうのはそういうこと。

421デフォルトの名無しさん (ワッチョイ b3b3-Qb5F)2018/08/12(日) 22:29:18.96ID:9ChOuHra0
>>419
@t_wada の前でも同じこと言えんの?

422デフォルトの名無しさん (ワッチョイ 1b5d-2km2)2018/08/12(日) 22:31:31.01ID:mMH07JtW0
既存コードを修正すべきだとまでは言わないが, 新規コードにはfilter_inputを使うべきだという点に関しては疑う余地がない

423デフォルトの名無しさん (ワッチョイ de81-2km2)2018/08/12(日) 22:40:35.81ID:bsEI5sh70
>>420
つまり、公開されているPHP関連のサイトではそのような話題が出ていないと言うことでOK?

424デフォルトの名無しさん (ワッチョイ 06d5-++Qy)2018/08/12(日) 22:49:31.76ID:l4hCxpRe0
>>419
んまあデバッグしたりコマンドラインでも実行できるようにしたりする可能性を考えると、HTTPリクエストの扱いは浮かせて置いた方がいいかなって気はするよ。
後は同意。
$_POST がダメで filter_input ならいいって話には繋がらないと思うし、$_POST をわざわざ書き換えるならあえてそういう設計なんだろうけど、それが甘いか明確になってないだけじゃねとしか思わん。
そういう設計はかくかく然々でお勧めしないよって話ならまだ聞ける。

ちなみに >>416 は見たよ。
話のうまいやつで面白かったよ。
PHP にも assert あったのね。しかも運用時にいないことにできるとか、なかなかいいじゃないか。

425デフォルトの名無しさん (ワッチョイ de81-2km2)2018/08/12(日) 22:55:53.50ID:bsEI5sh70
キーワードで検索出来ないってことがとても不自然に感じるんだけど
普通に推奨されていると言うなら、行う記事があってもおかしくはないよね

まさか、この関数が非公開関数で秘密にしないといけないものだったりして

426デフォルトの名無しさん (ワッチョイ b3b3-Qb5F)2018/08/12(日) 22:59:03.40ID:9ChOuHra0
>>423 >>425
グローバルスコープな変数使うなよって話以上に何が聞きたいの?
グローバル使用しない代替手段使おうねって話でしか無いんだけど^^;
そろそろ理解しようよ。

427デフォルトの名無しさん (ワッチョイ de81-2km2)2018/08/12(日) 22:59:36.87ID:bsEI5sh70
>>425
× 行う記事
○ 推奨する記事

428デフォルトの名無しさん (ワッチョイ de81-2km2)2018/08/12(日) 23:01:06.85ID:bsEI5sh70
>>426
それならそういえば良いでしょう

変な関数持ち出す必要もないし
普通に推奨されているなんて言いだすから
サイトを教えてくれと言う話になってるんだし

429デフォルトの名無しさん (ワッチョイ 06d5-++Qy)2018/08/12(日) 23:04:19.57ID:l4hCxpRe0
>>426
よく言われるようなグローバル使うなって話は、自分で定義するのは極力避けましょうってことであり、用意されてるものを使うなって話ではないんじゃない?

430デフォルトの名無しさん (ワッチョイ de81-2km2)2018/08/12(日) 23:07:19.08ID:bsEI5sh70
そんな事実上の内部バグを問題にするよりも
リクエスト投げてくるのは、こちらが用意したフォームとは限らない、
想定外のリクエストに乗せられることが現実に発生するんだし、
そちらのチェックの方が重要だと思うよ
そういう実際的な話題を提供して議論する方が良いと思うな

431デフォルトの名無しさん (ワッチョイ b3b3-Qb5F)2018/08/12(日) 23:08:04.47ID:9ChOuHra0
>>428
最初っから、そう言ってるんだぜぃw

> >>399
> 前者が危険な理由はキーワード知らないと filter_input でググってもでてこないと思うけど。

432デフォルトの名無しさん (ワッチョイ b3b3-Qb5F)2018/08/12(日) 23:09:31.00ID:9ChOuHra0
途中で投稿してしまった。

> $_POST が危険って言われるのは、変更可能なスーパーグローバルだから。
> filter_input は HTTP で投げられた値を直接参照するので、$_POST とは全然別物。
> ググってでてくる情報で、変数汚染に触れてる記事はないので、概要知らないとたどり着けないんだぜぃ!

433デフォルトの名無しさん (ワッチョイ b3b3-Qb5F)2018/08/12(日) 23:15:01.27ID:9ChOuHra0
>>429
改変されるリスクの有無は同じなので、限定した話ではない。

434デフォルトの名無しさん (ワッチョイ de81-2km2)2018/08/12(日) 23:15:09.06ID:bsEI5sh70
ググっても出てこない関数がどうして普通に推奨されていると言うのか、
その根拠を聞きたかったんですが
そんなに話題に上らない関数と言うことで良いんでしょうか?

435デフォルトの名無しさん (ワッチョイ de81-2km2)2018/08/12(日) 23:17:10.07ID:bsEI5sh70
しつこくて済みませんが、グローバル変数を使うなと言うのは、一種の宗教だと思うんです
信じる人はそうすれば良いけど、信じない人はそうしなくてもいいと言う程度で

436デフォルトの名無しさん (ワッチョイ 1b5d-2km2)2018/08/12(日) 23:32:41.22ID:mMH07JtW0
PHP The Right Wayくらいは必読だと思う
ttps://www.phptherightway.com/#data_filtering

理由もなくスーパーグローバルを直接叩くようなコードを新しく書いたならそれだけでrejectするに足る
それ以外のグローバル変数も納得出来る説明がコードやコメントに無いならreject

437デフォルトの名無しさん (ワッチョイ 0a7f-EgBt)2018/08/12(日) 23:50:35.68ID:9ilCyu/u0
エラーが起きない方法をとるのに越した事はないと思うけど、何をそんなにむきになってるのだろう

>>436
そこからどこまで読めばお前さんの言いたいことが書いてあるのが分からんが、とりあえず外部データをサニタイズせずに使うことの危険性なんかを説明してるのかな?
それを解決するのに filter_input や filter_var を使えますよという話だよね?
グローバル使うな的な話は書いてないようだが、ただ実はもしやと思ってたんだけど、register_globals を使うなって話と混同してるんじゃない?
それは危ないから使わない方がいいよ。
そしてそれは $_POST を使うななんてこととは全く関係無い。

439デフォルトの名無しさん (ワッチョイ b3b3-Qb5F)2018/08/13(月) 11:03:05.76ID:rjxAd60g0
>>434
ずっと同じことのループやねぇ。。。

> ググっても出てこない関数がどうして普通に推奨されていると言うのか、
ググって出てこないのは、$_POST の危険な理由。
関数としては各所で便利だぜぃ。って紹介されている。
PHP The Right Way もその一つ。

440デフォルトの名無しさん (ワッチョイ b3b3-Qb5F)2018/08/13(月) 11:05:41.03ID:rjxAd60g0
>>435
> しつこくて済みませんが、グローバル変数を使うなと言うのは、一種の宗教だと思うんです
宗教じゃなくて、意識の話。読みやすく/使いやすく/再利用性の高いコード書くことを意識していれば、グローバル変数の使用はまず避けるように設計する。
避ける気がないのは、読みやすく/使いやすく/再利用性の高いコード書く意識が無いってだけ。

441デフォルトの名無しさん (ワッチョイ 6bcc-2km2)2018/08/13(月) 11:35:41.06ID:V6shauct0
>>435
他言語しか知らないけど、グローバル変数なんてめったに使わない

>>440
PHP勉強中だけど、教本のサンプルって短いからグローバル使いまくり
いいコードの書き方ってなかなかないね
やっぱり実践のコード((またはきれいな)が見たいよ

442デフォルトの名無しさん (ワッチョイ de81-2km2)2018/08/13(月) 11:43:06.68ID:XxWurSAu0
filter_input 自体は $_POST使っているんでしょ?

>>440
だからさ、自分でわざわざグローバル変数作るなってことだろ、それは。
既に用意されてるものを使うなって理由としてグローバル変数だから(誰でも書き換えられるから)ってのは意味が分からんだろ。
わざわざ示されたもの読んで言ってるんだから >>438 にも答えてくれよ。

444デフォルトの名無しさん (ワッチョイ b3b3-Qb5F)2018/08/13(月) 12:48:25.49ID:rjxAd60g0
>>443
ずっと同じことのループやねぇ。。。

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

> わざわざ示されたもの読んで言ってるんだから >>438 にも答えてくれよ。
オレが示したわけじゃないんで解釈あってるか分からんけど、普通に読めば「ググっても出てこない関数がどうして普通に推奨されていると言うのか、その根拠を聞きたかったんですが」に対するコメントだと思うぞ。
filter_input 紹介している有名記事を教えてくれたんでしょ。

445デフォルトの名無しさん (ワッチョイ b3b3-Qb5F)2018/08/13(月) 12:50:40.98ID:rjxAd60g0
>>442
filter_input は HTTP で投げられた値を直接参照するので、$_POST とは全然別物。

試してみるといいよ。オレも最初試したw

>>444
あ、ごめん
別の人と混同してたわ

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

グローバル変数誰かが書き換えたら不具合が起こるって、スコープが狭いだけでクラスメンバ変数を誰かが書き換えちゃったらという話と同じような話でしょ。
早い話、選定してるものを仕様通りに使ってないという問題なんだかrさ。

447デフォルトの名無しさん (ワッチョイ 6beb-dFjz)2018/08/13(月) 13:22:06.99ID:+hDvRkt20
個人的には $_POST をリードオンリーにして使ってるが、俺だけだろうな

448デフォルトの名無しさん (ワッチョイ b3b3-Qb5F)2018/08/13(月) 13:41:09.92ID:rjxAd60g0
>>446
filter_input は HTTP で投げられた値を直接参照するので、$_POST とは全然別物

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

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

堅牢なコードを理解してないみたいなんで、これでも見て意識改善するといいよ。
https://youtu.be/17i1EL9pBwA

449デフォルトの名無しさん (ワッチョイ de81-2km2)2018/08/13(月) 14:57:40.05ID:XxWurSAu0
これ以上やっても信仰する宗教のようなのでやめますが

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

今は、いくつかある対策方法の一つとして聞いておきます

>>448
書き込めたら密だって?
なんかワケわからんが、お前さんの言う密って何?
ちなみにそれは見たよ。

451デフォルトの名無しさん (ワッチョイ b3b3-Qb5F)2018/08/13(月) 15:48:38.75ID:rjxAd60g0
>>450
複数クラスやモジュールでコミュニケーションしてしまう状態

452デフォルトの名無しさん (ワッチョイ de81-2km2)2018/08/13(月) 15:54:21.02ID:XxWurSAu0
あなたはそういう風に使いたいのかも知れないが
普通の人はそうは使わない
いつまで自分の信仰に拘るんだろう

453デフォルトの名無しさん (ワッチョイ b3b3-Qb5F)2018/08/13(月) 16:14:12.67ID:rjxAd60g0
>>452
グローバル変数の汚染を回避する設計って普通だぞ^^;
新興でも何でも無い。

454デフォルトの名無しさん (ワッチョイ de81-2km2)2018/08/13(月) 16:22:06.43ID:XxWurSAu0
汚染する犯人は自分以外にいないんですが
多重人格者でもなければ心配ないでしょう

455デフォルトの名無しさん (ワッチョイ b3b3-Qb5F)2018/08/13(月) 16:27:52.12ID:rjxAd60g0
>>454
3ヶ月目の初心者みたいなこと言うなよ。。。
堅牢なコードを理解してないみたいなんで、これでも見て意識改善するといいよ。
https://youtu.be/17i1EL9pBwA

456デフォルトの名無しさん (ワッチョイ de81-2km2)2018/08/13(月) 16:29:04.74ID:XxWurSAu0
汚染の原因なんて事前に特定出来るでしょう
それが出来ない人だから、こんなことするの?

457デフォルトの名無しさん (ワッチョイ b3b3-Qb5F)2018/08/13(月) 16:33:01.17ID:rjxAd60g0
>>456
だから動画見ろってw
汚染も含めて「影響を受けない/受け付けない」コードの書き方を研究して、公開してくれてるんだから。

458デフォルトの名無しさん (ワッチョイ 1b5d-2km2)2018/08/13(月) 16:33:50.13ID:LXDaPxOa0
一か月前の自分は他人だよ
一年も経てば細部なんて何も覚えてない
俺は自分にそこまで自信を持てないわ

459デフォルトの名無しさん (ワッチョイ de81-2km2)2018/08/13(月) 16:44:20.77ID:XxWurSAu0
防げるのはせいぜい自分が書く内部バグくらい?
外部からの攻撃については無力
コツコツとバリッドチェックを用意することになるのは変わらない
こんなんでも堅牢なシステムだって言えるんだろうか

460デフォルトの名無しさん (ワッチョイ de81-2km2)2018/08/13(月) 16:46:25.51ID:XxWurSAu0
グローバル変数に対して誤って代入している箇所を見つける事が
そんなに難しいことなんだろうか?

461デフォルトの名無しさん (ワッチョイ 0a7f-EgBt)2018/08/13(月) 16:50:37.23ID:B8BpXPvN0
>>456 は結局のところ「注意すれば事足りるでしょ?」ってことを昨日からずっと言い続けてるよね
その注意をかける負担を減らせる手段を一つでも盛り込む事に反発する理由なんて一つもないと思うんだけどな
俺の頭がおかしいのかそうじゃないのかよく分かんなくなってくるじゃん

462デフォルトの名無しさん (ワッチョイ de81-2km2)2018/08/13(月) 16:51:42.20ID:XxWurSAu0
誤った代入ならローカル変数にだってあり得るが
こういうロジックミスはそれを使っても防ぎようがない
丹念にチェックし潰していくしかない

463デフォルトの名無しさん (ワッチョイ 0a7f-EgBt)2018/08/13(月) 16:55:21.28ID:B8BpXPvN0
あと宗教だの信仰だの言ってるけど、頑として自分の主張を曲げずにずっと言い続けてるってのは、結局のところそれは「別の宗教(信仰)」なのでは……?

464デフォルトの名無しさん (ワッチョイ de81-2km2)2018/08/13(月) 17:01:08.48ID:XxWurSAu0
経験により積み重ねてきた手法を変えるというのは
それだけの説得力が必要なんだと思います
だから布教は大変なんでしょう

465デフォルトの名無しさん (ワッチョイ 0a7f-EgBt)2018/08/13(月) 17:04:05.65ID:B8BpXPvN0
>>464
俺はあなたの事を話してるんですが

466デフォルトの名無しさん (ワッチョイ de81-2km2)2018/08/13(月) 17:13:09.68ID:XxWurSAu0
堅牢と言っているけども、何から堅牢かと言えば、自分自身が書く記述の誤りから堅牢になると言うこと
プログラムから見たら、グローバル変数だけをガードしてからと言ってバグフリーになるわけじゃない

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

この辺が改善されたら導入を考えようと思うんですが、如何ですか?

467デフォルトの名無しさん (ワッチョイ b3b3-Qb5F)2018/08/13(月) 17:26:15.20ID:rjxAd60g0
>>466
オマエほんとバカだろ。。。
動画見ても全然理解できないと思うけど、まず見てみ。
会話が成立しないくらいズレたことコメントしてるってだけでも理解したほうがいい。

468デフォルトの名無しさん (ワッチョイ de81-2km2)2018/08/13(月) 17:47:45.32ID:XxWurSAu0
>>466 の提案を受け入れたら考えます

出来ないなら、これで終わります

469デフォルトの名無しさん (ワッチョイ b3b3-Qb5F)2018/08/13(月) 17:54:32.31ID:rjxAd60g0
>>468
なんで交換条件なんだよw
そのままズレてろ。どうでもいいわ。

>>461
注意すれば足りるっつうか、$_POST に値を代入しないようにコードを書くのがそんなに大変なの?
わざわざそういう設計をしなけりゃそんなことしないし、そうしてるなら必要だからしたんだろうから仕様に沿って使えばいいんじゃね?
ということなんじゃないの。
いや別に filter_input を使うなと言ってるのではないし使えばいいじゃんと思ってるが、$_POST をそこまで忌み嫌うのが意味分からんてことだよ。
それで疎にするとか持ち出してきて、$_POST の代わりに filter_input 使えば疎になるって何のこっちゃ?って感じだろう?
堅牢になるぜならまだ分かるが、疎って?ってさ。
疎にするって話ならと >>415 みたいな手法を持ち出してみたらそれには同意してもらえてるっぽいが、filter_input 使えば疎って話ではないだろってところは通じてないっぽいんだよな。

なんつうか、意識高い系なんだろうなって感じ。

471デフォルトの名無しさん (ワッチョイ 6bcc-2km2)2018/08/13(月) 18:45:11.35ID:V6shauct0
チームで開発したことないんだろ、きっと
それか、一人で十分な開発規模

あるいはチームでテレパシーw

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

しかしグローバル変数使うなが納得出来ないというのはお話にならない

473デフォルトの名無しさん (ワッチョイ 6376-IYYR)2018/08/13(月) 19:31:08.20ID:Mozi/syi0
正直、ここしばらくフレームワークの世話になってたから
$_POSTもfilter_inputも明示的につかったことない
でも、ざっと見た限りではよっぽどトリッキーなことしない限り
filter_inputをつかわない理由はないな

474デフォルトの名無しさん (ワッチョイ b3b3-Qb5F)2018/08/13(月) 19:59:59.97ID:rjxAd60g0
>>470
密とか疎に対して「結合」って使ったから良くなかったかもね。
結合というより、関係性かなぁ。

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

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

結局、$_POST 使用するたびに、プロジェクト全体を grep するとかアホらしいので、新規にコード書くならまず $_POST は使わん。って程度の決意。

ところで $_FILES や $_SESSION へのアクセスはどうやってるの?

476デフォルトの名無しさん (ワッチョイ b3b3-Qb5F)2018/08/14(火) 07:14:07.57ID:fH8thKa+0
>>475
回避不能だねw
基本はフレームワークに閉じ込めて、自分では $_FILES とか $_SESSION は書かない。
で、どうしても自分で書かなきゃいけないときは、念のため grep するぐらいしか対応できない。

477デフォルトの名無しさん (ワッチョイ ffe9-hdxI)2018/08/14(火) 13:40:34.53ID:Ph65nOXq0
追いついた。
単にグローバル変数を使わないようなコードを書きましょうねって話よね。
大昔BASICからCに移行したときに見た話かな。

478デフォルトの名無しさん (ワッチョイ bbe9-hE18)2018/08/16(木) 11:14:39.29ID:wpZ5Mbd20
>>477
同じくくだらない話に今追いついたが
たったそれだけの話だよな

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

趣味でやってて自分1人さえ理解できればよくて
メンテも一生自分1人でやるのなら好きにやりゃいいけどさ

>>477,478
追い付いたというからにはそれなりに読んだんだろうに、それで単にグローバル変数を使う話に見えるならプログラマー失格だと思うよ

>>479
では解説どうぞ

481デフォルトの名無しさん (ワッチョイ 0fe8-upR2)2018/08/16(木) 12:21:40.67ID:w2Vsd24V0
>>479様がマウントを取りたいがために風呂敷を拡げ始めたと聞いてバックネット裏の席を確保しました

>>480
PHPの仕様として存在しPHP自体が用意してる参照が非推薦ともされていない情報に対する参照がグローバル(スーパーグローバル)というだけでなぜいけないのか?という話だよ。
自分で勝手グローバルを作ろうって話じゃない。

>>482

>>477>>478はどのあたりがプログラマ失格なんですか?

>自分で勝手グローバルを作ろうって話じゃない。
彼ら(>>477 >>478)はこれに該当する旨を話してるんですか?
どのあたりがそうなんですか?


485デフォルトの名無しさん (ワッチョイ 0fe8-upR2)2018/08/16(木) 12:43:50.15ID:w2Vsd24V0
人の話を聞かないまま退散したあのかたが蒸し返しで再登板しただけでした
解散

486デフォルトの名無しさん (スププ 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']よりはベターってだけ

フレームワークを使わない便利な関数を使わないって人ってのは
大した頭もないくせして車輪の再発明が大好きなんだろうとお察しする
絶対に一緒に仕事をしたくないタイプ

487デフォルトの名無しさん (ワッチョイ bbe9-hE18)2018/08/16(木) 13:14:38.66ID:wpZ5Mbd20
register_globalsやmagic_quotes_gpcみたいなPHPの黒歴史や
伝説の名言「例えば、PHPを避ける」なんかを知らない人も
増えてるんだろうなと思う

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

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

理解できなくても食うに困らない稼ぎがあるなら
それはそれでいいんじゃない?(周りの人は迷惑だけどw)

PHPの開発方針がめちゃくちゃ保守的だってことも知らないのだろう
https://externals.io/message/100087

php-internalsでも$_POSTや$_GETをimmutableにしないのはあくまで後方互換性が崩れるからだとしか言われてない($_ENVや$_SERVERはまた別だが)
スーパーグローバルの(スーパーグローバルの書き換えとは独立した)immutable版があればいいのにと思う

489デフォルトの名無しさん (スププ 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

490デフォルトの名無しさん (ワッチョイ bbe9-hE18)2018/08/16(木) 14:20:27.81ID:wpZ5Mbd20
>>489
>↑これ理解できてるんだろうか?
>>442を見る限りでは勘違いしてるっぽいね

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

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

真面目な話
個人開発レベル程度の経験しかない人だと
PHPUnitなんて使った事ない(というかユニットテストという概念を知らない)って人がわりといたりする

>>486
そこでちょろっと言ってることが本質なんじゃないの。
一番に検討しなくちゃいけないのは、外とのインタフェースをあちらこちらに書かず特定の機構に閉じ込めるということだろ。
閉じ込めた中で $_GET と filter_input のどちらを使うかなんてことは本質じゃなく、その時の都合でベストチョイスすればいいだけのこと。
どっちもPHPが用意している正当なインタフェースなんだから。
グローバルはいけないんだなんて言ってみても、結局 >>475-476 でしょ。

492デフォルトの名無しさん (ワッチョイ fbe9-dg8D)2018/08/16(木) 15:05:20.08ID:47Wf5WpA0
永遠に噛み合わないんだな

493デフォルトの名無しさん (ワッチョイ ebb3-hE18)2018/08/16(木) 15:34:33.46ID:IVwSm3Wy0
>>491
> 一番に検討しなくちゃいけないのは、外とのインタフェースをあちらこちらに書かず特定の機構に閉じ込めるということだろ。
このことはだれも否定していない。

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

> グローバルはいけないんだなんて言ってみても、結局 >>475-476 でしょ。
だから、immutable 版がほしいね。って流れ

494デフォルトの名無しさん (ワッチョイ bbe9-hE18)2018/08/16(木) 16:04:23.82ID:wpZ5Mbd20
ざっと見て>>448あたりは結構頑張って理由を書いてると思うし
>>493はワッチョイから判断するに同じ人だと思うのだけど
自分は>>442を見た時点で説明するだけ時間の無駄だと判断した

スーパーグローバル変数(笑)なんてものを直接使う糞コードが少しでも減ってくれたらいいなとは思う

ワッチョイで >>448>>493 が同じってどうやって判断するの?
>>493>>494 は hE18 で同じかなって気がするが、そういう見方じゃないんだっけ。

496デフォルトの名無しさん (ワッチョイ bbe9-hE18)2018/08/16(木) 17:14:51.55ID:wpZ5Mbd20
来週の木曜0:00AMまではワッチョイ末尾4桁「hE18」はJaneStyle4.00をデフォの設定で使ってる人
すなわちUserAgentを現してる(毎週木曜リセット)

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

プログラム板の人なんだからそれぐらいの法則性は自力で見つけて欲しいものだが…

497デフォルトの名無しさん (ワッチョイ bbe9-hE18)2018/08/16(木) 17:19:27.02ID:wpZ5Mbd20
ちなみにこんなサービスもある
ttps://afi.click/browser/list/

プログラム板の住人なら
どうやればこのサービスを実現できるか
DB設計から考えてみたらいいんじゃないかな

>>496
なるほどありがとう

499デフォルトの名無しさん (ワッチョイ 0fe8-upR2)2018/08/16(木) 19:24:56.49ID:w2Vsd24V0
他人に根拠希薄にプログラマー失格とか罵っときながらのオチがこれ

500デフォルトの名無しさん (スププ Sdbf-V6hB)2018/08/16(木) 19:44:09.16ID:qFV5giwld
11レスもしながら出だしの>442の時点で間違ってるのは
オチとは言わず「ボケ」と言うんじゃないかと
たくさんのツッコミが貰えて本望だろう

501デフォルトの名無しさん (ワッチョイ ebb3-hE18)2018/08/16(木) 20:11:17.99ID:IVwSm3Wy0
この話題の最初に書いたとおり、filter_input の使用に関して、スーパーグローバル回避のためって理由がググっても中々ヒットしない。
ある程度コードかけるようになると自明だし、フレームワーク使うようになると filter_input すら使う機会が少なくなるからだと思うけど、量産型初心者が全部 $_POST で育ってくるのでめんどいw
みんなどんどん素敵記事書いて、初心者に広報してくれんかねぇ。

502デフォルトの名無しさん (ワッチョイ 6b95-8iSw)2018/08/16(木) 20:24:00.00ID:S/g/TLeK0
グローバル変数を使わない方がいい理由が分からないって人ってやっばりPHPしか書けない人なのかな?
他の言語では常識な事だけに何が理解できないのかが理解できない

503デフォルトの名無しさん (スププ Sdbf-V6hB)2018/08/16(木) 20:26:09.89ID:qFV5giwld
✕PHPしか書けない
◯PHPすら書けない
PHPerが馬鹿にされる理由がよく分かるよな

504デフォルトの名無しさん (ワッチョイ ef17-xQfD)2018/08/16(木) 20:51:12.43ID:0Ewq9KDZ0
メジャーなフレームワークのコードを読んでみたりはしないのだろうか
全部を確認したわけではないけど流石に$_GET $_POSTを直接ごにょごにょやってるFWは無いと思う

505デフォルトの名無しさん (ワッチョイ 6b95-8iSw)2018/08/16(木) 21:00:30.27ID:S/g/TLeK0
ググってみるとteratailに質問してる初心者のやり取りを見つけたからurlを張っとく
https://teratail.com/questions/63786

501の言う量産型初心者が1人でも減ってくれることを願って。。。

506デフォルトの名無しさん (ワッチョイ ebb3-hE18)2018/08/16(木) 21:21:55.14ID:IVwSm3Wy0
>>505
これ、オレがコメントした時に参考にした記事www
これのせいで、「疎結合」とか、伝わりにくい表現使ってしまった。

ちゃんと理解した奴がまとめて記事書いてくれprz

507デフォルトの名無しさん (ワッチョイ 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 は使ってないようだね。
最新だとどうなのかは知らないけど。

どのフレームワークのコードを読んだの?

なんで使ってないんだろうな
さすがに何らかの理由があるはずだよな

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

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

何にしても解説を待ちたいね。

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

public function test_checkNullbyte()
{
  $_GET['nullbyte'] = "abc\0xyz";
  $this->object->checkNullbyte();
}

511デフォルトの名無しさん (ワッチョイ efd5-PVJR)2018/08/17(金) 12:03:44.89ID:FbY5sXOm0
>>510
そのチェックメソッドが $_GET を参照する作りになってるならいいと思うよ。

512デフォルトの名無しさん (ワッチョイ abdb-mZ3i)2018/08/17(金) 13:11:10.69ID:BAgYE8OH0
>>511
ありがとうございます。
プロダクトコードのスーパーグローバル変数の参照部分を見直してみます。

513デフォルトの名無しさん (ワッチョイ 9fd0-QxOT)2018/08/18(土) 15:56:58.30ID:2Bt8PW+v0
JavaScriptを使わず、PHPだけでフォームの戻るボタンって作れるんですか !?

514デフォルトの名無しさん (ワッチョイ 0f81-ipLS)2018/08/18(土) 16:58:29.16ID:gititOy10
>>513
JavaScriptを使わずと言うことは

<input type="button" value="戻る" onclick="history.back()">
こういうのもだめってことかな?

515513 (ワッチョイ 9fd0-QxOT)2018/08/18(土) 17:14:55.37ID:2Bt8PW+v0
>>513です

>>514さん
ISO-HTMLなのでイベントハンドラ?も使えないです。

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

面倒だが
自分のサイトだけで遷移しているなら、直前のURLをセッションに持たせ、それを参照して戻す
(入力フォームで行ったり来たりする場合は、入力しかけのフォームの値も保持しないと行けなくなる
 こういう場合、相当面倒な処理を書かないと行けないと思うが、仕方ないね?)

517デフォルトの名無しさん (ワッチョイ 0f81-ipLS)2018/08/18(土) 17:38:53.55ID:gititOy10
あるいは
フォームでPOSTする要領で直前のURLに遷移すると言う方法もある
その場合はサーバー側で次画面に遷移する際に、
現在の場所をフォームに埋め込む形で出来る

518513 (ワッチョイ 9fd0-QxOT)2018/08/18(土) 17:38:54.09ID:2Bt8PW+v0
>>513です

>>516さん
セッションですか !?
身につけたいので頑張ります!

519デフォルトの名無しさん (ワッチョイ 7b7c-mZ3i)2018/08/18(土) 18:39:50.05ID:6yCMBjdI0
>>508
$_REQUESTとかってwww-form〜専用だろ。

>>513
よくあるフォームで、入力➡確認➡完了 みたいな流れの中で 確認から入力に戻るような話?

521513 (ワッチョイ 9fd0-Mwiu)2018/08/20(月) 14:51:18.69ID:/k2xBvnt0
>>513です

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

>>520さん
お返事が遅れました。
>>確認から入力に戻るような話?
はい。PHPで対応したいので現在勉強中です。
始めはHTMLのtype="heidden"を採用しようと考えていたのですが、いただいたレスやセキュリティを考えた結果、セッション変数を使ってみようかと思い試行錯誤中です。

522デフォルトの名無しさん (ワッチョイ 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 で埋めておく。
入力画面ではエラーメッセージの表示も行う感じ。

523デフォルトの名無しさん (ワッチョイ efd5-PVJR)2018/08/20(月) 16:45:12.31ID:aXzcMKFL0
>>522
その流れだと初回表示時にバリデーションが走って必須項目未入力のエラーが出ちゃいそうだねw
説明用とは言え雑だったが、submitボタンが取れることが分かればうまいことやれるでしょ。

524513 (ワッチョイ 9fd0-Mwiu)2018/08/20(月) 17:48:24.04ID:/k2xBvnt0
>>513です

>>522さん
そのような方法もあるんですね。
くださったレスを参考にいろいろと試行錯誤してみます。
ありがとうございました。

525デフォルトの名無しさん (ワッチョイ 0fb8-O+0A)2018/08/21(火) 06:38:40.38ID:xkZA2QwA0
hiddenが危険という言葉を鵜呑みにする必要はない
用途による
メールフォームの確認程度なら別にhiddenでいい
そんなの改ざんする意味もなければされたところで問題ないし
最終的に受け取ったデータを通すかはPHPが判断すればいいこと

526デフォルトの名無しさん (ワッチョイ db8a-Fz0V)2018/08/21(火) 12:56:33.44ID:RbDl1jHe0
hiddenに限らずチェックはしないとね
さもないと、支払もすんでいない商品を買ったことにされたり
ログイン認証済んでいないのに、内部に入り込まれたりするから

527デフォルトの名無しさん (ワッチョイ 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を使う事に
なっているようですが、ググってみても、どのように置き換えれば良いのか分かりません。

お知恵をお借りできれば助かります。よろしくお願いします。

528デフォルトの名無しさん (ワッチョイ cb65-ipLS)2018/08/22(水) 07:23:29.30ID:XDj/gPFz0
その部分だけ見ててもすげーやべーコードなのが分かるから手直し以前にゼロから作り直した方がいいよ
つか調べたら最終更新2005年(13年前)でかつこのコードとか本格的にやべーのでもっと新しくてまともなもの探さなきゃダメだよ

529デフォルトの名無しさん (ワッチョイ ef9f-vvAx)2018/08/22(水) 07:44:33.35ID:PHQZkUhf0
スーパーグローバルのチェックはしてあるんだと思うよ。流石に…w

530527 (ワンミングク MMbf-ycnR)2018/08/22(水) 08:17:00.54ID:2cdwFvgEM
>>528
レスありがとうございます。
これ、ちまちまと手直しして使っておりまして。
このコードは管理機能内の記事削除部分で、管理者しか使えないですし、
第三者が入れないよう認証かけてるのでセキュリティーは多分大丈夫だと思います。

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

あと、どういう点がやばいのかご教示いただければ勉強出来るので非常に助かります。

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

仮にチェック済だとしても、スーパーグローバルを使ってると頭悪そうにみえるしな。

532デフォルトの名無しさん (ワッチョイ 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個を全角スペースにして書いてるので注意

533デフォルトの名無しさん (ワッチョイ 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でも大体問題なく動くものだけど
このコードだと他にも色々と問題が出ると思う

534デフォルトの名無しさん (ワッチョイ 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
);

535デフォルトの名無しさん (ワッチョイ 0fb8-O+0A)2018/08/22(水) 10:41:30.78ID:jQIraJCs0
エラーを無視するような感じのエラー処理が適当なコードだから
セキュリティもそれなりなのだろうというのが容易に想像出来るんだわ
なんせPHP4時代のコードだし今ほどそのへん考慮されてないからねえ

536デフォルトの名無しさん (ワッチョイ 0b5b-hE18)2018/08/22(水) 10:41:35.61ID:mlQDc+9J0
>>529
コード内に出てくる $_POST[bbs](本当は $_POST['bbs'] だが)は
まともにチェックされてないっぽい
unlink("../$_POST[bbs]/...");
みたいなコードが散見されるから
NULLバイト攻撃も素通りだと思う

ヤバすぎ

>>532
$del を受ける use が必要じゃね

あと細かい話だが、PHPが単なる即時関数もクロージャと言うのにはちょっと違和感ある。
>>532 のケースはクロージャになるけど、クロージャってやっぱスコープが特殊なところに意義があるというか。

538デフォルトの名無しさん (ワッチョイ ef9f-vvAx)2018/08/22(水) 10:56:49.46ID:PHQZkUhf0
>>536
そうなんだ…ワロタ
クローズドな環境で割り切って使う以外はあぶないね。

539デフォルトの名無しさん (ワッチョイ 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の質問のレベルで更にツギハギで直してるっていうんだからセキュリティに関しては想像もしたくないというのが正直なところ

540デフォルトの名無しさん (ワッチョイ cb65-ipLS)2018/08/22(水) 11:04:53.85ID:XDj/gPFz0
敢えて繰り返すけど, もっと新しくてまともなもの探さなきゃダメだよ
そうするのがベターなんじゃなくて, そうしなきゃダメ, SHOULDじゃなくてMUSTだよ

541デフォルトの名無しさん (ワッチョイ 0b5b-hE18)2018/08/22(水) 11:08:19.17ID:mlQDc+9J0
>>539
かなり昔に対策されたんだな
知らなかったサンクス

$_POST[bbs]でコード内を検索したら
unlink("../$_POST[bbs]/dat/$_POST[key].dat");
こんなコードが出てきたんでびっくりして脊髄反射してしまったww

542デフォルトの名無しさん (ワッチョイ 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
);

543デフォルトの名無しさん (ワッチョイ 0b98-IWHs)2018/08/22(水) 11:58:13.96ID:nWdToOU90
Interface用のファイルって基本的にどこに置けばいいの?
それを継承するクラス群と同じディレクトリなのか、
もしくは最初から一箇所(例えばMyApp\Contract等)にまとめていいのか

544527 (ワンミングク MMbf-ycnR)2018/08/22(水) 12:28:34.49ID:2cdwFvgEM
>>532
手直し、ありがとうございます。
勉強させてもらいます。


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

移行を検討するよう進言してみます。
ありがとうございました。

545デフォルトの名無しさん (ワッチョイ ef9f-vvAx)2018/08/22(水) 13:23:13.49ID:PHQZkUhf0
社内でしかも管理者限定なら急ぐことはないか…
でもコードの品質全てが問題ありそうだから、仲間内で注意喚起はした方がいいな。
JVNで周知されてるのも良い理由になると思う。

546デフォルトの名無しさん (ワッチョイ 0b5b-hE18)2018/08/22(水) 13:39:41.75ID:mlQDc+9J0
>>544
>>532のコードは間違ってるので使うなら>>534>>542

お節介ながら
今はSlackみたいな便利なものが色々とあるので
そもそも掲示板を使う必要はあるのか?ってところから検討した方がいいのではと

547デフォルトの名無しさん (ワッチョイ 9fd0-Mwiu)2018/08/22(水) 15:37:33.16ID:bZebMi5p0
メールヘッダーインジェクションって現バージョンのPHPではどうなんですか?
mail()やmb_send_mail()で対策されたとネット上で見かけたのですが(´・ω・`)

548デフォルトの名無しさん (ワッチョイ 0b5b-hE18)2018/08/22(水) 18:00:41.89ID:mlQDc+9J0
>>547
英語版のPHPマニュアルの改変履歴追ってみると7.2.0での対応で一段落って感じだけど
日本語版には書かれてないな

NULLバイトや改行コードを悪用したインジェクションなら
mail()やmb_send_mail()に渡すデータをバリデーションしてたら7.2.0未満でも問題ない筈だが

549デフォルトの名無しさん (ワッチョイ 9e9f-bqhm)2018/08/23(木) 11:42:53.96ID:4kav5HXR0
ttps://blog.ohgaki.net/php-mail-header-injection

550デフォルトの名無しさん (ワッチョイ 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;
}

551デフォルトの名無しさん (ワッチョイ ed65-PcWx)2018/08/25(土) 11:34:28.91ID:804l9SKu0
要するにcatchしたいときにExceptionやらThrowableとするしかなくて, 少なくとも例外は全部漏れなく捕捉してしまうのが問題なわけだ

552デフォルトの名無しさん (ワッチョイ a5b8-EM0A)2018/08/25(土) 11:45:15.82ID:9SggU+bE0
>>551
なるほど。例外を個別に場合分けして処理したいときに困るということですね。
ありがとうございます。疑問が晴れました。

553デフォルトの名無しさん (ワッチョイ 2ad0-wF79)2018/08/25(土) 14:02:12.59ID:Qb+EA1ap0
最近話題になってたfilter_inputみたいに$_POSTを取得する関数って他にもあるんですか?
http://php.net/manual/ja/ref.filter.php

554デフォルトの名無しさん (ワッチョイ 5ed5-ISgX)2018/08/25(土) 14:31:15.65ID:C8WKBJJ50
>>553
それは $_POST を取ってるわけじゃない。
POSTされたデータを取る手段として $_POST と filter_input がある。
他の標準的な手段として用意されてるものは無いと思うけど、リクエストを自分で処理するという手段はある。

555デフォルトの名無しさん (ワッチョイ 2ad0-wF79)2018/08/25(土) 15:51:20.36ID:Qb+EA1ap0
>>554
詳しく教えてくださりありがとうございます。
勉強になりました。

php://input

557デフォルトの名無しさん (ワッチョイ 2ad0-wF79)2018/08/26(日) 18:28:50.81ID:TIzdp5nG0
FILTER_SANITIZE_FULL_SPECIAL_CHARS?
htmlspecialchars?
あばばばば(´・ω・`)

558デフォルトの名無しさん (ワッチョイ 9e9f-bqhm)2018/08/27(月) 00:57:59.28ID:LDnza5oi0
前者は使わなくてもいい。
後者は画面に出すときに必須

559デフォルトの名無しさん (ワッチョイ 2ad0-wF79)2018/08/27(月) 15:45:55.66ID:BWUwoBqV0
mail関数で文字化けするのはどういった状況なんだろうか

560デフォルトの名無しさん (ワッチョイ 6681-PcWx)2018/08/27(月) 15:53:58.45ID:TsaU1TVW0
エンコード関連の設定が間違えているって書いても、
そのくらいは知っているって言われそうだしなあ

561デフォルトの名無しさん (ワッチョイ 2ad0-wF79)2018/08/27(月) 17:28:58.93ID:BWUwoBqV0
PHPを初めて間もないので知らなかったです(´・ω・`)
文字化けが自分で作った環境が原因でおこるのか、
ユーザーの環境によっておこるのか、
それすらも現在進行形で勉強中です。

562デフォルトの名無しさん (ワッチョイ 9e9f-bqhm)2018/08/28(火) 09:51:44.23ID:Bhr6KAhH0
今時はメールもutf-8にしちゃう方が良い?
サイズはともかく。

563デフォルトの名無しさん (ワッチョイ 5ed5-ISgX)2018/08/28(火) 10:03:40.00ID:eY+qymJM0
JIS だと扱えない文字が結構あって面倒なんだよね。
氏名を埋め込もうとするだけでもすぐ問題が起こる。
個人的には結構保守的なんで極力 JIS にしたいが、utf8 も仕方ないかなと思うこともある。

564デフォルトの名無しさん (ワッチョイ 9e9f-bqhm)2018/08/28(火) 12:43:02.68ID:Bhr6KAhH0
>>559
件名が化けてるの?
本文が化けてるの?

565559 (ワッチョイ 2ad0-wF79)2018/08/28(火) 15:49:05.60ID:hBn2GmOT0
>>559
>>561です

>>564さん
どちらも化けてないです。
ただ文字化けする状況がよくわからなかっただけです。
自分の環境を全てutf8に統一すれば化けないですかね(´・ω・`)

566デフォルトの名無しさん (ワッチョイ 9e9f-bqhm)2018/08/28(火) 18:24:33.50ID:Bhr6KAhH0
どちらかと言えば、送信したサーバー側にあると思うよ。
ヘッダをMIMEエンコードしてないとか、
本文をJISと宣言しておいてSJISとか良く見る。
作る側が理解してない。

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

あと稀に、ソースからしてそもそも化けてるという
バカが書いたメールもあるw

567デフォルトの名無しさん (ワッチョイ 6681-PcWx)2018/08/28(火) 18:32:36.85ID:lp3F9A9k0
>>566
たまに磁場消したメール受けとる
解読するのを楽しみにしたりする

568デフォルトの名無しさん (ワッチョイ 6681-PcWx)2018/08/28(火) 18:32:58.74ID:lp3F9A9k0
字化けした
ごめんw

569デフォルトの名無しさん (ワッチョイ ed8a-vl9i)2018/08/28(火) 20:03:27.33ID:ZdacH0nd0
>>568
も抜け・・・

570565 (ワッチョイ 2ad0-wF79)2018/08/29(水) 16:28:12.93ID:Fy8w4QmX0
>>565です

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

今はmail($to・・・)の$toに自分のメールアドレスをどのようにして入れるか考えてます。
define関数で定義した方が安全?なんでしょうか。
勉強がんばります。

571デフォルトの名無しさん (ワッチョイ bd5b-vl9i)2018/08/29(水) 16:47:55.26ID:pmPs3x9R0
>>570
メンテナンス性を考慮すれば定数で定義しとく方が好ましい
”ハードコーディング”でググるんだ

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

define()にしかできない事をやる時だけdefine()を使う
…というかdefine()にしかできないような定数の定義の仕方は
しない方がいいというか

572デフォルトの名無しさん (ワッチョイ 9e9f-bqhm)2018/08/29(水) 17:14:13.88ID:oFL8fPjK0
>>570
confg.phpとかconfig.iniとか作って、
設定値を書きまくるファイル用意するといいよ。
定数名は大文字にしておけば目立つね。

573570 (ワッチョイ 2ad0-wF79)2018/08/29(水) 18:04:53.37ID:Fy8w4QmX0
>>570です

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

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

お二方、アドバイスありがとうございます。
ずっと画面と見つめ合ってたので頭が痛いです。
体調管理に気を付けます。
ありがとうございました。

574デフォルトの名無しさん (ワッチョイ a3d0-J7KC)2018/08/30(木) 19:30:03.21ID:GwaNatXn0
>>570の$toって直書きすると外部から参照されたりするん?
そこらへん うちも勉強不足だわ

575デフォルトの名無しさん (ワッチョイ 0b81-tpL7)2018/08/30(木) 19:32:18.17ID:Ut/QgXMd0
外部からってどういう意味?
宛先見せないと配達できないでしょ?
そういうことじゃなくて?

576デフォルトの名無しさん (ワッチョイ 5b9f-SMhC)2018/08/30(木) 19:44:52.34ID:EWk4rtO80
web公開ディレクトリに置かないのが基本なんだよ。
hdocs/index.html
lib/php/config.ini

共用のレンタルサーバーだと、
Permissionを0604にするのもありだな。

最初の0は気にしない。
次の6は自分の読み書き権限
次の0は同居してるユーザーに権限剥奪
最後の4はApacheに読み取り権限

578デフォルトの名無しさん (ワッチョイ 0b81-tpL7)2018/08/30(木) 20:37:32.95ID:Ut/QgXMd0
>>577
釣りかな?
それApacheにかぎらず誰でもオッケーって意味だよ

579デフォルトの名無しさん (ワッチョイ 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なんかで変わってくる場合もあるし。

580デフォルトの名無しさん (ワッチョイ a3d0-J7KC)2018/09/01(土) 18:28:51.43ID:0yUv0G400
exit()
die()
(´・ω・`)?

581デフォルトの名無しさん (ワッチョイ 0b81-tpL7)2018/09/01(土) 18:34:59.89ID:5sir/CBW0
死ねって言われたいのかなあ

582デフォルトの名無しさん (ワッチョイ 5b9f-SMhC)2018/09/01(土) 19:17:45.13ID:/Rwrc1N80
>>580
ディエはエラーログに残る

583デフォルトの名無しさん (ワッチョイ 1d9f-GNu9)2018/09/02(日) 10:08:19.04ID:ub6GWDzd0
ど素人です
質問させてください
cakephp3のwebroot以下にある.htaccessで、mod_rewriteの括弧外にrewritecondやrewriteruleが書かれているものを人様のサイトで拝見しました
括弧外に置かれても、機能するものなのでしょうか

584デフォルトの名無しさん (ワッチョイ 5b9f-SMhC)2018/09/02(日) 10:25:45.60ID:afimrVjB0
<IfModule mod_rewrite.c>
もしかしてこれ?

585デフォルトの名無しさん (ワッチョイ 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>
===================

このようなものなのですが

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

だから書かない方が良い。
ifを書かなければ、モジュールが無効なら即500エラーで設定ミスに気付ける。
モジュールが無効なのにエラーにならず、
設定したつもりでいる方が危ないからね。

587デフォルトの名無しさん (ワッチョイ a3d0-J7KC)2018/09/02(日) 15:42:33.40ID:NagoJ+s80
>>581
怖い(´・ω・`)

>>582
ありがとう

588デフォルトの名無しさん (ワッチョイ 1d9f-J7KC)2018/09/02(日) 18:59:05.09ID:ub6GWDzd0
>>586
返答ありがとうございます

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

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

どうもありがとうございます

589デフォルトの名無しさん (ワッチョイ a3d0-J7KC)2018/09/03(月) 09:54:20.75ID:0wOUtf7+0
読み返してたんだけど>>557の前者って使うことないものなの?

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

exitの方が一般的だとは思うが好きな方を使えばOK
あくまで予想だが、die()はperl言語出身者に配慮して作ったんじゃなかろうか

591デフォルトの名無しさん (スププ Sd43-Oaw6)2018/09/03(月) 12:01:10.60ID:Nk9MF4uYd
height
align
allow
deny

web系に関わってるのにこういう単語の読み方がおかしな人の言う事は疑ってかかった方がいいという経験則

592デフォルトの名無しさん (ワッチョイ 5b9f-SMhC)2018/09/03(月) 12:08:27.54ID:lQhKIzFA0
>>590
すまん。perlの関数と勘違いしてた…
PHPにおいてはexitもdieも同じらしい。
dieの引数も標準出力されたw

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

嘘こいてすまん。

593デフォルトの名無しさん (ワッチョイ 5b9f-SMhC)2018/09/03(月) 12:11:22.59ID:lQhKIzFA0
>>591
ヘイト
アリグン

デニー

allowを読み違えてる人は見たことない…

あとは、hrefをハーフ、widthをウィドスは稀に。
ウィドスはまだネイティブに近い方かな?

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

どれも高校入試の時の発音問題頻出単語(要するに中学レベルの単語)だったような遠い20年以上前の記憶
うんざりする程しつこく教えてくれた当時の英語担任に感謝しないといかん

595デフォルトの名無しさん (ワッチョイ 5b9f-SMhC)2018/09/03(月) 12:40:39.44ID:lQhKIzFA0
アラウか…
何かそこだけ妙にネイティブだな。
アローですまん…

596デフォルトの名無しさん (ワッチョイ 0b81-tpL7)2018/09/03(月) 12:41:40.31ID:wBpew+1c0
本来ネイティブの発音に合わせて読むべきなんだろうけど、
アラウやディナイと発音しても、日本人相手だと通じなかったりする

597デフォルトの名無しさん (ワッチョイ 5b9f-SMhC)2018/09/03(月) 12:44:28.91ID:lQhKIzFA0
アラウはちょっとなあ…
それ言い出すとonlyはオウンリイだし。
日頃はカタカナ英語でいいです。

598デフォルトの名無しさん (スププ Sd43-Oaw6)2018/09/03(月) 12:55:17.57ID:Nk9MF4uYd
ネタなのかマジなのかわからなくなってきたけど正解はもちろん>>594
allow,denyをアローデニーと読んでいた自称サーバー管理者が設定したウンコみたいなサーバーに泣かされて以来トラウマです
そして今なおallow,denyという単語を目にするという事はそれ即ち、去年末にサポートが終わったApache2.2系をまだ使い続けてるというトラウマの再来になる可能性がががが

warning はどうよ

600デフォルトの名無しさん (ワッチョイ 955b-zBrR)2018/09/03(月) 14:06:21.30ID:Shssq38w0
ウォーニング

まぁ会社によって方言みたいなのはあるよね
内心そうじゃないだろ…(ため息)と思いつつ相手に合わせる事も大事

601デフォルトの名無しさん (ワッチョイ 5de9-zBrR)2018/09/03(月) 14:10:12.54ID:fNzMywLO0
今の所全問正解っぽくて安心した

falseをファルスと読む人を見る度に
パルスのファルシのルシがコクーンでパージを思い出す

602デフォルトの名無しさん (ワッチョイ 0bb8-Wsjv)2018/09/03(月) 14:18:24.08ID:bh6+crPg0
アリグンとかデニーとかいってるならヘイグヒトぐらいにしないと

603デフォルトの名無しさん (ワッチョイ 5b9f-SMhC)2018/09/03(月) 14:53:06.39ID:lQhKIzFA0
あんまりこだわると意識高い系とか嫌味を言われそうだし、
まあわかればいいやね…

ここじゃないかもだかど、どっかのPHPスレで
エチョーと書いたらウケたよ。

604デフォルトの名無しさん (ワッチョイ 0b81-tpL7)2018/09/03(月) 14:55:19.36ID:wBpew+1c0
>>603
コーヒー吹くとこだったぞ

allowというかau音はアゥからオゥに寄った側に聞こえるからカタカナ英語的にはアロゥはアリかなと思う
arrowと区別したいときはアラゥと言うべきだと思うけど

デニーとかアリグンは流石にねーなw

606デフォルトの名無しさん (ワッチョイ 23d2-6oUK)2018/09/03(月) 16:58:16.51ID:MppWbPja0
ini → イニ? アイエヌアイ?
array → アレイ? アライ?
あと正直str系の関数が読めない
strlen strpos当たりはわかるけど
stripos strrpos strripos
あたり

607デフォルトの名無しさん (ワッチョイ 955b-zBrR)2018/09/03(月) 17:56:38.19ID:Shssq38w0
array:アレイ

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

かっこよく読みたいなら元の単語を略さずに読めばいいんだろうが
実用的にはアルファベットをそのまま読めばいいじゃなかろうか

608デフォルトの名無しさん (ワッチョイ b58a-zBrR)2018/09/03(月) 19:06:04.00ID:w8msLsZZ0
if
イフ

then
ゼン?

else
エルス?

true
トゥルー?

false
フォールス?

try
トライ?

throw
スロー?

catch
キャッチ?

609デフォルトの名無しさん (ワッチョイ 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です

610デフォルトの名無しさん (ワッチョイ 5b9f-SMhC)2018/09/04(火) 11:43:27.54ID:2slzjYMb0
routes.phpとかは?
アプリのリダイレクトなのか、
apacheのリダイレクトなのか切り分けていくと良いのでは。

611デフォルトの名無しさん (ワッチョイ db9e-J7KC)2018/09/04(火) 21:34:32.07ID:8BTVVQRQ0
include('/path/file.txt');
include('http://www.example.com/path/file.txt');
って何か違いはありますか?

612デフォルトの名無しさん (ワッチョイ 0b80-4Jnz)2018/09/04(火) 22:55:22.87ID:JkSql3w10
>include('/path/file.txt');

/ から始まっているから、何かからの絶対パスかな?

プロジェクトルートか、公開サイトのルートからの絶対パスかな?

613デフォルトの名無しさん (ワッチョイ 5b9f-SMhC)2018/09/04(火) 23:04:14.00ID:2slzjYMb0
上のは言ってみればfile://になるんじゃないの? 違う?

614デフォルトの名無しさん (ワッチョイ a3d0-hHnA)2018/09/05(水) 16:46:47.73ID:dwWFM3zt0
公式のmail()とmb_send_mail()のページを見ていたのですが、
mail()のsubjectは表題、messageはメッセージ、
mb_send_mail()のsubjectは件名、messageは本文となっていました。
これは何かが違うということでしょうか。
くだらない質問と思いますが、よろしくお願いします。

615デフォルトの名無しさん (ワッチョイ 0be8-Bzg2)2018/09/05(水) 17:13:31.91ID:eC5bTWUj0
全く同じ意味ですが異なります
この事に気をつけて厳密に取捨選択し、
どっちでもいいから適当に使いましょう

616デフォルトの名無しさん (ワッチョイ 5b9f-SMhC)2018/09/05(水) 17:23:40.98ID:HJ2kcLma0
mailはエンコードしてくれないから自分でしてから呼び出す。
mbはエンコードしてくれる。

というか、ググれよ!

617デフォルトの名無しさん (ワッチョイ 65b3-zBrR)2018/09/05(水) 17:28:21.76ID:+CD9GwZX0
どっちの関数も直接使うには勝手が悪いので、さっさと基礎理解してライブラリ使うようにしましょう。

618デフォルトの名無しさん (ワッチョイ a3d0-hHnA)2018/09/05(水) 17:46:40.68ID:dwWFM3zt0
アドバイスありがとうございました。

619デフォルトの名無しさん (ワッチョイ 969e-O+me)2018/09/06(木) 17:01:57.65ID:kzkzi/Yy0
<form method="get" でsubmitした場合、
$_GETを使うのが普通だと思うのですが
$_POSTでも値が取れるのですが、そういうもんですか?

620デフォルトの名無しさん (ワッチョイ 569f-vdZN)2018/09/06(木) 17:39:08.61ID:bmlthp5L0
普通だけど普通じゃなくなって来たから、filter_input使う。
このスレの上の方にも出てる。

621デフォルトの名無しさん (ワッチョイ ae81-7GfT)2018/09/06(木) 19:14:57.47ID:xdo6cDUj0
>>619
それちゃんとGETメソッドで送ってる?
GETとPOSTでは受け渡し方法が違うから
ちゃんとやっていればPOSTでは受けとれないはず

622デフォルトの名無しさん (ワッチョイ 969e-O+me)2018/09/06(木) 20:05:38.46ID:kzkzi/Yy0
>>621
WordPressなんですが、
form タグを埋め込んでbuttonクリックでsubmitしているので間違は無いと思います。
でも何故か$_GETでも$_POSTも値が取れるんです。

623デフォルトの名無しさん (ワッチョイ 569f-vdZN)2018/09/06(木) 20:59:34.70ID:bmlthp5L0
GETとPOSTと両方送ってるとかじゃないの…w

624デフォルトの名無しさん (ワッチョイ 8b80-f65Y)2018/09/06(木) 21:15:35.52ID:64ZwjQvb0
methodをgetでサブミットしてるなら
HTTPプロトコルではcontent bodyの部分は空になる
そういう仕様だからな
つまり通常postで取得できる部分はからっぽ

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

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

質問してるヤツは

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

というのが質問の主旨と理解した
低学歴知恵遅れがその質問をどう解釈したかは知らない

625デフォルトの名無しさん (ワッチョイ ae81-7GfT)2018/09/06(木) 21:39:08.51ID:xdo6cDUj0
>>619
サーバーのログって見ることは出来ない?
リクエストがどういうメソッドでやり取りされたか分かると思うけど

626デフォルトの名無しさん (ワッチョイ 569f-vdZN)2018/09/06(木) 22:24:24.23ID:bmlthp5L0
>>624
冗談にムキになって… 低学歴知恵遅れとかw
主旨についてはわかってて書いてんの。
それが5chというところだから。

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

分かりやすいわ。。。

628デフォルトの名無しさん (ワッチョイ 569f-vdZN)2018/09/06(木) 22:52:05.75ID:bmlthp5L0
正解です。でも知恵遅れはないよ。

629デフォルトの名無しさん (ワッチョイ ae81-7GfT)2018/09/06(木) 22:55:48.48ID:xdo6cDUj0
冗談は冗談が通じる相手にしないと

この質問者はPOSTとGETについて理解できていないんだから
冗談だとは受けとってないと思うぞ

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

やり方を切り分けて絞り込んでいかないといけない。

631デフォルトの名無しさん (ワッチョイ 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メールアドレスが入力されていません';
}

よろしくお願いします。

632デフォルトの名無しさん (ワッチョイ bbb3-fTNn)2018/09/07(金) 10:03:27.93ID:0+aYiLfb0
>>631
この例文の中では特に意味はない。post したページに戻る際、エラーをまとめて送る時に使う。

633631 (ワッチョイ 7ad0-O+me)2018/09/07(金) 10:16:38.86ID:9ghtkfrV0
>>632
このような使い方もあるんですね。
教えてくださり、ありがとうございました。

634デフォルトの名無しさん (ワッチョイ 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

635デフォルトの名無しさん (ワッチョイ 569f-vdZN)2018/09/10(月) 09:10:57.34ID:LEZi3nV80
form.php
confirm.php
send.php
こうすると良いと思う

636634 (ワッチョイ 7ad0-O+me)2018/09/10(月) 14:59:46.15ID:Jh3v7l2E0
>>635
アドバイスありがとうございます。
辞書を引いたら納得しました。
さっそく反映したいと思います。

637デフォルトの名無しさん (ワッチョイ 569f-vdZN)2018/09/10(月) 20:03:31.22ID:LEZi3nV80
ネタにマジレスしてるんで、仕方ないからチラ見してみた。
このスレのダメな例の集大成みたいだな。

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

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

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

あとは動いてるならいいんじゃない?

勉強のためならいいけどガチでサービスに導入とかはしない方がいいと思うよ
既存のサービス使った方が絶対に安全

639デフォルトの名無しさん (ワッチョイ 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 ';'

というエラーが出るので無理だと思っているのですが、
できる方法があれば教えてください。

640デフォルトの名無しさん (ワッチョイ 8723-eFvF)2018/09/11(火) 13:07:18.10ID:B2tEflKb0
やり方はいろいろあるが、一般的にはコンストラクタの中で代入するんじゃないかな

やり方はいろいろあるが、一般的にはコンストラクタの中で代入するんじゃないかな

642634 (ワッチョイ 7ad0-O+me)2018/09/11(火) 17:53:48.50ID:sA/7deNB0
>>637
アドバイスありがとうございます。
次を課題に学習を進めたいと思います。
・HTMLとPHPで値の長さに制限を掛ける
・filter_inputの使い方を理解する

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

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

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

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

643デフォルトの名無しさん (ワッチョイ 569f-vdZN)2018/09/11(火) 19:04:42.02ID:Of5zYKw20
>>642
hiddenよりはセッションを使ってください。
なんか勘違いしてそうだから。
https://teratail.com/questions/63786

644デフォルトの名無しさん (ワッチョイ 96d5-tygy)2018/09/11(火) 20:24:28.80ID:NY6FXi0j0
このくらいのフォームなら hidden の方がいいんじゃね。
セッションでなんかメリットある?

645デフォルトの名無しさん (ワッチョイ 569f-vdZN)2018/09/11(火) 21:33:19.08ID:Of5zYKw20
使い方を間違えてるから正した方が良いと思っただけ

646634 (ワッチョイ 7ad0-O+me)2018/09/12(水) 08:16:38.34ID:uWMSldyR0
>>643
参考URLありがとうございます。
hiddenとセッションの使い分けを勉強します。

647デフォルトの名無しさん (ワッチョイ 569f-vdZN)2018/09/12(水) 08:31:17.86ID:t1WfAWi+0
>>646
う、うん。
でも一番はそこじゃないんだな。
スーパーグローバル変数を書き換えるべきではないのに、
そらをしてしまっているところね。
そもそもスーパーグローバルを使わないためのfilter_inputだから。
最初は誰でもそんなもんだから頑張ってね。

648634 (ワッチョイ 7ad0-O+me)2018/09/12(水) 08:36:21.52ID:uWMSldyR0
>>647
さっそく勘違いしてしまいました。
アドバイスありがとうございます。

649デフォルトの名無しさん (ワッチョイ 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」はダウンロードしました。

650デフォルトの名無しさん (ワッチョイ 569f-vdZN)2018/09/12(水) 12:09:08.51ID:t1WfAWi+0
そのURLを見たけど、tarファイルを展開してLinuxでコンパイルしてるよね。
この時点でWindowsはまったく該当しないので見てもわかるわけない。
Windows用のコンパイル済みバイナリをインストールするのが正解かと。
それか、そのファイルをWindowsで自前コンパイルするか。

651デフォルトの名無しさん (ワッチョイ 5e92-fTNn)2018/09/12(水) 12:24:56.89ID:/jhmkHwQ0
ありがとうございます。

いくつか調べてlibpuzzleがC言語で作られているはわかりました。
Windowsだとsoファイルではなくdllファイルで動かすみたいだから
libpuzzle.cをコンパイルしてdllにする、という感じなのでしょうか?

652デフォルトの名無しさん (ワッチョイ 569f-vdZN)2018/09/12(水) 12:36:07.34ID:t1WfAWi+0
はい。恐らく…

653デフォルトの名無しさん (ワッチョイ 5e92-fTNn)2018/09/12(水) 14:11:08.65ID:/jhmkHwQ0
C言語は…、ちょっというかさっぱりわからないですね…。

GitHubでlibpuzzleの解凍されたフォルダが有りました。

https://github.com/jedisct1/libpuzzle

もし参考になれば

654デフォルトの名無しさん (ワッチョイ 96d5-tygy)2018/09/12(水) 16:38:39.22ID:bjh9HqnE0
>>647
そこで言ってるスーパーグローバルの書き換えって $_SESSION のこと?

655デフォルトの名無しさん (ワッチョイ 569f-vdZN)2018/09/12(水) 19:23:24.37ID:t1WfAWi+0
>>654
そう。
言われてハッとしたんだが、もしかして俺すげー嘘ついてる?
フレームワーク無しなら$_SESSIONに代入せざるを得ないか?
何かもう忘れたわ。

適当な記憶でたまに嘘ぶっこくから少し自重する。

656デフォルトの名無しさん (ワッチョイ ae81-7GfT)2018/09/12(水) 19:28:11.72ID:WDc70fCa0
面白い議論だと思ってたんだけど
できれば続けてくださいな

セッションは使用禁止にすべきかどうかまで

657デフォルトの名無しさん (ワッチョイ 96d5-tygy)2018/09/12(水) 21:31:55.13ID:bjh9HqnE0
>>655
うん、$_SESSION はこれを直接触る以外のアクセス方法は無いと思う。
そしてセッションのクリアとか考えるのも面倒なので、今回のケースだと hidden の方が手軽だと思う。

658デフォルトの名無しさん (ワッチョイ 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();

659デフォルトの名無しさん (ワッチョイ 5e92-fTNn)2018/09/12(水) 23:14:32.81ID:/jhmkHwQ0

660デフォルトの名無しさん (ワッチョイ 9776-ebpV)2018/09/13(木) 00:39:50.34ID:Mmakf2Wk0
ちゃんとautoload.phpをrequireしてるか?

661デフォルトの名無しさん (ワッチョイ bf9f-ID1G)2018/09/13(木) 07:41:47.23ID:WElsz8IU0
>>648
>>657だって! 本当に申し訳ないです。

662デフォルトの名無しさん (ワッチョイ 17b3-+ow7)2018/09/13(木) 08:13:46.95ID:1dHQYyj40
投稿フォームは、確認画面なくすと session 使う必要がなくて、スマートな実装になるよ。
そもそも確認が必要な内容かどうか検討してみると良いです。
確認が必須なら、モーダルで一旦表示させて投稿させると UX も向上して happy。
ただ、画面はちょっとややこしくなるけどねぇ。。。

663デフォルトの名無しさん (ワッチョイ 7f92-+ow7)2018/09/13(木) 09:25:37.97ID:Rrxby3/D0
>>660
何それ…
やってない
帰ったらやってみる

664デフォルトの名無しさん (ワッチョイ 9fd0-cC+K)2018/09/13(木) 17:07:19.50ID:yxnhKk7t0
>>634のfilter_inputって使い方間違ってるん?(´・ω・`)

665デフォルトの名無しさん (ワッチョイ bf9f-ID1G)2018/09/13(木) 18:13:28.78ID:WElsz8IU0
美しさはともかく、間違ってはいない。
勘違いしていたのは俺…
申し訳ないです。

666デフォルトの名無しさん (スッップ Sdbf-t6RF)2018/09/14(金) 11:13:27.37ID:LYVyvVvXd
提唱者が逃げ出したから、
こういう時にどう使ったら良いか
教えてくれない

667デフォルトの名無しさん (ワッチョイ 9fd0-cC+K)2018/09/15(土) 11:16:20.77ID:h4tGgfju0
ユーザー入力を画面上に表示する場合、どんな時でもhtmlspecialchars関数を使った方がいいんですか !?

668デフォルトの名無しさん (ワッチョイ 17b3-+ow7)2018/09/15(土) 11:29:57.48ID:4K9/kzuG0
>>667
個人的にはここの説明が納得しやすかった
https://qiita.com/mpyw/items/19e6fed835ccdbcb0d6d

画面表示で Content-Type: text/plain の時は、当然だけど必要無い。
text/html な中で、text/plain はちょっと思いつかなかった。
だれかフォローよろしくw

669デフォルトの名無しさん (ワッチョイ 97b8-Moip)2018/09/16(日) 09:00:18.99ID:yeSA5Nar0
考えられるパターンとしては
1.入力値の検証はせずそのまま出力する
2.入力値の検証はせずhtmlspecialcharsを使う
3.入力値の検証→問題はないのでそのまま出力
4.入力値の検証→問題なのでhtmlspecialcharsを使う
5.入力値の検証→問題はないがhtmlspecialcharsを使う
6.入力値を出力前に無害化してそのまま出力

1は当然やっちゃだめ
6は元の入力値と異なる可能性が生まれるので使うなら重要でない箇所限定(非推奨)
5は冗長だが5が一番おすすめ

670デフォルトの名無しさん (ワッチョイ 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が振る舞いを変えてコンテンツを表示させたいです

そんなこと可能でしょうか?

671デフォルトの名無しさん (ワッチョイ 9f80-bWaM)2018/09/16(日) 19:57:17.91ID:Fs79WbqO0
要するに
hoge.com/rand/aaa.jpg
を見てるつもりで
hoge.com/rand/index.php?q=aaa.jpg
で内部的に処理して返したいってことです

672デフォルトの名無しさん (ワッチョイ 9776-ebpV)2018/09/16(日) 20:17:40.26ID:xrMzIoGe0
mod_rewrite使うとか

673デフォルトの名無しさん (ワッチョイ 7f9f-AvBu)2018/09/16(日) 20:28:28.45ID:Lgam3puB0
file(”aaa.jpg”)
で表示できたような

674デフォルトの名無しさん (ワッチョイ 7f9f-AvBu)2018/09/16(日) 20:31:03.90ID:Lgam3puB0
print file($_GET[q])
だったかな
忘れた

675デフォルトの名無しさん (ワッチョイ 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

こんな感じでリクエストを書き直す?
うまく行くかちょっと自信ない

676デフォルトの名無しさん (ワッチョイ 9fd0-cC+K)2018/09/17(月) 11:11:17.62ID:B1zUo4Ps0
PHPの処理はHTMLの外で行い、結果だけをHTMLの中に表示する方法が良いんですか?(´・ω・`)

677デフォルトの名無しさん (ワッチョイ bfd5-Un1/)2018/09/17(月) 12:21:19.45ID:hbuTlOjm0
>>676
その方がいいと思うよ。
HTMLを修正する理由と処理を修正する理由は大抵違うから、それぞれ分けておくと都合がいいと思う。
分業の面でもいいし、処理の見通しも良くなる。

ただそう作るなら、表示(見た目)のためのコードは処理側から排除するのがいいと思う。
エスケープはもちろん、例えばマイナスの数値を表示するのに▲を付ける仕様だったとして、それを行うコードはHTML側に実装する感じ。
処理側で▲付きの文字列を作るようなことするとカオスになっていく。

678デフォルトの名無しさん (ワッチョイ 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のコードは直接見えないから手軽な安全策かも。

679デフォルトの名無しさん (ワッチョイ 9fd0-cC+K)2018/09/17(月) 15:38:02.41ID:B1zUo4Ps0
>>677
>>678
分けた方が管理しやすいですか(゜-゜)
ありがとうございました。

680デフォルトの名無しさん (アウアウカー Saeb-Gwc+)2018/09/18(火) 18:36:46.23ID:LS9+DTCza
今回乗っ取りが可能な脆弱性が発見されましたが、その脆弱性を試したいです。
どうすればいいのでしょうか?

681デフォルトの名無しさん (ワッチョイ 97b8-Moip)2018/09/19(水) 12:22:09.46ID:hsm6EpoV0
Bug #76582が原因らしいからバグレポート読んでみたら?
再現コードも書いてるよ
まぁ単にXSSが可能だったってだけでそれ以上でもそれ以下でもないが

682デフォルトの名無しさん (ワッチョイ bf4b-72gh)2018/09/19(水) 20:12:04.29ID:2g+A18ll0
laravelを始めようと思うのですがrailsと比べて何が良くて何が悪いのか聞きたいです
僕自身railsはチュートリアルやったくらいしか知りません

683デフォルトの名無しさん (ワッチョイ 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

684デフォルトの名無しさん (ワッチョイ 82d0-Y82R)2018/09/21(金) 10:36:19.22ID:0nwAv71v0
POSTされた値を最初に変数に代入してから検証するのと、
検証してから変数に代入するのとでは安全性に違いはありますか?

変な質問で申し訳ない(´・ω・`)

685デフォルトの名無しさん (ワッチョイ 6d23-v8+k)2018/09/21(金) 12:16:47.46ID:CXW/z+bx0
一概には言えないが、値の検証はその値を使う直前にやるのが一番良い
検証の後に不用意に値が書き換わってたら検証の意味がない

686デフォルトの名無しさん (ワッチョイ 82d0-Y82R)2018/09/21(金) 16:41:58.26ID:0nwAv71v0
>>685
いただいたレスを参考に考えた結果、値を使う直前に検証することにしました。
アドバイスありがとうございました。

687デフォルトの名無しさん (ワッチョイ fe92-tHrl)2018/09/21(金) 18:17:31.43ID:2dxDcAKa0
>>658です。
お返事遅くなってしまい申し訳ないです。

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

どうもありがとうございます。

688デフォルトの名無しさん (ワッチョイ 82d0-Y82R)2018/09/25(火) 17:01:58.96ID:CUEvMMrT0
if($A === $B){
 $A;
}else{
 $B;
}



if($A !== $B){
 $B;
}else{
 $A;
}

って どっちが良いですか !?
って聞かれても俺にはわかんねーよ(´・ω・`)
というグチ

689デフォルトの名無しさん (ワッチョイ be9f-gsXS)2018/09/25(火) 17:46:06.44ID:NyMQ4nya0
名前がつかない例外を受け取ることは難しいね

>>688
!== より === の方がタイプする労力が小さいから前者

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

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

$A===$Bを比較したいのか$A!==$Bを比較したいのか
自分が何をやりたいのかどこに主軸をおきたいのか考えれば自ずと答えは出るでしょう

692デフォルトの名無しさん (ワッチョイ c99e-IBuP)2018/09/26(水) 01:33:34.79ID:QPkmxTlR0
thenが通常処理、elseが異常(エラー)処理ってイメージ
通常処理がn種類(複数)あるって感じな場合は、二択だったとしてもswitchにしてる

693デフォルトの名無しさん (ワッチョイ c198-DHaP)2018/09/26(水) 14:54:46.71ID:eJD5a6UK0
$var = getA();
if (!$var) {
 $var = getB();
}
if (!$var) {
 $var = getC();
}
if (!$var) {
 $var = getD();
}
if (!$var) {
 return false;
}

return $var;

こういうコードをもっとスッキリさせる書き方ってないですか?

694デフォルトの名無しさん (ワッチョイ be9f-gsXS)2018/09/26(水) 15:24:24.44ID:aA/f+lgF0
orを使うといいかも

695デフォルトの名無しさん (ワッチョイ c9b8-gcds)2018/09/26(水) 18:40:59.41ID:we9WvBjb0
get($ident)的な関数作って
$var=false;で初期化して
["A", "B", "C", "D"]をぶん回して見つかれば$var上書きしてbreak

696デフォルトの名無しさん (ワッチョイ b165-coYL)2018/09/26(水) 19:38:26.60ID:Rr41G2Hg0
短絡評価でbooleanが返ってくる言語だからなぁ

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

でnullが返ってくると順次後ろに落ちていくようには出来る
falseが返ってくると打ち切られて結果もfalseになる

697デフォルトの名無しさん (ワッチョイ c198-DHaP)2018/09/26(水) 23:01:39.30ID:eJD5a6UK0
みなさんレスありがとうございます
実際はもっとメソッド名が長く、引数が複数あり、一つ一つが若干重い処理なので
現状が一番スマートのような気がしてきました

698デフォルトの名無しさん (ワッチョイ 579e-/YFy)2018/09/27(木) 00:21:34.56ID:PI1koV5V0
Cなら関数ポインタを配列にツッコんでぶん回す
危険かどうかは触れない

699デフォルトの名無しさん (ワッチョイ f7e9-S4i9)2018/09/27(木) 10:36:27.42ID:kbPnGc7o0
メソッドに応じて引数も可変ならcall_user_func_array()使えばいいだけじゃない?
そんな大層な話しか?30秒で書けるがw

function hoge()
{
  $methodArr = [
    'A' => ['a', 'b'],
    'B' => [],
    'C' => ['c', 'd'],
  ];

  foreach ($methodArr as $method => $params) {
    if ($result = call_user_func_array($method, $params)) {
      return $result;
    }
  }

  return false;
}

700デフォルトの名無しさん (ワッチョイ f7e9-S4i9)2018/09/27(木) 10:42:54.79ID:kbPnGc7o0
行数的には>>693と大差ないが
$methodArrのところを定数にでもしておけば
動作に変更が入ってもそこの定義を変えるだけで済むわな

さすがに>>693はないわ
見ただけで頭がクラクラするw

701デフォルトの名無しさん (ワッチョイ f7e9-S4i9)2018/09/27(木) 10:50:13.05ID:kbPnGc7o0
>>688みたいに

if(){

}else{

}

と詰めて書く人ってPSRなんか読んだ事ないんだろうな

if () {

} else {

}

と書きなさい

702デフォルトの名無しさん (ワッチョイ bfd5-E/Y9)2018/09/27(木) 12:20:21.79ID:mllxUQ0M0
>>700
>>693 の方がシンプルでスッキリしてて速くて分かりやすいコードだと思うよ。
>>699 の利点てなに?

703デフォルトの名無しさん (スププ Sdbf-4Fgi)2018/09/27(木) 13:37:29.99ID:7B8reSZgd
メソッドや引数が減ったり増えたり順序が変わったりした時に
699なら”コード”を触らず”定義”の修正だけで済むが
693だと”コード自体”を修正する必要があるな

704デフォルトの名無しさん (ワッチョイ 579e-/YFy)2018/09/27(木) 13:54:32.47ID:PI1koV5V0
call_user_func_arrayなんてあったんだね。
じゃあこれ一択だわ。
理由は>703

705デフォルトの名無しさん (ワッチョイ 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;
}

とでもする方がまだマシなんじゃね。

706デフォルトの名無しさん (ワッチョイ f7e9-S4i9)2018/09/27(木) 14:00:23.22ID:kbPnGc7o0
>>703
>>700に同じ事書いたんだけどなw

>>704
だよね

>>705
頭固いねw
理解できないならもういいわw

707デフォルトの名無しさん (ワッチョイ bfd5-E/Y9)2018/09/27(木) 14:04:14.99ID:mllxUQ0M0
>>706
定義と称してロジックを別の形で書いてるなら、ロジックをそのまま書けばいいだろう?
んで引数に変数はどうやって渡すの?

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

自分は実際にこのようなケース(Cで)楽にメンテできた実績があるからこっちを選ぶけど、
こういう方法もあるよってディスカッションならどんどんやればいい。

709デフォルトの名無しさん (スププ Sdbf-4Fgi)2018/09/27(木) 14:09:57.57ID:7B8reSZgd
今更include_onceなんかを使ってるしむしろ693より悪化してるという
699みたいに動作定義を配列変数にしておけばその中に更に変数やメソッドの返り値を持たせることだってできるだろうに

710デフォルトの名無しさん (ワッチョイ bfd5-E/Y9)2018/09/27(木) 14:10:07.99ID:mllxUQ0M0
>>708
うん、方法としては知っていていいものだからどんどん上げればいいと思うが、>>700 この言い草だからな。

711デフォルトの名無しさん (ワッチョイ bfd5-E/Y9)2018/09/27(木) 14:12:14.74ID:mllxUQ0M0
>>709
その変数やメソッドの返り値を定義した具体例を挙げてみてよ。

712デフォルトの名無しさん (ワッチョイ 175b-45+G)2018/09/27(木) 14:15:44.50ID:dO3eQ5uW0
>>710
はたから見たらお前さんも同じようなもんだし喧嘩腰なのはむしろお前さんの方に見えるが

713デフォルトの名無しさん (ワッチョイ bfd5-E/Y9)2018/09/27(木) 14:28:22.94ID:mllxUQ0M0
>>712
>>699 は $methodArr が hoge のスコープに居るからパラメタに変数を取ってもシンプルに定義できるけど、それを定義として別ファイルに浮かせるという話について、どうやって?と聞いてるだけだぞ。
おまえは具体的な実装イメージ湧いてる?

714デフォルトの名無しさん (ワッチョイ 9fd0-ZVm4)2018/09/28(金) 10:46:28.24ID:Lkb4ZCCn0
if ( ( string ) filter_input ( INPUT_POST , 'hoge' ) === '' ) { ・・・ }
↑だと入力欄が空の時に〜となりますが、
半角・全角のスペースが1つだけ入力されたの時も含めたい場合は どのように書くのが良いですか?
どなたか ご教授ください(´・ω・`)

715デフォルトの名無しさん (ワッチョイ 17b3-S4i9)2018/09/28(金) 10:48:54.31ID:h3Rmmj6P0
>>714
filter_input のマニュアル見てみ。

716デフォルトの名無しさん (ワッチョイ f7e9-S4i9)2018/09/28(金) 14:07:08.20ID:c+sKNdIa0
>>714
本当に半角スペースと全角スペースだけでいいの?
タブ"\t"とか改行コード"\rや\n"とかはOKなの?(たぶん駄目だよね)
本当に1つだけでいいの?
半角スペースが100個連続しているのはOKなの?(たぶん駄目だよね)

ってことで
UTF-8ならpreg_match()にuのパターン修飾子付けるのが楽

$hoge = (string) filter_input(INPUT_POST, 'hoge');
if ($hoge === '' || preg_match('/\A\s++\z/u', $hoge)) { }

もっと厳密にやりたいなら、弾きたい文字を文字プロパティで表現すればいい
例えば [\p{Z}\p{Cc}]++ みたいに

717デフォルトの名無しさん (ワッチョイ f7e9-S4i9)2018/09/28(金) 14:08:24.39ID:c+sKNdIa0
で、更に言えばさw
'あいうえお'の前後に空白文字が1000個あるのはOKなの?って話にもなってくるんで
ちょいと考え方と変えて

$hoge = preg_replace('/\A\s++|\s++\z/u', '', $hoge);
こんな感じで先に文字列の前後の空白文字を取り除いてから

if ($hoge === '') { }
とするやり方なんかもあるな

718デフォルトの名無しさん (ワッチョイ 9765-aemA)2018/09/28(金) 14:17:49.83ID:KTNzW9VA0
preg_match('/\A\s*+\z/u', $hoge) じゃない理由は何かあるのん

719デフォルトの名無しさん (ワッチョイ f7e9-S4i9)2018/09/28(金) 14:29:52.16ID:c+sKNdIa0
>>718
空の時点で評価して正規表現に通さない方がいいから

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

あと+じゃなく++と書いてる理由はReDoSでググればいいんじゃない?
Stack Exchange(違ったかもw)が
++じゃなく+使ってたせいでサービスダウンしたのはわりと有名

720デフォルトの名無しさん (ワッチョイ 9fd0-ZVm4)2018/09/28(金) 15:56:20.55ID:Lkb4ZCCn0
>>715
アドバイスありがとうございます。
filter_inputのマニュアルを確認しましたが、自分では解決できませんでした。
引き続き学習を続けます。

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

お二方、ありがとうございました。

721デフォルトの名無しさん (ワッチョイ 17b3-S4i9)2018/09/28(金) 16:31:29.64ID:h3Rmmj6P0
>>720
filter として FILTER_VALIDATE_REGEXP つまり正規表現が使える。
FILTER_CALLBACK つまり、ユーザー定義の関数をコールしてデータをフィルタリングしても良い。

722デフォルトの名無しさん (ワッチョイ 378a-tkB1)2018/09/29(土) 10:56:37.08ID:6BMpRid40
if('aaa'==' aaa')//true
となることを発見したんですが、前方の空白は無視されるんですか?
これは正しい使い方でいいのですか?
よろしくお願いします

723720 (ワッチョイ 9fd0-ZVm4)2018/09/29(土) 17:12:36.46ID:rR859Rl80
>>720です

>>721さん
詳しく教えてくださり、ありがとうございます。
いただいたアドバイスを生かせるよう精進します。

724デフォルトの名無しさん (ワッチョイ 57b8-UjLZ)2018/09/29(土) 18:16:41.98ID:DN2c19jF0
>>722
正しくないし、そうもなりません。
https://www.ideone.com/PaWqhJ

725デフォルトの名無しさん (ワッチョイ ff8a-tkB1)2018/09/30(日) 08:27:28.94ID:KcrMzjy/0
>>724
すみません、間違えました
アルファベットaaaじゃなくて、数字1234でした
var_dump('1234'==' 1234');//bool(true)

726デフォルトの名無しさん (ワッチョイ 9fd0-ZVm4)2018/09/30(日) 13:45:51.83ID:Cu2FNSd00
メール送信の際に確認と検証目的で画面上に表示させる時、気をつけるべきことって どのくらいあるものなのだろうか(´・ω・`)
htmlspecialchars() ? 未入力の確認 ? (´ρ`)

727デフォルトの名無しさん (ワッチョイ bfd5-E/Y9)2018/09/30(日) 18:23:11.88ID:+yuU+UfL0
>>726
単に表示するだけならそのくらいだろうけど、チェックも含むならメールのエンコーディングで使えない文字が含まれてないかとかかな。

728デフォルトの名無しさん (ワッチョイ 57b8-UjLZ)2018/09/30(日) 18:40:30.48ID:0JTA57Qc0
>>725
http://php.net/manual/ja/language.operators.comparison.php
>整数値を文字列と比較したり、比較に数値形式の文字が含まれる場合は、文字列が 数値に変換され、 数値としての比較を行います。

要は文字列'1234'が数値形式(int型)なので↓のように比較される。
(int)'1234' == (int)' 1234'

> === あるいは !== による比較では型変換は発生しません。 この場合は値だけでなく型も比較します。
なのでこういう自動キャストが困るのであれば===で比較すること。

729デフォルトの名無しさん (ワッチョイ 178a-tkB1)2018/10/01(月) 01:43:36.31ID:4WHq1Bue0
>>728
ありがとうございました

730デフォルトの名無しさん (ワッチョイ 7f92-S4i9)2018/10/01(月) 15:22:45.32ID:EoUwSVMY0
すまない。
微妙にスレチなのだが助けてほしい。

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

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

移行方法をご存知の方いらっしゃいましたらお教えください。

731デフォルトの名無しさん (ワッチョイ 9fd0-ZVm4)2018/10/01(月) 16:08:39.48ID:dk4eIPju0
・echo htmlspecialchars($var = (string)filter_input(INPUT_POST,'var',ENT_QUOTES,'UTF-8'));
・echo $var = (string)filter_input(INPUT_POST,'var',FILTER_SANITIZE_FULL_SPECIAL_CHARS)
どっちが危険だと思う?

732デフォルトの名無しさん (ワッチョイ 17b3-S4i9)2018/10/01(月) 18:58:30.27ID:Fhb8wAZ60
>>731
そんな汚いコード、読むまでもなく危険。

733デフォルトの名無しさん (ワッチョイ 57b8-UjLZ)2018/10/01(月) 21:19:33.56ID:uTHNCD5Z0
>>730
xamppのどこかにログ出力されてるかは知らないけど、
まずエラーログを見ないことには。
windowsのイベントビューアとかにもなんか書いてる可能性がある。

734デフォルトの名無しさん (ワッチョイ 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ファイル内のものしかありません。

735デフォルトの名無しさん (ワッチョイ 9fd0-ZVm4)2018/10/02(火) 15:27:03.69ID:F0vZUT3n0
>>731
前者だな
理由は↓が語ってくれるだろう

ワッチョイ 9fd0-ZVm4
そろそろ金払って誰かに個人レッスンしてもらいなさい

737デフォルトの名無しさん (ワッチョイ 7723-jO+J)2018/10/02(火) 17:55:01.30ID:nFqAwCYR0
>>734
もうそこまで来たらバックアップ使って一から復旧した方が速い
まさかバックアップ取ってないとかないと思うが、もしそうなら諦めロン
次からは定期的に数世代分はバックアップ取るようにしなよ

738デフォルトの名無しさん (ワッチョイ 7f92-S4i9)2018/10/02(火) 22:16:36.49ID:nd3RRH6B0
>>737
FRMファイルとIBDファイルは残っています。
これらのファイルから復元はできないでしょうか?

>>736
ここの方々の方が信頼できるから仕方ないです(´・ω・`)
いつも教えてくれて ありがとうございます。

740デフォルトの名無しさん (ワッチョイ 1f7e-S4i9)2018/10/03(水) 11:42:25.53ID:GHy9f6hT0
MYSQLが吹っ飛んだ でググるといいかも

741デフォルトの名無しさん (ワッチョイ 7723-jO+J)2018/10/03(水) 13:58:24.75ID:2El7vfsT0
>>738
それが壊れる前のファイルなら単純に差し替えれば動くだろう
バックアップあるならそこから引っ張ってくればいい
それが壊れたあとのファイルならそのファイル自体が壊れてるのだからあったところで意味がない

742デフォルトの名無しさん (ワッチョイ 7f92-S4i9)2018/10/03(水) 21:31:15.79ID:XKY8vr/j0
>>740
ありがとうございます。
頑張ってみます。

>>741
ファイルは壊れていないようなので
このまま使ってみようと思います。

743デフォルトの名無しさん (ワッチョイ d7b3-aemA)2018/10/03(水) 22:33:44.05ID:bSsx2t9M0
>>736
横から失礼、個人レッスンってどこで頼むのがいい?

テックアカデミーや侍でもできるのか?とか、
クラウドワークスやココナラで単発でお願いするのがいいかと迷っている

744デフォルトの名無しさん (ワッチョイ fd9e-XM+q)2018/10/09(火) 19:35:33.43ID:DO0V6smF0
会社の先輩から受け継いだコードに
ini_set("allow_url_fopen", 1);
って有るのですが、何ですか?
PHP初めて三日目なので何も分かりません。

745デフォルトの名無しさん (ワッチョイ c4e3-5jP5)2018/10/09(火) 21:29:54.26ID:gfRhaM0q0
文字通り

746デフォルトの名無しさん (ワッチョイ 3e6d-eH9n)2018/10/10(水) 19:05:57.00ID:VQ/JYckG0
質問です
将来的にこういうアプリを作りたいと思っています
まずゲーム部分をunityで作って例えばオンラインランク的なネットワーク機能はphpで作るという物です
ここで疑問なのですがphpはサーバーとしてネットに公開するという事になりますよね?
俺はそのunityで作ったアプリからしかそのphpサーバーにアクセスして欲しくありません
でもネットに公開してる時点で普通にブラウザからでもアクセスできてしまうと思うのですが
こういう問題について世間の開発者の人たちはどういうやり方を用いているのでしょうか?

747デフォルトの名無しさん (ワッチョイ d881-t36n)2018/10/10(水) 19:39:55.34ID:8sboglrA0
>>746
Webサーバー上でPHPを動かそうとしてる?
それなら、通常のポートと違うポートを使用して
そのポートを外部から遮断しておけば良いのでは

748デフォルトの名無しさん (ワッチョイ 41b3-Qng4)2018/10/10(水) 19:42:09.52ID:uL/SAi3N0
>>746
> unityで作ったアプリからしかそのphpサーバーにアクセスして欲しくありません
これと

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

要件としては前者だと思うけど、各社のノウハウになるんじゃないかなぁ。
簡易的なものだと、header 触るぐらい。

749デフォルトの名無しさん (ワッチョイ 3e6d-J+fU)2018/10/10(水) 20:03:08.68ID:VQ/JYckG0
>>747
レンタルしてサーバーを使おうと思ってます
外部から遮断してアプリからアクセスできるんですか?

>>748
個人で作ってるので簡易的なものしか作れません
ヘッダーの設定ですね
覚えておきます

750デフォルトの名無しさん (ワッチョイ 529f-XM+q)2018/10/10(水) 20:04:12.63ID:dwQgwWbW0
プログラミングはphp mysqlを齧った初心者です。
下記のようなユーザー参加型ランキングサイトを作りたいのですが
https://www.animeranking.net/index.php


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

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

ご教授お願いします。

751デフォルトの名無しさん (ワッチョイ d881-t36n)2018/10/10(水) 20:50:38.91ID:8sboglrA0
>>749
レンタルサーバーなら、
アクセス元のIPアドレスを取得して
自ホストからのリクエストでなければ
応答せずそのまま終了すれば良いよ

752デフォルトの名無しさん (ワッチョイ 3e6d-J+fU)2018/10/10(水) 20:58:58.35ID:VQ/JYckG0
>>751
アプリやpcソフトからのアクセスで自分のホストとかわかるんですか?

753デフォルトの名無しさん (ワッチョイ d881-t36n)2018/10/10(水) 21:04:33.75ID:8sboglrA0
>>752
勘違いしてたかな?
アプリってPCなりスマホなりで動かすって事?
そういうことなら、この方法じゃ無理だな

754デフォルトの名無しさん (ワッチョイ 3e6d-J+fU)2018/10/10(水) 21:09:09.52ID:VQ/JYckG0
>>753
スマホとかpcからです

755デフォルトの名無しさん (ワッチョイ d881-t36n)2018/10/10(水) 21:19:14.34ID:8sboglrA0
>>754
それだと、どんなに独自の方式を考えたところで
クライアント側がガードされていない限り
解析されて方式を破られる可能性があるよね?

mutual TLS

757デフォルトの名無しさん (ワッチョイ 3e6d-J+fU)2018/10/10(水) 21:54:13.75ID:VQ/JYckG0
>>755
ですよね
俺もそう思いました
だから世間の開発者の人たちはどうしてるのかな、と

758デフォルトの名無しさん (ワッチョイ d881-t36n)2018/10/10(水) 22:06:33.98ID:8sboglrA0
PHPの話ではないけれど
大概のネットゲーム会社はクライアントアプリに
何らかの形でガードをかけている
ホストとの通信は暗号化し、
クライアントアプリ内部メモリへのアクセスも出来ないようにしている
チート対策でCPUの不正な高速化までチェックしている所もある

どこまでやれば良いのかを考えるとキリがないかも知れない

759デフォルトの名無しさん (ワッチョイ 3e6d-J+fU)2018/10/10(水) 22:16:40.86ID:VQ/JYckG0
>>758
うーむ
無理、ですね
チートされても致命傷にならない範囲で作るしかなさそう

760デフォルトの名無しさん (ワッチョイ e7b8-PLlx)2018/10/11(木) 02:07:56.23ID:ywvO8NYp0
パケットを圧縮暗号化分割して何をしているのかわからなくする
もちろんメンテナンスと称して毎週のようにパターンは変えること

761デフォルトの名無しさん (ワッチョイ e79e-fbiU)2018/10/11(木) 04:29:58.54ID:zE20d/IG0
蔵のチート対策やデータの暗号化はさておき、今回の質問のメインって
鯖との接続・セキュリティ対策よね?

単純に認証方式の話になるんじゃないの?>756でも書かれてるけど

762デフォルトの名無しさん (ワッチョイ e7b8-PLlx)2018/10/11(木) 11:25:38.96ID:ywvO8NYp0
>俺はそのunityで作ったアプリからしかそのphpサーバーにアクセスして欲しくありません
非正規クライアントを作られてほしくないからその対策を教えてくれ
って言ってんじゃないのか

763デフォルトの名無しさん (ワッチョイ df6d-3WQG)2018/10/11(木) 12:25:06.79ID:RBgNCbjF0
>>762
746ですが
俺の入門書レベルでの知識ではphpをサーバーに設置したらネットのどこからでも見れてしまうと
思ったのでそれで質問しました
あくまでゲームからアクセスして欲しいなと

764デフォルトの名無しさん (ワッチョイ 7fe8-37bo)2018/10/11(木) 12:50:41.46ID:bd8i7ua+0
IPアドレスにデータを流す以外に通信する方法があるならそっちでやればいいけど、
普通に公開鍵と秘密鍵を使って認証するのが真っ当じゃないの
これを第三者クライアントが使えるんなら鍵の意味がない

765デフォルトの名無しさん (ワッチョイ 7f80-WnU0)2018/10/11(木) 13:08:42.23ID:3Bdkvxy90
>>746
ゲームは、ログイン・認証した人しか、プレイできない。
もし、アクセス権のない人がアクセスすれば、ログイン画面にリダイレクトされる

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

Ruby on Rails で、システム運用構築・プログラミングの練習をした方がよい

766デフォルトの名無しさん (ワッチョイ df6d-3WQG)2018/10/11(木) 13:11:06.48ID:RBgNCbjF0
>>765
ログインですか
でもアプリとかのゲームではログインなしでランキング機能を使えるゲームも少なくないと
思うのですがそれについてはどう思われますか?

767デフォルトの名無しさん (ワッチョイ e79e-fbiU)2018/10/11(木) 13:15:39.15ID:zE20d/IG0
>>762
例えBASIC認証でも自分で作ったプログラム以外からのアクセスは除外することはできるよね。
あとはセキュリティ強度の問題であって、チートやら暗号化の話は別の話のはず。

768デフォルトの名無しさん (ワッチョイ e79e-fbiU)2018/10/11(木) 13:19:09.28ID:zE20d/IG0
>>766
プログラム内部でログイン処理があるだけで表に出さないだけの話でしょ。
端末固有情報でアカウント作ってログインしてるだけ。

端末固有情報を使わないと鯖にはもちろん入れない。
あとは不正な端末固有情報を使わせない仕組みを考えるだけ。

769デフォルトの名無しさん (ワッチョイ c723-WBp8)2018/10/11(木) 13:24:40.62ID:Ub0lOJUx0
IDとパスワードを手打ちでポチポチッとすることだけがログインじゃない
もうちょっと自分でいろいろ調べてみていいと思うよ
さすがにちょっと質問のレベルが低すぎて教えようがない

770デフォルトの名無しさん (ワッチョイ df6d-3WQG)2018/10/11(木) 13:27:20.03ID:RBgNCbjF0
>>768
なるほどわかりました
それで一つ質問なのですがある端末の識別情報を別の端末が偽装して使って成り済ます
という事はどうやって防ぐのでしょうか?

771デフォルトの名無しさん (ワッチョイ c723-WBp8)2018/10/11(木) 13:51:16.45ID:Ub0lOJUx0
その質問はまず偽装の方法を自分で調べて理解してからの方がいいよ
偽装の方法によって対策が変わるんだからそんなざっくりとした質問は答えようがない

772デフォルトの名無しさん (ワッチョイ df6d-3WQG)2018/10/11(木) 13:51:26.37ID:RBgNCbjF0
>>770
やっぱりこれ無しにしてください
まず初回アクセス時にサーバーでパスワードを発行してアプリ側で保存してしまえばいいんですよね
それでかなり確かなセキュリティーが保たれると思います

皆さんありがとうございました
あんまりしつこいとウザいのでこの辺で失礼したいと思います

773デフォルトの名無しさん (ワッチョイ e79e-fbiU)2018/10/11(木) 14:01:09.06ID:zE20d/IG0
>>770
絶対不可能レベルなのか、仕組みさえバレなきゃまず偽装できないからそのレベルなのかで
方法論変わってくるんじゃない?

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

カネ絡みやら個人情報の絡みがあるんなら、もっと厳格かつワンタイムパスワードとか
必要になってくるわね。

774デフォルトの名無しさん (ワッチョイ e79e-fbiU)2018/10/11(木) 14:02:05.28ID:zE20d/IG0
書き込みボタン押す前に電話してたら終わってた

>>772
まず難しいこと考える前に作ってしまえば。
URLを秘密にしておくだけでとりあえず充分。
それがちゃんと動くようになったら不正利用防止を考えていけばいい。
少なくとも今は、ただツベコベ言ってるだけで実際にモノを作れるレベルじゃないんじゃないの?って印象しかない。

776デフォルトの名無しさん (ワッチョイ 7f80-WnU0)2018/10/11(木) 14:08:53.21ID:3Bdkvxy90
HTTP は、1回毎の通信だから、同じユーザーかどうか、判別できないが、
セッション機能を使うと、各プレイヤーは判別できる

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

SSL・認証は、開発者の常識。
国家資格の基本情報処理技術者でも取れば?

777デフォルトの名無しさん (ワッチョイ 7fe8-37bo)2018/10/11(木) 14:18:55.27ID:bd8i7ua+0
不正ログイン対策と通信毎のユーザー判別とは別の話

778デフォルトの名無しさん (ワッチョイ e7b8-PLlx)2018/10/11(木) 15:26:02.99ID:ywvO8NYp0
>>767
unityC#で作った正規GUIクライアントでランキングサーバにアクセスするのと
同じ情報手順プロトコルを解析してphpで作った非正規CUIクライアントでアクセスするの
サーバはどうやって正規クライアントと非正規クライアントを見分けるの?
正規クライアントを必要とするチートの話じゃなくてどちらかというとBOTの話

779デフォルトの名無しさん (ワッチョイ 7f80-WnU0)2018/10/11(木) 16:10:14.57ID:3Bdkvxy90
ゲームは、ログイン・認証した人しか、プレイできない。
もし、アクセス権のない人がアクセスすれば、ログイン画面にリダイレクトされる

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

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

全く同じレスポンスを返すのだろ。
エミュレーターなんか、そう

780デフォルトの名無しさん (ワッチョイ e79e-fbiU)2018/10/11(木) 16:25:57.66ID:zE20d/IG0
>>778
まずは解析されにくくすることで非正規を弾く発想なので、
解析されてる時点ではどうしようもないよね。

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

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

ていうか、SSL/TLS通信ってそんな簡単に解析して非正規クローン作れたりするの?

781デフォルトの名無しさん (ワッチョイ 7f81-VhFj)2018/10/11(木) 16:33:34.56ID:kxyqPSNi0
解析を試みる人がアプリの所有者の場合も考えないと

782デフォルトの名無しさん (ワッチョイ e7b8-PLlx)2018/10/11(木) 16:43:19.53ID:ywvO8NYp0
>まずは解析されにくくすることで非正規を弾く
俺がいってるのは
解析されにくくすることで非正規そのものを作ろうと思わない環境にするであって
非正規クライアントの存在そのものがないことを前提にしてるので
似たようなこと言ってるのだが微妙に話が噛み合ってないんよな

783デフォルトの名無しさん (ワッチョイ 7f81-VhFj)2018/10/11(木) 17:02:25.53ID:kxyqPSNi0
質問者の前提は

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

なので、非正規クライアントも含まれると思うが

784デフォルトの名無しさん (ワッチョイ a72d-4Hut)2018/10/11(木) 17:08:05.67ID:mY8AIbZq0
SSL/TLSは経路上で情報が漏れることを防ぐためのものでエンドポイントでなら当然簡単に読み取れる

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

最も2はソケット開いたあと何したらいいかわからないはずなので
コードはせいぜい数行程度になり動作も不能で
俺的にはそんなものをクライアントと呼んでいいのか?っていう感じだが

786 ◆QZaw55cn4c (ワッチョイ df60-vJCm)2018/10/11(木) 20:27:41.65ID:GbIju3sk0
非正規と判断されたクライアントに対してはなんらかのペナルティーを課せればいいかと
P2P file sharing ならばファイル拡散もかねてキャッシュを送りつける、とか

787デフォルトの名無しさん (ワッチョイ 7f81-VhFj)2018/10/11(木) 21:00:09.10ID:kxyqPSNi0
何をしたら良いか分からないはずと言うのは、かなり甘い見通し
ゲーム会社はそんな甘い考えは持っていない
例えばクライアントソフトをデバッガー環境下で起動されると
サバクラ間のやり取りの相当部分が解析されてしまう
ゲーム会社はそれをさせまいと独自のメモリ保護機構を構築し
そのようなハッキングを検出したら終了させている

788デフォルトの名無しさん (ワッチョイ 27e4-PLlx)2018/10/13(土) 10:43:20.37ID:vROhTmSS0
>>787
いやいや、言い方が悪かったか。
何も出来ないんだよ。毎週変えられたら実質解析なんて不可能なんだから。
やるべきことをやった上での話なのは当然に決まっとろう…

789デフォルトの名無しさん (ワッチョイ 7f81-VhFj)2018/10/13(土) 11:00:18.78ID:WkgZggeq0
>毎週変えられたら

だからこういう手間をかけている分けだろう
こういう手間をかけなかったら、解析されてしまうってこと
解析する側からすれば、
調べる対象は手元にあって、サーバーとのやり取りは全部把握出来てしまう
クライアントの中でどういう処理をしているかも調べる事が出来る
途中経路がいくら暗号化されていようと、クライアントの中は丸見えだ

790デフォルトの名無しさん (ワッチョイ 27e4-PLlx)2018/10/13(土) 17:02:31.63ID:vROhTmSS0
最初から毎週暗号化しろっていってんじゃん。
不正規なクライアントを作らせないって話してるのに、
メモリ保護やらクライアント解析やら、チート対策とごっちゃにしてるんだよな。

まずプレーンな通信で済ませたプロトを作るのが先。
そんなのも作れないのにウダウダ言ってても意味が無いだろ。

792デフォルトの名無しさん (ワッチョイ 7fe8-37bo)2018/10/13(土) 17:31:15.96ID:wAhJCvly0
毎週暗号パターンを変えるような仕組みを採用してるのが当たり前みたいな話になってるけど、
そんなアプリあんの?
後学のために教えてよ

793デフォルトの名無しさん (ワッチョイ 7f81-VhFj)2018/10/13(土) 17:32:45.69ID:WkgZggeq0
作らせないことを前提にしたら
泥棒がいないようにすれば警察はいらないねって言いだしてる様なものだ
不正規なクライアントが簡単に作れてしまうだろ
それをどう対策とるんだよ

クライアントの中見られたら、暗号解読をどうやってるか丸見えだ
毎週変えようと、毎日変えようと、全然対策にならないだろう

パケットと経路の違いもわからないのがペチパーの限界なんだろ
Web脳すぎて草

795デフォルトの名無しさん (ワッチョイ 7f81-VhFj)2018/10/13(土) 17:51:32.87ID:WkgZggeq0
普通は通信相手と信頼関係があって、
外部にそれが漏れないように暗号化するって事だが
ゲームの場合は、通信相手のクライアント自体が
信用出来ない前提でやらないとだめ

796デフォルトの名無しさん (ワッチョイ bf16-Zu1O)2018/10/13(土) 20:29:18.59ID:t1cbhpEg0
初心者です
PHPからコマンド一発で終わらない外部プログラムの実行して操作を行うことってできますか?
例えばMySQLのコマンドラインツールのようなものです

797デフォルトの名無しさん (ワッチョイ e7a5-CsiS)2018/10/14(日) 01:22:40.52ID:kPrWLnvE0
Laravelを使ってサイト作成しようとしてます。
ブログみたいに左側にサイドメニューがあって
メニューの項目をクリックすると中央のページにその項目の情報が表示されるという
ページを作りたいのですが、
サイドメニューを表示させる方法がわからないので教えてください。
調べたところ、レイアウトを設定するかもしれないところまではわかりました。

798デフォルトの名無しさん (ワッチョイ e776-WBp8)2018/10/14(日) 01:25:26.11ID:DpP+LriY0
PHPとかLaravel以前にHTML勉強せよ

FW使えばなんでもできるとでも思っているのか

800デフォルトの名無しさん (ワッチョイ dfd2-7vHE)2018/10/14(日) 02:34:26.10ID:VGDv0f/D0
>>796
適当なシェルスクリプorバッチファイルを作成してキックかな
https://webkaru.net/php/function-exec-system/
本当にPHPでやる必要があるのか疑問だが

801デフォルトの名無しさん (ワッチョイ bf16-Zu1O)2018/10/14(日) 16:07:22.22ID:nHJacGHV0
>>800
ありがとうございます
やってみます

802デフォルトの名無しさん (ワッチョイ 47e9-Zu1O)2018/10/15(月) 13:04:12.63ID:tYDBCfF70
>>792
昔遊んだセガのスマホゲーム
Wiresharkでキャプチャして中身見たら
Jsonをちょこっとエンコード(暗号化ですらない)しただけのデータでやり取りしてたから
デコードしてクラックして遊んでたよ

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

俺も>>791に一票
phpレベルでやる事なんてさ
グダグダ言ってる暇あったらさっさと動くもん作れって話だw

803デフォルトの名無しさん (ワッチョイ 47e9-Zu1O)2018/10/15(月) 13:10:02.66ID:tYDBCfF70
>>801
いやいやw
シェルスクリプト使えww
>>800も書いてるがphpでやる意味が全くない

804デフォルトの名無しさん (ワッチョイ 47e9-Zu1O)2018/10/15(月) 13:12:14.00ID:tYDBCfF70
>>802間違えた
使ったのはWiresharkじゃなくてBurp Suiteだったw

805デフォルトの名無しさん (ワッチョイ 7fb8-PLlx)2018/10/15(月) 13:21:42.85ID:4PSVnYhZ0
制御やら関数やら使うならPHPでもいいんじゃない
シェルスクリプトってやったことない人には地味に面倒だと思うし

PHP入ってる前提の環境ならPHPでシェルスクリプトっぽいことやったっていいと思うけどね楽だし
Python書けるならその方がいいとは思うけど

807デフォルトの名無しさん (ワッチョイ 7fe8-37bo)2018/10/15(月) 17:19:44.72ID:EiXwBhFU0
>>802
暗号化していないんだったら>792の要件を全然満たしてないじゃん
単に自分が
「暗号化されてないゲームのパケットキャプチャしたぞ(ドヤ」
の話だよね

808デフォルトの名無しさん (ワッチョイ 7f81-VhFj)2018/10/15(月) 17:32:28.40ID:Obfj9PeS0
暗号解読法知りたいなら、このスレではないぞ

809デフォルトの名無しさん (ワッチョイ 47e9-Zu1O)2018/10/16(火) 13:07:24.26ID:FKF9rkIY0
>>807
は?
大手のセガですらそんな感じなんだから
791が言ってるように、つべこべ言ってる暇あったらプロト作れよ
って話をしたかっただけなんだがw

メモリ保護みたいなチート対策と混同してる奴いるし
何なのこのスレww さすがPHPerwww

810デフォルトの名無しさん (ワッチョイ 078a-oHS3)2018/10/16(火) 13:13:55.52ID:dIjk/xku0
一般的な質問しかしていないのにプロトタイプも糞もないぞ
勘違いしているのはお前だろう

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

とりあえずapiみたいにhttp(s)使ってピンポン形式でやり取りするだけならプロトぐらいはすぐ作れるでしょ

812デフォルトの名無しさん (ワッチョイ 078a-oHS3)2018/10/16(火) 13:40:34.39ID:dIjk/xku0
質問者の聞きたいことは
出来るか出来ないかなので
出来ないと言う結論が出て
質疑は終了していると思うけど

813デフォルトの名無しさん (ワッチョイ 7fe8-37bo)2018/10/16(火) 19:12:19.10ID:XYy62ZSp0
非正規蔵を作られて鯖にアクセスされたくないってのが元々の質問内容

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

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

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


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

809の脳味噌はそこまで一切考えずにゲーム脳の脊椎反射でマウントドヤドヤ
してるだけだろ。

814デフォルトの名無しさん (ワッチョイ 7f81-VhFj)2018/10/16(火) 19:28:52.29ID:gETK/lfa0
https://mevius.5ch.net/gamedev/

こっちの板でやれよ
馬鹿にされないようにな
ここから来ましたって絶対に言うなよ

815デフォルトの名無しさん (ワッチョイ e79e-fbiU)2018/10/16(火) 19:41:14.46ID:+HAYOFLG0
>>814
俺は横からツッコんだだけで、むしろお前がガッツリ絡んでた話題だろ
なに他人の振りしてんだよ禿

816デフォルトの名無しさん (ワッチョイ 7fb8-PLlx)2018/10/16(火) 19:46:16.42ID:YwbSFpxf0
自動でログインしてセッション確立して投稿するようなスクリプトがあるけど
HTTPに限らず通信手順をちゃんと模倣できていればそれが可能
防ぎたいのなら通信部分を解析されない対策をとればいいのだけど
まあ専門外になるしPHPerには難しいと思うよ

いいからさっさとプロト作れよ

818デフォルトの名無しさん (ワッチョイ e776-WBp8)2018/10/16(火) 22:59:18.93ID:k//Fq9Pi0
俺、セガよりも大手でゲーム作ってたけど、
>>802の言ってることは何も間違ってないと思うぞ
話の流れよく分からんからこれ以上のことは何も言えんが

819デフォルトの名無しさん (ワッチョイ e79e-fbiU)2018/10/17(水) 01:43:49.88ID:3pfHQO2y0
話の前の方から引用すると
>最初から毎週暗号化しろっていってんじゃん。

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

毎週暗号パターン変更してるのかしてないのかの事実関係は
どうでもいいんだけど、上から目線で言う事毎回矛盾してるのはどうなのって話なのでは

820デフォルトの名無しさん (ワッチョイ 7fb8-PLlx)2018/10/17(水) 03:56:11.78ID:leuazgxV0
別口からのアクセスおさえたいなら暗号化しろと
>>746あたりのレスに>>760が答えたのと
>>792に対するレスとして>>802が答えたのは関連があるのか?

821デフォルトの名無しさん (ワッチョイ 7fe8-37bo)2018/10/17(水) 14:21:09.22ID:D/px6urb0
関連ないのを持ち出されても関連ないとしか言いようがないな
>>787から「ゲーム会社では〜」を持ち出し、>>787-790で「毎週変えられたら」
という話が出たから>>792を書いたに過ぎない

結果的にゲーム会社でそこまでやってる例を挙げてるつもりで、暗号化されてない
例を挙げてドヤ顔してるやつが居るよなって話になってるだけ

822デフォルトの名無しさん (ワッチョイ e79e-JlWZ)2018/10/17(水) 17:09:22.67ID:xHybN1E+0
配列で得られたデータをオブジェクトに変換してリターン
している例を見たのですが、何かメリットがあるのでしょうか?
return (object)$arr;

823デフォルトの名無しさん (ワッチョイ 47e9-Zu1O)2018/10/17(水) 17:54:36.83ID:ovwDg+Xe0
何かよく分からんが
勝手にマウント(笑)がどうとかと勘違いして
勝手にドヤ顔(笑)がどうとか喚き散らしてるだけって事はよく分かったw

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


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

俺が言いたいのはこれだけ
何をそんなに噛み付く必要があるんだw キモすぎww

824デフォルトの名無しさん (ワッチョイ 47e9-Zu1O)2018/10/17(水) 17:57:45.30ID:ovwDg+Xe0
>>822
返り値を受け取る側でオブジェクトの方が都合が良いからだろ

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

例えばPDOのPDOStatementなんかはTraversableだから
そのまんまforeachでぶん回せるのに
それをわざわざfetch()とかで配列にしてみたりとかさw

825デフォルトの名無しさん (ワッチョイ e79e-fbiU)2018/10/17(水) 18:05:15.78ID:3pfHQO2y0
>>823
偉そうに自己矛盾を認めないで草を生やして相手を卑下している時点で、どっちが面倒なのかな。

826デフォルトの名無しさん (ワッチョイ e79e-JlWZ)2018/10/17(水) 18:07:27.22ID:xHybN1E+0
>>824
なるほど。
ありがとうございました。

827デフォルトの名無しさん (ワッチョイ bf17-DKnb)2018/10/17(水) 20:44:36.79ID:swlX/dQc0
とりあえずプロトタイプをというのは至極まっとうな意見だと思うので
何をそんなに顔真っ赤にする必要があるのやら全くもって理解不能

828デフォルトの名無しさん (ワッチョイ 6795-I59m)2018/10/17(水) 20:51:29.44ID:sCj44sRT0
マウント
ドヤ顔
上から目線
このあたりの単語を好んで使う人は自己愛性人格障害だから相手にしないのが吉

829デフォルトの名無しさん (ワッチョイ 7fe8-37bo)2018/10/17(水) 20:56:47.75ID:D/px6urb0
>>792に答えてって質問に対して的外れなことばかり言ってんじゃねえよ
的外ればっかだし、もうマウント取るしか能が無いよね?って話で図星突かれて
さらに的外れ続けんの?無能すぎね?

830デフォルトの名無しさん (ワッチョイ e79e-fbiU)2018/10/17(水) 21:10:08.06ID:3pfHQO2y0
う〜ん。
自分も非正規蔵の件について話に入ってたけど、認識違いとかのズレで
まあどうでもいいやと思って黙ってたけど、結論はいいとして方法論で
これが当然のようにいいながら矛盾しつつ相手を卑下するやり方には
同意しかねるね。
議論の内容より相手を叩く事に重点を置いてるだけにしか見えない。

まあこんなところで議論とか求めても仕方ないけど、筋が通ってない分
ヤクザにも及ばないタチの悪さとは思う。

831デフォルトの名無しさん (ワッチョイ 6795-I59m)2018/10/17(水) 21:11:16.32ID:sCj44sRT0
792は自分が馬鹿にされてると勘違いしてるのか
大手でもそんなことやってないと818も言ってるんだなら答え出てるだろ
やっぱり病気だわお前

832デフォルトの名無しさん (ワッチョイ bf17-DKnb)2018/10/17(水) 21:27:10.80ID:swlX/dQc0
ローカルプロキシ使ってキャプチャするぐらいなら簡単にできるんだから実際にどんなデータになってるか見てみればいいのにね
他の人が言ってるとおり意外と簡素なものも少なくないと思うよ

833デフォルトの名無しさん (スププ Sdff-tx+y)2018/10/17(水) 21:38:17.22ID:xvHZsaXfd
毎週暗号化手段を変えろ

>>792 そんなことやってるアプリあるの?

>>802 セガでもやってなかったぞ
>>818 セガより大手でもやってないぞ

>>792 激おこ

うん。意味が分からない

834デフォルトの名無しさん (ワッチョイ e79e-fbiU)2018/10/17(水) 21:49:17.31ID:3pfHQO2y0
>>833
当人じゃないが、端から見てて

>>792 そんなことやってるアプリあるの?

>>802 セガでもやってなかったぞ


そうじゃなくて
>>802 セガでこんなのやってたぞ(やってない)

としか読んでなかったですわ。

835デフォルトの名無しさん (ワッチョイ 7fb8-PLlx)2018/10/17(水) 23:02:30.73ID:leuazgxV0
読み返してみてだいたいどうしてこうなったか理解した

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

この最後のはそういう前提で話をしてるってことであって
別にそれが当たり前だとは言ってないと思うんだわ

836デフォルトの名無しさん (ワッチョイ e776-WBp8)2018/10/17(水) 23:26:36.20ID:wTgde3Ka0
話の流れがイマイチ読めないが暗号化のキーは共通鍵って話なの?
それとも暗号化のアルゴリズムを変えるとかトンでも理論の話なの?

どっちでもおかしな話だけれど
そんなことしてるアプリあったら教えてほしいw

837デフォルトの名無しさん (ワッチョイ 7fb8-PLlx)2018/10/17(水) 23:46:17.27ID:leuazgxV0
ttps://www.otwo.jp/blog/cheat_measures/
多分こんな感じの話

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

誰も”全部そうしてる””絶対にそんな事はない”という0か1かの話しじゃないのにさ
マウントだの何だの言ってるあなたの方がよほど的外れだ

839デフォルトの名無しさん (ワッチョイ 66d5-7cZp)2018/10/18(木) 11:09:28.82ID:cOwpgSZ30
外から解析できるような鍵なら毎週変えたところで無意味だし、
リバースして解析されるならそれこそ毎週変えても無意味だと思うの。
だからそんなことは置いといて、さっさとプロト作れってこった。
それが出来たらパラメタのチェック方法を掘り下げていく方が効果的。

840デフォルトの名無しさん (ワッチョイ bfe9-7PZ0)2018/10/18(木) 11:13:40.24ID:or/egUOV0
>>836
>どっちでもおかしな話
だよなw

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

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

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

>>839
特に下2行には激しく同意

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

求めてるのは完全に1.(あればだが)なんだが、なんで2.でOKみたいな流れになってんのよ

842デフォルトの名無しさん (スププ Sd8a-1yD9)2018/10/18(木) 13:30:57.93ID:KrxjH9oQd
いつまでクソみたいな揚げ足取りをやってるんだか
特にお前の話は糞の役にも立ってないんだから黙ってクソして寝てろ
マウントとかドヤ顔って単語を好んで使う奴ってほんとゴミクズだわ

843デフォルトの名無しさん (ワッチョイ 7b5b-a866)2018/10/18(木) 13:36:14.98ID:1rhihpgt0
>>841
じゃああなたの質問には誰も何も答えないのが正解ってことね
それで満足?

はいはい
こんな人を真面目に相手にした俺が馬鹿でしたよ

844デフォルトの名無しさん (ワッチョイ bfe9-7PZ0)2018/10/18(木) 13:52:25.45ID:or/egUOV0
まあでもlocalに串立ててGUIでデータの中身見るなんてのは
専門知識も要らない低レベルな話なんで
そんな話をドヤ顔だのマウントだのと言われて俺困惑ww

何がこいつの逆鱗に触れたんだろうw
おちょくる分には面白いが

おまえらほんとおもしろいな

846デフォルトの名無しさん (ワッチョイ bee8-Ue0Q)2018/10/18(木) 17:01:50.49ID:snT/KIMy0
あるなら教えてくれ(あればな)→これでドヤ!(ないけど)→ねえんだろ何ドヤ顔してんの

この流れで悔しがってるのが802以外に居るのが不思議だね
本人か親兄弟か何か?

PHP 7でASPタグが廃止された理由ってなに?
セキュリティ?パフォーマンス?

848デフォルトの名無しさん (ワッチョイ beb8-4vxQ)2018/10/18(木) 20:27:57.21ID:aXklSebk0
(当たり前というのは思い込みだが)当たり前の流れにしたくなさそうな>>792
加勢した>>802になぜか噛み付いてるんだもん
wiresharkでパケットキャプチャしたってのが何か高度なスキルに思えて
そんな自己満披露せんでいいよとかキレちゃったのかはわからないけど
傍からみててなぜキレてるのかさっぱりわからないw

849デフォルトの名無しさん (ワッチョイ f39e-YQEo)2018/10/18(木) 21:10:48.74ID:RrGSa6XE0
自分も誤読した立場なんでどっちでも取れるレスだったなあと思えたけど、
こうやって一々煽りに来るのが一番悪いと思いますね
いつまで続けるんです?

850デフォルトの名無しさん (ワッチョイ 7eeb-KCR/)2018/10/18(木) 21:13:25.23ID:iDy8I7c80

851デフォルトの名無しさん (ワッチョイ c395-1yD9)2018/10/18(木) 21:21:54.89ID:DXkQKcQs0
>>848
wiresharkじゃなくてburpsuite
burpsuiteの方がそういう用途に特化してて簡単
それでも>>792にとってはドヤ顔に見えてしまった
つまり792はその程度の知識の持ち主だってこと

もう相手にするのはよそう

852デフォルトの名無しさん (ワッチョイ 8b2d-nBLa)2018/10/18(木) 21:25:29.56ID:uh9efSuM0
>>850
こういうproposalに対してさえnoを投じるrasmusほんま老害

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

やっぱりドヤ顔してたんで?
ドヤ顔指摘がツボすぎるから悔しくて粘着して煽りに来てるんだろ?

854デフォルトの名無しさん (ワッチョイ 979f-OGXo)2018/10/18(木) 21:49:30.72ID:3Uf/lafq0
>>850
ありがとです!
使用頻度が低いことや、言語の発展上の弊害になると考えられたようだね

855デフォルトの名無しさん (ワッチョイ 2617-vBZT)2018/10/18(木) 22:15:50.71ID:Vx517U3q0
ドヤ顔君まだ暴れてて草

856デフォルトの名無しさん (ワッチョイ 1fc3-rFnw)2018/10/20(土) 03:05:30.62ID:mGvzmAJw0
strlen()にintegerを渡してもちゃんと桁数が返ってくるのはなぜですか?
stringじゃなくても動作するってことは、どこかで型変換されてるんですか?

857デフォルトの名無しさん (ワッチョイ 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投げるようになる。

858デフォルトの名無しさん (ワッチョイ 1fc3-rFnw)2018/10/21(日) 00:28:16.60ID:aes4F1Ww0
>>857
うえ、そんなんありっすか
噂に違わぬPHPの片鱗ということですね
ありがとうございました

859デフォルトの名無しさん (ワッチョイ 8b2d-nBLa)2018/10/21(日) 01:43:34.95ID:0/W2nHVs0
寧ろ動的型付けの言語なら普通の挙動だけど

860デフォルトの名無しさん (ワッチョイ beb8-4vxQ)2018/10/21(日) 03:14:09.66ID:Pz2IqIp+0
> 組み込み関数内からの関数呼び出しは、 strict_types 宣言の影響を受けません。
とも書いてあるな。
strlenはもろに影響受けてるようだけど、よくわからなくなってきたw

861デフォルトの名無しさん (ワッチョイ c395-1yD9)2018/10/21(日) 12:16:46.38ID:TfVuD13o0
>>858
逆にこういう挙動じゃない動的型付けの言語教えて

862デフォルトの名無しさん (ワッチョイ 377e-Pr2h)2018/10/21(日) 15:33:51.77ID:8uJUIhMV0
文字列のUnicodeを10進数または16進数の配列として取得するにはどうすればよいですか?

863デフォルトの名無しさん (ワッチョイ 66d5-7cZp)2018/10/21(日) 15:48:19.30ID:FEyhRhG60
>>862
文字列を $s としたとき、$s[$i] で $i バイト目の文字が得られる。
これを ord するとその ASCII値が得られる。

UNICODE文字単位でそれがやりたいなら、mb_substr を組み合わせてやる感じかな。

>>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);

あとは結果見て都合の良いように改変してどうぞ

865デフォルトの名無しさん (ワッチョイ 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が文字列になるからなのでしょうか?

866デフォルトの名無しさん (ワッチョイ e3d2-8L5D)2018/10/28(日) 02:50:58.85ID:GS4HIDpq0
>>865
前後がないとわからんがPDOかな?
:nameや:commentはパインド変数だから
型を意識する必要ないけど$dateはバインドしてないから
文字扱いにしてるんやろね
んで、文字列でシングル使いたいから全体はダブルで括るという

867デフォルトの名無しさん (ブーイモ MMf3-JP9K)2018/10/28(日) 06:36:36.32ID:75+SpqZNM
SQLでは文字列リテラルはシングルクオーテーションで囲まないと駄目ってだけだぞ
SQL文として正しくなるように文字列を組み立ててるだけって事を理解しろ

868デフォルトの名無しさん (ブーイモ 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')
だったらクォートいらないけどな

869デフォルトの名無しさん (ワッチョイ a3ef-7TBo)2018/10/28(日) 07:45:59.64ID:/wLLb6M30
みなさま、ありがとうございました!
朝からスッキリできました!
皆様偉大な先生です。本当にありがとうございました!!

870デフォルトの名無しさん (ワッチョイ 8d98-p5uY)2018/10/30(火) 23:58:06.08ID:04COuKNl0
下記のように名前空間(ディレクトリ名)とクラス名が重複するのって何かデメリット的な事ありますか?

use Myapp\FooBar\FooBar;
FooBar::new();

871デフォルトの名無しさん (ワッチョイ 859e-o1DS)2018/10/31(水) 09:43:19.86ID:J8G9WBiJ0
http://php.net/manual/ja/language.variables.scope.php

例1 global の使用
を実行すると3ではなくて2になるのですが、なぜですか?

872デフォルトの名無しさん (ワッチョイ 1be9-JHIh)2018/10/31(水) 10:59:37.08ID:BXLRnHBs0
>>871
どこをどう見ても3にしかならないし
実際実行しても3が出力されるんで
何かどっかがおかしいんだろ

つか変数のglobal宣言なんていまさら使うことなんかないから
理解できんのなら忘れていいよこんなもんw

873デフォルトの名無しさん (ワッチョイ 859e-o1DS)2018/10/31(水) 17:59:49.38ID:J8G9WBiJ0
>>872
検証ありがとうございました。
その後、必死でテストしたのですが2しか出ません。
>つか変数のglobal宣言なんていまさら使うことなんかないから
なぜですか?

874デフォルトの名無しさん (ワッチョイ 73d5-nh9x)2018/10/31(水) 18:04:01.05ID:dV3e+Ndf0
>>873
宗教上の理由。
global だって使うときは使うから使い方は覚えておいた方がいい。

875デフォルトの名無しさん (ワッチョイ 1be9-JHIh)2018/10/31(水) 19:01:40.49ID:BXLRnHBs0
>>873
必死ってのがよく分からんw
コードをコピペして実行するだけなんだから数秒で終わる話だと思うんだが
ひょっとしてコードを見よう見まねで手打ち(「写経」という)してね?

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


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

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

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

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

今はよく分からなくてもその内何となく分かってくるから
今わかんないなら気にするなw

876デフォルトの名無しさん (ワッチョイ 175b-119k)2018/10/31(水) 19:21:20.91ID:V+5pvMby0
使い方は覚えておいた方がいいけど
なるべく使わずにすむようにした方がいいだろうね

WordPressはglobal宣言しまくってるけど設計としてはあまりまねしてほしくないのは確か

877デフォルトの名無しさん (スププ Sdaf-eYkk)2018/10/31(水) 19:28:03.24ID:rEIsu6q2d
wpは歴史的に仕方ない
ポリシー的に後方互換を大事にしてるしな
設計はまねするなという意見には同意

そろそろ後方互換を捨てろよって思うけどfirefoxみたいなことになる可能性もあるからなー

878デフォルトの名無しさん (ワッチョイ 8317-Cbrb)2018/10/31(水) 21:49:30.59ID:8LMDJ4U80
wordpressって推奨はPHP7以降になっているけど、
実際はPHP5.2とmysql5.0でも最新版が動くらしい
下手すると10年以上前?
>>876を見て久しぶりにコードのぞいたら本当にglobalだらけで笑った
こういう古い設計のコードを見てPHPがくそ言語だと言われるのはモヤッとする

879デフォルトの名無しさん (スププ Sdaf-eYkk)2018/10/31(水) 22:25:32.37ID:rEIsu6q2d
プラグインやテーマもテンプレートエンジンを使わずに素のPHPを使ってるもんだからXSSやCSRFとかの対策が完全自動化されてないのも問題
2018年にもなって素のPHPで書いたテンプレートなんか読みたくないよ。。。

880デフォルトの名無しさん (ワッチョイ cd95-Ha4+)2018/10/31(水) 22:47:31.62ID:7+pd6iJs0
5.2っていうと配列をarray()って書いてた時代か
名前空間も無名関数もタイプヒンティングもないし
定数定義にdefine使ってグローバルで衝突しないように接頭辞を付けるようにしてたっけ
WordPress頑張りすぎだろ

881デフォルトの名無しさん (ワッチョイ ab74-7TBo)2018/10/31(水) 23:43:21.16ID:aqQK2dvp0
まぁ現状のコードベース維持するならコードスタイルもコードベースに合わせざるを得ないわな
モダンな書き方にするなら新規で書き起こした方が低コストだろうし

882デフォルトの名無しさん (ワッチョイ c7e9-zV7r)2018/11/01(木) 11:47:34.96ID:YMjHonMD0
>>881
だな
まあWPはしゃーない
プラグインとテーマの豊富さが売りなんだから
そこ切り捨てちゃったらそれこそFireFoxみたいなことになるw

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

俺の知り合いにもWPに親殺されたみたいなのがいるから
WPがこの世から消えれば幸せになれるやつも少なくないんだろうが
逆にWPだけで飯食ってるようなやつもいるからなあw

883デフォルトの名無しさん (ワッチョイ fe92-rn+T)2018/11/01(木) 21:57:02.20ID:nscXvzWP0
サイトマップから各ページのURL読み込むの作ってたら
http://mutimutigazou.com/sitemap.xml
こういうのができたのだがどう処理すればいい?

アニメは他所でやれ

885デフォルトの名無しさん (ワッチョイ 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上で該当する行の行数をカウントしている部分はどこにあたるのでしょうか?

SQL文自体でカウントしてるから1行読むだけでいいやん
てか、1行しか返ってこないし

887デフォルトの名無しさん (ワッチョイ 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();

888デフォルトの名無しさん (ワッチョイ 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はなるべく簡素にするのが基本な

889デフォルトの名無しさん (ワッチョイ c7e9-zV7r)2018/11/02(金) 10:13:15.59ID:6yQoCIiM0
>>883
XMLなんだからsimplexml系とか(他にも色々あるが)で処理すればいいだろ?

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

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

好きなようにすりゃいい

890デフォルトの名無しさん (ワッチョイ fe92-rn+T)2018/11/02(金) 13:12:23.63ID:H0U+eOT90
>>889
できました。
ありがとうございます。

891デフォルトの名無しさん (ワッチョイ 9aab-MyS3)2018/11/02(金) 16:43:43.64ID:lKWT8t9P0
>>886
>>887
>>888
ありがとうございます。
$count には ['COUNT(id)']=>行数という連想配列が、
$count['COUNT(id)'] には 行数が、
それぞれ格納されているのですね。

return (bool) $stmt->fetchColumn();や
実務的なSQLの考え方を教えてくださってありがとうございます!

892デフォルトの名無しさん (ワッチョイ c7e9-zV7r)2018/11/02(金) 17:13:43.40ID:6yQoCIiM0
>>891
お、おう
そういうレベルだったのかw

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

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

とにかく初心者の内はちょっとでもあれ?って思ったらすぐ var_dump() しろ

893デフォルトの名無しさん (ワッチョイ 9aab-MyS3)2018/11/02(金) 20:07:32.22ID:lKWT8t9P0
>>892
はい、ありがとうございます

894デフォルトの名無しさん (ワッチョイ 76ef-MyS3)2018/11/03(土) 08:11:13.12ID:29KucSII0
>>885の変数COUNT(id)なのですが
$sql="SELECT COUNT(id) で、変数宣言された、ということでしょうか?

895デフォルトの名無しさん (ワッチョイ 3e9f-Nr8X)2018/11/03(土) 08:54:23.76ID:XGyq6I+i0
連想配列の添え字という

896デフォルトの名無しさん (ワッチョイ ab95-lmxD)2018/11/03(土) 14:45:26.63ID:3f9xsIAr0
>>894
上でも書かれてるけどそういう疑問を持ったら実行してvar_dump

スクリプト言語はそうやって簡単に実行して結果が見れるのがメリットなんだから、
もし今それができないなら環境構築から見直さないとものにならないよ
あと上の人もだけどPHPというよりはSQLが分かってない
勉強の仕方が間違ってる

897デフォルトの名無しさん (ワッチョイ 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){

898デフォルトの名無しさん (ワッチョイ 5b80-Q1ft)2018/11/03(土) 15:57:47.32ID:rSl2Ac3O0
$$2個は$1個だからな
気にしなくていい

899デフォルトの名無しさん (ワッチョイ 769f-4Mp1)2018/11/04(日) 11:12:58.45ID:XAVCAs+90
PHP 7.2の初歩的な質問をさせてください。
下記のようにコンストラクタの戻り値を宣言すると __construct() cannot declare a return type エラーになります。

__construct( ): void { }

コンストラクタは何も型宣言をしてはいけないということでしょうか?

>>899
> コンストラクタは何も型宣言をしてはいけないということでしょうか?
その通り

というかコンストラクタの返却値型宣言していい言語ってある?

901デフォルトの名無しさん (ワッチョイ 769f-4Mp1)2018/11/04(日) 18:06:30.73ID:XAVCAs+90
ありがとうございました。
さあ…?
そんなに詳しくないので知りません。

902デフォルトの名無しさん (ワッチョイ 3e9f-Nr8X)2018/11/04(日) 21:17:19.38ID:hVqxhauo0
コンストラクタの機能は100%インスタンスの生成を成功することなので仮に失敗もあるならbool値のみ、でも言語の機能としてインスタンスの生成を失敗したら使い物にならないので100%インスタンスの生成を成功する言語のはずだから戻り値は必要ない

903デフォルトの名無しさん (ワッチョイ 7a74-MyS3)2018/11/04(日) 22:00:25.40ID:24sILPZ+0
コンストラクタは失敗時には普通は例外投げますが

コンストラクタはなくてもインスタンス作れるから戻り値の保証はする必要ない

905デフォルトの名無しさん (ワッチョイ 769f-4Mp1)2018/11/05(月) 00:03:35.54ID:Wuac1AE/0
voidぐらいさせてくれてもいいじゃない。
C言語おじいちゃんなんだからあ…

906デフォルトの名無しさん (ワッチョイ 4e81-MyS3)2018/11/05(月) 00:20:50.67ID:/crf/pgL0
>>905
コメントで挟んでおけば大丈夫?

907デフォルトの名無しさん (ワッチョイ 769f-4Mp1)2018/11/05(月) 01:02:42.89ID:Wuac1AE/0
@のコメントあるから別に困りはしないよ。
すべて統一という気分の問題かな。

908デフォルトの名無しさん (スププ Sdba-xAZC)2018/11/05(月) 08:23:12.92ID:rNsZhmmMd
返り値のことを返却値というやつって何なんだろう
何も返却なんてしてないのだが

909デフォルトの名無しさん (ワッチョイ 3e9f-Nr8X)2018/11/05(月) 09:26:17.77ID:vLA2TmCS0
返り血みたいで発音が嫌という人がいる

910デフォルトの名無しさん (ワッチョイ 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']ってする癖をつけておくべきだと俺は思うけどな

911デフォルトの名無しさん (ワッチョイ 63b3-zV7r)2018/11/05(月) 10:45:44.02ID:/CGchI9p0
オブジェクトで返ってきてるんだから、そのままオブジェクトとして操作すればよいと思うぞ。

912デフォルトの名無しさん (ワッチョイ 5b9e-upsk)2018/11/05(月) 15:02:21.85ID:44ykk/Ua0
返り値?
おれ、戻り値派

913デフォルトの名無しさん (ワッチョイ 769f-4Mp1)2018/11/05(月) 20:22:17.03ID:Wuac1AE/0
xamppでPHPUnitの連続実行ってどうやるの?
shスクリプトでは複数行書けば全部実行してくれる。
batファイルだと最初の1行を実行して終了する。
おま環?

914デフォルトの名無しさん (ワッチョイ 76ef-MyS3)2018/11/05(月) 22:23:43.78ID:dTDazKon0
>>895
>>896
>>897

ありがとうございました。
よく理解できていないのでメモさせてもらい
勉強を進めて後々で再度確認してみます

915デフォルトの名無しさん (ワッチョイ 364b-/Yns)2018/11/06(火) 17:19:57.17ID:z3LzXL080
laravelがrailsと比べて優れているところ教えて下さい

916デフォルトの名無しさん (ワッチョイ 63b3-zV7r)2018/11/06(火) 17:42:00.12ID:YBa3NmNt0
最大のメリットは php である事。最大のデメリットも php であること。

。。。比較の軸ぐらい考えろよ。オマエアホだろ。

917デフォルトの名無しさん (ワッチョイ 364b-/Yns)2018/11/06(火) 17:57:07.05ID:z3LzXL080
>>916
言語の質ではなくフレームワークの質を聞いてるんです。

918デフォルトの名無しさん (ワッチョイ 364b-/Yns)2018/11/06(火) 17:57:40.53ID:z3LzXL080
あと開発効率とか学習コストとか

919デフォルトの名無しさん (ワッチョイ 63b3-zV7r)2018/11/06(火) 18:03:51.13ID:YBa3NmNt0
比較の軸が出てきたなw

どっちも変わらん。要件次第。
もうちょっと聞きたいことを整理して質問しようぜぃ♪

920デフォルトの名無しさん (ワッチョイ 364b-/Yns)2018/11/06(火) 18:09:43.95ID:z3LzXL080
>>919
プログラミング初心者なので一番知りたいのは学習コストで、どちらが学習コスト低いですか?やはり日本語情報の多いRailsの方が有利でしょうか?わかりやすさの面ではどちらでしょうか?もう1つ聴きたいのですが将来性はどちらに方があるでしょうか?長文すいません。

921デフォルトの名無しさん (ワッチョイ 63b3-zV7r)2018/11/06(火) 18:20:05.67ID:YBa3NmNt0
書いてんじゃん。どっちも変わらん。要件次第。前提次第。

XXと〇〇、どっちが優れてますか系の質問するやつにまともなエンジニアはいないんだよ。
要件整理して、前提確認して、比較軸作って、ドキュメント読んで、必要なら検証するのがエンジニア。
手が動かないなら向いてない。

922デフォルトの名無しさん (ワッチョイ 3e9f-Nr8X)2018/11/06(火) 18:45:41.79ID:pOOn9lCU0
環境構築にかかるコストも考えると…

923デフォルトの名無しさん (ワッチョイ c7e9-zV7r)2018/11/06(火) 19:14:44.90ID:M+z1dU6f0
>どっちが優れてますか系の質問するやつにまともなエンジニアはいないんだよ
>手が動かないなら向いてない

これ両方共すげぇ分かるww

924デフォルトの名無しさん (ワッチョイ a35b-d84H)2018/11/06(火) 19:30:36.24ID:S+SbxixY0
ものすごく感覚的な話で申し訳ないけど
Railsは出た当時は画期的だったけど、他のフレームワークがRailsの良いところをどんどん取り込んでいったので優位性がなくなっていってるイメージが強いかな

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

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

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

手っ取り早く結果を出すだけならまだまだPHPの方がかなり楽だけどね

925デフォルトの名無しさん (JP 0H73-a2R+)2018/11/06(火) 21:04:36.13ID:lcs8YmG2H
サーパーサイドなんてもうNode一択
他はNode書けないやつが使うもの

926デフォルトの名無しさん (ワッチョイ 769f-4Mp1)2018/11/06(火) 21:19:01.97ID:uacreqWN0
ルビーはクソが世界の定説

927デフォルトの名無しさん (ワッチョイ 76ef-MyS3)2018/11/06(火) 22:19:03.01ID:uyHdMd5J0
どんな言語でもなんとかなるさ、はOKですか?

928 ◆QZaw55cn4c (ワッチョイ ba60-uQtw)2018/11/06(火) 22:33:13.87ID:MhNpcfCg0
>>926
ruby のどんな点がクソなんですか?

929デフォルトの名無しさん (ワッチョイ 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の方が、他の言語よりも可読性が高く、バグらないから!

930デフォルトの名無しさん (ワッチョイ 4e81-MyS3)2018/11/07(水) 01:23:26.94ID:1H1h6w0g0
バグの原因はおのれのスキルと自覚しよう

931デフォルトの名無しさん (ワッチョイ 63b3-zV7r)2018/11/07(水) 13:03:42.68ID:Vr3ftsmu0
ちゃんとした質問しないから、エンジニアになれなかった亡霊が無駄コメント残し始めたじゃないか。。。
責任とって、クローズしろよ。

932デフォルトの名無しさん (ワッチョイ c7e9-zV7r)2018/11/07(水) 13:49:07.44ID:MEh9vNho0
git commit -m "close #915"

933デフォルトの名無しさん (ワッチョイ 76ef-MyS3)2018/11/07(水) 23:12:08.53ID:EmTVHi4X0
HTMLとJVSCRIPT、PHPは相性がいいの?
SNSとかコミュニティサイトを作って
海外のユーザにも利用してもらおうとしたら、PHP?

934デフォルトの名無しさん (ワッチョイ 8a16-a2R+)2018/11/07(水) 23:16:55.42ID:Qrgo3xvC0
Node.js

935デフォルトの名無しさん (ワッチョイ db9f-cu2J)2018/11/08(木) 02:10:30.38ID:xe/8BT4B0
相性は別に良くないと思うよ。
フレームワーク次第じゃない?

そういう話なら既存のOSSなSNSをインストールするべきと思う。
OpenPNEやWordPressのプラグイン等など…

936デフォルトの名無しさん (ワッチョイ 2bb8-orkQ)2018/11/08(木) 05:00:41.38ID:OUyHbsHB0
プログラム言語やツールは物を作る道具や手段であってできるものに変わりはない
HTMLのようなGUIを作る場合はエディタが出来栄えを左右することもあるだろう
ただPHPでやることはバックエンドの目に見えない地味な場所であって
頑張って書くようなコードでもなければ体感速度もサーバのスペックが大きく物を言う
そんなところで良し悪しを熱く語ってるやつはたいていアホで出来ない子
つられやすい話題につられるのもアホで出来ない子

937デフォルトの名無しさん (ドコグロ MM6d-xkqI)2018/11/08(木) 06:27:27.64ID:WetMyQ75M
HTMLやCSS出来なくても
WordPress使えば誰でも子供でも
ホームページが!
それもタダで無料で!
WordPressはPHPで構成されてます人気もあります
でも問題ないわけではないです!
子供より若い園児向きには Flat-File CMSを
データベース不要でPHPで動きます!

938デフォルトの名無しさん (ワッチョイ db9f-cu2J)2018/11/08(木) 07:27:25.46ID:xe/8BT4B0
>>936
意味わからんこと言って不親切よりいいわ。
そんなにもできる子は世の中お前しかいないんだよ。

939デフォルトの名無しさん (ワッチョイ 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以外にも色んな言語に触れてた方がいいとは思うけど
ウェブアプリを作ることを目的とした初学者が選ぶ言語としてはまだまだ第一選択肢となり得る言語だよ

940 ◆QZaw55cn4c (ワッチョイ 5360-ZWep)2018/11/08(木) 23:33:38.45ID:PviajTiD0
wikipedia も PHP ですし

941デフォルトの名無しさん (スププ Sdb3-lurq)2018/11/08(木) 23:40:19.74ID:QE0GgM25d
>>939がいいことを言った

プログラミング言語には自分との相性みたいなのもあるからな
色んなものを試してみて1番自分に馴染みそうなのを選ぶのもいい
とにかく0か1かでしか物事を語れないプログラマ脳のいうことは鵜呑みにしちゃだめだ

942デフォルトの名無しさん (ワッチョイ 2b81-ki2E)2018/11/09(金) 00:06:22.11ID:gcFuq4sF0
perlは、同じ事するのでも人によって色々アプローチが違ってて
それはそれで面白いんだけどね
perlをとっつきにくくさせているのは変数の宣言と使い方じゃないかな
書いた人を呪いたくなる事があった

943デフォルトの名無しさん (ワッチョイ db17-ZE27)2018/11/09(金) 00:20:55.59ID:9LljJNk30
>>942
TIMTOWTDIがperlの設計思想だしね

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

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

正規表現使ってワンライナーでさくっと何かしたい時とかやっぱperlはいいなって思う事もあるけど
あんまりやり過ぎると5時間後の自分にすら読めなくなるという…

944デフォルトの名無しさん (スププ Sdb3-lurq)2018/11/09(金) 00:36:13.15ID:jyPZVHOtd
>>943
設計思想的にPerlの対極にいるのがPythonで今や大人気だもんな
Pythonは数学者が作ってPerlは言語学者が作ったって話を初めて知った時はめちゃくちゃ納得した

945デフォルトの名無しさん (ワッチョイ db17-ZE27)2018/11/09(金) 00:49:31.00ID:9LljJNk30
>>944
だね
昔は趣味のスポーツカーが流行ったけど今は使い勝手や燃費重視のコンパクトカーや軽が流行るのと同じで
pythonは悪くいえば遊び心はないけど可読性と再利用性の高さは強力な武器だよ
流行るわけだ

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

php作者の名言集
https://anond.hatelabo.jp/touch/20100427231539
ディスる時によく使われるけど俺はそんなphpも好きだ

946デフォルトの名無しさん (スププ Sdb3-lurq)2018/11/09(金) 00:55:17.62ID:jyPZVHOtd
>>945
> 僕なら、10リクエストごとにApacheを再起動しますね
ワロタwwwww
これ有名なの?恥ずかしながら初めて知った
面白いな

947デフォルトの名無しさん (ワッチョイ db17-ZE27)2018/11/09(金) 01:07:40.13ID:9LljJNk30
わりと有名だと思うよ
ついでにこれとか
https://takahashifumiki.com/web/programing/2209/

あんまり書いてるとマジレスして怒る人が出たら嫌なのでこの辺で…
繰り返すけど言語はあくまで手段に過ぎない
phpもperlもpythonもその内の1つに過ぎないってことでおやすみなさい

948デフォルトの名無しさん (ワッチョイ 2ba5-RtHN)2018/11/09(金) 01:30:14.07ID:YLhQ0tUv0
ちょっとだけphpすきになれたわ

949デフォルトの名無しさん (スププ Sdb3-lurq)2018/11/09(金) 01:42:41.18ID:jyPZVHOtd
一気読みしてしまったけどめちゃくちゃ面白かった
サンクス
俺もPHPをもっと好きになれた気がするww

そしてPHPにもgotoがあることを知って驚愕
まあ使う必要はないとだろうけど
わざわざあとから付け足したみたいだが必要だったのだろうか

950デフォルトの名無しさん (ワッチョイ b9e9-YP9l)2018/11/09(金) 10:05:10.34ID:lA/zS5Cl0
ラスマスさんインタビュー
http://gihyo.jp/news/interview/2010/rasmus
ここでは自分のことを利己的と表現してるが
現実主義・合理主義者なんだよな

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

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

このスレの誰かさんに100回声に出して読めといいたいw

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

あ、basicやったことないの?なんていうおっさんは相手にしてませんので
(書いとかないと相手にするのがめんどくさいw)

952デフォルトの名無しさん (ワッチョイ 2b81-ki2E)2018/11/09(金) 10:27:43.53ID:gcFuq4sF0
Fortranは?

953デフォルトの名無しさん (ワッチョイ 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行)格納できているのは、どんな働きがあってのことなのでしょうか?

コピペプログラミングの典型的パターン

955デフォルトの名無しさん (ワッチョイ 898a-55uJ)2018/11/09(金) 13:47:18.90ID:sRuc/yNP0
>>953
たった8行しかない関数なんだから
自分で1行ごとに何しているかを調べてみよう

956デフォルトの名無しさん (ワッチョイ 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()) みたいな書き方をするけど
分かってる上で手抜きでそう書くなら別にいいが
分かってないならそんな書き方はやめるべき

957デフォルトの名無しさん (ワッチョイ d374-39Ij)2018/11/09(金) 14:08:17.39ID:9S1HIFQT0
ジェネレータ使ってるから一見何してるか分かりにくいように見えるかもね
とはいえ便利だし1行ずつ読めば難しくない

ifの条件文中で代入するのはむしろCでよく見た

958デフォルトの名無しさん (ワッチョイ 93ab-ki2E)2018/11/09(金) 15:26:07.95ID:aQf6YGTQ0
ありがとうございました。

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

perlのワンライナーが気持ちいいってのもよく分かるが
人が書いたものは見たくないというのもよく分かるw

960デフォルトの名無しさん (ワッチョイ b9e9-YP9l)2018/11/09(金) 15:42:44.74ID:lA/zS5Cl0
すまん下の2行
全然関係ない文章が入ってしまった

書こうと思って削除した文章がクリップボード履歴からコピペされてしまった

961デフォルトの名無しさん (ワッチョイ 2b81-ki2E)2018/11/09(金) 16:57:09.09ID:gcFuq4sF0
分かる

心の叫びだろうw

962デフォルトの名無しさん (ワッチョイ 5b4b-YrFS)2018/11/09(金) 16:59:43.84ID:aAkZVDrn0
PHPは大っ嫌いだけどLaravelは好き

963デフォルトの名無しさん (ワッチョイ 5b4b-YrFS)2018/11/09(金) 17:13:56.97ID:aAkZVDrn0
セミコロン消えろ

964デフォルトの名無しさん (ワッチョイ b9e9-YP9l)2018/11/09(金) 18:45:22.74ID:lA/zS5Cl0
なぜ文字列結合を . にしちゃったんだろう
フレームワークを通さずにドットチェーンでサクッと書きたい時に悲しくなっちゃう

965デフォルトの名無しさん (ワッチョイ 2b81-ki2E)2018/11/09(金) 18:52:30.49ID:gcFuq4sF0
そういうしきたりがあったから

966デフォルトの名無しさん (ワッチョイ dbef-ki2E)2018/11/09(金) 19:48:04.81ID:3iCSUlan0
>>953
$gen=readLine('sample,text'); は、$genに関数を入れてるだけで、
書き換えるのなら

foreach(readLine('sample.text') as $line){
 print $line'.<br>';
}
ということでは?

967デフォルトの名無しさん (ワッチョイ 93ab-ki2E)2018/11/10(土) 13:09:23.21ID:w8ozGR5u0
>>966
ありがとうございます。変数に関数を入れられるのですね。
書き換えられた方はテキストの別のページに載ってるのと似ているので理解できました。
すっきりしました。ありがとうございました。

968デフォルトの名無しさん (ワッチョイ db17-ZE27)2018/11/10(土) 17:34:15.93ID:KJE8CLNB0
>>967
別の人も書いてるけどジェネレーター(yield)を使ってて分かりにくいなら
yield使わずに同じことやってみたらいいかも

969デフォルトの名無しさん (ワッチョイ 93ab-ki2E)2018/11/10(土) 17:57:23.60ID:w8ozGR5u0
>>968
ありがとうございます。
各yieldの前後や、関数の呼び出し元に
print文でどこを実行しているのかを表示させるようにして確認しました。
yield fromを混ぜ込んだ文も、同様に処理するようにしたら
ずいぶん理解できるようになりました。

皆様、ありがとうございます。

970デフォルトの名無しさん (ワッチョイ f380-9/Uq)2018/11/10(土) 22:20:51.20ID:16GnFLu/0
$gen=readLine('sample,text'); 
これで代入されてるのは関数じゃなくてジェネレータ関数が返す反復可能なオブジェクト(への参照)かな
ジェネレーター関数を呼び出したのをvar_dumpするとこんな感じだわ
object(Generator)#1 (0) {}

971デフォルトの名無しさん (ワッチョイ 5b4b-YrFS)2018/11/11(日) 16:39:55.95ID:kuiXddTN0
Laravelのログイン処理をゼロから解説してる学習リソースありますか?

972デフォルトの名無しさん (ワッチョイ d176-mqgT)2018/11/12(月) 01:02:22.66ID:FJ/7DuU50
青い本とオレンジ色の本
Amazonで探せばすぐにわかる

973デフォルトの名無しさん (ワッチョイ d176-mqgT)2018/11/12(月) 01:05:34.03ID:FJ/7DuU50
あとはLaravel公式リファレンス
https://readouble.com/laravel/5.7/ja/authentication.html

974デフォルトの名無しさん (ワッチョイ 95a5-4fLB)2018/11/17(土) 20:03:24.34ID:yvB12Mei0
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q10199147355
Laravelで糞以下の質問をしている奴を見つけた。

975デフォルトの名無しさん (ブーイモ MMb9-N102)2018/11/17(土) 23:01:03.89ID:2QpS/L3VM
>>974
こんな性格じゃそりゃいつまで経ってもゴミのままだわな

976デフォルトの名無しさん (ワッチョイ 95a5-4fLB)2018/11/18(日) 00:24:19.00ID:lxV5KuwV0
>>975
ソースも性格もゴミ
そしてその質問者のTwitter
https://twitter.com/tekitouk
https://twitter.com/5chan_nel (5ch newer account)

977デフォルトの名無しさん (ワッチョイ 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を超えてしまうのはなぜなのでしょうか?

978デフォルトの名無しさん (ワッチョイ bf7e-A3/R)2018/11/24(土) 16:33:47.44ID:ue64utAZ0

979デフォルトの名無しさん (ワッチョイ c39e-qSu8)2018/11/24(土) 17:52:32.26ID:cnsZLZxi0
こんなコード書かれたら頭痛いンゴ

980デフォルトの名無しさん (ワッチョイ 7f74-zhOP)2018/11/24(土) 18:03:15.60ID:+h/hylzW0
https://github.com/php/php-src/blob/master/Zend/zend_compile.c#L4597
https://github.com/php/php-src/blob/master/Zend/zend_compile.c#L4575

zend_compile_expr_listを見る限りexprの並びは最終評価値が返る
そもそも>>977のコードは書いたやつ殴るレベルだが

981デフォルトの名無しさん (ワッチョイ 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の$が取れているのはどういう仕様なのでしょうか?

982デフォルトの名無しさん (ワッチョイ 8f9f-JFh/)2018/11/25(日) 09:17:54.45ID:43hAniU60
$が取れていることで可変関数を使える仕様になっている

983デフォルトの名無しさん (ワッチョイ 6fef-zhOP)2018/11/26(月) 15:12:38.13ID:aqdzSIAP0
>>982
ありがとうございます。
可変関数は、$変数に関数名を格納して使うものだと理解していました。
もう少し、可変関数に関して調べてみます。

984デフォルトの名無しさん (ワッチョイ 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は、何を指しているのでしょうか?

985デフォルトの名無しさん (ワッチョイ cf81-zhOP)2018/11/26(月) 18:34:58.26ID:9UWiUoMZ0
一つ目:イイエ
二つ目:一つ目の?

986デフォルトの名無しさん (ワッチョイ e3ab-zhOP)2018/11/27(火) 09:20:32.54ID:bFvRPa1H0
返答ありがとうございます。

id=? っていうのは、どういう働きをするコードなのでしょう
一つ目とか、bindValue(1,$_GET['id']);の、'1'です

987デフォルトの名無しさん (ワッチョイ 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;
}

だが、このケースでは、こんな書き方をしてはいけない。
(続く)

988デフォルトの名無しさん (ワッチョイ 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;
}

このケースでエルビス演算子をこんな使い方するような糞コードは、あんまり参考にしない方がいい

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

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

クイズ的に質問してるなら面白いけどw

990デフォルトの名無しさん (ワッチョイ c39e-qSu8)2018/11/27(火) 16:49:32.78ID:BR30Kh7X0
演算子の説明だけだとシンプルで理解しやすいけど実用性ではクソ
実用性重視の説明だと本来説明したいもの以外の説明で蛇足だらけで
紙面使いすぎでクソ
というジレンマなんやろ

991デフォルトの名無しさん (ワッチョイ 6fe7-sCK9)2018/11/27(火) 18:08:09.22ID:MA03kwvb0
$input = trim(fgets(STDIN));
while($input)

echo $input;

これってwhileの式のところでは$inputの中が空かって判断してるの?そういう機能がついてるのか?

992デフォルトの名無しさん (ワッチョイ 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文をつなげられないようにしている

993デフォルトの名無しさん (ワッチョイ 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;


こう書くべき処理なのでは?

994デフォルトの名無しさん (ワッチョイ 6fe7-sCK9)2018/11/27(火) 19:53:06.64ID:MA03kwvb0
while分の中では$inputをbool型にして判定してるわけか?

995デフォルトの名無しさん (ワッチョイ ffd2-f63u)2018/11/27(火) 22:02:27.91ID:7ygBETe/0
空文字がFalse判定されることを利用して
空行入力で終わるようにしてるんだろうけど
ゼロとかもFalse判定されて終わっちゃうんじゃないか
試してないけど

996デフォルトの名無しさん (ワッチョイ cf80-fhi1)2018/11/28(水) 12:01:30.07ID:eIHsuPDh0
Ruby では、nil, false の偽が2つだけ。
一方、JavaScript, Python, PHP などは、偽が10個ぐらいあるから、超危険!

基本的に、Ruby 以外は、バグってどうしようもない

997デフォルトの名無しさん (ワッチョイ e3ab-zhOP)2018/11/28(水) 12:52:07.66ID:yr9LfNgh0
>>987
ありがとうございました。プレイスホルダなのですね。
prepareでSQLを用いて、プレイスホルダを使うとき、
SQL文の中で、左から数えたプレイスホルダの順番を、
bindValueのカッコ内の数値で指定してバインドする、ということもわかりました。
?:や??:の解説もありがとうございました。

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

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

皆様、ありがとうとざいました。
今のテキストを読み終えたら、もう少しテキストを吟味して、違うテキストを探してみようと思います。

998デフォルトの名無しさん (ワッチョイ 73e9-Kv/S)2018/11/28(水) 15:13:42.98ID:zpzfEtE+0
>>994
そういう事

ただ>>995,996の言う通りなので
while (($input = trim(fgets(STDIN))) !== false) {
echo $input;
}

こう書くのが正しい

(なんか前にも似たような事を書いた気がするw)

999デフォルトの名無しさん (ワッチョイ 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;
}

が期待した動作なのかもしれない

1000デフォルトの名無しさん (ワッチョイ cfe8-+65u)2018/11/28(水) 17:09:43.57ID:Nb5yTkdM0
次スレ

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

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を超えています。これ以上書き込みはできません。