2ちゃんねる ■掲示板に戻る■ 全部 1- 最新50    

■ このスレッドは過去ログ倉庫に格納されています

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

1 :デフォルトの名無しさん :2017/12/20(水) 18:00:20.28 ID:1xaO/YRR0.net
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

2 :デフォルトの名無しさん :2018/01/06(土) 23:13:46.81 ID:RuMnMvof0.net
関連リンク
■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

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

5 :デフォルトの名無しさん :2018/01/08(月) 21:13:59.71 ID:rpNlU31Ua.net
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にしても何も変わりません

6 :デフォルトの名無しさん :2018/01/09(火) 09:34:45.35 ID:SyBlvM9La.net
>>5についてですが
外部実行ファイルはドキュメントルート下に置かないと実行できないみたいな情報があったので
ENScript.exeを呼び出すバッチファイルをドキュメントルートに置いて実行してみましたが駄目でした
mod_phpからwhoamiを実行すると
nt authority\systemという権限で動いていることが分かりました
この権限が制限を実現しているのでしょうか?

7 :デフォルトの名無しさん :2018/01/09(火) 09:41:14.36 ID:SyBlvM9La.net
また、セーフモードではありません
外部プログラムの制限についてドキュメントに書いていないのが解せません…
Windows版だけの現象なのでしょうか

8 :デフォルトの名無しさん :2018/01/09(火) 10:04:52.25 ID:lcs1dgGe0.net
Evernoteとか使ったことないから知らんけど, その実行者の権限で見える, 見えてよい或いは見えるべきものを扱ってんの?

9 :デフォルトの名無しさん :2018/01/09(火) 10:13:18.61 ID:SyBlvM9La.net
Evernoteは非常に個人的なものなので、
確かにウェブサーバからデータが見えたらどうなのかっていうのはありますね
自分用アプリを作るためにApacheとブラウザを使っていましたが
本来ウェブサーバはネットに公開するためのものなので
権限が低くされるのも当然といえば当然。
そう考えるとウェブサーバを使ったアプリ構築を脱却して
Electronとかを使って作った方がいいですね
ありがとうございました

10 :デフォルトの名無しさん :2018/01/10(水) 13:35:01.59 ID:70pYzGse0.net
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 :デフォルトの名無しさん :2018/01/13(土) 10:49:54.90 ID:By98rTnD0.net
$_POSTに上書きしちゃってる可能性

12 :デフォルトの名無しさん :2018/01/20(土) 00:15:59.55 ID:MzOH7w6y0.net
ドがつく素人です。
しょーもない質問ですいません。

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

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

<?php
phpinfo();
?>

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

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

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

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

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

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

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

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

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

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

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

18 :デフォルトの名無しさん :2018/01/20(土) 17:11:45.97 ID:tLgBkvHga.net
スレタイ読めねぇほどバカなのか

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

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

Windows + XAMPP 環境ですが、

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

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

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

21 :デフォルトの名無しさん :2018/01/26(金) 16:47:17.43 ID:aV9eTo+Y0.net
おうふ

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

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

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

23 :デフォルトの名無しさん :2018/01/27(土) 15:17:32.64 ID:MzrwFkn+0.net
$a = [
[1, 5],
[9, 1],
[8, 2],
[1, 2],
];

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


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

みたいに。

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

24 :デフォルトの名無しさん :2018/01/27(土) 16:01:09.58 ID:kseb+5Eha.net
無理じゃね

25 :デフォルトの名無しさん :2018/01/27(土) 17:00:21.87 ID:MzrwFkn+0.net
やはりか

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

26 :デフォルトの名無しさん :2018/01/27(土) 17:16:07.80 ID:mUh+GRjL0.net
array_merge使うのがいいと思うが

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

28 :デフォルトの名無しさん :2018/02/02(金) 20:59:07.10 ID:angTjduf0.net
忘れてください(`・ω・´)ゞ

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

36 :デフォルトの名無しさん :2018/02/10(土) 00:18:04.71 ID:Yu/cvnD90.net
自己解決しました

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

38 :デフォルトの名無しさん :2018/02/13(火) 12:03:56.31 ID:cOH/iFjL0.net
ほい
https://packagist.org/packages/firebase/php-jwt

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

40 :デフォルトの名無しさん :2018/02/13(火) 13:20:46.69 ID:rrx74NIBa.net
>>39
とりあえずcomposerでググれ

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

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

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

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

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

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

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

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

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

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

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

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

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

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

50 :デフォルトの名無しさん :2018/02/25(日) 14:13:11.68 ID:bGLkxUMu0.net
>>49
https://github.com/cakephp/app/blob/master/composer.json#L29

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

52 :デフォルトの名無しさん :2018/03/02(金) 13:05:46.96 ID:pRJ4HJDk0.net
>>51
とりあえず
print_r(debug_backtrace());
って書いてみ

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

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

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

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

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

55 :デフォルトの名無しさん :2018/03/02(金) 14:54:30.21 ID:d+rY3YvF0.net
>>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 :デフォルトの名無しさん :2018/03/02(金) 15:47:35.06 ID:pRJ4HJDk0.net
>>55
なるほど
dirname(__FILE__);
をオススメしとく

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

58 :デフォルトの名無しさん :2018/03/04(日) 22:48:34.40 ID:NLYmVhvS0.net
出力したいだけなら普通にforeachでいいんじゃないの

59 :デフォルトの名無しさん :2018/03/04(日) 23:25:14.60 ID:85QkEt6wM.net
>>58
ありがとうございます。

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

60 :デフォルトの名無しさん :2018/03/05(月) 01:51:51.73 ID:aQjnc2cVa.net
自由でいんじゃね

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

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

63 :デフォルトの名無しさん :2018/03/06(火) 23:15:13.68 ID:1vXAI1T90.net
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 :デフォルトの名無しさん :2018/03/07(水) 11:19:38.20 ID:DyyIOy9m0.net
>>63
'var/www/html/index.php'
をrequireしようとしたけど
そんなファイルはないぞというエラー

とりあえず
<php

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

65 :デフォルトの名無しさん :2018/03/07(水) 11:20:30.40 ID:DyyIOy9m0.net
変なタイミングで送信してすまない

とりあえず
<php
phpinfo();

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

66 :デフォルトの名無しさん :2018/03/07(水) 15:05:17.25 ID:nuhunf1G0.net
<?php

67 :デフォルトの名無しさん :2018/03/08(木) 00:53:30.35 ID:Niz7TFw70.net
>>65
ありがとうございます

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

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

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

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

70 :デフォルトの名無しさん :2018/03/09(金) 03:05:38.98 ID:ftPGZsCIa.net
なんやこの糞コード…

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

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

72 :デフォルトの名無しさん :2018/03/09(金) 11:13:14.90 ID:oMbBFiMDa.net
>>71
>>70ではないがいくら動的型付け言語とはいえ、戻り値の型が違うのはあまりお行儀がよろしくないと思う

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

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

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

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

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

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

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

80 :デフォルトの名無しさん :2018/03/13(火) 06:41:43.09 ID:3S6NtZAK0.net
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 :デフォルトの名無しさん :2018/03/13(火) 10:52:58.55 ID:RXShV79h0.net
cron.phpを

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

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

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

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

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

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

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

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

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

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

SELECT feed FROM aclass;
SELECT feed FROM bclass;

88 :デフォルトの名無しさん :2018/03/14(水) 00:46:02.96 ID:PZuim+KR0.net
設計がキモいからアレだけど

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

じゃね

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

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

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

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

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

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

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

95 :デフォルトの名無しさん :2018/03/15(木) 21:50:22.39 ID:Qb1XFtti0.net
Call to a member function query() on null

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

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

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

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

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

99 :デフォルトの名無しさん :2018/03/17(土) 13:01:40.05 ID:gJ/QHesH0.net
下らない質問します

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

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

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

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

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

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

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

102 :デフォルトの名無しさん :2018/03/17(土) 22:08:41.96 ID:dntUHK5y0.net
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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ええぇぇぇ…

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

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

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

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

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

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

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

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

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

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

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

123 :デフォルトの名無しさん :2018/03/29(木) 01:14:54.39 ID:Nvn7VfZa0.net
なる。今からやれよ

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

125 :デフォルトの名無しさん :2018/04/02(月) 13:28:31.23 ID:1ZK7Ts6x0.net
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 :デフォルトの名無しさん :2018/04/02(月) 14:06:22.32 ID:1ZK7Ts6x0.net
データベースのcountを普通の変数として受け取りたいです。

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

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

129 :デフォルトの名無しさん :2018/04/03(火) 09:34:38.07 ID:vHkqWM6i0.net
>>128
ありがとうございます
できました。

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

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

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

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

134 :デフォルトの名無しさん :2018/04/07(土) 20:04:48.52 ID:MtEcxTjp0.net
なお

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

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

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

137 :デフォルトの名無しさん :2018/04/08(日) 10:00:09.99 ID:8Q7B3DS20.net
>>135
>HTTPとか正気の沙汰ではない
なんでよ?

138 :デフォルトの名無しさん :2018/04/08(日) 13:02:18.39 ID:wO4VFvVza.net
改竄されたら任意コード実行に直結やぞ
せめてちゃんとした証明書付きのHTTPSは必要
それでも何か嫌だけど

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

140 :デフォルトの名無しさん :2018/04/08(日) 14:49:16.99 ID:ZJwweAqK0.net
>>139
中間者攻撃をご存じないか?

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

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

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

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

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

146 :デフォルトの名無しさん :2018/04/10(火) 00:12:53.40 ID:cSkLylsH0.net
>>145
どれほどやったの?

147 :デフォルトの名無しさん :2018/04/10(火) 01:11:02.79 ID:mlSyfS39a.net
>>145
フレームワークは構造を理解した上で使うもの。職場でそれ言われたんならすぐ他行ったほうがいい。

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

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

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

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

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

153 :デフォルトの名無しさん :2018/04/12(木) 07:20:46.89 ID:fdYFp2d/a.net
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にこういうのありますか?

154 :デフォルトの名無しさん :2018/04/12(木) 18:52:28.27 ID:KSRe3/pIa.net
作りゃいいじゃん

155 :デフォルトの名無しさん :2018/04/17(火) 16:17:10.16 ID:LPB+OBLfM.net
>>153
Symfony
+
Doctrine
+
VichUploaderBundle
+
Flysystem
FlysystemのAWS S3用アダプタ

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

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

VichUploaderはPropelやMongoDBにも対応している
FlysystemはSymfony以外も対応している

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

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

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

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

158 :デフォルトの名無しさん :2018/04/21(土) 08:48:37.98 ID:h0SVpO5ba.net
レンタルサバのエラーディスプレイいじれるんならいじる

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

160 :デフォルトの名無しさん :2018/04/21(土) 23:07:08.13 ID:GJF07GGo0.net
>>158,159
できましたありがとうございます

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

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

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

161 :デフォルトの名無しさん :2018/04/22(日) 00:03:29.49 ID:ZgYxHCJE0.net
>>160
だからerror_logを指定城

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

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

163 :デフォルトの名無しさん :2018/04/22(日) 06:44:08.35 ID:ebslMH0y0.net
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 :デフォルトの名無しさん :2018/04/22(日) 11:55:07.76 ID:pMZeO9w/0.net
うまくいかない…

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

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

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

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

167 :デフォルトの名無しさん :2018/04/23(月) 15:07:39.91 ID:jrWtf7ql0.net
>>16
ありがとうございます

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

168 :デフォルトの名無しさん :2018/04/23(月) 15:08:09.54 ID:jrWtf7ql0.net
アンカ >>166 さんでした

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

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

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

172 :デフォルトの名無しさん :2018/04/27(金) 22:21:06.56 ID:7/omQtan0.net
>>171
何か試してから聞いてる?

173 :デフォルトの名無しさん :2018/04/28(土) 00:04:33.20 ID:g3LZUwEj0.net
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 :デフォルトの名無しさん :2018/04/28(土) 02:34:18.68 ID:PnxQ5sIY0.net
>>172-173
思い違いと動作確認でもミスがあり、何か処理が必要と思い込んでいました。
すっぱり整理してやり直しをし、無事動作することが確認できました。

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

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

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

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

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


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

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

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

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

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

180 :デフォルトの名無しさん :2018/05/01(火) 05:57:16.67 ID:YFbi6kAs0.net
使い道あるの?

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

182 :デフォルトの名無しさん :2018/05/05(土) 02:10:31.22 ID:i6PqpWH90.net
ファイルを 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 :デフォルトの名無しさん :2018/05/05(土) 02:45:58.52 ID:r2NCQwWJ0.net
てす

184 :デフォルトの名無しさん :2018/05/05(土) 05:47:07.80 ID:ai+BlqsN0.net
$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 :デフォルトの名無しさん :2018/05/05(土) 15:07:11.64 ID:XYMHadsA0.net
スマホ向けに下記をhtmlのheadに書いた場合は、スマホの横サイズいっぱいで折り返し表示されますが、
<meta name="viewport" content="width=device-width,initial-scale=1" />

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

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

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

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

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

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

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

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

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

190 :デフォルトの名無しさん :2018/05/06(日) 01:38:07.25 ID:qVg6wQW80.net
プログラムの基本を教えてください。

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

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

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

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

194 :デフォルトの名無しさん :2018/05/08(火) 19:09:31.56 ID:GHttMtN9H.net
関数の呼び出しがあっているのかわかりません

ボタンで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);
}
}

195 :デフォルトの名無しさん :2018/05/08(火) 20:30:36.78 ID:ZRo6X/lKM.net
エラーログは読んだの?
超能力者じゃない限りソースだけ貼られても分からんよ

196 :デフォルトの名無しさん :2018/05/08(火) 21:06:53.22 ID:XEaTgBIDp.net
>>195

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

197 :デフォルトの名無しさん :2018/05/08(火) 21:11:07.16 ID:r4cHd3Kx0.net
>>194
elseまで流れてるとか

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

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

200 :デフォルトの名無しさん :2018/05/08(火) 21:46:05.47 ID:ZabFV5ph0.net
>>199

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

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

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

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

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

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

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

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

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

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

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

208 :デフォルトの名無しさん :2018/05/16(水) 08:02:56.78 ID:U06fQouG0.net
あとPHPの配列についてききたいんですけど

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

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

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

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

209 :デフォルトの名無しさん:2018/05/19(土) 17:37:12.71 ID:wNYTD2Hfv
質問お願いします。

現在php.iniファイルに
--------
[curl]
curl.cainfo = "C:\保存した場所のPATH\cacert.pem"
--------
と書いて運用をしておりますが、この記述を消して、実行するPHPスクリプト上で宣言したいと思ってます。

PHPスクリプト上で
--------
ini_set('curl.cainfo','c:/保存した場所のPATH/cacert.pem');
--------
と記載しても、ダメでした。
なにか記述方法が間違ってますでしょうか?

210 :デフォルトの名無しさん:2018/05/19(土) 18:50:02.14 ID:wNYTD2Hfv
あー
curl.cainfoはPHP_INI_SYSTEMだからini_setで変更できないっぽいですね。

なんとか運用上で回避する方法は無いものでしょうか?

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

Q3682

212 :デフォルトの名無しさん :2018/05/24(木) 10:46:13.86 ID:cPlRxlDn0.net
Q3682

213 :デフォルトの名無しさん :2018/05/24(木) 16:05:36.14 ID:6FiN0bsr0.net
114.149.223.252

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

215 :デフォルトの名無しさん :2018/06/01(金) 00:15:25.87 ID:MAx7uK1fM.net
そんなのどれ使っても手軽だろw
こんなところに書いて待ってる間に処理一つくらい書けるし、
まずは分かりやすそうなのどれか一つ使って書いてみればいい

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

217 :デフォルトの名無しさん :2018/06/07(木) 16:51:32.87 ID:XK0BD38x0.net
初心者です。。

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);みたいなのがコンストラクタのなかにあるのって
どういうふうに動いてるのかわからないです。

218 :デフォルトの名無しさん :2018/06/07(木) 17:08:53.75 ID:GEMO2qjs0.net
>>217
遅延静的束縛
http://php.net/manual/ja/language.oop5.late-static-bindings.php

219 :デフォルトの名無しさん :2018/06/07(木) 17:37:17.26 ID:XK0BD38x0.net
>>218
遅延的束縛がわからんのです。
コンストラクタの中でやってるからpiyoにならないのかな
static $piyo;
public function __construct(){
static::hoge($this);
}
public static function hoge($this){
return static::piyo = $this;
}

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

220 :デフォルトの名無しさん :2018/06/07(木) 17:38:09.15 ID:XK0BD38x0.net
static::$piyoですね

221 :デフォルトの名無しさん :2018/06/07(木) 18:19:33.09 ID:GEMO2qjs0.net
>>219
まんま>>218のマニュアルに書いてあるんだけど読んだの?

222 :デフォルトの名無しさん :2018/06/07(木) 19:00:51.08 ID:XK0BD38x0.net
>>221
書いてある?
あんまりインスタンス化して使ってるような例ないぽいけど

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

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

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

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

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

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

227 :デフォルトの名無しさん :2018/06/10(日) 06:39:55.08 ID:4f+KYqKd0.net
>>226
すいません。
スレタイ読み違えて誤爆しました・・・。

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

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

230 :デフォルトの名無しさん :2018/06/20(水) 17:19:49.17 ID:gdouP6aq0.net
なるほどー
ありがとうございます

231 :デフォルトの名無しさん :2018/06/20(水) 18:06:03.26 ID:e8FLeNqqa.net
ctype_alnumのおでましか

232 :デフォルトの名無しさん :2018/07/02(月) 20:37:50.95 ID:WBjy4TX+0.net
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するケースだけでおかしい。
原因の心当たりって無い?

233 :デフォルトの名無しさん :2018/07/02(月) 21:13:03.02 ID:SCtIQYdLa.net
ツッコミどころだらけで笑うわ
* SSIはWebサーバの機能(スレ違い)
* その構成にする意味が分からない
* というかSSIってマジ?

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

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

236 :デフォルトの名無しさん :2018/07/02(月) 21:37:55.31 ID:SCtIQYdLa.net
SSIの時点でもうアレだけど更にPHPを絡められて試す気がなぁ

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

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

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

239 :デフォルトの名無しさん :2018/07/04(水) 12:23:51.44 ID:0wBgZClm0.net
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);}

240 :デフォルトの名無しさん :2018/07/04(水) 12:24:35.05 ID:0wBgZClm0.net
クロージャの$hogeと最初の引数の$hogeの繋がり

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

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

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

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

244 :デフォルトの名無しさん :2018/07/04(水) 16:51:50.97 ID:n4h9hTEh0.net
このゲーム面白すぎてずっとやってる
https://goo.gl/2UVYAA

245 :デフォルトの名無しさん :2018/07/04(水) 21:46:16.37 ID:gFgZc5FG0.net
CTP

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

247 :デフォルトの名無しさん :2018/07/05(木) 16:22:58.50 ID:AeL6VB/V0.net
CTP

248 :デフォルトの名無しさん :2018/07/08(日) 17:52:24.96 ID:V6T9ucEP0.net
PHPでerrnoを取得することはできますか?

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

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

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

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

250 :デフォルトの名無しさん :2018/07/08(日) 22:36:55.30 ID:QF2djuw30.net
なんか普通の話だな
グローバル変数なんて使ってたらそんなの当たり前だろ

251 :デフォルトの名無しさん :2018/07/09(月) 11:35:35.05 ID:9xuTw2udM.net
>>248
自己レスです。
ググってたら、それらしきものがありました。
非推奨などもなさそうで行けそうです。
http://php.net/manual/ja/function.posix-strerror.php

252 :デフォルトの名無しさん :2018/07/09(月) 14:41:02.89 ID:p8VxNcvv0.net
>>249
ユーザー定義のグローバル変数や名前空間をもたない定数なんかもう何年も使ったことないけど

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

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

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

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

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

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

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

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

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

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

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

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

262 :デフォルトの名無しさん :2018/07/10(火) 16:34:05.74 ID:MaGnmy4dM.net
SSIインジェクションやらかすようなやつはSQLインジェクションだってやらかしかねないんだから、それはSSIを使わない理由としては弱いでしょ。

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

264 :デフォルトの名無しさん :2018/07/10(火) 17:02:12.57 ID:MaGnmy4dM.net
>>263
旧来からのスタイルを踏襲しているとか、
SSIはPHP知らなくてもHTML(と言えるか微妙だが)分かれば使えるってのもあるかもね。
サイト全部がPHPじゃないし、みんながみんなPHP使えるわけじゃないからな。
PHP使うなら PHP の include しても file_get_contents しても、適用できるなら得られる結果は一緒でしょ。

265 :デフォルトの名無しさん :2018/07/10(火) 18:15:06.82 ID:lHg/M16h0.net
>>263
使う理由は特にない

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>+αで片付く程度の低レベルの事しかしてないね
繰り返すけど今更使う必要性は全くない過去の遺物です

266 :デフォルトの名無しさん :2018/07/10(火) 18:40:58.20 ID:b+YyloMOd.net
>>265
詳しくありがとう

267 :デフォルトの名無しさん :2018/07/10(火) 18:46:59.92 ID:MaGnmy4dM.net
include と file_get_contents が等価だなんて言ってないぞ。
別のコンテンツを差し込む方法として適用できるケースがあると言ってるだけで。
例えばページのヘッダやらフッタやらを別ファイルに浮かせたとして、それが include できるなら include で、file_get_contents できるなら file_get_contents で差し込めるだろ。

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

269 :デフォルトの名無しさん :2018/07/10(火) 19:08:22.00 ID:MaGnmy4dM.net
>>268
例えばただのHTMLファイルがあったとして、それを include した場合と file_get_contents 使って出力した場合とで得られる出力結果にどんな違いがあるの?
もちろんただのHTMLじゃないものを扱おうとすれば、得たい出力を得るために適用できないこともあるよ。
>>265 の PHPのコードとして評価するというのも語弊があると思うよ。
パースはテキストとして始まるわけだから。

270 :デフォルトの名無しさん :2018/07/10(火) 19:24:15.15 ID:lHg/M16h0.net
初心者も見てるだろうから実例を出しとく

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

271 :デフォルトの名無しさん :2018/07/10(火) 19:25:00.51 ID:lHg/M16h0.net
・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
*/
------------

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

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

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

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

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

273 :デフォルトの名無しさん :2018/07/16(月) 06:50:46.92 ID:S86tTn750.net
>>272
とりあえず思い当たることをざっくり。
・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を書かれると、それを踏まされちゃうかもしれない。
対策はいろいろあると思うけど完璧な対策は難しく、どこかを妥協することになると思う(メール送るのやめるとか)。

274 :270 :2018/07/16(月) 14:33:10.45 ID:HXh/vnsc0.net
>>272です。

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

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

276 :270 :2018/07/16(月) 15:53:45.47 ID:HXh/vnsc0.net
>>272です。

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

277 :デフォルトの名無しさん :2018/07/16(月) 16:20:11.41 ID:+45YTdov0.net
>>276
ごめん、名前間違えてた

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

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

278 :270 :2018/07/16(月) 19:00:14.50 ID:HXh/vnsc0.net
>>272です。

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

279 :デフォルトの名無しさん :2018/07/16(月) 21:18:00.33 ID:UPJrQacm0.net
書きっぷりから本人の気がするな

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

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

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

283 :デフォルトの名無しさん :2018/07/17(火) 15:39:21.70 ID:7HO9UDJa0.net
自動投稿系のスパムはハニーポットしかけるのが楽

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

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

284 :デフォルトの名無しさん :2018/07/24(火) 16:30:53.54 ID:noMJmsz30.net
クラスAを継承したクラスA1、クラスA2を作りました
クラスA1ではB1、クラスA2ではB2クラスをuse Bx as Bとして読み込み
クラスAにクラスBを操作する処理を書けばクラスA1、A2に共通の処理を書かなくて済むかと思ったのですが、名前空間的にnew BとするとクラスAを基準としたパスで読み込もうとしてnot foundになってしまいます
親クラス側から子クラスで読み込む前提のクラスに対しての操作を書く方法はありますでしょうか?

285 :デフォルトの名無しさん :2018/07/24(火) 21:31:33.69 ID:hRNBzg1Ya.net
>>284
コード無いからエスパーするとinterface使え

286 :デフォルトの名無しさん :2018/07/25(水) 23:37:30.51 ID:DQL2gxnr0.net
エスパーすると設計がおかしい

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

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

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

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

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

288 :デフォルトの名無しさん :2018/07/26(木) 14:21:12.96 ID:YpwlC3d50.net
>>287
結局APIをAPIの仕様に沿って叩くだけなんだから
言語なんか別に何でもいい

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

289 :デフォルトの名無しさん :2018/07/26(木) 14:36:09.87 ID:kn/Cla8U0.net
>>288
有難うございます。なるほど、そういう事ですか…。

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

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

291 :デフォルトの名無しさん :2018/07/26(木) 20:08:56.19 ID:scJUypQr0.net
カスタムデータってなに

292 :デフォルトの名無しさん :2018/07/26(木) 23:45:01.90 ID:IPVWqDZwM.net
ほんと質問の意味が全く分からんなw

293 :デフォルトの名無しさん :2018/07/27(金) 01:47:39.64 ID:Cv6I99asa.net
カスタムデータはバックエンドやのうてフロントエンドで使うもんや

294 :デフォルトの名無しさん :2018/07/27(金) 04:29:13.10 ID:2LlMOc7f0.net
javascript じゃないの?
MDNとにらめっこするよろしー

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

295 :デフォルトの名無しさん :2018/07/28(土) 03:40:13.45 ID:zAnhzC560.net
html5の属性にdata-がつくってやつ?
submitを動作のない通常のbuttonにしてjsでsubmitするようにして
submitの前にjsでdata-要素を探して中身を
hiddenフィールドに追加する処理書けば渡せる
onsubmit時にやってもいいけどjavascriptオフだと想定したデータを受け取れない
buttonにしてjsでsubmitすればjavascriptオフだとsubmit自体ができなくなるが
そっちのほうが開発者には都合がいい

296 :デフォルトの名無しさん :2018/07/28(土) 19:53:18.72 ID:lnl3z2ED0.net
スレチ

297 :デフォルトの名無しさん :2018/07/28(土) 21:32:05.50 ID:zAnhzC560.net
スレチちゃうやろー

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

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

300 :デフォルトの名無しさん :2018/07/28(土) 22:36:05.72 ID:aLrZyGnX0.net
難民受け入れる?
嫌がる人がいないなら、自分は反対はしない

301 :デフォルトの名無しさん :2018/07/29(日) 00:42:21.80 ID:5d6XvWgua.net
開発者都合を優先する愚か者がいると聞きまして

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

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

304 :デフォルトの名無しさん :2018/08/01(水) 00:53:10.63 ID:BvwC4qZXa.net
そのレベルまで言うならサーバサイド使う必要性あるか?

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

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

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

306 :デフォルトの名無しさん :2018/08/01(水) 14:08:02.83 ID:/ct8Nmlma.net
JS書けないオジサンだな

307 :デフォルトの名無しさん :2018/08/01(水) 17:38:42.26 ID:bHIdHVss0.net
うむ

308 :デフォルトの名無しさん :2018/08/01(水) 17:48:51.49 ID:a1G0tkY30.net
オジサンだとPHPも難しいと思う

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

310 :デフォルトの名無しさん :2018/08/01(水) 18:07:30.41 ID:bHIdHVss0.net
CakePHPの名前を出す意味が分からんが
動かす環境や設計思想によるとしか

311 :デフォルトの名無しさん :2018/08/01(水) 21:49:19.72 ID:leTOpWGGa.net
curl_setoptをphp.iniの中で設定したいのですが、そんなこと出来ますか?

312 :デフォルトの名無しさん :2018/08/01(水) 23:56:12.68 ID:leTOpWGGa.net
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ファイルで設定するのはやはり無理なのでしょうか?

313 :デフォルトの名無しさん :2018/08/02(木) 00:00:30.23 ID:YVITecbMa.net
curl使うタイミングで関数使ってやってください

314 :デフォルトの名無しさん :2018/08/02(木) 00:10:24.86 ID:ZUaPNP+za.net
そうですか
VPSで動かしているTinyTinyRSSで、HTTPSのスクレイピング時にエラーが出ていて
CURLOPT_SSL_CIPHER_LISTを設定すればいいということまでは分かったのですが
コードを書き換えたとしてもアップデートで上書きされてしまう可能性があるので
設定ファイルでデフォルト値を設定できないかと思ったのですが、残念です・・
ありがとうございました

315 :デフォルトの名無しさん :2018/08/02(木) 00:37:20.93 ID:xZR22mJ60.net
>>312
自前のiniファイルを適当に用意し、parse_ini_file関数で読み込む

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

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

318 :デフォルトの名無しさん :2018/08/02(木) 11:56:18.56 ID:G7lRGrKt0.net
infoじゃねぇや curl -v だわ

319 :デフォルトの名無しさん :2018/08/02(木) 12:20:37.41 ID:VtR7nk5s0.net
>>316
そこまで説明しなくても普通は>>312読みゃ分かるよw

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

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

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

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

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

322 :デフォルトの名無しさん :2018/08/02(木) 15:39:52.12 ID:G7lRGrKt0.net
>>314を読んでないのか読んでて無視してるのか

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

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

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

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

もう少しkwsk

325 :デフォルトの名無しさん :2018/08/02(木) 16:20:05.83 ID:VtR7nk5s0.net
>>324
例えば、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

>>323
うん

326 :デフォルトの名無しさん :2018/08/02(木) 16:38:35.04 ID:j3ZbymyT0.net
>>325
なるほど
やりたい事を書いた文章がそのままPHPのソースになってる感じですごく分かりやすい

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

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

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

328 :デフォルトの名無しさん :2018/08/02(木) 16:52:37.54 ID:VtR7nk5s0.net
>>326
$curl = new Curl_Wrapper;
$curl->setUserAgent();
$curl->setReferer();
$status = $curl->getStatusCode();

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

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

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

330 :デフォルトの名無しさん :2018/08/05(日) 11:19:39.90 ID:EoLQ53rz0.net
質問です

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

/xxx.php?aaa
/xxx.php?bbb
/xxx.php?ccc
/xxx.php?ddd
... 一枚にまとめて使うのと
どっちがパフォーマンスいいでしょうか?
よろしくお願いします

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

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

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

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

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

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

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

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

337 :デフォルトの名無しさん :2018/08/06(月) 12:22:54.58 ID:933yDlcJ0.net
>>335
そか
フレームワークに頼らずに作るのも
DBに頼らずテキストベースで読み書きするのも
とても良い経験にはなるから頑張って

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

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

なんて作り方もある
今これがベストだと思って設計しても
どうせ1年後にはもっと良い設計が閃くさ
だから色々と試してみるといい

338 :デフォルトの名無しさん :2018/08/06(月) 12:33:44.81 ID:933yDlcJ0.net
>>336
大規模開発をした経験がないとそうなるかもね

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

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

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

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

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

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

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

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

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

342 :デフォルトの名無しさん :2018/08/06(月) 13:00:50.54 ID:933yDlcJ0.net
>>340
フレームワークを使わずに
リクエストパラメータを変数に入れて比較してみましょう
って超初歩的な事でも

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

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

$foo = $_POST['foo'];
だからPHPはヤバすぎる…

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

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

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

346 :デフォルトの名無しさん :2018/08/06(月) 13:28:14.07 ID:Xt7Beabr0.net
オレはこんな感じで書いてるな

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

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

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

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

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

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

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

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

350 :デフォルトの名無しさん :2018/08/06(月) 14:07:27.66 ID:933yDlcJ0.net
>>349
応用パターンとしては

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

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

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

352 :デフォルトの名無しさん :2018/08/06(月) 14:21:43.09 ID:ng9YxNhi0.net
>>348
最後については同意。

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

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

353 :デフォルトの名無しさん :2018/08/06(月) 14:46:52.11 ID:933yDlcJ0.net
>>351
Filter関数は意外と浸透してないっぽい

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

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

上の方が楽だよね

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

355 :デフォルトの名無しさん :2018/08/06(月) 15:40:31.71 ID:933yDlcJ0.net
>>354
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

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

357 :デフォルトの名無しさん :2018/08/06(月) 16:05:18.97 ID:UALza30Cd.net
if (条件A) {
$foo = 'a';
} elseif (条件B) {
$foo = 'b';
}
var_dump($foo);

条件AもBも満たさなかった時にエラーになるわな
まずはvar_dumpが参照できるレベルで$fooを定義して必ず参照できることを保証しろってこと
phpしか書けないPHPerだとelseを書けばいいだろと思うかもしれんがそうじゃないそうじゃないんだ

358 :デフォルトの名無しさん :2018/08/06(月) 16:29:32.52 ID:Hk1kxuZq0.net
>>357
$test = "c";
if ($test == "a") {
$foo = 'a';
} elseif ($test == "b") {
$foo = 'b';
}
var_dump($foo);

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

359 :デフォルトの名無しさん :2018/08/06(月) 16:39:22.00 ID:933yDlcJ0.net
>>358
<?php
の次の行に

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

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

あと条件式は
($test == "a") じゃなくて
($test === "a") と「=」3つ使って比較しよう
理由は「PHP 型 比較」とかで適当にググって

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

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

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

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

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

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

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

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

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

365 :デフォルトの名無しさん :2018/08/06(月) 21:01:33.08 ID:Xt7Beabr0.net
ウンコはすぐ分かる
まずそれを踏まないようにしよう

366 :デフォルトの名無しさん :2018/08/07(火) 06:40:30.60 ID:TazhAm3Np.net
「サーバーを書く」っていうのはどういう意味?phpで書いたプログラムをサーバーに置いて動作するようにすることも含むの?まったく違う概念?

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

368 :デフォルトの名無しさん :2018/08/07(火) 08:28:33.60 ID:uocr6YSL0.net
>>367
ありがとう

369 :デフォルトの名無しさん:2018/08/07(火) 11:15:37.99 ID:Xr4PhBim9
PHPのこのチャットボットツール https://botman.io/2.0/installation を使って、LINEのようなリアルタイムのチャットツールを作りたいのですが、ドキュメントが理解できず作れません。
ドットインストールでPHPやMYSQLの基礎はおおよ理解したのですが、どのように学習と開発を進めていけばよいのか分かりません。
実装したい機能としては、同一の会話に複数のユーザーがアクセスできて、ボット自体には反応させず、ユーザー同士が単純にメッセージをやりとりできるようにすることです。

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

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

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

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

373 :デフォルトの名無しさん :2018/08/07(火) 11:04:40.27 ID:uocr6YSL0.net
>>372
完全に理解した!!(大嘘)
ありがとう

374 :デフォルトの名無しさん :2018/08/07(火) 11:16:29.34 ID:i+V5/5w80.net
てか、こんなイミフ表現使うなよw

375 :デフォルトの名無しさん :2018/08/07(火) 11:20:35.05 ID:7NW2zIgs0.net
イミフか?知らないだけだろ

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

377 :デフォルトの名無しさん :2018/08/07(火) 13:53:06.05 ID:XXpusaA40.net
サーバってのはsocket関数使ってポートlistenしたデーモンであること
>>371はたんにバックエンドなだけ

378 :デフォルトの名無しさん :2018/08/07(火) 14:37:02.01 ID:uocr6YSL0.net
>>376
今のところ使い道が浮かばないからやめておくよ。でもありがとう

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

379 :デフォルトの名無しさん :2018/08/08(水) 16:21:48.35 ID:Ao8ga7ES0.net
VB/VBA(クラス無し)しか書かけないけど、PHP(5?)を触ることになった

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

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

380 :デフォルトの名無しさん :2018/08/08(水) 16:24:03.76 ID:ic4eKuJe0.net
リンクをクリックすると問い合わせに回答するメールの画面が開くという処理があるのですが、
EdgeとIEでは正常に動作するのですが、Chromeだと何も起こらない時があります。

$val = mb_convert_encoding($_POST['body'], "SJIS", "UTF-8");
body(本文)が短いとChromeでも正常に動作するのでbodyの内容が長い時に↑のエンコード時に何か異常が起きてると思うんですけどわかる方いますか?

381 :デフォルトの名無しさん :2018/08/08(水) 17:06:31.24 ID:/J/gevQO0.net
input要素の入力の有無を確認する方法で一般的な方法を教えてください。

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

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

382 :デフォルトの名無しさん :2018/08/08(水) 17:18:00.31 ID:Evm53zpf0.net
>>381
<form action="" method="post">
<input type="text" name="hoge">

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

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

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

少なくとも3や4は使っちゃ駄目
hogeに'0'が入っていても空として判定されてしまう

383 :デフォルトの名無しさん :2018/08/08(水) 17:24:45.45 ID:Evm53zpf0.net
>>380
<a href="mailto:aaa@example.com?body={$val}">〜</a>
としてリンクをクリックした時に
メーラーの本文に$valが書かれた状態にしたいって話だろうか?

もしそうならbodyに何byteまで指定できるかは環境依存なので
その方法は止めて
ローカルのMTAやSMTP使ってメールを飛ばすようにした方がいい

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

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

385 :デフォルトの名無しさん :2018/08/08(水) 17:37:04.15 ID:4S5+d1joa.net
プログラミング言語として学ぶだけならいざ知らず, PHPの場合はほぼ確実にサーバサイドプログラミングのお作法とセットだから難しい
構文だけは簡単だけど実用しようと思うと全く初心者向けじゃないと思うわ
(サーバサイドアプリケーション自体初心者向きじゃないとは思う)

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

387 :378 :2018/08/08(水) 18:05:55.26 ID:/J/gevQO0.net
>>381です

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

388 :デフォルトの名無しさん :2018/08/08(水) 18:19:09.01 ID:Ao8ga7ES0.net
>>384-386

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

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

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

390 :デフォルトの名無しさん :2018/08/08(水) 18:37:52.38 ID:Evm53zpf0.net
>>387
> 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ではどう判定するのか
そもそも日本語をどう定義するのかって話はあるけど

391 :378 :2018/08/08(水) 19:16:28.90 ID:/J/gevQO0.net
>>390さん
詳しいレスありがとうございます。
それぞれの関数の意味を理解するよう勉強します。
ありがとうございました。

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

393 :デフォルトの名無しさん :2018/08/09(木) 11:17:35.06 ID:MNGTuu+R0.net
>>392
今JavaScriptでやってるという方法も
結局は内部的にmailtoスキームを使ってるのではないかと思う

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

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

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

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

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

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

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

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

396 :デフォルトの名無しさん :2018/08/09(木) 11:51:13.12 ID:icZP1PWcd.net
>>395
いやそういう問題じゃないだろ

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

>>395 POST勉強してみます

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

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

399 :394 :2018/08/10(金) 10:53:33.88 ID:Jh09aF/n0.net
>>398
まさにそう言うことです
VBAくらいは触ったことはあってもWebアプリはチンプンカンプンで一から勉強です・・・

400 :デフォルトの名無しさん :2018/08/10(金) 12:02:22.10 ID:9AhDfxBI0.net
運用でカバーするなら今のままでIE使わせればいいって話でもあるわな。

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

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

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

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

405 :デフォルトの名無しさん :2018/08/12(日) 00:08:01.15 ID:B+zL8m/c0.net
単刀直入にやらないと、無駄にスレを消費する

406 :デフォルトの名無しさん :2018/08/12(日) 00:31:14.89 ID:UYzABTVRM.net
filter_input だと便利な場面があるというだけで、$_POST はこれまでみんな使ってきたものだし留意点を押さえれば問題があるわけじゃない。
$_POST での参照は、そもそもそのパラメタが設定されているか、期待する型かとかを自分で判定する必要があるというだけで、fi-ter_input はそれを場合によって便利にするユーティリティ関数程度のもの。

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

408 :デフォルトの名無しさん :2018/08/12(日) 07:20:34.52 ID:l4hCxpRe0.net
変更可能だとどんな危険が考えられるの?

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

410 :デフォルトの名無しさん :2018/08/12(日) 15:04:58.70 ID:9ilCyu/u0.net
GETも同じ?

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

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

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

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

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

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

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

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

415 :デフォルトの名無しさん :2018/08/12(日) 20:51:00.05 ID:9ilCyu/u0.net
>>413
なるほど、ありがとう

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

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

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

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

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

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

419 :デフォルトの名無しさん :2018/08/12(日) 21:37:43.85 ID:9ChOuHra0.net
>>417
変数のスコープのの話なんて、適当に探せばいくらでも出てくるだろうに^^;

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

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

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

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

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

424 :デフォルトの名無しさん :2018/08/12(日) 22:29:18.96 ID:9ChOuHra0.net
>>422
@t_wada の前でも同じこと言えんの?

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

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

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

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

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

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

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

430 :デフォルトの名無しさん :2018/08/12(日) 22:59:36.87 ID:bsEI5sh70.net
>>428
× 行う記事
○ 推奨する記事

431 :デフォルトの名無しさん :2018/08/12(日) 23:01:06.85 ID:bsEI5sh70.net
>>429
それならそういえば良いでしょう

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

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

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

434 :デフォルトの名無しさん :2018/08/12(日) 23:08:04.47 ID:9ChOuHra0.net
>>431
最初っから、そう言ってるんだぜぃw

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

435 :デフォルトの名無しさん :2018/08/12(日) 23:09:31.00 ID:9ChOuHra0.net
途中で投稿してしまった。

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

436 :デフォルトの名無しさん :2018/08/12(日) 23:15:01.27 ID:9ChOuHra0.net
>>432
改変されるリスクの有無は同じなので、限定した話ではない。

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

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

439 :デフォルトの名無しさん :2018/08/12(日) 23:32:41.22 ID:mMH07JtW0.net
PHP The Right Wayくらいは必読だと思う
ttps://www.phptherightway.com/#data_filtering

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

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

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

442 :デフォルトの名無しさん :2018/08/13(月) 11:03:05.76 ID:rjxAd60g0.net
>>437
ずっと同じことのループやねぇ。。。

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

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

444 :デフォルトの名無しさん :2018/08/13(月) 11:35:41.06 ID:V6shauct0.net
>>438
他言語しか知らないけど、グローバル変数なんてめったに使わない

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

445 :デフォルトの名無しさん :2018/08/13(月) 11:43:06.68 ID:XxWurSAu0.net
filter_input 自体は $_POST使っているんでしょ?

446 :デフォルトの名無しさん :2018/08/13(月) 12:32:33.81 ID:ZXAQ0ZmcM.net
>>443
だからさ、自分でわざわざグローバル変数作るなってことだろ、それは。
既に用意されてるものを使うなって理由としてグローバル変数だから(誰でも書き換えられるから)ってのは意味が分からんだろ。
わざわざ示されたもの読んで言ってるんだから >>441 にも答えてくれよ。

447 :デフォルトの名無しさん :2018/08/13(月) 12:48:25.49 ID:rjxAd60g0.net
>>446
ずっと同じことのループやねぇ。。。

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

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

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

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

449 :デフォルトの名無しさん :2018/08/13(月) 13:13:48.26 ID:ZXAQ0ZmcM.net
>>447
あ、ごめん
別の人と混同してたわ

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

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

450 :デフォルトの名無しさん :2018/08/13(月) 13:22:06.99 ID:+hDvRkt20.net
個人的には $_POST をリードオンリーにして使ってるが、俺だけだろうな

451 :デフォルトの名無しさん :2018/08/13(月) 13:41:09.92 ID:rjxAd60g0.net
>>449
filter_input は HTTP で投げられた値を直接参照するので、$_POST とは全然別物

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

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

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

452 :デフォルトの名無しさん :2018/08/13(月) 14:57:40.05 ID:XxWurSAu0.net
これ以上やっても信仰する宗教のようなのでやめますが

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

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

453 :デフォルトの名無しさん :2018/08/13(月) 15:25:20.03 ID:6I003ZzcM.net
>>451
書き込めたら密だって?
なんかワケわからんが、お前さんの言う密って何?
ちなみにそれは見たよ。

454 :デフォルトの名無しさん :2018/08/13(月) 15:48:38.75 ID:rjxAd60g0.net
>>453
複数クラスやモジュールでコミュニケーションしてしまう状態

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

456 :デフォルトの名無しさん :2018/08/13(月) 16:14:12.67 ID:rjxAd60g0.net
>>455
グローバル変数の汚染を回避する設計って普通だぞ^^;
新興でも何でも無い。

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

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

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

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

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

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

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

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

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

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

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

468 :デフォルトの名無しさん :2018/08/13(月) 17:04:05.65 ID:B8BpXPvN0.net
>>467
俺はあなたの事を話してるんですが

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

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

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

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

471 :デフォルトの名無しさん :2018/08/13(月) 17:47:45.32 ID:XxWurSAu0.net
>>469 の提案を受け入れたら考えます

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

472 :デフォルトの名無しさん :2018/08/13(月) 17:54:32.31 ID:rjxAd60g0.net
>>471
なんで交換条件なんだよw
そのままズレてろ。どうでもいいわ。

473 :デフォルトの名無しさん :2018/08/13(月) 18:22:02.91 ID:6I003ZzcM.net
>>464
注意すれば足りるっつうか、$_POST に値を代入しないようにコードを書くのがそんなに大変なの?
わざわざそういう設計をしなけりゃそんなことしないし、そうしてるなら必要だからしたんだろうから仕様に沿って使えばいいんじゃね?
ということなんじゃないの。
いや別に filter_input を使うなと言ってるのではないし使えばいいじゃんと思ってるが、$_POST をそこまで忌み嫌うのが意味分からんてことだよ。
それで疎にするとか持ち出してきて、$_POST の代わりに filter_input 使えば疎になるって何のこっちゃ?って感じだろう?
堅牢になるぜならまだ分かるが、疎って?ってさ。
疎にするって話ならと >>418 みたいな手法を持ち出してみたらそれには同意してもらえてるっぽいが、filter_input 使えば疎って話ではないだろってところは通じてないっぽいんだよな。

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

474 :デフォルトの名無しさん :2018/08/13(月) 18:45:11.35 ID:V6shauct0.net
チームで開発したことないんだろ、きっと
それか、一人で十分な開発規模

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

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

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

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

477 :デフォルトの名無しさん :2018/08/13(月) 19:59:59.97 ID:rjxAd60g0.net
>>473
密とか疎に対して「結合」って使ったから良くなかったかもね。
結合というより、関係性かなぁ。

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

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

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

478 :デフォルトの名無しさん :2018/08/14(火) 01:08:32.39 ID:WPb6+388M.net
ところで $_FILES や $_SESSION へのアクセスはどうやってるの?

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

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

481 :デフォルトの名無しさん :2018/08/16(木) 11:14:39.29 ID:wpZ5Mbd20.net
>>480
同じくくだらない話に今追いついたが
たったそれだけの話だよな

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

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

482 :デフォルトの名無しさん :2018/08/16(木) 11:54:48.48 ID:Z+yvFL8qM.net
>>480,481
追い付いたというからにはそれなりに読んだんだろうに、それで単にグローバル変数を使う話に見えるならプログラマー失格だと思うよ

483 :デフォルトの名無しさん :2018/08/16(木) 12:07:23.80 ID:Fm6q1Ws8p.net
>>482
では解説どうぞ

484 :デフォルトの名無しさん :2018/08/16(木) 12:21:40.67 ID:w2Vsd24V0.net
>>482様がマウントを取りたいがために風呂敷を拡げ始めたと聞いてバックネット裏の席を確保しました

485 :デフォルトの名無しさん :2018/08/16(木) 12:23:26.84 ID:Z+yvFL8qM.net
>>483
PHPの仕様として存在しPHP自体が用意してる参照が非推薦ともされていない情報に対する参照がグローバル(スーパーグローバル)というだけでなぜいけないのか?という話だよ。
自分で勝手グローバルを作ろうって話じゃない。

486 :デフォルトの名無しさん :2018/08/16(木) 12:35:32.96 ID:Fm6q1Ws8p.net
>>485

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

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

487 :デフォルトの名無しさん :2018/08/16(木) 12:43:49.69 ID:NlvTq02Da.net
https://www.php-fig.org/psr/psr-7/meta/#3-why-bother

488 :デフォルトの名無しさん :2018/08/16(木) 12:43:50.15 ID:w2Vsd24V0.net
人の話を聞かないまま退散したあのかたが蒸し返しで再登板しただけでした
解散

489 :デフォルトの名無しさん :2018/08/16(木) 13:02:04.93 ID:qFV5giwld.net
グローバル変数云々の話以外だと例えば
?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']よりはベターってだけ

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

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

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

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

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

491 :デフォルトの名無しさん :2018/08/16(木) 13:24:30.70 ID:NlvTq02Da.net
PHPの開発方針がめちゃくちゃ保守的だってことも知らないのだろう
https://externals.io/message/100087

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

492 :デフォルトの名無しさん :2018/08/16(木) 14:08:54.52 ID:qFV5giwld.net
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

493 :デフォルトの名無しさん :2018/08/16(木) 14:20:27.81 ID:wpZ5Mbd20.net
>>492
>↑これ理解できてるんだろうか?
>>445を見る限りでは勘違いしてるっぽいね

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

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

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

494 :デフォルトの名無しさん :2018/08/16(木) 14:26:51.20 ID:Z+yvFL8qM.net
>>489
そこでちょろっと言ってることが本質なんじゃないの。
一番に検討しなくちゃいけないのは、外とのインタフェースをあちらこちらに書かず特定の機構に閉じ込めるということだろ。
閉じ込めた中で $_GET と filter_input のどちらを使うかなんてことは本質じゃなく、その時の都合でベストチョイスすればいいだけのこと。
どっちもPHPが用意している正当なインタフェースなんだから。
グローバルはいけないんだなんて言ってみても、結局 >>478-479 でしょ。

495 :デフォルトの名無しさん :2018/08/16(木) 15:05:20.08 ID:47Wf5WpA0.net
永遠に噛み合わないんだな

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

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

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

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

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

498 :デフォルトの名無しさん :2018/08/16(木) 16:49:55.61 ID:Z+yvFL8qM.net
ワッチョイで >>451>>496 が同じってどうやって判断するの?
>>496>>497 は hE18 で同じかなって気がするが、そういう見方じゃないんだっけ。

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

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

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

500 :デフォルトの名無しさん :2018/08/16(木) 17:19:27.02 ID:wpZ5Mbd20.net
ちなみにこんなサービスもある
ttps://afi.click/browser/list/

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

501 :デフォルトの名無しさん :2018/08/16(木) 17:33:27.71 ID:Z+yvFL8qM.net
>>499
なるほどありがとう

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

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

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

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

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

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

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

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

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

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

510 :デフォルトの名無しさん :2018/08/16(木) 23:22:50.51 ID:IQGCIGud0.net
>>507
laravel 5.6.33 の新規プロジェクト作って grep してみたら、filter_input はヒットしなかったよ。
$_GET やら $_POST、$_SERVER なんかを使ってるコードはたくさんあるが、これが FW 本体なのかは知らないから見てるものが違うかもしれんが。

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

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

511 :デフォルトの名無しさん :2018/08/17(金) 09:37:21.95 ID:D+gu2djOM.net
なんで使ってないんだろうな
さすがに何らかの理由があるはずだよな

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

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

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

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

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

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

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

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

517 :デフォルトの名無しさん :2018/08/18(土) 16:58:29.16 ID:gititOy10.net
>>516
JavaScriptを使わずと言うことは

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

518 :513 :2018/08/18(土) 17:14:55.37 ID:2Bt8PW+v0.net
>>516です

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

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

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

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

521 :513 :2018/08/18(土) 17:38:54.09 ID:2Bt8PW+v0.net
>>516です

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

522 :デフォルトの名無しさん :2018/08/18(土) 18:39:50.05 ID:6yCMBjdI0.net
>>511
$_REQUESTとかってwww-form〜専用だろ。

523 :デフォルトの名無しさん :2018/08/18(土) 19:33:02.59 ID:L6WoALkwM.net
>>516
よくあるフォームで、入力➡確認➡完了 みたいな流れの中で 確認から入力に戻るような話?

524 :513 :2018/08/20(月) 14:51:18.69 ID:/k2xBvnt0.net
>>516です

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

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

525 :デフォルトの名無しさん :2018/08/20(月) 16:35:49.23 ID:aXzcMKFL0.net
>>524
そういう遷移ならもっとシンプルに考えた方がいいんじゃね。
submit ボタンに name を設定しておけば、送信時に押されたボタンが分かるよ。
>>523 のような全部の画面は例えば 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 で埋めておく。
入力画面ではエラーメッセージの表示も行う感じ。

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

527 :513 :2018/08/20(月) 17:48:24.04 ID:/k2xBvnt0.net
>>516です

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

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

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

530 :デフォルトの名無しさん :2018/08/22(水) 05:59:35.69 ID:sXSBMfza0.net
質問投下です。
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を使う事に
なっているようですが、ググってみても、どのように置き換えれば良いのか分かりません。

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

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

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

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

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

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

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

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

535 :デフォルトの名無しさん :2018/08/22(水) 10:16:38.53 ID:mlQDc+9J0.net
>>530
$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個を全角スペースにして書いてるので注意

536 :デフォルトの名無しさん :2018/08/22(水) 10:25:32.15 ID:mlQDc+9J0.net
【補足】
他の人も書いてるけど
たった1行のコードから色々とヤバさが伝わってくる代物なので
他の代替手段を使うことを強くおすすめ

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

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

コードをざっと斜め読みしたけど他にも色々と駄目すぎてどこから手を入れるべきかアドバイスできないレベルで酷い
2005年のコードでもきちんと書いてればPHP7でも大体問題なく動くものだけど
このコードだと他にも色々と問題が出ると思う

537 :デフォルトの名無しさん :2018/08/22(水) 10:32:57.26 ID:mlQDc+9J0.net
>>535訂正
$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
);

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

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

ヤバすぎ

540 :デフォルトの名無しさん :2018/08/22(水) 10:52:29.28 ID:OKO5mG4BM.net
>>535
$del を受ける use が必要じゃね

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

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

542 :デフォルトの名無しさん :2018/08/22(水) 10:58:38.85 ID:XDj/gPFz0.net
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

が, 何れにせよ救いがたいコードで, 管理者しか使えないから問題ないという発想も正直ヤバい
この状態から>>530の質問のレベルで更にツギハギで直してるっていうんだからセキュリティに関しては想像もしたくないというのが正直なところ

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

544 :デフォルトの名無しさん :2018/08/22(水) 11:08:19.17 ID:mlQDc+9J0.net
>>542
かなり昔に対策されたんだな
知らなかったサンクス

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

545 :デフォルトの名無しさん :2018/08/22(水) 11:35:44.27 ID:XDj/gPFz0.net
ついでに正規表現パターンに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
);

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

547 :527 :2018/08/22(水) 12:28:34.49 ID:2cdwFvgEM.net
>>535
手直し、ありがとうございます。
勉強させてもらいます。


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

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

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

549 :デフォルトの名無しさん :2018/08/22(水) 13:39:41.75 ID:mlQDc+9J0.net
>>547
>>535のコードは間違ってるので使うなら>>537>>545

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

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

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

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

552 :デフォルトの名無しさん :2018/08/23(木) 11:42:53.96 ID:4kav5HXR0.net
ttps://blog.ohgaki.net/php-mail-header-injection

553 :デフォルトの名無しさん :2018/08/25(土) 11:28:42.39 ID:9SggU+bE0.net
例外を投げるとき、Exceptionを投げるのは良くないのでしょうか?

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

<?php
function inverse($x) {
if (!$x) {
throw new Exception('ゼロによる除算。');
}
return 1/$x;
}

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

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

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

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

558 :デフォルトの名無しさん :2018/08/25(土) 15:51:20.36 ID:Qb+EA1ap0.net
>>557
詳しく教えてくださりありがとうございます。
勉強になりました。

559 :デフォルトの名無しさん :2018/08/25(土) 17:23:47.40 ID:/TUnCr22a.net
php://input

560 :デフォルトの名無しさん :2018/08/26(日) 18:28:50.81 ID:TIzdp5nG0.net
FILTER_SANITIZE_FULL_SPECIAL_CHARS?
htmlspecialchars?
あばばばば(´・ω・`)

561 :デフォルトの名無しさん :2018/08/27(月) 00:57:59.28 ID:LDnza5oi0.net
前者は使わなくてもいい。
後者は画面に出すときに必須

562 :デフォルトの名無しさん :2018/08/27(月) 15:45:55.66 ID:BWUwoBqV0.net
mail関数で文字化けするのはどういった状況なんだろうか

563 :デフォルトの名無しさん :2018/08/27(月) 15:53:58.45 ID:TsaU1TVW0.net
エンコード関連の設定が間違えているって書いても、
そのくらいは知っているって言われそうだしなあ

564 :デフォルトの名無しさん :2018/08/27(月) 17:28:58.93 ID:BWUwoBqV0.net
PHPを初めて間もないので知らなかったです(´・ω・`)
文字化けが自分で作った環境が原因でおこるのか、
ユーザーの環境によっておこるのか、
それすらも現在進行形で勉強中です。

565 :デフォルトの名無しさん :2018/08/28(火) 09:51:44.23 ID:Bhr6KAhH0.net
今時はメールもutf-8にしちゃう方が良い?
サイズはともかく。

566 :デフォルトの名無しさん :2018/08/28(火) 10:03:40.00 ID:eY+qymJM0.net
JIS だと扱えない文字が結構あって面倒なんだよね。
氏名を埋め込もうとするだけでもすぐ問題が起こる。
個人的には結構保守的なんで極力 JIS にしたいが、utf8 も仕方ないかなと思うこともある。

567 :デフォルトの名無しさん :2018/08/28(火) 12:43:02.68 ID:Bhr6KAhH0.net
>>562
件名が化けてるの?
本文が化けてるの?

568 :559 :2018/08/28(火) 15:49:05.60 ID:hBn2GmOT0.net
>>562
>>564です

>>567さん
どちらも化けてないです。
ただ文字化けする状況がよくわからなかっただけです。
自分の環境を全てutf8に統一すれば化けないですかね(´・ω・`)

569 :デフォルトの名無しさん :2018/08/28(火) 18:24:33.50 ID:Bhr6KAhH0.net
どちらかと言えば、送信したサーバー側にあると思うよ。
ヘッダをMIMEエンコードしてないとか、
本文をJISと宣言しておいてSJISとか良く見る。
作る側が理解してない。

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

あと稀に、ソースからしてそもそも化けてるという
バカが書いたメールもあるw

570 :デフォルトの名無しさん :2018/08/28(火) 18:32:36.85 ID:lp3F9A9k0.net
>>569
たまに磁場消したメール受けとる
解読するのを楽しみにしたりする

571 :デフォルトの名無しさん :2018/08/28(火) 18:32:58.74 ID:lp3F9A9k0.net
字化けした
ごめんw

572 :デフォルトの名無しさん :2018/08/28(火) 20:03:27.33 ID:ZdacH0nd0.net
>>571
も抜け・・・

573 :565 :2018/08/29(水) 16:28:12.93 ID:Fy8w4QmX0.net
>>568です

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

今はmail($to・・・)の$toに自分のメールアドレスをどのようにして入れるか考えてます。
define関数で定義した方が安全?なんでしょうか。
勉強がんばります。

574 :デフォルトの名無しさん :2018/08/29(水) 16:47:55.26 ID:pmPs3x9R0.net
>>573
メンテナンス性を考慮すれば定数で定義しとく方が好ましい
”ハードコーディング”でググるんだ

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

define()にしかできない事をやる時だけdefine()を使う
…というかdefine()にしかできないような定数の定義の仕方は
しない方がいいというか

575 :デフォルトの名無しさん :2018/08/29(水) 17:14:13.88 ID:oFL8fPjK0.net
>>573
confg.phpとかconfig.iniとか作って、
設定値を書きまくるファイル用意するといいよ。
定数名は大文字にしておけば目立つね。

576 :570 :2018/08/29(水) 18:04:53.37 ID:Fy8w4QmX0.net
>>573です

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

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

お二方、アドバイスありがとうございます。
ずっと画面と見つめ合ってたので頭が痛いです。
体調管理に気を付けます。
ありがとうございました。

577 :デフォルトの名無しさん :2018/08/30(木) 19:30:03.21 ID:GwaNatXn0.net
>>573の$toって直書きすると外部から参照されたりするん?
そこらへん うちも勉強不足だわ

578 :デフォルトの名無しさん :2018/08/30(木) 19:32:18.17 ID:Ut/QgXMd0.net
外部からってどういう意味?
宛先見せないと配達できないでしょ?
そういうことじゃなくて?

579 :デフォルトの名無しさん :2018/08/30(木) 19:44:52.34 ID:EWk4rtO80.net
web公開ディレクトリに置かないのが基本なんだよ。
hdocs/index.html
lib/php/config.ini

580 :デフォルトの名無しさん :2018/08/30(木) 20:10:41.63 ID:b1WMdnEwM.net
共用のレンタルサーバーだと、
Permissionを0604にするのもありだな。

最初の0は気にしない。
次の6は自分の読み書き権限
次の0は同居してるユーザーに権限剥奪
最後の4はApacheに読み取り権限

581 :デフォルトの名無しさん :2018/08/30(木) 20:37:32.95 ID:Ut/QgXMd0.net
>>580
釣りかな?
それApacheにかぎらず誰でもオッケーって意味だよ

582 :デフォルトの名無しさん :2018/08/30(木) 20:58:13.62 ID:EWk4rtO80.net
ほとんどの共用レンタルサーバーは、
webユーザーは同一グループに所属するから、
xx0xで引っ掛けて拒否させるんだよ。
最後の4は付けないとApacheが読めない。

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

グループ設計がどうなってるかとか、
PHPの実行ユーザーが誰になるかとか、
事前に確認しないといけないな。
suEXEC、FastCGIなんかで変わってくる場合もあるし。

583 :デフォルトの名無しさん :2018/09/01(土) 18:28:51.43 ID:0yUv0G400.net
exit()
die()
(´・ω・`)?

584 :デフォルトの名無しさん :2018/09/01(土) 18:34:59.89 ID:5sir/CBW0.net
死ねって言われたいのかなあ

585 :デフォルトの名無しさん :2018/09/01(土) 19:17:45.13 ID:/Rwrc1N80.net
>>583
ディエはエラーログに残る

586 :デフォルトの名無しさん :2018/09/02(日) 10:08:19.04 ID:ub6GWDzd0.net
ど素人です
質問させてください
cakephp3のwebroot以下にある.htaccessで、mod_rewriteの括弧外にrewritecondやrewriteruleが書かれているものを人様のサイトで拝見しました
括弧外に置かれても、機能するものなのでしょうか

587 :デフォルトの名無しさん :2018/09/02(日) 10:25:45.60 ID:afimrVjB0.net
<IfModule mod_rewrite.c>
もしかしてこれ?

588 :デフォルトの名無しさん :2018/09/02(日) 13:32:00.09 ID:ub6GWDzd0.net
そうです

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

===================
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>
===================

このようなものなのですが

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

だから書かない方が良い。
ifを書かなければ、モジュールが無効なら即500エラーで設定ミスに気付ける。
モジュールが無効なのにエラーにならず、
設定したつもりでいる方が危ないからね。

590 :デフォルトの名無しさん :2018/09/02(日) 15:42:33.40 ID:NagoJ+s80.net
>>584
怖い(´・ω・`)

>>585
ありがとう

591 :デフォルトの名無しさん :2018/09/02(日) 18:59:05.09 ID:ub6GWDzd0.net
>>589
返答ありがとうございます

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

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

どうもありがとうございます

592 :デフォルトの名無しさん :2018/09/03(月) 09:54:20.75 ID:0wOUtf7+0.net
読み返してたんだけど>>560の前者って使うことないものなの?

593 :デフォルトの名無しさん :2018/09/03(月) 11:36:23.62 ID:Shssq38w0.net
>>590
ネタにマジレスしとくと
dieの発音は「ディエ」じゃなく「ダイ」だし
exitとdieは等価なので、エラーログに残るとかは嘘

exitの方が一般的だとは思うが好きな方を使えばOK
あくまで予想だが、die()はperl言語出身者に配慮して作ったんじゃなかろうか

594 :デフォルトの名無しさん :2018/09/03(月) 12:01:10.60 ID:Nk9MF4uYd.net
height
align
allow
deny

web系に関わってるのにこういう単語の読み方がおかしな人の言う事は疑ってかかった方がいいという経験則

595 :デフォルトの名無しさん :2018/09/03(月) 12:08:27.54 ID:lQhKIzFA0.net
>>593
すまん。perlの関数と勘違いしてた…
PHPにおいてはexitもdieも同じらしい。
dieの引数も標準出力されたw

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

嘘こいてすまん。

596 :デフォルトの名無しさん :2018/09/03(月) 12:11:22.59 ID:lQhKIzFA0.net
>>594
ヘイト
アリグン

デニー

allowを読み違えてる人は見たことない…

あとは、hrefをハーフ、widthをウィドスは稀に。
ウィドスはまだネイティブに近い方かな?

597 :デフォルトの名無しさん :2018/09/03(月) 12:27:19.50 ID:Shssq38w0.net
>>594
ハイト
アライン
アラウ
ディナイ

どれも高校入試の時の発音問題頻出単語(要するに中学レベルの単語)だったような遠い20年以上前の記憶
うんざりする程しつこく教えてくれた当時の英語担任に感謝しないといかん

598 :デフォルトの名無しさん :2018/09/03(月) 12:40:39.44 ID:lQhKIzFA0.net
アラウか…
何かそこだけ妙にネイティブだな。
アローですまん…

599 :デフォルトの名無しさん :2018/09/03(月) 12:41:40.31 ID:wBpew+1c0.net
本来ネイティブの発音に合わせて読むべきなんだろうけど、
アラウやディナイと発音しても、日本人相手だと通じなかったりする

600 :デフォルトの名無しさん :2018/09/03(月) 12:44:28.91 ID:lQhKIzFA0.net
アラウはちょっとなあ…
それ言い出すとonlyはオウンリイだし。
日頃はカタカナ英語でいいです。

601 :デフォルトの名無しさん :2018/09/03(月) 12:55:17.57 ID:Nk9MF4uYd.net
ネタなのかマジなのかわからなくなってきたけど正解はもちろん>>597
allow,denyをアローデニーと読んでいた自称サーバー管理者が設定したウンコみたいなサーバーに泣かされて以来トラウマです
そして今なおallow,denyという単語を目にするという事はそれ即ち、去年末にサポートが終わったApache2.2系をまだ使い続けてるというトラウマの再来になる可能性がががが

602 :デフォルトの名無しさん :2018/09/03(月) 13:42:47.41 ID:Q3fOl+JcM.net
warning はどうよ

603 :デフォルトの名無しさん :2018/09/03(月) 14:06:21.30 ID:Shssq38w0.net
ウォーニング

まぁ会社によって方言みたいなのはあるよね
内心そうじゃないだろ…(ため息)と思いつつ相手に合わせる事も大事

604 :デフォルトの名無しさん :2018/09/03(月) 14:10:12.54 ID:fNzMywLO0.net
今の所全問正解っぽくて安心した

falseをファルスと読む人を見る度に
パルスのファルシのルシがコクーンでパージを思い出す

605 :デフォルトの名無しさん :2018/09/03(月) 14:18:24.08 ID:bh6+crPg0.net
アリグンとかデニーとかいってるならヘイグヒトぐらいにしないと

606 :デフォルトの名無しさん :2018/09/03(月) 14:53:06.39 ID:lQhKIzFA0.net
あんまりこだわると意識高い系とか嫌味を言われそうだし、
まあわかればいいやね…

ここじゃないかもだかど、どっかのPHPスレで
エチョーと書いたらウケたよ。

607 :デフォルトの名無しさん :2018/09/03(月) 14:55:19.36 ID:wBpew+1c0.net
>>606
コーヒー吹くとこだったぞ

608 :デフォルトの名無しさん :2018/09/03(月) 15:27:39.33 ID:/uGmskjCa.net
allowというかau音はアゥからオゥに寄った側に聞こえるからカタカナ英語的にはアロゥはアリかなと思う
arrowと区別したいときはアラゥと言うべきだと思うけど

デニーとかアリグンは流石にねーなw

609 :デフォルトの名無しさん :2018/09/03(月) 16:58:16.51 ID:MppWbPja0.net
ini → イニ? アイエヌアイ?
array → アレイ? アライ?
あと正直str系の関数が読めない
strlen strpos当たりはわかるけど
stripos strrpos strripos
あたり

610 :デフォルトの名無しさん :2018/09/03(月) 17:56:38.19 ID:Shssq38w0.net
array:アレイ

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

かっこよく読みたいなら元の単語を略さずに読めばいいんだろうが
実用的にはアルファベットをそのまま読めばいいじゃなかろうか

611 :デフォルトの名無しさん :2018/09/03(月) 19:06:04.00 ID:w8msLsZZ0.net
if
イフ

then
ゼン?

else
エルス?

true
トゥルー?

false
フォールス?

try
トライ?

throw
スロー?

catch
キャッチ?

612 :デフォルトの名無しさん :2018/09/04(火) 00:34:18.87 ID:3EnQXiZU0.net
すみません、>>586で質問したのですが、
再度質問してよろしいでしょうか

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

.htaccess以外にリダイレクトが起きる原因として考えられるものがあれば
教えていただきたくお願い申し上げます
なお、サーバはapache2.4.10、OSはDebian8.0です

613 :デフォルトの名無しさん :2018/09/04(火) 11:43:27.54 ID:2slzjYMb0.net
routes.phpとかは?
アプリのリダイレクトなのか、
apacheのリダイレクトなのか切り分けていくと良いのでは。

614 :デフォルトの名無しさん :2018/09/04(火) 21:34:32.07 ID:8BTVVQRQ0.net
include('/path/file.txt');
include('http://www.example.com/path/file.txt');
って何か違いはありますか?

615 :デフォルトの名無しさん :2018/09/04(火) 22:55:22.87 ID:JkSql3w10.net
>include('/path/file.txt');

/ から始まっているから、何かからの絶対パスかな?

プロジェクトルートか、公開サイトのルートからの絶対パスかな?

616 :デフォルトの名無しさん :2018/09/04(火) 23:04:14.00 ID:2slzjYMb0.net
上のは言ってみればfile://になるんじゃないの? 違う?

617 :デフォルトの名無しさん :2018/09/05(水) 16:46:47.73 ID:dwWFM3zt0.net
公式のmail()とmb_send_mail()のページを見ていたのですが、
mail()のsubjectは表題、messageはメッセージ、
mb_send_mail()のsubjectは件名、messageは本文となっていました。
これは何かが違うということでしょうか。
くだらない質問と思いますが、よろしくお願いします。

618 :デフォルトの名無しさん :2018/09/05(水) 17:13:31.91 ID:eC5bTWUj0.net
全く同じ意味ですが異なります
この事に気をつけて厳密に取捨選択し、
どっちでもいいから適当に使いましょう

619 :デフォルトの名無しさん :2018/09/05(水) 17:23:40.98 ID:HJ2kcLma0.net
mailはエンコードしてくれないから自分でしてから呼び出す。
mbはエンコードしてくれる。

というか、ググれよ!

620 :デフォルトの名無しさん :2018/09/05(水) 17:28:21.76 ID:+CD9GwZX0.net
どっちの関数も直接使うには勝手が悪いので、さっさと基礎理解してライブラリ使うようにしましょう。

621 :デフォルトの名無しさん :2018/09/05(水) 17:46:40.68 ID:dwWFM3zt0.net
アドバイスありがとうございました。

622 :デフォルトの名無しさん :2018/09/06(木) 17:01:57.65 ID:kzkzi/Yy0.net
<form method="get" でsubmitした場合、
$_GETを使うのが普通だと思うのですが
$_POSTでも値が取れるのですが、そういうもんですか?

623 :デフォルトの名無しさん :2018/09/06(木) 17:39:08.61 ID:bmlthp5L0.net
普通だけど普通じゃなくなって来たから、filter_input使う。
このスレの上の方にも出てる。

624 :デフォルトの名無しさん :2018/09/06(木) 19:14:57.47 ID:xdo6cDUj0.net
>>622
それちゃんとGETメソッドで送ってる?
GETとPOSTでは受け渡し方法が違うから
ちゃんとやっていればPOSTでは受けとれないはず

625 :デフォルトの名無しさん :2018/09/06(木) 20:05:38.46 ID:kzkzi/Yy0.net
>>624
WordPressなんですが、
form タグを埋め込んでbuttonクリックでsubmitしているので間違は無いと思います。
でも何故か$_GETでも$_POSTも値が取れるんです。

626 :デフォルトの名無しさん :2018/09/06(木) 20:59:34.70 ID:bmlthp5L0.net
GETとPOSTと両方送ってるとかじゃないの…w

627 :デフォルトの名無しさん :2018/09/06(木) 21:15:35.52 ID:64ZwjQvb0.net
methodをgetでサブミットしてるなら
HTTPプロトコルではcontent bodyの部分は空になる
そういう仕様だからな
つまり通常postで取得できる部分はからっぽ

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

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

質問してるヤツは

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

というのが質問の主旨と理解した
低学歴知恵遅れがその質問をどう解釈したかは知らない

628 :デフォルトの名無しさん :2018/09/06(木) 21:39:08.51 ID:xdo6cDUj0.net
>>622
サーバーのログって見ることは出来ない?
リクエストがどういうメソッドでやり取りされたか分かると思うけど

629 :デフォルトの名無しさん :2018/09/06(木) 22:24:24.23 ID:bmlthp5L0.net
>>627
冗談にムキになって… 低学歴知恵遅れとかw
主旨についてはわかってて書いてんの。
それが5chというところだから。

630 :デフォルトの名無しさん :2018/09/06(木) 22:27:25.22 ID:64ZwjQvb0.net
はい低学歴知恵遅れ図星
ごまかそうとしても
もうバレてるからな

分かりやすいわ。。。

631 :デフォルトの名無しさん :2018/09/06(木) 22:52:05.75 ID:bmlthp5L0.net
正解です。でも知恵遅れはないよ。

632 :デフォルトの名無しさん :2018/09/06(木) 22:55:48.48 ID:xdo6cDUj0.net
冗談は冗談が通じる相手にしないと

この質問者はPOSTとGETについて理解できていないんだから
冗談だとは受けとってないと思うぞ

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

やり方を切り分けて絞り込んでいかないといけない。

634 :デフォルトの名無しさん :2018/09/07(金) 09:44:56.47 ID:9ghtkfrV0.net
PHPを始めたのですが分からないことがあるので教えてください。

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

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

よろしくお願いします。

635 :デフォルトの名無しさん :2018/09/07(金) 10:03:27.93 ID:0+aYiLfb0.net
>>634
この例文の中では特に意味はない。post したページに戻る際、エラーをまとめて送る時に使う。

636 :631 :2018/09/07(金) 10:16:38.86 ID:9ghtkfrV0.net
>>635
このような使い方もあるんですね。
教えてくださり、ありがとうございました。

637 :デフォルトの名無しさん :2018/09/09(日) 16:54:11.51 ID:kcIkPUJb0.net
HTMLとPHPを使ってメールを送信するため、次のように書いたのですが、良いか悪いか判断ができません。
右も左も分からないため、どのようなことでも構いませんのでアドバイスをください。
メールは【入力】→【確認】→【送信】の流れで送信されます。
どうか、よろしくお願いします。

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



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



【thanks.php】
https://ideone.com/R2mR1b

638 :デフォルトの名無しさん :2018/09/10(月) 09:10:57.34 ID:LEZi3nV80.net
form.php
confirm.php
send.php
こうすると良いと思う

639 :634 :2018/09/10(月) 14:59:46.15 ID:Jh3v7l2E0.net
>>638
アドバイスありがとうございます。
辞書を引いたら納得しました。
さっそく反映したいと思います。

640 :デフォルトの名無しさん :2018/09/10(月) 20:03:31.22 ID:LEZi3nV80.net
ネタにマジレスしてるんで、仕方ないからチラ見してみた。
このスレのダメな例の集大成みたいだな。

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

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

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

あとは動いてるならいいんじゃない?

641 :デフォルトの名無しさん :2018/09/10(月) 21:25:32.24 ID:AQjUY5xrM.net
勉強のためならいいけどガチでサービスに導入とかはしない方がいいと思うよ
既存のサービス使った方が絶対に安全

642 :デフォルトの名無しさん :2018/09/11(火) 12:49:51.36 ID:swAVBRLl0.net
class内のプロパティに関数って指定できないでしょうか?

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

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

というエラーが出るので無理だと思っているのですが、
できる方法があれば教えてください。

643 :デフォルトの名無しさん :2018/09/11(火) 13:07:18.10 ID:B2tEflKb0.net
やり方はいろいろあるが、一般的にはコンストラクタの中で代入するんじゃないかな

644 :デフォルトの名無しさん :2018/09/11(火) 13:07:35.88 ID:7DNsPvsqM.net
やり方はいろいろあるが、一般的にはコンストラクタの中で代入するんじゃないかな

645 :634 :2018/09/11(火) 17:53:48.50 ID:sA/7deNB0.net
>>640
アドバイスありがとうございます。
次を課題に学習を進めたいと思います。
・HTMLとPHPで値の長さに制限を掛ける
・filter_inputの使い方を理解する

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

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

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

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

646 :デフォルトの名無しさん :2018/09/11(火) 19:04:42.02 ID:Of5zYKw20.net
>>645
hiddenよりはセッションを使ってください。
なんか勘違いしてそうだから。
https://teratail.com/questions/63786

647 :デフォルトの名無しさん :2018/09/11(火) 20:24:28.80 ID:NY6FXi0j0.net
このくらいのフォームなら hidden の方がいいんじゃね。
セッションでなんかメリットある?

648 :デフォルトの名無しさん :2018/09/11(火) 21:33:19.08 ID:Of5zYKw20.net
使い方を間違えてるから正した方が良いと思っただけ

649 :634 :2018/09/12(水) 08:16:38.34 ID:uWMSldyR0.net
>>646
参考URLありがとうございます。
hiddenとセッションの使い分けを勉強します。

650 :デフォルトの名無しさん :2018/09/12(水) 08:31:17.86 ID:t1WfAWi+0.net
>>649
う、うん。
でも一番はそこじゃないんだな。
スーパーグローバル変数を書き換えるべきではないのに、
そらをしてしまっているところね。
そもそもスーパーグローバルを使わないためのfilter_inputだから。
最初は誰でもそんなもんだから頑張ってね。

651 :634 :2018/09/12(水) 08:36:21.52 ID:uWMSldyR0.net
>>650
さっそく勘違いしてしまいました。
アドバイスありがとうございます。

652 :デフォルトの名無しさん :2018/09/12(水) 11:26:01.33 ID:/jhmkHwQ0.net
どうしてもわからないので質問お願いします。

私は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」はダウンロードしました。

653 :デフォルトの名無しさん :2018/09/12(水) 12:09:08.51 ID:t1WfAWi+0.net
そのURLを見たけど、tarファイルを展開してLinuxでコンパイルしてるよね。
この時点でWindowsはまったく該当しないので見てもわかるわけない。
Windows用のコンパイル済みバイナリをインストールするのが正解かと。
それか、そのファイルをWindowsで自前コンパイルするか。

654 :デフォルトの名無しさん :2018/09/12(水) 12:24:56.89 ID:/jhmkHwQ0.net
ありがとうございます。

いくつか調べてlibpuzzleがC言語で作られているはわかりました。
Windowsだとsoファイルではなくdllファイルで動かすみたいだから
libpuzzle.cをコンパイルしてdllにする、という感じなのでしょうか?

655 :デフォルトの名無しさん :2018/09/12(水) 12:36:07.34 ID:t1WfAWi+0.net
はい。恐らく…

656 :デフォルトの名無しさん :2018/09/12(水) 14:11:08.65 ID:/jhmkHwQ0.net
C言語は…、ちょっというかさっぱりわからないですね…。

GitHubでlibpuzzleの解凍されたフォルダが有りました。

https://github.com/jedisct1/libpuzzle

もし参考になれば

657 :デフォルトの名無しさん :2018/09/12(水) 16:38:39.22 ID:bjh9HqnE0.net
>>650
そこで言ってるスーパーグローバルの書き換えって $_SESSION のこと?

658 :デフォルトの名無しさん :2018/09/12(水) 19:23:24.37 ID:t1WfAWi+0.net
>>657
そう。
言われてハッとしたんだが、もしかして俺すげー嘘ついてる?
フレームワーク無しなら$_SESSIONに代入せざるを得ないか?
何かもう忘れたわ。

適当な記憶でたまに嘘ぶっこくから少し自重する。

659 :デフォルトの名無しさん :2018/09/12(水) 19:28:11.72 ID:WDc70fCa0.net
面白い議論だと思ってたんだけど
できれば続けてくださいな

セッションは使用禁止にすべきかどうかまで

660 :デフォルトの名無しさん :2018/09/12(水) 21:31:55.13 ID:bjh9HqnE0.net
>>658
うん、$_SESSION はこれを直接触る以外のアクセス方法は無いと思う。
そしてセッションのクリアとか考えるのも面倒なので、今回のケースだと hidden の方が手軽だと思う。

661 :デフォルトの名無しさん :2018/09/12(水) 23:14:04.91 ID:/jhmkHwQ0.net
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();

662 :デフォルトの名無しさん :2018/09/12(水) 23:14:32.81 ID:/jhmkHwQ0.net
参考にしたURLは以下の通りです。
https://tech.unifa-e.com/entry/2017/11/27/111546
https://github.com/jenssegers/imagehash

663 :デフォルトの名無しさん :2018/09/13(木) 00:39:50.34 ID:Mmakf2Wk0.net
ちゃんとautoload.phpをrequireしてるか?

664 :デフォルトの名無しさん :2018/09/13(木) 07:41:47.23 ID:WElsz8IU0.net
>>651
>>660だって! 本当に申し訳ないです。

665 :デフォルトの名無しさん :2018/09/13(木) 08:13:46.95 ID:1dHQYyj40.net
投稿フォームは、確認画面なくすと session 使う必要がなくて、スマートな実装になるよ。
そもそも確認が必要な内容かどうか検討してみると良いです。
確認が必須なら、モーダルで一旦表示させて投稿させると UX も向上して happy。
ただ、画面はちょっとややこしくなるけどねぇ。。。

666 :デフォルトの名無しさん :2018/09/13(木) 09:25:37.97 ID:Rrxby3/D0.net
>>663
何それ…
やってない
帰ったらやってみる

667 :デフォルトの名無しさん :2018/09/13(木) 17:07:19.50 ID:yxnhKk7t0.net
>>637のfilter_inputって使い方間違ってるん?(´・ω・`)

668 :デフォルトの名無しさん :2018/09/13(木) 18:13:28.78 ID:WElsz8IU0.net
美しさはともかく、間違ってはいない。
勘違いしていたのは俺…
申し訳ないです。

669 :デフォルトの名無しさん :2018/09/14(金) 11:13:27.37 ID:LYVyvVvXd.net
提唱者が逃げ出したから、
こういう時にどう使ったら良いか
教えてくれない

670 :デフォルトの名無しさん :2018/09/15(土) 11:16:20.77 ID:h4tGgfju0.net
ユーザー入力を画面上に表示する場合、どんな時でもhtmlspecialchars関数を使った方がいいんですか !?

671 :デフォルトの名無しさん :2018/09/15(土) 11:29:57.48 ID:4K9/kzuG0.net
>>670
個人的にはここの説明が納得しやすかった
https://qiita.com/mpyw/items/19e6fed835ccdbcb0d6d

画面表示で Content-Type: text/plain の時は、当然だけど必要無い。
text/html な中で、text/plain はちょっと思いつかなかった。
だれかフォローよろしくw

672 :デフォルトの名無しさん :2018/09/16(日) 09:00:18.99 ID:yeSA5Nar0.net
考えられるパターンとしては
1.入力値の検証はせずそのまま出力する
2.入力値の検証はせずhtmlspecialcharsを使う
3.入力値の検証→問題はないのでそのまま出力
4.入力値の検証→問題なのでhtmlspecialcharsを使う
5.入力値の検証→問題はないがhtmlspecialcharsを使う
6.入力値を出力前に無害化してそのまま出力

1は当然やっちゃだめ
6は元の入力値と異なる可能性が生まれるので使うなら重要でない箇所限定(非推奨)
5は冗長だが5が一番おすすめ

673 :デフォルトの名無しさん :2018/09/16(日) 19:43:02.43 ID:Fs79WbqO0.net
phpの質問じゃないかもしれないんだけど
URLから指定のディレクトリにアクセスした時に
ファイル名が何だろうと指定のファイルを参照させることって出来ますか?

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

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

そんなこと可能でしょうか?

674 :デフォルトの名無しさん :2018/09/16(日) 19:57:17.91 ID:Fs79WbqO0.net
要するに
hoge.com/rand/aaa.jpg
を見てるつもりで
hoge.com/rand/index.php?q=aaa.jpg
で内部的に処理して返したいってことです

675 :デフォルトの名無しさん :2018/09/16(日) 20:17:40.26 ID:xrMzIoGe0.net
mod_rewrite使うとか

676 :デフォルトの名無しさん :2018/09/16(日) 20:28:28.45 ID:Lgam3puB0.net
file(”aaa.jpg”)
で表示できたような

677 :デフォルトの名無しさん :2018/09/16(日) 20:31:03.90 ID:Lgam3puB0.net
print file($_GET[q])
だったかな
忘れた

678 :デフォルトの名無しさん :2018/09/17(月) 01:27:02.97 ID:aY8QKU/10.net
>>674
mod_rewriteを使って、

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

こんな感じでリクエストを書き直す?
うまく行くかちょっと自信ない

679 :デフォルトの名無しさん :2018/09/17(月) 11:11:17.62 ID:B1zUo4Ps0.net
PHPの処理はHTMLの外で行い、結果だけをHTMLの中に表示する方法が良いんですか?(´・ω・`)

680 :デフォルトの名無しさん :2018/09/17(月) 12:21:19.45 ID:hbuTlOjm0.net
>>679
その方がいいと思うよ。
HTMLを修正する理由と処理を修正する理由は大抵違うから、それぞれ分けておくと都合がいいと思う。
分業の面でもいいし、処理の見通しも良くなる。

ただそう作るなら、表示(見た目)のためのコードは処理側から排除するのがいいと思う。
エスケープはもちろん、例えばマイナスの数値を表示するのに▲を付ける仕様だったとして、それを行うコードはHTML側に実装する感じ。
処理側で▲付きの文字列を作るようなことするとカオスになっていく。

681 :デフォルトの名無しさん :2018/09/17(月) 12:29:30.95 ID:hbuTlOjm0.net
>>679
そしてPHPはHTMLを分けるというのが非常に簡単にできるから、やらなくちゃ損くらいに思った方がいい。

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

include 'gamen.html';
?>

みたいに include するだけで表示されるんだから。
実際には gamen.html にはわずかなPHPコードも入る純粋な HTML ではないから拡張子を .html とするよりは、.php なり .tpl(テンプレート)なりそれっぽいのにしておくといいと思う。
案外 .php にしておくと、ブラウザからそれを直接見てもPHPのコードは直接見えないから手軽な安全策かも。

682 :デフォルトの名無しさん :2018/09/17(月) 15:38:02.41 ID:B1zUo4Ps0.net
>>680
>>681
分けた方が管理しやすいですか(゜-゜)
ありがとうございました。

683 :デフォルトの名無しさん :2018/09/18(火) 18:36:46.23 ID:LS9+DTCza.net
今回乗っ取りが可能な脆弱性が発見されましたが、その脆弱性を試したいです。
どうすればいいのでしょうか?

684 :デフォルトの名無しさん :2018/09/19(水) 12:22:09.46 ID:hsm6EpoV0.net
Bug #76582が原因らしいからバグレポート読んでみたら?
再現コードも書いてるよ
まぁ単にXSSが可能だったってだけでそれ以上でもそれ以下でもないが

685 :デフォルトの名無しさん :2018/09/19(水) 20:12:04.29 ID:2g+A18ll0.net
laravelを始めようと思うのですがrailsと比べて何が良くて何が悪いのか聞きたいです
僕自身railsはチュートリアルやったくらいしか知りません

686 :デフォルトの名無しさん :2018/09/20(木) 08:52:56.46 ID:2cUVSblD0.net
set_file_buffer (stream_set_write_buffer)が動作しないということが2003年ごろから言われているみたいですが
今さっき検証してみたところやはり-1が返ってきて動作していないようです
何故こんな関数が未だに存在しているのか、わかる方よろしくお願いします
http://jp2.php.net/stream_set_write_buffer

687 :デフォルトの名無しさん :2018/09/21(金) 10:36:19.22 ID:0nwAv71v0.net
POSTされた値を最初に変数に代入してから検証するのと、
検証してから変数に代入するのとでは安全性に違いはありますか?

変な質問で申し訳ない(´・ω・`)

688 :デフォルトの名無しさん :2018/09/21(金) 12:16:47.46 ID:CXW/z+bx0.net
一概には言えないが、値の検証はその値を使う直前にやるのが一番良い
検証の後に不用意に値が書き換わってたら検証の意味がない

689 :デフォルトの名無しさん :2018/09/21(金) 16:41:58.26 ID:0nwAv71v0.net
>>688
いただいたレスを参考に考えた結果、値を使う直前に検証することにしました。
アドバイスありがとうございました。

690 :デフォルトの名無しさん :2018/09/21(金) 18:17:31.43 ID:2dxDcAKa0.net
>>661です。
お返事遅くなってしまい申し訳ないです。

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

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

691 :デフォルトの名無しさん :2018/09/25(火) 17:01:58.96 ID:CUEvMMrT0.net
if($A === $B){
 $A;
}else{
 $B;
}



if($A !== $B){
 $B;
}else{
 $A;
}

って どっちが良いですか !?
って聞かれても俺にはわかんねーよ(´・ω・`)
というグチ

692 :デフォルトの名無しさん :2018/09/25(火) 17:46:06.44 ID:NyMQ4nya0.net
名前がつかない例外を受け取ることは難しいね

693 :デフォルトの名無しさん :2018/09/25(火) 20:15:13.42 ID:yenf1piQM.net
>>691
!== より === の方がタイプする労力が小さいから前者

694 :デフォルトの名無しさん :2018/09/25(火) 20:25:06.12 ID:YkAMOZHs0.net
結果は同じでもどちらに主軸をおくかによってニュアンスが変わる
例えばコンサート会場でチケットを持っている人は通し持ってない人は通さない場合

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

$A===$Bを比較したいのか$A!==$Bを比較したいのか
自分が何をやりたいのかどこに主軸をおきたいのか考えれば自ずと答えは出るでしょう

695 :デフォルトの名無しさん :2018/09/26(水) 01:33:34.79 ID:QPkmxTlR0.net
thenが通常処理、elseが異常(エラー)処理ってイメージ
通常処理がn種類(複数)あるって感じな場合は、二択だったとしてもswitchにしてる

696 :デフォルトの名無しさん :2018/09/26(水) 14:54:46.71 ID:eJD5a6UK0.net
$var = getA();
if (!$var) {
 $var = getB();
}
if (!$var) {
 $var = getC();
}
if (!$var) {
 $var = getD();
}
if (!$var) {
 return false;
}

return $var;

こういうコードをもっとスッキリさせる書き方ってないですか?

697 :デフォルトの名無しさん :2018/09/26(水) 15:24:24.44 ID:aA/f+lgF0.net
orを使うといいかも

698 :デフォルトの名無しさん :2018/09/26(水) 18:40:59.41 ID:we9WvBjb0.net
get($ident)的な関数作って
$var=false;で初期化して
["A", "B", "C", "D"]をぶん回して見つかれば$var上書きしてbreak

699 :デフォルトの名無しさん :2018/09/26(水) 19:38:26.60 ID:Rr41G2Hg0.net
短絡評価でbooleanが返ってくる言語だからなぁ

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

でnullが返ってくると順次後ろに落ちていくようには出来る
falseが返ってくると打ち切られて結果もfalseになる

700 :デフォルトの名無しさん :2018/09/26(水) 23:01:39.30 ID:eJD5a6UK0.net
みなさんレスありがとうございます
実際はもっとメソッド名が長く、引数が複数あり、一つ一つが若干重い処理なので
現状が一番スマートのような気がしてきました

701 :デフォルトの名無しさん :2018/09/27(木) 00:21:34.56 ID:PI1koV5V0.net
Cなら関数ポインタを配列にツッコんでぶん回す
危険かどうかは触れない

702 :デフォルトの名無しさん :2018/09/27(木) 10:36:27.42 ID:kbPnGc7o0.net
メソッドに応じて引数も可変なら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;
}

703 :デフォルトの名無しさん :2018/09/27(木) 10:42:54.79 ID:kbPnGc7o0.net
行数的には>>696と大差ないが
$methodArrのところを定数にでもしておけば
動作に変更が入ってもそこの定義を変えるだけで済むわな

さすがに>>696はないわ
見ただけで頭がクラクラするw

704 :デフォルトの名無しさん :2018/09/27(木) 10:50:13.05 ID:kbPnGc7o0.net
>>691みたいに

if(){

}else{

}

と詰めて書く人ってPSRなんか読んだ事ないんだろうな

if () {

} else {

}

と書きなさい

705 :デフォルトの名無しさん :2018/09/27(木) 12:20:21.79 ID:mllxUQ0M0.net
>>703
>>696 の方がシンプルでスッキリしてて速くて分かりやすいコードだと思うよ。
>>702 の利点てなに?

706 :デフォルトの名無しさん :2018/09/27(木) 13:37:29.99 ID:7B8reSZgd.net
メソッドや引数が減ったり増えたり順序が変わったりした時に
699なら”コード”を触らず”定義”の修正だけで済むが
693だと”コード自体”を修正する必要があるな

707 :デフォルトの名無しさん :2018/09/27(木) 13:54:32.47 ID:PI1koV5V0.net
call_user_func_arrayなんてあったんだね。
じゃあこれ一択だわ。
理由は>706

708 :デフォルトの名無しさん :2018/09/27(木) 13:55:31.21 ID:mllxUQ0M0.net
>>706
hoge が呼び出す関数達の引数は hoge に渡された引数だったり別の変数だったりを含むんじゃないの。
それを事前に定義するって?
仮に定義できたとして、そんな内部のロジックに直結した定義を修正するのはコードを修正するのに加えてそんなに気安いことなの?

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

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

とでもする方がまだマシなんじゃね。

709 :デフォルトの名無しさん :2018/09/27(木) 14:00:23.22 ID:kbPnGc7o0.net
>>706
>>703に同じ事書いたんだけどなw

>>707
だよね

>>708
頭固いねw
理解できないならもういいわw

710 :デフォルトの名無しさん :2018/09/27(木) 14:04:14.99 ID:mllxUQ0M0.net
>>709
定義と称してロジックを別の形で書いてるなら、ロジックをそのまま書けばいいだろう?
んで引数に変数はどうやって渡すの?

711 :デフォルトの名無しさん :2018/09/27(木) 14:06:18.58 ID:PI1koV5V0.net
これは絶対にこうだって話でも何でもなく、おおよそこれまでの経験に基づく好みの方がデカいと思うけど。
>>696の実際のコードや運用保守まで知り得ないから、絶対こうだと第三者が結論づけるのはナンセンスだと思う。

自分は実際にこのようなケース(Cで)楽にメンテできた実績があるからこっちを選ぶけど、
こういう方法もあるよってディスカッションならどんどんやればいい。

712 :デフォルトの名無しさん :2018/09/27(木) 14:09:57.57 ID:7B8reSZgd.net
今更include_onceなんかを使ってるしむしろ693より悪化してるという
699みたいに動作定義を配列変数にしておけばその中に更に変数やメソッドの返り値を持たせることだってできるだろうに

713 :デフォルトの名無しさん :2018/09/27(木) 14:10:07.99 ID:mllxUQ0M0.net
>>711
うん、方法としては知っていていいものだからどんどん上げればいいと思うが、>>703 この言い草だからな。

714 :デフォルトの名無しさん :2018/09/27(木) 14:12:14.74 ID:mllxUQ0M0.net
>>712
その変数やメソッドの返り値を定義した具体例を挙げてみてよ。

715 :デフォルトの名無しさん :2018/09/27(木) 14:15:44.50 ID:dO3eQ5uW0.net
>>713
はたから見たらお前さんも同じようなもんだし喧嘩腰なのはむしろお前さんの方に見えるが

716 :デフォルトの名無しさん :2018/09/27(木) 14:28:22.94 ID:mllxUQ0M0.net
>>715
>>702 は $methodArr が hoge のスコープに居るからパラメタに変数を取ってもシンプルに定義できるけど、それを定義として別ファイルに浮かせるという話について、どうやって?と聞いてるだけだぞ。
おまえは具体的な実装イメージ湧いてる?

717 :デフォルトの名無しさん :2018/09/28(金) 10:46:28.24 ID:Lkb4ZCCn0.net
if ( ( string ) filter_input ( INPUT_POST , 'hoge' ) === '' ) { ・・・ }
↑だと入力欄が空の時に〜となりますが、
半角・全角のスペースが1つだけ入力されたの時も含めたい場合は どのように書くのが良いですか?
どなたか ご教授ください(´・ω・`)

718 :デフォルトの名無しさん :2018/09/28(金) 10:48:54.31 ID:h3Rmmj6P0.net
>>717
filter_input のマニュアル見てみ。

719 :デフォルトの名無しさん :2018/09/28(金) 14:07:08.20 ID:c+sKNdIa0.net
>>717
本当に半角スペースと全角スペースだけでいいの?
タブ"\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}]++ みたいに

720 :デフォルトの名無しさん :2018/09/28(金) 14:08:24.39 ID:c+sKNdIa0.net
で、更に言えばさw
'あいうえお'の前後に空白文字が1000個あるのはOKなの?って話にもなってくるんで
ちょいと考え方と変えて

$hoge = preg_replace('/\A\s++|\s++\z/u', '', $hoge);
こんな感じで先に文字列の前後の空白文字を取り除いてから

if ($hoge === '') { }
とするやり方なんかもあるな

721 :デフォルトの名無しさん :2018/09/28(金) 14:17:49.83 ID:KTNzW9VA0.net
preg_match('/\A\s*+\z/u', $hoge) じゃない理由は何かあるのん

722 :デフォルトの名無しさん :2018/09/28(金) 14:29:52.16 ID:c+sKNdIa0.net
>>721
空の時点で評価して正規表現に通さない方がいいから

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

あと+じゃなく++と書いてる理由はReDoSでググればいいんじゃない?
Stack Exchange(違ったかもw)が
++じゃなく+使ってたせいでサービスダウンしたのはわりと有名

723 :デフォルトの名無しさん :2018/09/28(金) 15:56:20.55 ID:Lkb4ZCCn0.net
>>718
アドバイスありがとうございます。
filter_inputのマニュアルを確認しましたが、自分では解決できませんでした。
引き続き学習を続けます。

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

お二方、ありがとうございました。

724 :デフォルトの名無しさん :2018/09/28(金) 16:31:29.64 ID:h3Rmmj6P0.net
>>723
filter として FILTER_VALIDATE_REGEXP つまり正規表現が使える。
FILTER_CALLBACK つまり、ユーザー定義の関数をコールしてデータをフィルタリングしても良い。

725 :デフォルトの名無しさん :2018/09/29(土) 10:56:37.08 ID:6BMpRid40.net
if('aaa'==' aaa')//true
となることを発見したんですが、前方の空白は無視されるんですか?
これは正しい使い方でいいのですか?
よろしくお願いします

726 :720 :2018/09/29(土) 17:12:36.46 ID:rR859Rl80.net
>>723です

>>724さん
詳しく教えてくださり、ありがとうございます。
いただいたアドバイスを生かせるよう精進します。

727 :デフォルトの名無しさん :2018/09/29(土) 18:16:41.98 ID:DN2c19jF0.net
>>725
正しくないし、そうもなりません。
https://www.ideone.com/PaWqhJ

728 :デフォルトの名無しさん :2018/09/30(日) 08:27:28.94 ID:KcrMzjy/0.net
>>727
すみません、間違えました
アルファベットaaaじゃなくて、数字1234でした
var_dump('1234'==' 1234');//bool(true)

729 :デフォルトの名無しさん :2018/09/30(日) 13:45:51.83 ID:Cu2FNSd00.net
メール送信の際に確認と検証目的で画面上に表示させる時、気をつけるべきことって どのくらいあるものなのだろうか(´・ω・`)
htmlspecialchars() ? 未入力の確認 ? (´ρ`)

730 :デフォルトの名無しさん :2018/09/30(日) 18:23:11.88 ID:+yuU+UfL0.net
>>729
単に表示するだけならそのくらいだろうけど、チェックも含むならメールのエンコーディングで使えない文字が含まれてないかとかかな。

731 :デフォルトの名無しさん :2018/09/30(日) 18:40:30.48 ID:0JTA57Qc0.net
>>728
http://php.net/manual/ja/language.operators.comparison.php
>整数値を文字列と比較したり、比較に数値形式の文字が含まれる場合は、文字列が 数値に変換され、 数値としての比較を行います。

要は文字列'1234'が数値形式(int型)なので↓のように比較される。
(int)'1234' == (int)' 1234'

> === あるいは !== による比較では型変換は発生しません。 この場合は値だけでなく型も比較します。
なのでこういう自動キャストが困るのであれば===で比較すること。

732 :デフォルトの名無しさん :2018/10/01(月) 01:43:36.31 ID:4WHq1Bue0.net
>>731
ありがとうございました

733 :デフォルトの名無しさん :2018/10/01(月) 15:22:45.32 ID:EoUwSVMY0.net
すまない。
微妙にスレチなのだが助けてほしい。

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

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

移行方法をご存知の方いらっしゃいましたらお教えください。

734 :デフォルトの名無しさん :2018/10/01(月) 16:08:39.48 ID:dk4eIPju0.net
・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)
どっちが危険だと思う?

735 :デフォルトの名無しさん :2018/10/01(月) 18:58:30.27 ID:Fhb8wAZ60.net
>>734
そんな汚いコード、読むまでもなく危険。

736 :デフォルトの名無しさん :2018/10/01(月) 21:19:33.56 ID:uTHNCD5Z0.net
>>733
xamppのどこかにログ出力されてるかは知らないけど、
まずエラーログを見ないことには。
windowsのイベントビューアとかにもなんか書いてる可能性がある。

737 :デフォルトの名無しさん :2018/10/01(月) 23:30:37.04 ID:EoUwSVMY0.net
>>736

#1932 - Table 'rssurl.imglist' doesn't exist in engine
(訳)#1932 - テーブル 'rssurl.imglist'はエンジンに存在しません

というエラーが出ます。
phpMyAdminのデータベースのページにはrssurlがあるのですが、
テーブルのimglistをクリックすると上記のエラーが出ます。

「ibdata1」「ib_logfile0」「ib_logfile1」を書き直せばいいというとこまではわかったのですが、
やり方までは分かりませんでした。
古いファイルもdataファイル内のものしかありません。

738 :デフォルトの名無しさん :2018/10/02(火) 15:27:03.69 ID:F0vZUT3n0.net
>>734
前者だな
理由は↓が語ってくれるだろう

739 :デフォルトの名無しさん :2018/10/02(火) 15:44:49.78 ID:ZToeE2jSM.net
ワッチョイ 9fd0-ZVm4
そろそろ金払って誰かに個人レッスンしてもらいなさい

740 :デフォルトの名無しさん :2018/10/02(火) 17:55:01.30 ID:nFqAwCYR0.net
>>737
もうそこまで来たらバックアップ使って一から復旧した方が速い
まさかバックアップ取ってないとかないと思うが、もしそうなら諦めロン
次からは定期的に数世代分はバックアップ取るようにしなよ

741 :デフォルトの名無しさん :2018/10/02(火) 22:16:36.49 ID:nd3RRH6B0.net
>>740
FRMファイルとIBDファイルは残っています。
これらのファイルから復元はできないでしょうか?

742 :デフォルトの名無しさん :2018/10/03(水) 10:55:37.47 ID:0581z6FqM.net
>>739
ここの方々の方が信頼できるから仕方ないです(´・ω・`)
いつも教えてくれて ありがとうございます。

743 :デフォルトの名無しさん :2018/10/03(水) 11:42:25.53 ID:GHy9f6hT0.net
MYSQLが吹っ飛んだ でググるといいかも

744 :デフォルトの名無しさん :2018/10/03(水) 13:58:24.75 ID:2El7vfsT0.net
>>741
それが壊れる前のファイルなら単純に差し替えれば動くだろう
バックアップあるならそこから引っ張ってくればいい
それが壊れたあとのファイルならそのファイル自体が壊れてるのだからあったところで意味がない

745 :デフォルトの名無しさん :2018/10/03(水) 21:31:15.79 ID:XKY8vr/j0.net
>>743
ありがとうございます。
頑張ってみます。

>>744
ファイルは壊れていないようなので
このまま使ってみようと思います。

746 :デフォルトの名無しさん :2018/10/03(水) 22:33:44.05 ID:bSsx2t9M0.net
>>739
横から失礼、個人レッスンってどこで頼むのがいい?

テックアカデミーや侍でもできるのか?とか、
クラウドワークスやココナラで単発でお願いするのがいいかと迷っている

747 :デフォルトの名無しさん :2018/10/09(火) 19:35:33.43 ID:DO0V6smF0.net
会社の先輩から受け継いだコードに
ini_set("allow_url_fopen", 1);
って有るのですが、何ですか?
PHP初めて三日目なので何も分かりません。

748 :デフォルトの名無しさん :2018/10/09(火) 21:29:54.26 ID:gfRhaM0q0.net
文字通り

749 :デフォルトの名無しさん :2018/10/10(水) 19:05:57.00 ID:VQ/JYckG0.net
質問です
将来的にこういうアプリを作りたいと思っています
まずゲーム部分をunityで作って例えばオンラインランク的なネットワーク機能はphpで作るという物です
ここで疑問なのですがphpはサーバーとしてネットに公開するという事になりますよね?
俺はそのunityで作ったアプリからしかそのphpサーバーにアクセスして欲しくありません
でもネットに公開してる時点で普通にブラウザからでもアクセスできてしまうと思うのですが
こういう問題について世間の開発者の人たちはどういうやり方を用いているのでしょうか?

750 :デフォルトの名無しさん :2018/10/10(水) 19:39:55.34 ID:8sboglrA0.net
>>749
Webサーバー上でPHPを動かそうとしてる?
それなら、通常のポートと違うポートを使用して
そのポートを外部から遮断しておけば良いのでは

751 :デフォルトの名無しさん :2018/10/10(水) 19:42:09.52 ID:uL/SAi3N0.net
>>749
> unityで作ったアプリからしかそのphpサーバーにアクセスして欲しくありません
これと

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

要件としては前者だと思うけど、各社のノウハウになるんじゃないかなぁ。
簡易的なものだと、header 触るぐらい。

752 :デフォルトの名無しさん :2018/10/10(水) 20:03:08.68 ID:VQ/JYckG0.net
>>750
レンタルしてサーバーを使おうと思ってます
外部から遮断してアプリからアクセスできるんですか?

>>751
個人で作ってるので簡易的なものしか作れません
ヘッダーの設定ですね
覚えておきます

753 :デフォルトの名無しさん :2018/10/10(水) 20:04:12.63 ID:dwQgwWbW0.net
プログラミングはphp mysqlを齧った初心者です。
下記のようなユーザー参加型ランキングサイトを作りたいのですが
https://www.animeranking.net/index.php


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

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

ご教授お願いします。

754 :デフォルトの名無しさん :2018/10/10(水) 20:50:38.91 ID:8sboglrA0.net
>>752
レンタルサーバーなら、
アクセス元のIPアドレスを取得して
自ホストからのリクエストでなければ
応答せずそのまま終了すれば良いよ

755 :デフォルトの名無しさん :2018/10/10(水) 20:58:58.35 ID:VQ/JYckG0.net
>>754
アプリやpcソフトからのアクセスで自分のホストとかわかるんですか?

756 :デフォルトの名無しさん :2018/10/10(水) 21:04:33.75 ID:8sboglrA0.net
>>755
勘違いしてたかな?
アプリってPCなりスマホなりで動かすって事?
そういうことなら、この方法じゃ無理だな

757 :デフォルトの名無しさん :2018/10/10(水) 21:09:09.52 ID:VQ/JYckG0.net
>>756
スマホとかpcからです

758 :デフォルトの名無しさん :2018/10/10(水) 21:19:14.34 ID:8sboglrA0.net
>>757
それだと、どんなに独自の方式を考えたところで
クライアント側がガードされていない限り
解析されて方式を破られる可能性があるよね?

759 :デフォルトの名無しさん :2018/10/10(水) 21:49:20.11 ID:NIVvD6uyM.net
mutual TLS

760 :デフォルトの名無しさん :2018/10/10(水) 21:54:13.75 ID:VQ/JYckG0.net
>>758
ですよね
俺もそう思いました
だから世間の開発者の人たちはどうしてるのかな、と

761 :デフォルトの名無しさん :2018/10/10(水) 22:06:33.98 ID:8sboglrA0.net
PHPの話ではないけれど
大概のネットゲーム会社はクライアントアプリに
何らかの形でガードをかけている
ホストとの通信は暗号化し、
クライアントアプリ内部メモリへのアクセスも出来ないようにしている
チート対策でCPUの不正な高速化までチェックしている所もある

どこまでやれば良いのかを考えるとキリがないかも知れない

762 :デフォルトの名無しさん :2018/10/10(水) 22:16:40.86 ID:VQ/JYckG0.net
>>761
うーむ
無理、ですね
チートされても致命傷にならない範囲で作るしかなさそう

763 :デフォルトの名無しさん :2018/10/11(木) 02:07:56.23 ID:ywvO8NYp0.net
パケットを圧縮暗号化分割して何をしているのかわからなくする
もちろんメンテナンスと称して毎週のようにパターンは変えること

764 :デフォルトの名無しさん :2018/10/11(木) 04:29:58.54 ID:zE20d/IG0.net
蔵のチート対策やデータの暗号化はさておき、今回の質問のメインって
鯖との接続・セキュリティ対策よね?

単純に認証方式の話になるんじゃないの?>759でも書かれてるけど

765 :デフォルトの名無しさん :2018/10/11(木) 11:25:38.96 ID:ywvO8NYp0.net
>俺はそのunityで作ったアプリからしかそのphpサーバーにアクセスして欲しくありません
非正規クライアントを作られてほしくないからその対策を教えてくれ
って言ってんじゃないのか

766 :デフォルトの名無しさん :2018/10/11(木) 12:25:06.79 ID:RBgNCbjF0.net
>>765
746ですが
俺の入門書レベルでの知識ではphpをサーバーに設置したらネットのどこからでも見れてしまうと
思ったのでそれで質問しました
あくまでゲームからアクセスして欲しいなと

767 :デフォルトの名無しさん :2018/10/11(木) 12:50:41.46 ID:bd8i7ua+0.net
IPアドレスにデータを流す以外に通信する方法があるならそっちでやればいいけど、
普通に公開鍵と秘密鍵を使って認証するのが真っ当じゃないの
これを第三者クライアントが使えるんなら鍵の意味がない

768 :デフォルトの名無しさん :2018/10/11(木) 13:08:42.23 ID:3Bdkvxy90.net
>>749
ゲームは、ログイン・認証した人しか、プレイできない。
もし、アクセス権のない人がアクセスすれば、ログイン画面にリダイレクトされる

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

Ruby on Rails で、システム運用構築・プログラミングの練習をした方がよい

769 :デフォルトの名無しさん :2018/10/11(木) 13:11:06.48 ID:RBgNCbjF0.net
>>768
ログインですか
でもアプリとかのゲームではログインなしでランキング機能を使えるゲームも少なくないと
思うのですがそれについてはどう思われますか?

770 :デフォルトの名無しさん :2018/10/11(木) 13:15:39.15 ID:zE20d/IG0.net
>>765
例えBASIC認証でも自分で作ったプログラム以外からのアクセスは除外することはできるよね。
あとはセキュリティ強度の問題であって、チートやら暗号化の話は別の話のはず。

771 :デフォルトの名無しさん :2018/10/11(木) 13:19:09.28 ID:zE20d/IG0.net
>>769
プログラム内部でログイン処理があるだけで表に出さないだけの話でしょ。
端末固有情報でアカウント作ってログインしてるだけ。

端末固有情報を使わないと鯖にはもちろん入れない。
あとは不正な端末固有情報を使わせない仕組みを考えるだけ。

772 :デフォルトの名無しさん :2018/10/11(木) 13:24:40.62 ID:Ub0lOJUx0.net
IDとパスワードを手打ちでポチポチッとすることだけがログインじゃない
もうちょっと自分でいろいろ調べてみていいと思うよ
さすがにちょっと質問のレベルが低すぎて教えようがない

773 :デフォルトの名無しさん :2018/10/11(木) 13:27:20.03 ID:RBgNCbjF0.net
>>771
なるほどわかりました
それで一つ質問なのですがある端末の識別情報を別の端末が偽装して使って成り済ます
という事はどうやって防ぐのでしょうか?

774 :デフォルトの名無しさん :2018/10/11(木) 13:51:16.45 ID:Ub0lOJUx0.net
その質問はまず偽装の方法を自分で調べて理解してからの方がいいよ
偽装の方法によって対策が変わるんだからそんなざっくりとした質問は答えようがない

775 :デフォルトの名無しさん :2018/10/11(木) 13:51:26.37 ID:RBgNCbjF0.net
>>773
やっぱりこれ無しにしてください
まず初回アクセス時にサーバーでパスワードを発行してアプリ側で保存してしまえばいいんですよね
それでかなり確かなセキュリティーが保たれると思います

皆さんありがとうございました
あんまりしつこいとウザいのでこの辺で失礼したいと思います

776 :デフォルトの名無しさん :2018/10/11(木) 14:01:09.06 ID:zE20d/IG0.net
>>773
絶対不可能レベルなのか、仕組みさえバレなきゃまず偽装できないからそのレベルなのかで
方法論変わってくるんじゃない?

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

カネ絡みやら個人情報の絡みがあるんなら、もっと厳格かつワンタイムパスワードとか
必要になってくるわね。

777 :デフォルトの名無しさん :2018/10/11(木) 14:02:05.28 ID:zE20d/IG0.net
書き込みボタン押す前に電話してたら終わってた

778 :デフォルトの名無しさん :2018/10/11(木) 14:04:32.54 ID:2BdL7A5TM.net
>>775
まず難しいこと考える前に作ってしまえば。
URLを秘密にしておくだけでとりあえず充分。
それがちゃんと動くようになったら不正利用防止を考えていけばいい。
少なくとも今は、ただツベコベ言ってるだけで実際にモノを作れるレベルじゃないんじゃないの?って印象しかない。

779 :デフォルトの名無しさん :2018/10/11(木) 14:08:53.21 ID:3Bdkvxy90.net
HTTP は、1回毎の通信だから、同じユーザーかどうか、判別できないが、
セッション機能を使うと、各プレイヤーは判別できる

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

SSL・認証は、開発者の常識。
国家資格の基本情報処理技術者でも取れば?

780 :デフォルトの名無しさん :2018/10/11(木) 14:18:55.27 ID:bd8i7ua+0.net
不正ログイン対策と通信毎のユーザー判別とは別の話

781 :デフォルトの名無しさん :2018/10/11(木) 15:26:02.99 ID:ywvO8NYp0.net
>>770
unityC#で作った正規GUIクライアントでランキングサーバにアクセスするのと
同じ情報手順プロトコルを解析してphpで作った非正規CUIクライアントでアクセスするの
サーバはどうやって正規クライアントと非正規クライアントを見分けるの?
正規クライアントを必要とするチートの話じゃなくてどちらかというとBOTの話

782 :デフォルトの名無しさん :2018/10/11(木) 16:10:14.57 ID:3Bdkvxy90.net
ゲームは、ログイン・認証した人しか、プレイできない。
もし、アクセス権のない人がアクセスすれば、ログイン画面にリダイレクトされる

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

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

全く同じレスポンスを返すのだろ。
エミュレーターなんか、そう

783 :デフォルトの名無しさん :2018/10/11(木) 16:25:57.66 ID:zE20d/IG0.net
>>781
まずは解析されにくくすることで非正規を弾く発想なので、
解析されてる時点ではどうしようもないよね。

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

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

ていうか、SSL/TLS通信ってそんな簡単に解析して非正規クローン作れたりするの?

784 :デフォルトの名無しさん :2018/10/11(木) 16:33:34.56 ID:kxyqPSNi0.net
解析を試みる人がアプリの所有者の場合も考えないと

785 :デフォルトの名無しさん :2018/10/11(木) 16:43:19.53 ID:ywvO8NYp0.net
>まずは解析されにくくすることで非正規を弾く
俺がいってるのは
解析されにくくすることで非正規そのものを作ろうと思わない環境にするであって
非正規クライアントの存在そのものがないことを前提にしてるので
似たようなこと言ってるのだが微妙に話が噛み合ってないんよな

786 :デフォルトの名無しさん :2018/10/11(木) 17:02:25.53 ID:kxyqPSNi0.net
質問者の前提は

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

なので、非正規クライアントも含まれると思うが

787 :デフォルトの名無しさん :2018/10/11(木) 17:08:05.67 ID:mY8AIbZq0.net
SSL/TLSは経路上で情報が漏れることを防ぐためのものでエンドポイントでなら当然簡単に読み取れる

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

最も2はソケット開いたあと何したらいいかわからないはずなので
コードはせいぜい数行程度になり動作も不能で
俺的にはそんなものをクライアントと呼んでいいのか?っていう感じだが

789 : :2018/10/11(木) 20:27:41.65 ID:GbIju3sk0.net
非正規と判断されたクライアントに対してはなんらかのペナルティーを課せればいいかと
P2P file sharing ならばファイル拡散もかねてキャッシュを送りつける、とか

790 :デフォルトの名無しさん :2018/10/11(木) 21:00:09.10 ID:kxyqPSNi0.net
何をしたら良いか分からないはずと言うのは、かなり甘い見通し
ゲーム会社はそんな甘い考えは持っていない
例えばクライアントソフトをデバッガー環境下で起動されると
サバクラ間のやり取りの相当部分が解析されてしまう
ゲーム会社はそれをさせまいと独自のメモリ保護機構を構築し
そのようなハッキングを検出したら終了させている

791 :デフォルトの名無しさん :2018/10/13(土) 10:43:20.37 ID:vROhTmSS0.net
>>790
いやいや、言い方が悪かったか。
何も出来ないんだよ。毎週変えられたら実質解析なんて不可能なんだから。
やるべきことをやった上での話なのは当然に決まっとろう…

792 :デフォルトの名無しさん :2018/10/13(土) 11:00:18.78 ID:WkgZggeq0.net
>毎週変えられたら

だからこういう手間をかけている分けだろう
こういう手間をかけなかったら、解析されてしまうってこと
解析する側からすれば、
調べる対象は手元にあって、サーバーとのやり取りは全部把握出来てしまう
クライアントの中でどういう処理をしているかも調べる事が出来る
途中経路がいくら暗号化されていようと、クライアントの中は丸見えだ

793 :デフォルトの名無しさん :2018/10/13(土) 17:02:31.63 ID:vROhTmSS0.net
最初から毎週暗号化しろっていってんじゃん。
不正規なクライアントを作らせないって話してるのに、
メモリ保護やらクライアント解析やら、チート対策とごっちゃにしてるんだよな。

794 :デフォルトの名無しさん :2018/10/13(土) 17:13:36.95 ID:/Sv6qn96M.net
まずプレーンな通信で済ませたプロトを作るのが先。
そんなのも作れないのにウダウダ言ってても意味が無いだろ。

795 :デフォルトの名無しさん :2018/10/13(土) 17:31:15.96 ID:wAhJCvly0.net
毎週暗号パターンを変えるような仕組みを採用してるのが当たり前みたいな話になってるけど、
そんなアプリあんの?
後学のために教えてよ

796 :デフォルトの名無しさん :2018/10/13(土) 17:32:45.69 ID:WkgZggeq0.net
作らせないことを前提にしたら
泥棒がいないようにすれば警察はいらないねって言いだしてる様なものだ
不正規なクライアントが簡単に作れてしまうだろ
それをどう対策とるんだよ

クライアントの中見られたら、暗号解読をどうやってるか丸見えだ
毎週変えようと、毎日変えようと、全然対策にならないだろう

797 :デフォルトの名無しさん :2018/10/13(土) 17:35:11.86 ID:FeEBi+qRM.net
パケットと経路の違いもわからないのがペチパーの限界なんだろ
Web脳すぎて草

798 :デフォルトの名無しさん :2018/10/13(土) 17:51:32.87 ID:WkgZggeq0.net
普通は通信相手と信頼関係があって、
外部にそれが漏れないように暗号化するって事だが
ゲームの場合は、通信相手のクライアント自体が
信用出来ない前提でやらないとだめ

799 :デフォルトの名無しさん :2018/10/13(土) 20:29:18.59 ID:t1cbhpEg0.net
初心者です
PHPからコマンド一発で終わらない外部プログラムの実行して操作を行うことってできますか?
例えばMySQLのコマンドラインツールのようなものです

800 :デフォルトの名無しさん :2018/10/14(日) 01:22:40.52 ID:kPrWLnvE0.net
Laravelを使ってサイト作成しようとしてます。
ブログみたいに左側にサイドメニューがあって
メニューの項目をクリックすると中央のページにその項目の情報が表示されるという
ページを作りたいのですが、
サイドメニューを表示させる方法がわからないので教えてください。
調べたところ、レイアウトを設定するかもしれないところまではわかりました。

801 :デフォルトの名無しさん :2018/10/14(日) 01:25:26.11 ID:DpP+LriY0.net
PHPとかLaravel以前にHTML勉強せよ

802 :デフォルトの名無しさん :2018/10/14(日) 02:25:20.24 ID:x3f9f9nUa.net
FW使えばなんでもできるとでも思っているのか

803 :デフォルトの名無しさん :2018/10/14(日) 02:34:26.10 ID:VGDv0f/D0.net
>>799
適当なシェルスクリプorバッチファイルを作成してキックかな
https://webkaru.net/php/function-exec-system/
本当にPHPでやる必要があるのか疑問だが

804 :デフォルトの名無しさん :2018/10/14(日) 16:07:22.22 ID:nHJacGHV0.net
>>803
ありがとうございます
やってみます

805 :デフォルトの名無しさん :2018/10/15(月) 13:04:12.63 ID:tYDBCfF70.net
>>795
昔遊んだセガのスマホゲーム
Wiresharkでキャプチャして中身見たら
Jsonをちょこっとエンコード(暗号化ですらない)しただけのデータでやり取りしてたから
デコードしてクラックして遊んでたよ

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

俺も>>794に一票
phpレベルでやる事なんてさ
グダグダ言ってる暇あったらさっさと動くもん作れって話だw

806 :デフォルトの名無しさん :2018/10/15(月) 13:10:02.66 ID:tYDBCfF70.net
>>804
いやいやw
シェルスクリプト使えww
>>803も書いてるがphpでやる意味が全くない

807 :デフォルトの名無しさん :2018/10/15(月) 13:12:14.00 ID:tYDBCfF70.net
>>805間違えた
使ったのはWiresharkじゃなくてBurp Suiteだったw

808 :デフォルトの名無しさん :2018/10/15(月) 13:21:42.85 ID:4PSVnYhZ0.net
制御やら関数やら使うならPHPでもいいんじゃない
シェルスクリプトってやったことない人には地味に面倒だと思うし

809 :デフォルトの名無しさん :2018/10/15(月) 14:59:49.79 ID:mndugOSMa.net
PHP入ってる前提の環境ならPHPでシェルスクリプトっぽいことやったっていいと思うけどね楽だし
Python書けるならその方がいいとは思うけど

810 :デフォルトの名無しさん :2018/10/15(月) 17:19:44.72 ID:EiXwBhFU0.net
>>805
暗号化していないんだったら>795の要件を全然満たしてないじゃん
単に自分が
「暗号化されてないゲームのパケットキャプチャしたぞ(ドヤ」
の話だよね

811 :デフォルトの名無しさん :2018/10/15(月) 17:32:28.40 ID:Obfj9PeS0.net
暗号解読法知りたいなら、このスレではないぞ

812 :デフォルトの名無しさん :2018/10/16(火) 13:07:24.26 ID:FKF9rkIY0.net
>>810
は?
大手のセガですらそんな感じなんだから
791が言ってるように、つべこべ言ってる暇あったらプロト作れよ
って話をしたかっただけなんだがw

メモリ保護みたいなチート対策と混同してる奴いるし
何なのこのスレww さすがPHPerwww

813 :デフォルトの名無しさん :2018/10/16(火) 13:13:55.52 ID:dIjk/xku0.net
一般的な質問しかしていないのにプロトタイプも糞もないぞ
勘違いしているのはお前だろう

814 :デフォルトの名無しさん :2018/10/16(火) 13:31:22.77 ID:1YlWxxt/0.net
ざっとしか見てないから結局元の質問が何なのかよく分からないけど
せめて通信の秘匿化・通信内容の暗号化・その他ぐらいは分けて考えないと
そこをごちゃごちゃに書く人がいるからわけが分からなくなる
#たぶん何となくしってる事を適当に並べただけなんだろう

とりあえずapiみたいにhttp(s)使ってピンポン形式でやり取りするだけならプロトぐらいはすぐ作れるでしょ

815 :デフォルトの名無しさん :2018/10/16(火) 13:40:34.39 ID:dIjk/xku0.net
質問者の聞きたいことは
出来るか出来ないかなので
出来ないと言う結論が出て
質疑は終了していると思うけど

816 :デフォルトの名無しさん :2018/10/16(火) 19:12:19.10 ID:XYy62ZSp0.net
非正規蔵を作られて鯖にアクセスされたくないってのが元々の質問内容

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

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

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


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

809の脳味噌はそこまで一切考えずにゲーム脳の脊椎反射でマウントドヤドヤ
してるだけだろ。

817 :デフォルトの名無しさん :2018/10/16(火) 19:28:52.29 ID:gETK/lfa0.net
https://mevius.5ch.net/gamedev/

こっちの板でやれよ
馬鹿にされないようにな
ここから来ましたって絶対に言うなよ

818 :デフォルトの名無しさん :2018/10/16(火) 19:41:14.46 ID:+HAYOFLG0.net
>>817
俺は横からツッコんだだけで、むしろお前がガッツリ絡んでた話題だろ
なに他人の振りしてんだよ禿

819 :デフォルトの名無しさん :2018/10/16(火) 19:46:16.42 ID:YwbSFpxf0.net
自動でログインしてセッション確立して投稿するようなスクリプトがあるけど
HTTPに限らず通信手順をちゃんと模倣できていればそれが可能
防ぎたいのなら通信部分を解析されない対策をとればいいのだけど
まあ専門外になるしPHPerには難しいと思うよ

820 :デフォルトの名無しさん :2018/10/16(火) 21:29:00.95 ID:9ty9KlTGM.net
いいからさっさとプロト作れよ

821 :デフォルトの名無しさん :2018/10/16(火) 22:59:18.93 ID:k//Fq9Pi0.net
俺、セガよりも大手でゲーム作ってたけど、
>>805の言ってることは何も間違ってないと思うぞ
話の流れよく分からんからこれ以上のことは何も言えんが

822 :デフォルトの名無しさん :2018/10/17(水) 01:43:49.88 ID:3pfHQO2y0.net
話の前の方から引用すると
>最初から毎週暗号化しろっていってんじゃん。

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

毎週暗号パターン変更してるのかしてないのかの事実関係は
どうでもいいんだけど、上から目線で言う事毎回矛盾してるのはどうなのって話なのでは

823 :デフォルトの名無しさん :2018/10/17(水) 03:56:11.78 ID:leuazgxV0.net
別口からのアクセスおさえたいなら暗号化しろと
>>749あたりのレスに>>763が答えたのと
>>795に対するレスとして>>805が答えたのは関連があるのか?

824 :デフォルトの名無しさん :2018/10/17(水) 14:21:09.22 ID:D/px6urb0.net
関連ないのを持ち出されても関連ないとしか言いようがないな
>>790から「ゲーム会社では〜」を持ち出し、>>790-793で「毎週変えられたら」
という話が出たから>>795を書いたに過ぎない

結果的にゲーム会社でそこまでやってる例を挙げてるつもりで、暗号化されてない
例を挙げてドヤ顔してるやつが居るよなって話になってるだけ

825 :デフォルトの名無しさん :2018/10/17(水) 17:09:22.67 ID:xHybN1E+0.net
配列で得られたデータをオブジェクトに変換してリターン
している例を見たのですが、何かメリットがあるのでしょうか?
return (object)$arr;

826 :デフォルトの名無しさん :2018/10/17(水) 17:54:36.83 ID:ovwDg+Xe0.net
何かよく分からんが
勝手にマウント(笑)がどうとかと勘違いして
勝手にドヤ顔(笑)がどうとか喚き散らしてるだけって事はよく分かったw

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


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

俺が言いたいのはこれだけ
何をそんなに噛み付く必要があるんだw キモすぎww

827 :デフォルトの名無しさん :2018/10/17(水) 17:57:45.30 ID:ovwDg+Xe0.net
>>825
返り値を受け取る側でオブジェクトの方が都合が良いからだろ

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

例えばPDOのPDOStatementなんかはTraversableだから
そのまんまforeachでぶん回せるのに
それをわざわざfetch()とかで配列にしてみたりとかさw

828 :デフォルトの名無しさん :2018/10/17(水) 18:05:15.78 ID:3pfHQO2y0.net
>>826
偉そうに自己矛盾を認めないで草を生やして相手を卑下している時点で、どっちが面倒なのかな。

829 :デフォルトの名無しさん :2018/10/17(水) 18:07:27.22 ID:xHybN1E+0.net
>>827
なるほど。
ありがとうございました。

830 :デフォルトの名無しさん :2018/10/17(水) 20:44:36.79 ID:swlX/dQc0.net
とりあえずプロトタイプをというのは至極まっとうな意見だと思うので
何をそんなに顔真っ赤にする必要があるのやら全くもって理解不能

831 :デフォルトの名無しさん :2018/10/17(水) 20:51:29.44 ID:sCj44sRT0.net
マウント
ドヤ顔
上から目線
このあたりの単語を好んで使う人は自己愛性人格障害だから相手にしないのが吉

832 :デフォルトの名無しさん :2018/10/17(水) 20:56:47.75 ID:D/px6urb0.net
>>795に答えてって質問に対して的外れなことばかり言ってんじゃねえよ
的外ればっかだし、もうマウント取るしか能が無いよね?って話で図星突かれて
さらに的外れ続けんの?無能すぎね?

833 :デフォルトの名無しさん :2018/10/17(水) 21:10:08.06 ID:3pfHQO2y0.net
う〜ん。
自分も非正規蔵の件について話に入ってたけど、認識違いとかのズレで
まあどうでもいいやと思って黙ってたけど、結論はいいとして方法論で
これが当然のようにいいながら矛盾しつつ相手を卑下するやり方には
同意しかねるね。
議論の内容より相手を叩く事に重点を置いてるだけにしか見えない。

まあこんなところで議論とか求めても仕方ないけど、筋が通ってない分
ヤクザにも及ばないタチの悪さとは思う。

834 :デフォルトの名無しさん :2018/10/17(水) 21:11:16.32 ID:sCj44sRT0.net
792は自分が馬鹿にされてると勘違いしてるのか
大手でもそんなことやってないと818も言ってるんだなら答え出てるだろ
やっぱり病気だわお前

835 :デフォルトの名無しさん :2018/10/17(水) 21:27:10.80 ID:swlX/dQc0.net
ローカルプロキシ使ってキャプチャするぐらいなら簡単にできるんだから実際にどんなデータになってるか見てみればいいのにね
他の人が言ってるとおり意外と簡素なものも少なくないと思うよ

836 :デフォルトの名無しさん :2018/10/17(水) 21:38:17.22 ID:xvHZsaXfd.net
毎週暗号化手段を変えろ

>>795 そんなことやってるアプリあるの?

>>805 セガでもやってなかったぞ
>>821 セガより大手でもやってないぞ

>>795 激おこ

うん。意味が分からない

837 :デフォルトの名無しさん :2018/10/17(水) 21:49:17.31 ID:3pfHQO2y0.net
>>836
当人じゃないが、端から見てて

>>795 そんなことやってるアプリあるの?

>>805 セガでもやってなかったぞ


そうじゃなくて
>>805 セガでこんなのやってたぞ(やってない)

としか読んでなかったですわ。

838 :デフォルトの名無しさん :2018/10/17(水) 23:02:30.73 ID:leuazgxV0.net
読み返してみてだいたいどうしてこうなったか理解した

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

この最後のはそういう前提で話をしてるってことであって
別にそれが当たり前だとは言ってないと思うんだわ

839 :デフォルトの名無しさん :2018/10/17(水) 23:26:36.20 ID:wTgde3Ka0.net
話の流れがイマイチ読めないが暗号化のキーは共通鍵って話なの?
それとも暗号化のアルゴリズムを変えるとかトンでも理論の話なの?

どっちでもおかしな話だけれど
そんなことしてるアプリあったら教えてほしいw

840 :デフォルトの名無しさん :2018/10/17(水) 23:46:17.27 ID:leuazgxV0.net
ttps://www.otwo.jp/blog/cheat_measures/
多分こんな感じの話

841 :デフォルトの名無しさん :2018/10/18(木) 10:11:12.44 ID:1rhihpgt0.net
>>832
>>795の毎週暗号化法を変えてるアプリはあるの?
に対する答えは
1.そういう事をやってるものもある「かも」
2.やってないものもある
のどちらかなわけで
1の具体例はまだないが
>>805は2の具体例なんだから別に的外れじゃないでしょ

誰も”全部そうしてる””絶対にそんな事はない”という0か1かの話しじゃないのにさ
マウントだの何だの言ってるあなたの方がよほど的外れだ

842 :デフォルトの名無しさん :2018/10/18(木) 11:09:28.82 ID:cOwpgSZ30.net
外から解析できるような鍵なら毎週変えたところで無意味だし、
リバースして解析されるならそれこそ毎週変えても無意味だと思うの。
だからそんなことは置いといて、さっさとプロト作れってこった。
それが出来たらパラメタのチェック方法を掘り下げていく方が効果的。

843 :デフォルトの名無しさん :2018/10/18(木) 11:13:40.24 ID:or/egUOV0.net
>>839
>どっちでもおかしな話
だよなw

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

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

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

>>842
特に下2行には激しく同意

844 :デフォルトの名無しさん :2018/10/18(木) 12:49:16.43 ID:snT/KIMy0.net
>>841
>>795では「【あって当たり前な流れになってるけど】あるなら具体例を教えてくれ」であって「あるかないか教えてくれ」ではないんだよ
単純明快な日本語でなにもおかしくないだろ

求めてるのは完全に1.(あればだが)なんだが、なんで2.でOKみたいな流れになってんのよ

845 :デフォルトの名無しさん :2018/10/18(木) 13:30:57.93 ID:KrxjH9oQd.net
いつまでクソみたいな揚げ足取りをやってるんだか
特にお前の話は糞の役にも立ってないんだから黙ってクソして寝てろ
マウントとかドヤ顔って単語を好んで使う奴ってほんとゴミクズだわ

846 :デフォルトの名無しさん :2018/10/18(木) 13:36:14.98 ID:1rhihpgt0.net
>>844
じゃああなたの質問には誰も何も答えないのが正解ってことね
それで満足?

はいはい
こんな人を真面目に相手にした俺が馬鹿でしたよ

847 :デフォルトの名無しさん :2018/10/18(木) 13:52:25.45 ID:or/egUOV0.net
まあでもlocalに串立ててGUIでデータの中身見るなんてのは
専門知識も要らない低レベルな話なんで
そんな話をドヤ顔だのマウントだのと言われて俺困惑ww

何がこいつの逆鱗に触れたんだろうw
おちょくる分には面白いが

848 :デフォルトの名無しさん :2018/10/18(木) 14:09:16.92 ID:xfUBwp3TM.net
おまえらほんとおもしろいな

849 :デフォルトの名無しさん :2018/10/18(木) 17:01:50.49 ID:snT/KIMy0.net
あるなら教えてくれ(あればな)→これでドヤ!(ないけど)→ねえんだろ何ドヤ顔してんの

この流れで悔しがってるのが802以外に居るのが不思議だね
本人か親兄弟か何か?

850 :デフォルトの名無しさん :2018/10/18(木) 19:15:49.02 ID:1B/W+3ebM.net
PHP 7でASPタグが廃止された理由ってなに?
セキュリティ?パフォーマンス?

851 :デフォルトの名無しさん :2018/10/18(木) 20:27:57.21 ID:aXklSebk0.net
(当たり前というのは思い込みだが)当たり前の流れにしたくなさそうな>>795
加勢した>>805になぜか噛み付いてるんだもん
wiresharkでパケットキャプチャしたってのが何か高度なスキルに思えて
そんな自己満披露せんでいいよとかキレちゃったのかはわからないけど
傍からみててなぜキレてるのかさっぱりわからないw

852 :デフォルトの名無しさん :2018/10/18(木) 21:10:48.74 ID:RrGSa6XE0.net
自分も誤読した立場なんでどっちでも取れるレスだったなあと思えたけど、
こうやって一々煽りに来るのが一番悪いと思いますね
いつまで続けるんです?

853 :デフォルトの名無しさん :2018/10/18(木) 21:13:25.23 ID:iDy8I7c80.net
>>850
英語だけどこれかな
https://wiki.php.net/rfc/remove_alternative_php_tags

854 :デフォルトの名無しさん :2018/10/18(木) 21:21:54.89 ID:DXkQKcQs0.net
>>851
wiresharkじゃなくてburpsuite
burpsuiteの方がそういう用途に特化してて簡単
それでも>>795にとってはドヤ顔に見えてしまった
つまり792はその程度の知識の持ち主だってこと

もう相手にするのはよそう

855 :デフォルトの名無しさん :2018/10/18(木) 21:25:29.56 ID:uh9efSuM0.net
>>853
こういうproposalに対してさえnoを投じるrasmusほんま老害

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

やっぱりドヤ顔してたんで?
ドヤ顔指摘がツボすぎるから悔しくて粘着して煽りに来てるんだろ?

857 :デフォルトの名無しさん :2018/10/18(木) 21:49:30.72 ID:3Uf/lafq0.net
>>853
ありがとです!
使用頻度が低いことや、言語の発展上の弊害になると考えられたようだね

858 :デフォルトの名無しさん :2018/10/18(木) 22:15:50.71 ID:Vx517U3q0.net
ドヤ顔君まだ暴れてて草

859 :デフォルトの名無しさん :2018/10/20(土) 03:05:30.62 ID:mGvzmAJw0.net
strlen()にintegerを渡してもちゃんと桁数が返ってくるのはなぜですか?
stringじゃなくても動作するってことは、どこかで型変換されてるんですか?

860 :デフォルトの名無しさん :2018/10/20(土) 15:36:54.08 ID:gEDPu4pz0.net
http://php.net/manual/ja/functions.arguments.php
> 強い型付け ¶
> デフォルトでは、間違った型を渡された場合でも、可能な限りは来されている型に変換します。
> たとえば、string を想定している関数のパラメータに integer が渡された場合は、その値を string 型として受け取ります。

declare(strict_types=1);
気になるなら、これいれるとTypeError投げるようになる。

861 :デフォルトの名無しさん :2018/10/21(日) 00:28:16.60 ID:aes4F1Ww0.net
>>860
うえ、そんなんありっすか
噂に違わぬPHPの片鱗ということですね
ありがとうございました

862 :デフォルトの名無しさん :2018/10/21(日) 01:43:34.95 ID:0/W2nHVs0.net
寧ろ動的型付けの言語なら普通の挙動だけど

863 :デフォルトの名無しさん :2018/10/21(日) 03:14:09.66 ID:Pz2IqIp+0.net
> 組み込み関数内からの関数呼び出しは、 strict_types 宣言の影響を受けません。
とも書いてあるな。
strlenはもろに影響受けてるようだけど、よくわからなくなってきたw

864 :デフォルトの名無しさん :2018/10/21(日) 12:16:46.38 ID:TfVuD13o0.net
>>861
逆にこういう挙動じゃない動的型付けの言語教えて

865 :デフォルトの名無しさん :2018/10/21(日) 15:33:51.77 ID:8uJUIhMV0.net
文字列のUnicodeを10進数または16進数の配列として取得するにはどうすればよいですか?

866 :デフォルトの名無しさん :2018/10/21(日) 15:48:19.30 ID:FEyhRhG60.net
>>865
文字列を $s としたとき、$s[$i] で $i バイト目の文字が得られる。
これを ord するとその ASCII値が得られる。

UNICODE文字単位でそれがやりたいなら、mb_substr を組み合わせてやる感じかな。

867 :名無しさん@そうだ選挙に行こう! Go to vote! :2018/10/22(月) 10:46:42.37 ID:zqf9WRrQ0.net
>>865
$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);

あとは結果見て都合の良いように改変してどうぞ

868 :デフォルトの名無しさん :2018/10/27(土) 20:45:15.13 ID:LtQGrCdd0.net
よろしくお願いします。

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

のこコード中で、最後の出てくる ' { $date } ' が、シングルクォートで囲まれているのは何故でしょうか?
$dateが文字列になるからなのでしょうか?

869 :デフォルトの名無しさん :2018/10/28(日) 02:50:58.85 ID:GS4HIDpq0.net
>>868
前後がないとわからんがPDOかな?
:nameや:commentはパインド変数だから
型を意識する必要ないけど$dateはバインドしてないから
文字扱いにしてるんやろね
んで、文字列でシングル使いたいから全体はダブルで括るという

870 :デフォルトの名無しさん :2018/10/28(日) 06:36:36.32 ID:75+SpqZNM.net
SQLでは文字列リテラルはシングルクオーテーションで囲まないと駄目ってだけだぞ
SQL文として正しくなるように文字列を組み立ててるだけって事を理解しろ

871 :デフォルトの名無しさん :2018/10/28(日) 07:26:54.25 ID:7IwsJv31M.net
さらに言うと
{$date}は 2018/01/01 01:00:00 みたいに展開されるわけだが
シングルクォートが無いとこの部分は数値と除算と…のように解釈されてエラーになるわけだ

MySQLだと日付時刻の指定はYYYYMMDDhhmmssかYYMMDDhhmmssの形式の数値でもいいから
$date=date('YmdHis')かdate('ymdHis')
だったらクォートいらないけどな

872 :デフォルトの名無しさん :2018/10/28(日) 07:45:59.64 ID:/wLLb6M30.net
みなさま、ありがとうございました!
朝からスッキリできました!
皆様偉大な先生です。本当にありがとうございました!!

873 :デフォルトの名無しさん :2018/10/30(火) 23:58:06.08 ID:04COuKNl0.net
下記のように名前空間(ディレクトリ名)とクラス名が重複するのって何かデメリット的な事ありますか?

use Myapp\FooBar\FooBar;
FooBar::new();

874 :デフォルトの名無しさん :2018/10/31(水) 09:43:19.86 ID:J8G9WBiJ0.net
http://php.net/manual/ja/language.variables.scope.php

例1 global の使用
を実行すると3ではなくて2になるのですが、なぜですか?

875 :デフォルトの名無しさん :2018/10/31(水) 10:59:37.08 ID:BXLRnHBs0.net
>>874
どこをどう見ても3にしかならないし
実際実行しても3が出力されるんで
何かどっかがおかしいんだろ

つか変数のglobal宣言なんていまさら使うことなんかないから
理解できんのなら忘れていいよこんなもんw

876 :デフォルトの名無しさん :2018/10/31(水) 17:59:49.38 ID:J8G9WBiJ0.net
>>875
検証ありがとうございました。
その後、必死でテストしたのですが2しか出ません。
>つか変数のglobal宣言なんていまさら使うことなんかないから
なぜですか?

877 :デフォルトの名無しさん :2018/10/31(水) 18:04:01.05 ID:dV3e+Ndf0.net
>>876
宗教上の理由。
global だって使うときは使うから使い方は覚えておいた方がいい。

878 :デフォルトの名無しさん :2018/10/31(水) 19:01:40.49 ID:BXLRnHBs0.net
>>876
必死ってのがよく分からんw
コードをコピペして実行するだけなんだから数秒で終わる話だと思うんだが
ひょっとしてコードを見よう見まねで手打ち(「写経」という)してね?

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


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

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

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

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

今はよく分からなくてもその内何となく分かってくるから
今わかんないなら気にするなw

879 :デフォルトの名無しさん :2018/10/31(水) 19:21:20.91 ID:V+5pvMby0.net
使い方は覚えておいた方がいいけど
なるべく使わずにすむようにした方がいいだろうね

WordPressはglobal宣言しまくってるけど設計としてはあまりまねしてほしくないのは確か

880 :デフォルトの名無しさん :2018/10/31(水) 19:28:03.24 ID:rEIsu6q2d.net
wpは歴史的に仕方ない
ポリシー的に後方互換を大事にしてるしな
設計はまねするなという意見には同意

そろそろ後方互換を捨てろよって思うけどfirefoxみたいなことになる可能性もあるからなー

881 :デフォルトの名無しさん :2018/10/31(水) 21:49:30.59 ID:8LMDJ4U80.net
wordpressって推奨はPHP7以降になっているけど、
実際はPHP5.2とmysql5.0でも最新版が動くらしい
下手すると10年以上前?
>>879を見て久しぶりにコードのぞいたら本当にglobalだらけで笑った
こういう古い設計のコードを見てPHPがくそ言語だと言われるのはモヤッとする

882 :デフォルトの名無しさん :2018/10/31(水) 22:25:32.37 ID:rEIsu6q2d.net
プラグインやテーマもテンプレートエンジンを使わずに素のPHPを使ってるもんだからXSSやCSRFとかの対策が完全自動化されてないのも問題
2018年にもなって素のPHPで書いたテンプレートなんか読みたくないよ。。。

883 :デフォルトの名無しさん :2018/10/31(水) 22:47:31.62 ID:7+pd6iJs0.net
5.2っていうと配列をarray()って書いてた時代か
名前空間も無名関数もタイプヒンティングもないし
定数定義にdefine使ってグローバルで衝突しないように接頭辞を付けるようにしてたっけ
WordPress頑張りすぎだろ

884 :デフォルトの名無しさん :2018/10/31(水) 23:43:21.16 ID:aqQK2dvp0.net
まぁ現状のコードベース維持するならコードスタイルもコードベースに合わせざるを得ないわな
モダンな書き方にするなら新規で書き起こした方が低コストだろうし

885 :デフォルトの名無しさん :2018/11/01(木) 11:47:34.96 ID:YMjHonMD0.net
>>884
だな
まあWPはしゃーない
プラグインとテーマの豊富さが売りなんだから
そこ切り捨てちゃったらそれこそFireFoxみたいなことになるw

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

俺の知り合いにもWPに親殺されたみたいなのがいるから
WPがこの世から消えれば幸せになれるやつも少なくないんだろうが
逆にWPだけで飯食ってるようなやつもいるからなあw

886 :デフォルトの名無しさん :2018/11/01(木) 21:57:02.20 ID:nscXvzWP0.net
サイトマップから各ページのURL読み込むの作ってたら
http://mutimutigazou.com/sitemap.xml
こういうのができたのだがどう処理すればいい?

887 :デフォルトの名無しさん :2018/11/01(木) 22:43:57.33 ID:bYTPTsyya.net
アニメは他所でやれ

888 :デフォルトの名無しさん :2018/11/02(金) 06:31:57.91 ID:rR4ZFPRy0.net
お願いします。下記はテキストからの抜粋です。
新規登録するメールが、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上で該当する行の行数をカウントしている部分はどこにあたるのでしょうか?

889 :デフォルトの名無しさん :2018/11/02(金) 09:48:39.29 ID:Io9E5js5M.net
SQL文自体でカウントしてるから1行読むだけでいいやん
てか、1行しか返ってこないし

890 :デフォルトの名無しさん :2018/11/02(金) 10:05:36.78 ID:6yQoCIiM0.net
>>888
カウントは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();

891 :デフォルトの名無しさん :2018/11/02(金) 10:09:06.54 ID:6yQoCIiM0.net
>>888
さらに言えばw

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

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

でいい

まぁその例はあくまでも教科書的に「何件あるか」を調べる方法を書いてるだろうが
DB処理ってのはボトルネックになりやすいんで
sqlはなるべく簡素にするのが基本な

892 :デフォルトの名無しさん :2018/11/02(金) 10:13:15.59 ID:6yQoCIiM0.net
>>886
XMLなんだからsimplexml系とか(他にも色々あるが)で処理すればいいだろ?

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

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

好きなようにすりゃいい

893 :デフォルトの名無しさん :2018/11/02(金) 13:12:23.63 ID:H0U+eOT90.net
>>892
できました。
ありがとうございます。

894 :デフォルトの名無しさん :2018/11/02(金) 16:43:43.64 ID:lKWT8t9P0.net
>>889
>>890
>>891
ありがとうございます。
$count には ['COUNT(id)']=>行数という連想配列が、
$count['COUNT(id)'] には 行数が、
それぞれ格納されているのですね。

return (bool) $stmt->fetchColumn();や
実務的なSQLの考え方を教えてくださってありがとうございます!

895 :デフォルトの名無しさん :2018/11/02(金) 17:13:43.40 ID:6yQoCIiM0.net
>>894
お、おう
そういうレベルだったのかw

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

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

とにかく初心者の内はちょっとでもあれ?って思ったらすぐ var_dump() しろ

896 :デフォルトの名無しさん :2018/11/02(金) 20:07:32.22 ID:lKWT8t9P0.net
>>895
はい、ありがとうございます

897 :デフォルトの名無しさん :2018/11/03(土) 08:11:13.12 ID:29KucSII0.net
>>888の変数COUNT(id)なのですが
$sql="SELECT COUNT(id) で、変数宣言された、ということでしょうか?

898 :デフォルトの名無しさん :2018/11/03(土) 08:54:23.76 ID:XGyq6I+i0.net
連想配列の添え字という

899 :デフォルトの名無しさん :2018/11/03(土) 14:45:26.63 ID:3f9xsIAr0.net
>>897
上でも書かれてるけどそういう疑問を持ったら実行してvar_dump

スクリプト言語はそうやって簡単に実行して結果が見れるのがメリットなんだから、
もし今それができないなら環境構築から見直さないとものにならないよ
あと上の人もだけどPHPというよりはSQLが分かってない
勉強の仕方が間違ってる

900 :デフォルトの名無しさん :2018/11/03(土) 15:52:27.60 ID:rSl2Ac3O0.net
コレは解説のサンプルコード書いてるヤツが頭ワルイわ
$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){

901 :デフォルトの名無しさん :2018/11/03(土) 15:57:47.32 ID:rSl2Ac3O0.net
$$2個は$1個だからな
気にしなくていい

902 :デフォルトの名無しさん :2018/11/04(日) 11:12:58.45 ID:XAVCAs+90.net
PHP 7.2の初歩的な質問をさせてください。
下記のようにコンストラクタの戻り値を宣言すると __construct() cannot declare a return type エラーになります。

__construct( ): void { }

コンストラクタは何も型宣言をしてはいけないということでしょうか?

903 :デフォルトの名無しさん :2018/11/04(日) 17:56:28.09 ID:A3PnxJ3qa.net
>>902
> コンストラクタは何も型宣言をしてはいけないということでしょうか?
その通り

というかコンストラクタの返却値型宣言していい言語ってある?

904 :デフォルトの名無しさん :2018/11/04(日) 18:06:30.73 ID:XAVCAs+90.net
ありがとうございました。
さあ…?
そんなに詳しくないので知りません。

905 :デフォルトの名無しさん :2018/11/04(日) 21:17:19.38 ID:hVqxhauo0.net
コンストラクタの機能は100%インスタンスの生成を成功することなので仮に失敗もあるならbool値のみ、でも言語の機能としてインスタンスの生成を失敗したら使い物にならないので100%インスタンスの生成を成功する言語のはずだから戻り値は必要ない

906 :デフォルトの名無しさん :2018/11/04(日) 22:00:25.40 ID:24sILPZ+0.net
コンストラクタは失敗時には普通は例外投げますが

907 :デフォルトの名無しさん :2018/11/04(日) 22:34:24.16 ID:zG9usG6va.net
コンストラクタはなくてもインスタンス作れるから戻り値の保証はする必要ない

908 :デフォルトの名無しさん :2018/11/05(月) 00:03:35.54 ID:Wuac1AE/0.net
voidぐらいさせてくれてもいいじゃない。
C言語おじいちゃんなんだからあ…

909 :デフォルトの名無しさん :2018/11/05(月) 00:20:50.67 ID:/crf/pgL0.net
>>908
コメントで挟んでおけば大丈夫?

910 :デフォルトの名無しさん :2018/11/05(月) 01:02:42.89 ID:Wuac1AE/0.net
@のコメントあるから別に困りはしないよ。
すべて統一という気分の問題かな。

911 :デフォルトの名無しさん :2018/11/05(月) 08:23:12.92 ID:rNsZhmmMd.net
返り値のことを返却値というやつって何なんだろう
何も返却なんてしてないのだが

912 :デフォルトの名無しさん :2018/11/05(月) 09:26:17.77 ID:vLA2TmCS0.net
返り血みたいで発音が嫌という人がいる

913 :デフォルトの名無しさん :2018/11/05(月) 10:31:34.96 ID:dcr0NBob0.net
>>911
たぶん何も考えてないんだろw

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

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

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

$arr['COUNT(id)']みたいにSQLの集計関数の結果をそのままキーとして使わずに
COUNT(id) AS cntみたいにエイリアス使って
$arr['cnt']ってする癖をつけておくべきだと俺は思うけどな

914 :デフォルトの名無しさん :2018/11/05(月) 10:45:44.02 ID:/CGchI9p0.net
オブジェクトで返ってきてるんだから、そのままオブジェクトとして操作すればよいと思うぞ。

915 :デフォルトの名無しさん :2018/11/05(月) 15:02:21.85 ID:44ykk/Ua0.net
返り値?
おれ、戻り値派

916 :デフォルトの名無しさん :2018/11/05(月) 20:22:17.03 ID:Wuac1AE/0.net
xamppでPHPUnitの連続実行ってどうやるの?
shスクリプトでは複数行書けば全部実行してくれる。
batファイルだと最初の1行を実行して終了する。
おま環?

917 :デフォルトの名無しさん :2018/11/05(月) 22:23:43.78 ID:dTDazKon0.net
>>898
>>899
>>900

ありがとうございました。
よく理解できていないのでメモさせてもらい
勉強を進めて後々で再度確認してみます

918 :デフォルトの名無しさん :2018/11/06(火) 17:19:57.17 ID:z3LzXL080.net
laravelがrailsと比べて優れているところ教えて下さい

919 :デフォルトの名無しさん :2018/11/06(火) 17:42:00.12 ID:YBa3NmNt0.net
最大のメリットは php である事。最大のデメリットも php であること。

。。。比較の軸ぐらい考えろよ。オマエアホだろ。

920 :デフォルトの名無しさん :2018/11/06(火) 17:57:07.05 ID:z3LzXL080.net
>>919
言語の質ではなくフレームワークの質を聞いてるんです。

921 :デフォルトの名無しさん :2018/11/06(火) 17:57:40.53 ID:z3LzXL080.net
あと開発効率とか学習コストとか

922 :デフォルトの名無しさん :2018/11/06(火) 18:03:51.13 ID:YBa3NmNt0.net
比較の軸が出てきたなw

どっちも変わらん。要件次第。
もうちょっと聞きたいことを整理して質問しようぜぃ♪

923 :デフォルトの名無しさん :2018/11/06(火) 18:09:43.95 ID:z3LzXL080.net
>>922
プログラミング初心者なので一番知りたいのは学習コストで、どちらが学習コスト低いですか?やはり日本語情報の多いRailsの方が有利でしょうか?わかりやすさの面ではどちらでしょうか?もう1つ聴きたいのですが将来性はどちらに方があるでしょうか?長文すいません。

924 :デフォルトの名無しさん :2018/11/06(火) 18:20:05.67 ID:YBa3NmNt0.net
書いてんじゃん。どっちも変わらん。要件次第。前提次第。

XXと〇〇、どっちが優れてますか系の質問するやつにまともなエンジニアはいないんだよ。
要件整理して、前提確認して、比較軸作って、ドキュメント読んで、必要なら検証するのがエンジニア。
手が動かないなら向いてない。

925 :デフォルトの名無しさん :2018/11/06(火) 18:45:41.79 ID:pOOn9lCU0.net
環境構築にかかるコストも考えると…

926 :デフォルトの名無しさん :2018/11/06(火) 19:14:44.90 ID:M+z1dU6f0.net
>どっちが優れてますか系の質問するやつにまともなエンジニアはいないんだよ
>手が動かないなら向いてない

これ両方共すげぇ分かるww

927 :デフォルトの名無しさん :2018/11/06(火) 19:30:36.24 ID:S+SbxixY0.net
ものすごく感覚的な話で申し訳ないけど
Railsは出た当時は画期的だったけど、他のフレームワークがRailsの良いところをどんどん取り込んでいったので優位性がなくなっていってるイメージが強いかな

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

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

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

手っ取り早く結果を出すだけならまだまだPHPの方がかなり楽だけどね

928 :デフォルトの名無しさん :2018/11/06(火) 21:04:36.13 ID:lcs8YmG2H.net
サーパーサイドなんてもうNode一択
他はNode書けないやつが使うもの

929 :デフォルトの名無しさん :2018/11/06(火) 21:19:01.97 ID:uacreqWN0.net
ルビーはクソが世界の定説

930 :デフォルトの名無しさん :2018/11/06(火) 22:19:03.01 ID:uyHdMd5J0.net
どんな言語でもなんとかなるさ、はOKですか?

931 : :2018/11/06(火) 22:33:13.87 ID:MhNpcfCg0.net
>>929
ruby のどんな点がクソなんですか?

932 :デフォルトの名無しさん :2018/11/07(水) 01:04:09.41 ID:+978RLDn0.net
バグらない、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の方が、他の言語よりも可読性が高く、バグらないから!

933 :デフォルトの名無しさん :2018/11/07(水) 01:23:26.94 ID:1H1h6w0g0.net
バグの原因はおのれのスキルと自覚しよう

934 :デフォルトの名無しさん :2018/11/07(水) 13:03:42.68 ID:Vr3ftsmu0.net
ちゃんとした質問しないから、エンジニアになれなかった亡霊が無駄コメント残し始めたじゃないか。。。
責任とって、クローズしろよ。

935 :デフォルトの名無しさん :2018/11/07(水) 13:49:07.44 ID:MEh9vNho0.net
git commit -m "close #915"

936 :デフォルトの名無しさん :2018/11/07(水) 23:12:08.53 ID:EmTVHi4X0.net
HTMLとJVSCRIPT、PHPは相性がいいの?
SNSとかコミュニティサイトを作って
海外のユーザにも利用してもらおうとしたら、PHP?

937 :デフォルトの名無しさん :2018/11/07(水) 23:16:55.42 ID:Qrgo3xvC0.net
Node.js

938 :デフォルトの名無しさん :2018/11/08(木) 02:10:30.38 ID:xe/8BT4B0.net
相性は別に良くないと思うよ。
フレームワーク次第じゃない?

そういう話なら既存のOSSなSNSをインストールするべきと思う。
OpenPNEやWordPressのプラグイン等など…

939 :デフォルトの名無しさん :2018/11/08(木) 05:00:41.38 ID:OUyHbsHB0.net
プログラム言語やツールは物を作る道具や手段であってできるものに変わりはない
HTMLのようなGUIを作る場合はエディタが出来栄えを左右することもあるだろう
ただPHPでやることはバックエンドの目に見えない地味な場所であって
頑張って書くようなコードでもなければ体感速度もサーバのスペックが大きく物を言う
そんなところで良し悪しを熱く語ってるやつはたいていアホで出来ない子
つられやすい話題につられるのもアホで出来ない子

940 :デフォルトの名無しさん :2018/11/08(木) 06:27:27.64 ID:WetMyQ75M.net
HTMLやCSS出来なくても
WordPress使えば誰でも子供でも
ホームページが!
それもタダで無料で!
WordPressはPHPで構成されてます人気もあります
でも問題ないわけではないです!
子供より若い園児向きには Flat-File CMSを
データベース不要でPHPで動きます!

941 :デフォルトの名無しさん :2018/11/08(木) 07:27:25.46 ID:xe/8BT4B0.net
>>939
意味わからんこと言って不親切よりいいわ。
そんなにもできる子は世の中お前しかいないんだよ。

942 :デフォルトの名無しさん :2018/11/08(木) 23:31:20.72 ID:bTylvWCo0.net
>>936
初心者でも簡単にapacheのモジュールとしてインストールして動かせるって意味では相性いいと思うよ

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

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

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

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

php以外にも色んな言語に触れてた方がいいとは思うけど
ウェブアプリを作ることを目的とした初学者が選ぶ言語としてはまだまだ第一選択肢となり得る言語だよ

943 : :2018/11/08(木) 23:33:38.45 ID:PviajTiD0.net
wikipedia も PHP ですし

944 :デフォルトの名無しさん :2018/11/08(木) 23:40:19.74 ID:QE0GgM25d.net
>>942がいいことを言った

プログラミング言語には自分との相性みたいなのもあるからな
色んなものを試してみて1番自分に馴染みそうなのを選ぶのもいい
とにかく0か1かでしか物事を語れないプログラマ脳のいうことは鵜呑みにしちゃだめだ

945 :デフォルトの名無しさん :2018/11/09(金) 00:06:22.11 ID:gcFuq4sF0.net
perlは、同じ事するのでも人によって色々アプローチが違ってて
それはそれで面白いんだけどね
perlをとっつきにくくさせているのは変数の宣言と使い方じゃないかな
書いた人を呪いたくなる事があった

946 :デフォルトの名無しさん :2018/11/09(金) 00:20:55.59 ID:9LljJNk30.net
>>945
TIMTOWTDIがperlの設計思想だしね

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

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

正規表現使ってワンライナーでさくっと何かしたい時とかやっぱperlはいいなって思う事もあるけど
あんまりやり過ぎると5時間後の自分にすら読めなくなるという…

947 :デフォルトの名無しさん :2018/11/09(金) 00:36:13.15 ID:jyPZVHOtd.net
>>946
設計思想的にPerlの対極にいるのがPythonで今や大人気だもんな
Pythonは数学者が作ってPerlは言語学者が作ったって話を初めて知った時はめちゃくちゃ納得した

948 :デフォルトの名無しさん :2018/11/09(金) 00:49:31.00 ID:9LljJNk30.net
>>947
だね
昔は趣味のスポーツカーが流行ったけど今は使い勝手や燃費重視のコンパクトカーや軽が流行るのと同じで
pythonは悪くいえば遊び心はないけど可読性と再利用性の高さは強力な武器だよ
流行るわけだ

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

php作者の名言集
https://anond.hatelabo.jp/touch/20100427231539
ディスる時によく使われるけど俺はそんなphpも好きだ

949 :デフォルトの名無しさん :2018/11/09(金) 00:55:17.62 ID:jyPZVHOtd.net
>>948
> 僕なら、10リクエストごとにApacheを再起動しますね
ワロタwwwww
これ有名なの?恥ずかしながら初めて知った
面白いな

950 :デフォルトの名無しさん :2018/11/09(金) 01:07:40.13 ID:9LljJNk30.net
わりと有名だと思うよ
ついでにこれとか
https://takahashifumiki.com/web/programing/2209/

あんまり書いてるとマジレスして怒る人が出たら嫌なのでこの辺で…
繰り返すけど言語はあくまで手段に過ぎない
phpもperlもpythonもその内の1つに過ぎないってことでおやすみなさい

951 :デフォルトの名無しさん :2018/11/09(金) 01:30:14.07 ID:YLhQ0tUv0.net
ちょっとだけphpすきになれたわ

952 :デフォルトの名無しさん :2018/11/09(金) 01:42:41.18 ID:jyPZVHOtd.net
一気読みしてしまったけどめちゃくちゃ面白かった
サンクス
俺もPHPをもっと好きになれた気がするww

そしてPHPにもgotoがあることを知って驚愕
まあ使う必要はないとだろうけど
わざわざあとから付け足したみたいだが必要だったのだろうか

953 :デフォルトの名無しさん :2018/11/09(金) 10:05:10.34 ID:lA/zS5Cl0.net
ラスマスさんインタビュー
http://gihyo.jp/news/interview/2010/rasmus
ここでは自分のことを利己的と表現してるが
現実主義・合理主義者なんだよな

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

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

このスレの誰かさんに100回声に出して読めといいたいw

954 :デフォルトの名無しさん :2018/11/09(金) 10:08:54.85 ID:lA/zS5Cl0.net
>>952
少し上の方にあったglobalの話と似たようなもので
使わなくて済むなら使わない方がいいって感じのもんだな
他の言語にもgotoはあるけど使ったことないや

あ、basicやったことないの?なんていうおっさんは相手にしてませんので
(書いとかないと相手にするのがめんどくさいw)

955 :デフォルトの名無しさん :2018/11/09(金) 10:27:43.53 ID:gcFuq4sF0.net
Fortranは?

956 :デフォルトの名無しさん :2018/11/09(金) 13:22:28.59 ID:aQf6YGTQ0.net
すみません、よろしくお願いします。

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行)格納できているのは、どんな働きがあってのことなのでしょうか?

957 :デフォルトの名無しさん :2018/11/09(金) 13:34:20.06 ID:TMuJweZBa.net
コピペプログラミングの典型的パターン

958 :デフォルトの名無しさん :2018/11/09(金) 13:47:18.90 ID:sRuc/yNP0.net
>>956
たった8行しかない関数なんだから
自分で1行ごとに何しているかを調べてみよう

959 :デフォルトの名無しさん :2018/11/09(金) 14:03:26.71 ID:lA/zS5Cl0.net
>>956
while ($line=fgets($file,1024)) { }
がループ処理だって事も分からないのはやばいぞ
もう少し頑張れw

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

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

PHPerはよく if ($hoge = fuge()) みたいな書き方をするけど
分かってる上で手抜きでそう書くなら別にいいが
分かってないならそんな書き方はやめるべき

960 :デフォルトの名無しさん :2018/11/09(金) 14:08:17.39 ID:9S1HIFQT0.net
ジェネレータ使ってるから一見何してるか分かりにくいように見えるかもね
とはいえ便利だし1行ずつ読めば難しくない

ifの条件文中で代入するのはむしろCでよく見た

961 :デフォルトの名無しさん :2018/11/09(金) 15:26:07.95 ID:aQf6YGTQ0.net
ありがとうございました。

962 :デフォルトの名無しさん :2018/11/09(金) 15:37:24.13 ID:lA/zS5Cl0.net
>>960
swiftとかpythonだとこういう書き方はできないからね(代入式が値を返さない)
そのおかげでヨーダ記法みたいなヘンテコリンな書き方をしなくてもミスが防げるんだけど
一長一短だしこの書き方を全否定してるわけじゃないってことで

perlのワンライナーが気持ちいいってのもよく分かるが
人が書いたものは見たくないというのもよく分かるw

963 :デフォルトの名無しさん :2018/11/09(金) 15:42:44.74 ID:lA/zS5Cl0.net
すまん下の2行
全然関係ない文章が入ってしまった

書こうと思って削除した文章がクリップボード履歴からコピペされてしまった

964 :デフォルトの名無しさん :2018/11/09(金) 16:57:09.09 ID:gcFuq4sF0.net
分かる

心の叫びだろうw

965 :デフォルトの名無しさん :2018/11/09(金) 16:59:43.84 ID:aAkZVDrn0.net
PHPは大っ嫌いだけどLaravelは好き

966 :デフォルトの名無しさん :2018/11/09(金) 17:13:56.97 ID:aAkZVDrn0.net
セミコロン消えろ

967 :デフォルトの名無しさん :2018/11/09(金) 18:45:22.74 ID:lA/zS5Cl0.net
なぜ文字列結合を . にしちゃったんだろう
フレームワークを通さずにドットチェーンでサクッと書きたい時に悲しくなっちゃう

968 :デフォルトの名無しさん :2018/11/09(金) 18:52:30.49 ID:gcFuq4sF0.net
そういうしきたりがあったから

969 :デフォルトの名無しさん :2018/11/09(金) 19:48:04.81 ID:3iCSUlan0.net
>>956
$gen=readLine('sample,text'); は、$genに関数を入れてるだけで、
書き換えるのなら

foreach(readLine('sample.text') as $line){
 print $line'.<br>';
}
ということでは?

970 :デフォルトの名無しさん :2018/11/10(土) 13:09:23.21 ID:w8ozGR5u0.net
>>969
ありがとうございます。変数に関数を入れられるのですね。
書き換えられた方はテキストの別のページに載ってるのと似ているので理解できました。
すっきりしました。ありがとうございました。

971 :デフォルトの名無しさん :2018/11/10(土) 17:34:15.93 ID:KJE8CLNB0.net
>>970
別の人も書いてるけどジェネレーター(yield)を使ってて分かりにくいなら
yield使わずに同じことやってみたらいいかも

972 :デフォルトの名無しさん :2018/11/10(土) 17:57:23.60 ID:w8ozGR5u0.net
>>971
ありがとうございます。
各yieldの前後や、関数の呼び出し元に
print文でどこを実行しているのかを表示させるようにして確認しました。
yield fromを混ぜ込んだ文も、同様に処理するようにしたら
ずいぶん理解できるようになりました。

皆様、ありがとうございます。

973 :デフォルトの名無しさん :2018/11/10(土) 22:20:51.20 ID:16GnFLu/0.net
$gen=readLine('sample,text'); 
これで代入されてるのは関数じゃなくてジェネレータ関数が返す反復可能なオブジェクト(への参照)かな
ジェネレーター関数を呼び出したのをvar_dumpするとこんな感じだわ
object(Generator)#1 (0) {}

974 :デフォルトの名無しさん :2018/11/11(日) 16:39:55.95 ID:kuiXddTN0.net
Laravelのログイン処理をゼロから解説してる学習リソースありますか?

975 :デフォルトの名無しさん :2018/11/12(月) 01:02:22.66 ID:FJ/7DuU50.net
青い本とオレンジ色の本
Amazonで探せばすぐにわかる

976 :デフォルトの名無しさん :2018/11/12(月) 01:05:34.03 ID:FJ/7DuU50.net
あとはLaravel公式リファレンス
https://readouble.com/laravel/5.7/ja/authentication.html

977 :デフォルトの名無しさん :2018/11/17(土) 20:03:24.34 ID:yvB12Mei0.net
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q10199147355
Laravelで糞以下の質問をしている奴を見つけた。

978 :デフォルトの名無しさん :2018/11/17(土) 23:01:03.89 ID:2QpS/L3VM.net
>>977
こんな性格じゃそりゃいつまで経ってもゴミのままだわな

979 :デフォルトの名無しさん :2018/11/18(日) 00:24:19.00 ID:lxV5KuwV0.net
>>978
ソースも性格もゴミ
そしてその質問者のTwitter
https://twitter.com/tekitouk
(deleted an unsolicited ad)

980 :デフォルトの名無しさん :2018/11/24(土) 16:02:54.40 ID:iAypOYs00.net
よろしくお願いします。

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

前者は、1〜6までをプリントしますが、後者は無限にプリントされてしまいます。i++が6を超えてしまうのはなぜなのでしょうか?

981 :デフォルトの名無しさん :2018/11/24(土) 16:33:47.44 ID:ue64utAZ0.net
>>980
http://php.net/manual/ja/control-structures.for.php

982 :デフォルトの名無しさん :2018/11/24(土) 17:52:32.26 ID:cnsZLZxi0.net
こんなコード書かれたら頭痛いンゴ

983 :デフォルトの名無しさん :2018/11/24(土) 18:03:15.60 ID:+h/hylzW0.net
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の並びは最終評価値が返る
そもそも>>980のコードは書いたやつ殴るレベルだが

984 :デフォルトの名無しさん :2018/11/25(日) 09:04:25.92 ID:dabdOdKd0.net
>>981
ありがとうございます。
判定がtrueになり続けてしまうということなのですね。

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

class A{
private $B;

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

というコードなのですが、classAのフィールドで変数$Bを宣言して
関数のコンストラクタの$thisで、変数$Bに引数を代入してますが
この時、変数Bの$が取れているのはどういう仕様なのでしょうか?

985 :デフォルトの名無しさん :2018/11/25(日) 09:17:54.45 ID:43hAniU60.net
$が取れていることで可変関数を使える仕様になっている

986 :デフォルトの名無しさん :2018/11/26(月) 15:12:38.13 ID:aqdzSIAP0.net
>>985
ありがとうございます。
可変関数は、$変数に関数名を格納して使うものだと理解していました。
もう少し、可変関数に関して調べてみます。

987 :デフォルトの名無しさん :2018/11/26(月) 18:28:25.99 ID:vghby52J0.net
$db=getDb();
$opDB=$db->prepare('SELECT * FROM sample WHERE id=?');
$opDB->bindValue(1,$_GET['id'] ?:1);

このコードから質問お願いします。
2行目の id=? は、ワイルドカードのようなものですか?
3行目のbindValueの一つ目のパラメータの1は、何を指しているのでしょうか?

988 :デフォルトの名無しさん :2018/11/26(月) 18:34:58.26 ID:9UWiUoMZ0.net
一つ目:イイエ
二つ目:一つ目の?

989 :デフォルトの名無しさん :2018/11/27(火) 09:20:32.54 ID:bFvRPa1H0.net
返答ありがとうございます。

id=? っていうのは、どういう働きをするコードなのでしょう
一つ目とか、bindValue(1,$_GET['id']);の、'1'です

990 :デフォルトの名無しさん :2018/11/27(火) 14:57:55.52 ID:aBLKPQ100.net
>>987
>>989
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;
}

だが、このケースでは、こんな書き方をしてはいけない。
(続く)

991 :デフォルトの名無しさん :2018/11/27(火) 14:59:13.82 ID:aBLKPQ100.net
(続き)
$_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;
}

このケースでエルビス演算子をこんな使い方するような糞コードは、あんまり参考にしない方がいい

992 :デフォルトの名無しさん :2018/11/27(火) 15:06:26.62 ID:aBLKPQ100.net
>>980も読んだが、エルビス演算子の使い方といい
いったい何を参考にしてこんなコードを書いてるんだろうか

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

クイズ的に質問してるなら面白いけどw

993 :デフォルトの名無しさん :2018/11/27(火) 16:49:32.78 ID:BR30Kh7X0.net
演算子の説明だけだとシンプルで理解しやすいけど実用性ではクソ
実用性重視の説明だと本来説明したいもの以外の説明で蛇足だらけで
紙面使いすぎでクソ
というジレンマなんやろ

994 :デフォルトの名無しさん :2018/11/27(火) 18:08:09.22 ID:MA03kwvb0.net
$input = trim(fgets(STDIN));
while($input)

echo $input;

これってwhileの式のところでは$inputの中が空かって判断してるの?そういう機能がついてるのか?

995 :デフォルトの名無しさん :2018/11/27(火) 18:52:40.99 ID:DSo9/Qg/0.net
>>987
SELECT * FROM sample WHERE id=?

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

SQL injection 対策

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

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

placement で、SQL文をつなげられないようにしている

996 :デフォルトの名無しさん :2018/11/27(火) 19:01:55.97 ID:aBLKPQ100.net
>>994
そのコードだと、trim(fgets(STDIN))の値が (bool) true であった場合に永久ループになるw

実際は

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


こう書くべき処理なのでは?

997 :デフォルトの名無しさん :2018/11/27(火) 19:53:06.64 ID:MA03kwvb0.net
while分の中では$inputをbool型にして判定してるわけか?

998 :デフォルトの名無しさん :2018/11/27(火) 22:02:27.91 ID:7ygBETe/0.net
空文字がFalse判定されることを利用して
空行入力で終わるようにしてるんだろうけど
ゼロとかもFalse判定されて終わっちゃうんじゃないか
試してないけど

999 :デフォルトの名無しさん :2018/11/28(水) 12:01:30.07 ID:eIHsuPDh0.net
Ruby では、nil, false の偽が2つだけ。
一方、JavaScript, Python, PHP などは、偽が10個ぐらいあるから、超危険!

基本的に、Ruby 以外は、バグってどうしようもない

1000 :デフォルトの名無しさん :2018/11/28(水) 12:52:07.66 ID:yr9LfNgh0.net
>>990
ありがとうございました。プレイスホルダなのですね。
prepareでSQLを用いて、プレイスホルダを使うとき、
SQL文の中で、左から数えたプレイスホルダの順番を、
bindValueのカッコ内の数値で指定してバインドする、ということもわかりました。
?:や??:の解説もありがとうございました。

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

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

皆様、ありがとうとざいました。
今のテキストを読み終えたら、もう少しテキストを吟味して、違うテキストを探してみようと思います。

1001 :デフォルトの名無しさん :2018/11/28(水) 15:13:42.98 ID:zpzfEtE+0.net
>>997
そういう事

ただ>>998,999の言う通りなので
while (($input = trim(fgets(STDIN))) !== false) {
echo $input;
}

こう書くのが正しい

(なんか前にも似たような事を書いた気がするw)

1002 :デフォルトの名無しさん :2018/11/28(水) 15:17:38.93 ID:zpzfEtE+0.net
すまんw 大嘘書いたww
>>1001のコードだと trim() によって string型にキャストされるから永久ループするわwww

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

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

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

が期待した動作なのかもしれない

1003 :デフォルトの名無しさん :2018/11/28(水) 17:09:43.57 ID:Nb5yTkdM0.net
次スレ

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

1004 :2ch.net投稿限界:Over 1000 Thread
2ch.netからのレス数が1000に到達しました。

総レス数 1004
345 KB
掲示板に戻る 全部 前100 次100 最新50
read.cgi ver 2014.07.20.01.SC 2014/07/20 D ★