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

PHPに関する質問スレです

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

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

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

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

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

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

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

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


$xml = simplexml_load_string($str);


var_dump($xml);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

<?php
phpinfo();
?>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Windows + XAMPP 環境ですが、

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

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

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

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

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

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

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

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

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


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

みたいに。

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

無理じゃね

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

自由でいんじゃね

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

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

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

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

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

OSはubuntu16です

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

とりあえず
<php

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

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

とりあえず
<php
phpinfo();

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

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

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

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

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

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

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

なんやこの糞コード…

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

SELECT feed FROM aclass;
SELECT feed FROM bclass;

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

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

じゃね

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ええぇぇぇ…

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

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

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

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

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

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

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

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

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

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

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

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

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

125デフォルトの名無しさん (ワッチョイ 93ad-uaFS)2018/04/02(月) 13:28:31.23ID:1ZK7Ts6x0
SQL周りの質問します
$sql = 'select count(bang) from tbk';
$stmt = $dbh->prepare($sql);
$stmt->execute();
こう書いてcountでデータベースの行数を取得してその値をPHP側で受け取るにはどういうコード書けばいいですか?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Ruby on Rails 5.2正式版発表。Active Storageによるクラウドストレージ対応、Redisでのキャッシュ対応など
http://www.publickey1.jp/blog/18/ruby_on_rails_52active_storageredis.html
>Active Storageは、Amazon S3やGoogle Cloud Storage、Microsoft Azure Storageのような
>クラウドドストレージに対してファイルをアップロードし、
>それらのファイルのActive Recoredオブジェクトへの添付を容易にする機能です。
>また、ミラーリング機能によって複数のクラウドストレージのあいだでファイルを同期することもできます。
>これによって高い冗長性などを実現可能です。

これは良さそうですがPHPにこういうのありますか?

作りゃいいじゃん

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

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

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

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

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

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

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

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

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

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

160デフォルトの名無しさん (ワッチョイ 8aeb-Mp6C)2018/04/21(土) 23:07:08.13ID:GJF07GGo0
>>158,159
できましたありがとうございます

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

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

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

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

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

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

163デフォルトの名無しさん (ワッチョイ 1ae4-OGjV)2018/04/22(日) 06:44:08.35ID:ebslMH0y0
phpで設定を行う方法は主に3つ
・サーバ側の設定ファイル(php.iniやhttpd.conf)に直接書く方法
・phpスクリプトにini_set関数を使って書く方法
・専用の関数が用意されてればphpスクリプトに専用関数を使って書く方法

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

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

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

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

また同名の関数が用意されてるのでそれを使ってphpスクリプトに書くことも出来る
http://php.net/manual/ja/function.error-log.php

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

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

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

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

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

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

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

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

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

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

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

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

173デフォルトの名無しさん (ワッチョイ 2be4-iMQz)2018/04/28(土) 00:04:33.20ID:g3LZUwEj0
httpでやる必要がないならbasic認証関係ないんで
ローカルのファイルのパスがちゃんと指定できてれば読める
もしhttp経由で読み込む必要があるのなら
http://php.net/manual/ja/function.file-get-contents.php
ここの例4のとこ参考にして
Authorizationヘッダをつけてリクエスト送ればいい
"Authorization: Basic {$token}\r\n"
$tokenはbase64_encode('id:password');

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

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

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

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

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

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


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

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

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

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

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

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

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

182デフォルトの名無しさん (ワッチョイ 0beb-pRpi)2018/05/05(土) 02:10:31.22ID:i6PqpWH90
ファイルを file_get_contens() や file_pet_contents で読み書きしたいんですが
ロックってどうすればいいんでしょうか
flockにファイルディスクリプタが必要みたいなんですけど
それを使って与密会するわけじゃないのでRD_ONLYで開いてもいいんでしょうか

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

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

でうごきますか?

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

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

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

185デフォルトの名無しさん (ワッチョイ 1fe9-bmQX)2018/05/05(土) 15:07:11.64ID:XYMHadsA0
スマホ向けに下記をhtmlのheadに書いた場合は、スマホの横サイズいっぱいで折り返し表示されますが、
<meta name="viewport" content="width=device-width,initial-scale=1" />

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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



public function button_click(Request $request,$session_id){
if(isset($_POST["create"])){
$this->create_qa($request,$session_id);
}
else if(isset($_POST["likes"])){
//return $session_id; これはできてる
$this->update_likes_whenbuttonClick($request,$session_id);
}
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Q3682

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

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

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

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

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

215デフォルトの名無しさん (ワッチョイ 3315-WL+L)2018/06/07(木) 16:51:32.87ID:XK0BD38x0
初心者です。。

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

static::hogehoge($this);みたいなのがコンストラクタのなかにあるのって
どういうふうに動いてるのかわからないです。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ctype_alnumのおでましか

230デフォルトの名無しさん (ワッチョイ 46d5-MIFy)2018/07/02(月) 20:37:50.95ID:WBjy4TX+0
a.php が吐くHTMLに、b.php を差し込むSSIタグを埋めたところ、挙動がおかしい。
サーバは apache、PHPの出力に対してもSSIが効くように設定してある。
どうおかしいって、b.php 出力がSSIタグの位置からズレた場所に挿入され、しかもなんか断片化してる。
a.php と b.php の出力が混ざった感じというか、a.php と b.php が非同期に並行して動いてる感じというか。
a.php や b.php と同等の内容の a.html と b.html を用意し、a.html に b.php や b.html をSSIするケースや、a.php に b.html をSSIするケースでは問題無く、a.php に b.php をSSIするケースだけでおかしい。
原因の心当たりって無い?

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

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

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

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

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

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

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

237デフォルトの名無しさん (ワッチョイ 1167-HDH5)2018/07/04(水) 12:23:51.44ID:0wBgZClm0
public function Hoge($hoge)
{
return function () use ($hoge) {
return $this->test_func($hoge);
};
}

こういうのって意味有りますか?
クロージャのとこに$hogeを持ってきても実際には繋がりはないように見えるんすけど
$var = Hoge($hoge)
//$var = function($bar){ return $this->test_func($bar);}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

263デフォルトの名無しさん (ワッチョイ 475b-MSAO)2018/07/10(火) 18:15:06.82ID:lHg/M16h0
>>261
使う理由は特にない

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

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

SSIの#includeに該当する処理は、そのほとんどが<iframe>+αで片付く程度の低レベルの事しかしてないね
繰り返すけど今更使う必要性は全くない過去の遺物です

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

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

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

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

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

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

269デフォルトの名無しさん (ワッチョイ 475b-MSAO)2018/07/10(火) 19:25:00.51ID:lHg/M16h0
・index.php
------------
<?php
$a = 'hoge';

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

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

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

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

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

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

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

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

271デフォルトの名無しさん (ワッチョイ 5ed5-uzwL)2018/07/16(月) 06:50:46.92ID:S86tTn750
>>270
とりあえず思い当たることをざっくり。
・SQLインジェクション対策
・セッションハイジャック対策
・HTTPSの確認
・管理者のうっかり対策
・スパムメール基地化の防止

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

JS書けないオジサンだな

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

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

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

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

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

curl_setopt($ch, CURLOPT_SSL_CIPHER_LIST, 'ecdhe_ecdsa_aes_256_sha');
と同じ設定をiniファイルで設定できるかと
curl.ssl_cipher_list="ecdhe_ecdsa_aes_256_sha"
とcurl.iniに書いてみましたが、うまくいきませんでした
iniファイルで設定するのはやはり無理なのでしょうか?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

もう少しkwsk

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

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

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

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

>>321
うん

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

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

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

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

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

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

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

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

328デフォルトの名無しさん (ワッチョイ cf8a-9e/1)2018/08/05(日) 11:19:39.90ID:EoLQ53rz0
質問です

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

348デフォルトの名無しさん (ワッチョイ f3e9-0Uuo)2018/08/06(月) 14:07:27.66ID:933yDlcJ0
>>347
応用パターンとしては

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

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

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

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

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

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

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

351デフォルトの名無しさん (ワッチョイ f3e9-0Uuo)2018/08/06(月) 14:46:52.11ID:933yDlcJ0
>>349
Filter関数は意外と浸透してないっぽい

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

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

上の方が楽だよね

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

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

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

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

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

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

細かい話なのであまり気にしないくてOK

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

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

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

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

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

357デフォルトの名無しさん (ワッチョイ f3e9-0Uuo)2018/08/06(月) 16:39:22.00ID:933yDlcJ0
>>356
<?php
の次の行に

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

379デフォルトの名無しさん (ワッチョイ f3e9-0Uuo)2018/08/08(水) 17:18:00.31ID:Evm53zpf0
>>378
<form action="" method="post">
<input type="text" name="hoge">

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

387デフォルトの名無しさん (ワッチョイ f3e9-0Uuo)2018/08/08(水) 18:37:52.38ID:Evm53zpf0
>>384
> 3と4の方法は、日本語のみの場合、使っても問題ないということでしょうか

例えば if (empty($hoge)) は
1.$hogeが未定義(undefined)
2.$hoge = NULL
3.$hoge = (bool) false
4.$hoge = (int|float) 0
5.$hoge = (string) 0 or (string) ''
6.$hoge = (array) array() (空の配列)
なんかの時に真になる

意味を分かって使うのであれば別に絶対駄目だという訳じゃないよ

「日本語のみ」というのはPHPではどう判定するのか
そもそも日本語をどう定義するのかって話はあるけど

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

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

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

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

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

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

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

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

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

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

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

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

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

>>392 POST勉強してみます

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

>>479
では解説どうぞ

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

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

>>482

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

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


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

486デフォルトの名無しさん (スププ Sdbf-V6hB)2018/08/16(木) 13:02:04.93ID:qFV5giwld
グローバル変数云々の話以外だと例えば
?foo[]=1&foo[][]=2&foo[][][]=3
の時の
htmlspecialchars($_GET['foo']);
はエラーになるわな

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

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

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

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

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

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

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

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

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

489デフォルトの名無しさん (スププ Sdbf-V6hB)2018/08/16(木) 14:08:54.52ID:qFV5giwld
PHPしか書いた事ないやつだとimmutableという概念を知らない可能性もありそう
そもそもさ

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

あと素朴な疑問だが
$_GETや$_POSTを直接使ってるやつってユニットテストはどうやってんの?
ブラウザで表示させて実際に値を入力してテストとかやってそうw

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

522デフォルトの名無しさん (ワッチョイ efd5-PVJR)2018/08/20(月) 16:35:49.23ID:aXzcMKFL0
>>521
そういう遷移ならもっとシンプルに考えた方がいいんじゃね。
submit ボタンに name を設定しておけば、送信時に押されたボタンが分かるよ。
>>520 のような全部の画面は例えば form.php で処理させ、押されたボタンによって画面を出し分けるなんてのが簡単じゃないかな。
確認画面には例えば <button type="submit" name="act" value="back">戻る</button> と <button type="submit" name="act" value="send">送信</button> 置いておく感じ。
入力画面には <button type="submit" name="act" value="check">確認</button> とか。
すると form.php はこんな感じ。

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

セッション使ってないから、確認画面には入力値を hidden で埋めておく。
入力画面ではエラーメッセージの表示も行う感じ。

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

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

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

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

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

527デフォルトの名無しさん (ワッチョイ 1fe7-QxOT)2018/08/22(水) 05:59:35.69ID:sXSBMfza0
質問投下です。
PHP 2chBBSをphp7.0のサーバーにアップして色々と対応させるよう書き換えましたが、これだけが分かりません。
abon.php,92行目あたり
$line = preg_replace("!<a href=\"\.\./test/read\.php/$_POST[bbs]/$_POST[key]/([\d|\-]+)\" target=\"_blank\">&gt;&gt;([\d|\-]+)</a>!e",
"'<a href=\"../test/read.php/$_POST[bbs]/$_POST[key]/'.res_num('$1',$del).'\" target=\"_blank\">&gt;&gt;'.res_num('$2',$del).'</a>'", $line);

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

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

528デフォルトの名無しさん (ワッチョイ cb65-ipLS)2018/08/22(水) 07:23:29.30ID:XDj/gPFz0
その部分だけ見ててもすげーやべーコードなのが分かるから手直し以前にゼロから作り直した方がいいよ
つか調べたら最終更新2005年(13年前)でかつこのコードとか本格的にやべーのでもっと新しくてまともなもの探さなきゃダメだよ

529デフォルトの名無しさん (ワッチョイ ef9f-vvAx)2018/08/22(水) 07:44:33.35ID:PHQZkUhf0
スーパーグローバルのチェックはしてあるんだと思うよ。流石に…w

530527 (ワンミングク MMbf-ycnR)2018/08/22(水) 08:17:00.54ID:2cdwFvgEM
>>528
レスありがとうございます。
これ、ちまちまと手直しして使っておりまして。
このコードは管理機能内の記事削除部分で、管理者しか使えないですし、
第三者が入れないよう認証かけてるのでセキュリティーは多分大丈夫だと思います。

取りあえず使えるようにしたいので手直し出来るのであれば教えて欲しいです。

あと、どういう点がやばいのかご教示いただければ勉強出来るので非常に助かります。

531デフォルトの名無しさん (ワッチョイ ef9f-vvAx)2018/08/22(水) 08:40:59.95ID:PHQZkUhf0
だから、$_POSTをいきなり正規表現の処理に入れてるところがヤバイって言いたいんだと思う。
bbsやkeyに悪意のあるコードを入れてられても、そのままノーチェックで処理を継続していたらヤバイ。

仮にチェック済だとしても、スーパーグローバルを使ってると頭悪そうにみえるしな。

532デフォルトの名無しさん (ワッチョイ 0b5b-hE18)2018/08/22(水) 10:16:38.53ID:mlQDc+9J0
>>527
$line = preg_replace_callback(
  "!<a href=\"\.\./test/read\.php/$_POST['bbs']/$_POST['key']/([\d|\-]+)\" target=\"_blank\">&gt;&gt;([\d|\-]+)</a>!",
  'callback_hoge', $line);

function callback_hoge($matches)
{
  return "<a href=\"../test/read.php/$_POST['bbs']/$_POST['key']/" . res_num($matches[1], $del). '\" target=\"_blank\">&gt;&gt;' . res_num($matches[2], $del) . '</a>';
}

クロージャ使って書くなら

$line = preg_replace_callback(
  "!<a href=\"\.\./test/read\.php/$_POST['bbs']/$_POST['key']/([\d|\-]+)\" target=\"_blank\">&gt;&gt;([\d|\-]+)</a>!",
  function ($matches) {
    return "<a href=\"../test/read.php/$_POST['bbs']/$_POST['key']/" . res_num($matches[1], $del). '\" target=\"_blank\">&gt;&gt;' . res_num($matches[2], $del) . '</a>';
  },
  $line
);

半角スペース2個を全角スペースにして書いてるので注意

533デフォルトの名無しさん (ワッチョイ 0b5b-hE18)2018/08/22(水) 10:25:32.15ID:mlQDc+9J0
【補足】
他の人も書いてるけど
たった1行のコードから色々とヤバさが伝わってくる代物なので
他の代替手段を使うことを強くおすすめ

少なくとも $_POST[bbs] じゃなく {$_POST['bbs']}

>>530
JVNにXSSの脆弱性がある事が報告されてる
https://jvn.jp/jp/JVN48774168/index.html

コードをざっと斜め読みしたけど他にも色々と駄目すぎてどこから手を入れるべきかアドバイスできないレベルで酷い
2005年のコードでもきちんと書いてればPHP7でも大体問題なく動くものだけど
このコードだと他にも色々と問題が出ると思う

534デフォルトの名無しさん (ワッチョイ 0b5b-hE18)2018/08/22(水) 10:32:57.26ID:mlQDc+9J0
>>532訂正
$delって変数があるの見落としてた

$line = preg_replace_callback(
  "!<a href=\"\.\./test/read\.php/$_POST['bbs']/$_POST['key']/([\d|\-]+)\" target=\"_blank\">&gt;&gt;([\d|\-]+)</a>!",
  'callback_hoge', $line);

function callback_hoge($matches)
{
  return "<a href=\"../test/read.php/$_POST['bbs']/$_POST['key']/" . res_num($matches[1], $GLOBALS['del']). '\" target=\"_blank\">&gt;&gt;' . res_num($matches[2], $del) . '</a>';
}

クロージャ使うなら

$line = preg_replace_callback(
  "!<a href=\"\.\./test/read\.php/$_POST['bbs']/$_POST['key']/([\d|\-]+)\" target=\"_blank\">&gt;&gt;([\d|\-]+)</a>!",
  function ($matches) use ($del) {
    return "<a href=\"../test/read.php/$_POST['bbs']/$_POST['key']/" . res_num($matches[1], $del). '\" target=\"_blank\">&gt;&gt;' . res_num($matches[2], $del) . '</a>';
  },
  $line
);

535デフォルトの名無しさん (ワッチョイ 0fb8-O+0A)2018/08/22(水) 10:41:30.78ID:jQIraJCs0
エラーを無視するような感じのエラー処理が適当なコードだから
セキュリティもそれなりなのだろうというのが容易に想像出来るんだわ
なんせPHP4時代のコードだし今ほどそのへん考慮されてないからねえ

536デフォルトの名無しさん (ワッチョイ 0b5b-hE18)2018/08/22(水) 10:41:35.61ID:mlQDc+9J0
>>529
コード内に出てくる $_POST[bbs](本当は $_POST['bbs'] だが)は
まともにチェックされてないっぽい
unlink("../$_POST[bbs]/...");
みたいなコードが散見されるから
NULLバイト攻撃も素通りだと思う

ヤバすぎ

>>532
$del を受ける use が必要じゃね

あと細かい話だが、PHPが単なる即時関数もクロージャと言うのにはちょっと違和感ある。
>>532 のケースはクロージャになるけど、クロージャってやっぱスコープが特殊なところに意義があるというか。

538デフォルトの名無しさん (ワッチョイ ef9f-vvAx)2018/08/22(水) 10:56:49.46ID:PHQZkUhf0
>>536
そうなんだ…ワロタ
クローズドな環境で割り切って使う以外はあぶないね。

539デフォルトの名無しさん (ワッチョイ cb65-ipLS)2018/08/22(水) 10:58:38.85ID:XDj/gPFz0
OSに処理投げる形式のファイルシステム関数についてはnulバイト攻撃はPHP側で対策されてはいる
https://github.com/php/php-src/blob/master/ext/standard/file.c#L1510
https://github.com/php/php-src/blob/master/Zend/zend_API.h#L1011

が, 何れにせよ救いがたいコードで, 管理者しか使えないから問題ないという発想も正直ヤバい
この状態から>>527の質問のレベルで更にツギハギで直してるっていうんだからセキュリティに関しては想像もしたくないというのが正直なところ

540デフォルトの名無しさん (ワッチョイ cb65-ipLS)2018/08/22(水) 11:04:53.85ID:XDj/gPFz0
敢えて繰り返すけど, もっと新しくてまともなもの探さなきゃダメだよ
そうするのがベターなんじゃなくて, そうしなきゃダメ, SHOULDじゃなくてMUSTだよ

541デフォルトの名無しさん (ワッチョイ 0b5b-hE18)2018/08/22(水) 11:08:19.17ID:mlQDc+9J0
>>539
かなり昔に対策されたんだな
知らなかったサンクス

$_POST[bbs]でコード内を検索したら
unlink("../$_POST[bbs]/dat/$_POST[key].dat");
こんなコードが出てきたんでびっくりして脊髄反射してしまったww

542デフォルトの名無しさん (ワッチョイ cb65-ipLS)2018/08/22(水) 11:35:44.27ID:XDj/gPFz0
ついでに正規表現パターンにPOSTデータ突っ込むのがどうしても我慢ならなかったから直してみた

$line = preg_replace_callback(
'!<a href="\.\./test/read\.php/(?<bbs>[^/]+)/(?<key>[^/]+)/(?<num>[\d|\-]+)" target="_blank">&gt;&gt;\k<num></a>!',
function ($matches) use ($del) {
$bbs = filter_input(INPUT_POST, 'bbs');
$key = filter_input(INPUT_POST, 'key');
if ($matches['bbs'] !== $bbs || $matches['key'] !== $key) {
return $matches[0];
}
return '<a href="../test/read.php/'.$bbs.'/'.$key.'/'.res_num($matches['num'], $del).'" target="_blank">&gt;&gt;'.res_num($matches['num'], $del).'</a>';
},
$line
);

543デフォルトの名無しさん (ワッチョイ 0b98-IWHs)2018/08/22(水) 11:58:13.96ID:nWdToOU90
Interface用のファイルって基本的にどこに置けばいいの?
それを継承するクラス群と同じディレクトリなのか、
もしくは最初から一箇所(例えばMyApp\Contract等)にまとめていいのか

544527 (ワンミングク MMbf-ycnR)2018/08/22(水) 12:28:34.49ID:2cdwFvgEM
>>532
手直し、ありがとうございます。
勉強させてもらいます。


件の掲示板ですが、社内LANで運用されておりまして、前任者より引き継いだものです。
設置はさらに前の前任者(退職)が行ったようです。
お察しの通り、phpのスキルはそれ程高くはありません。

移行を検討するよう進言してみます。
ありがとうございました。

545デフォルトの名無しさん (ワッチョイ ef9f-vvAx)2018/08/22(水) 13:23:13.49ID:PHQZkUhf0
社内でしかも管理者限定なら急ぐことはないか…
でもコードの品質全てが問題ありそうだから、仲間内で注意喚起はした方がいいな。
JVNで周知されてるのも良い理由になると思う。

546デフォルトの名無しさん (ワッチョイ 0b5b-hE18)2018/08/22(水) 13:39:41.75ID:mlQDc+9J0
>>544
>>532のコードは間違ってるので使うなら>>534>>542

お節介ながら
今はSlackみたいな便利なものが色々とあるので
そもそも掲示板を使う必要はあるのか?ってところから検討した方がいいのではと

547デフォルトの名無しさん (ワッチョイ 9fd0-Mwiu)2018/08/22(水) 15:37:33.16ID:bZebMi5p0
メールヘッダーインジェクションって現バージョンのPHPではどうなんですか?
mail()やmb_send_mail()で対策されたとネット上で見かけたのですが(´・ω・`)

548デフォルトの名無しさん (ワッチョイ 0b5b-hE18)2018/08/22(水) 18:00:41.89ID:mlQDc+9J0
>>547
英語版のPHPマニュアルの改変履歴追ってみると7.2.0での対応で一段落って感じだけど
日本語版には書かれてないな

NULLバイトや改行コードを悪用したインジェクションなら
mail()やmb_send_mail()に渡すデータをバリデーションしてたら7.2.0未満でも問題ない筈だが

549デフォルトの名無しさん (ワッチョイ 9e9f-bqhm)2018/08/23(木) 11:42:53.96ID:4kav5HXR0
ttps://blog.ohgaki.net/php-mail-header-injection

550デフォルトの名無しさん (ワッチョイ a5b8-EM0A)2018/08/25(土) 11:28:42.39ID:9SggU+bE0
例外を投げるとき、Exceptionを投げるのは良くないのでしょうか?

Exception は、すべての例外の基底クラスだからユーザーが投げるのは
良くないという記事を以前に何かで見たので気になります。
ただ、PHPマニュアルでは、普通にExceptionを投げる例が載ってます。
http://php.net/manual/ja/language.exceptions.php

<?php
function inverse($x) {
if (!$x) {
throw new Exception('ゼロによる除算。');
}
return 1/$x;
}

551デフォルトの名無しさん (ワッチョイ ed65-PcWx)2018/08/25(土) 11:34:28.91ID:804l9SKu0
要するにcatchしたいときにExceptionやらThrowableとするしかなくて, 少なくとも例外は全部漏れなく捕捉してしまうのが問題なわけだ

552デフォルトの名無しさん (ワッチョイ a5b8-EM0A)2018/08/25(土) 11:45:15.82ID:9SggU+bE0
>>551
なるほど。例外を個別に場合分けして処理したいときに困るということですね。
ありがとうございます。疑問が晴れました。

553デフォルトの名無しさん (ワッチョイ 2ad0-wF79)2018/08/25(土) 14:02:12.59ID:Qb+EA1ap0
最近話題になってたfilter_inputみたいに$_POSTを取得する関数って他にもあるんですか?
http://php.net/manual/ja/ref.filter.php

554デフォルトの名無しさん (ワッチョイ 5ed5-ISgX)2018/08/25(土) 14:31:15.65ID:C8WKBJJ50
>>553
それは $_POST を取ってるわけじゃない。
POSTされたデータを取る手段として $_POST と filter_input がある。
他の標準的な手段として用意されてるものは無いと思うけど、リクエストを自分で処理するという手段はある。

555デフォルトの名無しさん (ワッチョイ 2ad0-wF79)2018/08/25(土) 15:51:20.36ID:Qb+EA1ap0
>>554
詳しく教えてくださりありがとうございます。
勉強になりました。

php://input

557デフォルトの名無しさん (ワッチョイ 2ad0-wF79)2018/08/26(日) 18:28:50.81ID:TIzdp5nG0
FILTER_SANITIZE_FULL_SPECIAL_CHARS?
htmlspecialchars?
あばばばば(´・ω・`)

558デフォルトの名無しさん (ワッチョイ 9e9f-bqhm)2018/08/27(月) 00:57:59.28ID:LDnza5oi0
前者は使わなくてもいい。
後者は画面に出すときに必須

559デフォルトの名無しさん (ワッチョイ 2ad0-wF79)2018/08/27(月) 15:45:55.66ID:BWUwoBqV0
mail関数で文字化けするのはどういった状況なんだろうか

560デフォルトの名無しさん (ワッチョイ 6681-PcWx)2018/08/27(月) 15:53:58.45ID:TsaU1TVW0
エンコード関連の設定が間違えているって書いても、
そのくらいは知っているって言われそうだしなあ

561デフォルトの名無しさん (ワッチョイ 2ad0-wF79)2018/08/27(月) 17:28:58.93ID:BWUwoBqV0
PHPを初めて間もないので知らなかったです(´・ω・`)
文字化けが自分で作った環境が原因でおこるのか、
ユーザーの環境によっておこるのか、
それすらも現在進行形で勉強中です。

562デフォルトの名無しさん (ワッチョイ 9e9f-bqhm)2018/08/28(火) 09:51:44.23ID:Bhr6KAhH0
今時はメールもutf-8にしちゃう方が良い?
サイズはともかく。

563デフォルトの名無しさん (ワッチョイ 5ed5-ISgX)2018/08/28(火) 10:03:40.00ID:eY+qymJM0
JIS だと扱えない文字が結構あって面倒なんだよね。
氏名を埋め込もうとするだけでもすぐ問題が起こる。
個人的には結構保守的なんで極力 JIS にしたいが、utf8 も仕方ないかなと思うこともある。

564デフォルトの名無しさん (ワッチョイ 9e9f-bqhm)2018/08/28(火) 12:43:02.68ID:Bhr6KAhH0
>>559
件名が化けてるの?
本文が化けてるの?

565559 (ワッチョイ 2ad0-wF79)2018/08/28(火) 15:49:05.60ID:hBn2GmOT0
>>559
>>561です

>>564さん
どちらも化けてないです。
ただ文字化けする状況がよくわからなかっただけです。
自分の環境を全てutf8に統一すれば化けないですかね(´・ω・`)

566デフォルトの名無しさん (ワッチョイ 9e9f-bqhm)2018/08/28(火) 18:24:33.50ID:Bhr6KAhH0
どちらかと言えば、送信したサーバー側にあると思うよ。
ヘッダをMIMEエンコードしてないとか、
本文をJISと宣言しておいてSJISとか良く見る。
作る側が理解してない。

それを受信すらメールソフトが何とか正しく表示しようと努力して、
それでもダメだった場合に化ける。

あと稀に、ソースからしてそもそも化けてるという
バカが書いたメールもあるw

567デフォルトの名無しさん (ワッチョイ 6681-PcWx)2018/08/28(火) 18:32:36.85ID:lp3F9A9k0
>>566
たまに磁場消したメール受けとる
解読するのを楽しみにしたりする

568デフォルトの名無しさん (ワッチョイ 6681-PcWx)2018/08/28(火) 18:32:58.74ID:lp3F9A9k0
字化けした
ごめんw

569デフォルトの名無しさん (ワッチョイ ed8a-vl9i)2018/08/28(火) 20:03:27.33ID:ZdacH0nd0
>>568
も抜け・・・

570565 (ワッチョイ 2ad0-wF79)2018/08/29(水) 16:28:12.93ID:Fy8w4QmX0
>>565です

>>566さん
こちらがしっかりと設定すれば大丈夫そうですね。
後は山のように試行錯誤を積み重ねていきたいと思います(´・ω・`)

今はmail($to・・・)の$toに自分のメールアドレスをどのようにして入れるか考えてます。
define関数で定義した方が安全?なんでしょうか。
勉強がんばります。

571デフォルトの名無しさん (ワッチョイ bd5b-vl9i)2018/08/29(水) 16:47:55.26ID:pmPs3x9R0
>>570
メンテナンス性を考慮すれば定数で定義しとく方が好ましい
”ハードコーディング”でググるんだ

あとPHP5.3未満だという理由でもない限りは
定数の定義はdefine()じゃなくconstでいい

define()にしかできない事をやる時だけdefine()を使う
…というかdefine()にしかできないような定数の定義の仕方は
しない方がいいというか

572デフォルトの名無しさん (ワッチョイ 9e9f-bqhm)2018/08/29(水) 17:14:13.88ID:oFL8fPjK0
>>570
confg.phpとかconfig.iniとか作って、
設定値を書きまくるファイル用意するといいよ。
定数名は大文字にしておけば目立つね。

573570 (ワッチョイ 2ad0-wF79)2018/08/29(水) 18:04:53.37ID:Fy8w4QmX0
>>570です

>>571さん
constでも定義できるんですね。
他にも詳しいアドバイスありがとうございます。

>>572さん
設定値を管理するファイルを作る、メモしました。
定数名は大文字がマナー?なんですかね。

お二方、アドバイスありがとうございます。
ずっと画面と見つめ合ってたので頭が痛いです。
体調管理に気を付けます。
ありがとうございました。

574デフォルトの名無しさん (ワッチョイ a3d0-J7KC)2018/08/30(木) 19:30:03.21ID:GwaNatXn0
>>570の$toって直書きすると外部から参照されたりするん?
そこらへん うちも勉強不足だわ

575デフォルトの名無しさん (ワッチョイ 0b81-tpL7)2018/08/30(木) 19:32:18.17ID:Ut/QgXMd0
外部からってどういう意味?
宛先見せないと配達できないでしょ?
そういうことじゃなくて?

576デフォルトの名無しさん (ワッチョイ 5b9f-SMhC)2018/08/30(木) 19:44:52.34ID:EWk4rtO80
web公開ディレクトリに置かないのが基本なんだよ。
hdocs/index.html
lib/php/config.ini

共用のレンタルサーバーだと、
Permissionを0604にするのもありだな。

最初の0は気にしない。
次の6は自分の読み書き権限
次の0は同居してるユーザーに権限剥奪
最後の4はApacheに読み取り権限

578デフォルトの名無しさん (ワッチョイ 0b81-tpL7)2018/08/30(木) 20:37:32.95ID:Ut/QgXMd0
>>577
釣りかな?
それApacheにかぎらず誰でもオッケーって意味だよ

579デフォルトの名無しさん (ワッチョイ 5b9f-SMhC)2018/08/30(木) 20:58:13.62ID:EWk4rtO80
ほとんどの共用レンタルサーバーは、
webユーザーは同一グループに所属するから、
xx0xで引っ掛けて拒否させるんだよ。
最後の4は付けないとApacheが読めない。

https://www.xserver.ne.jp/manual/man_server_permission.php

グループ設計がどうなってるかとか、
PHPの実行ユーザーが誰になるかとか、
事前に確認しないといけないな。
suEXEC、FastCGIなんかで変わってくる場合もあるし。

580デフォルトの名無しさん (ワッチョイ a3d0-J7KC)2018/09/01(土) 18:28:51.43ID:0yUv0G400
exit()
die()
(´・ω・`)?

581デフォルトの名無しさん (ワッチョイ 0b81-tpL7)2018/09/01(土) 18:34:59.89ID:5sir/CBW0
死ねって言われたいのかなあ

582デフォルトの名無しさん (ワッチョイ 5b9f-SMhC)2018/09/01(土) 19:17:45.13ID:/Rwrc1N80
>>580
ディエはエラーログに残る

583デフォルトの名無しさん (ワッチョイ 1d9f-GNu9)2018/09/02(日) 10:08:19.04ID:ub6GWDzd0
ど素人です
質問させてください
cakephp3のwebroot以下にある.htaccessで、mod_rewriteの括弧外にrewritecondやrewriteruleが書かれているものを人様のサイトで拝見しました
括弧外に置かれても、機能するものなのでしょうか

584デフォルトの名無しさん (ワッチョイ 5b9f-SMhC)2018/09/02(日) 10:25:45.60ID:afimrVjB0
<IfModule mod_rewrite.c>
もしかしてこれ?

585デフォルトの名無しさん (ワッチョイ 1d9f-J7KC)2018/09/02(日) 13:32:00.09ID:ub6GWDzd0
そうです

すみません、>>583は携帯から書き込んでいたので正確ではありませんでした
質問するにしても良くなかったですね

===================
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>
===================

このようなものなのですが

586デフォルトの名無しさん (ワッチョイ 5b9f-SMhC)2018/09/02(日) 15:33:48.84ID:afimrVjB0
それは、そのモジュールが有効化されていたら設定するって意味で、
何のモジュールのディレクティブなのか明確になる以外にメリットない。

だから書かない方が良い。
ifを書かなければ、モジュールが無効なら即500エラーで設定ミスに気付ける。
モジュールが無効なのにエラーにならず、
設定したつもりでいる方が危ないからね。

587デフォルトの名無しさん (ワッチョイ a3d0-J7KC)2018/09/02(日) 15:42:33.40ID:NagoJ+s80
>>581
怖い(´・ω・`)

>>582
ありがとう

588デフォルトの名無しさん (ワッチョイ 1d9f-J7KC)2018/09/02(日) 18:59:05.09ID:ub6GWDzd0
>>586
返答ありがとうございます

リファレンスにしていたものが、全てディレクティブを括弧内に書いていたのと
cakephpのインストール直後のプロジェクトに入っていた.htaccessでも
ディレクティブが<ifmodule>で囲まれていたので、
基本的には囲う必要があり、外に出る方がおかしいと思い込みがありました

まさにおっしゃられていた通り、apache2.confを見てみたら
Loadmoduleでmod_rewriteを有効化していたつもりで、実際にはコメントアウトされていたのですが
それにも気付いていませんでした

どうもありがとうございます

589デフォルトの名無しさん (ワッチョイ a3d0-J7KC)2018/09/03(月) 09:54:20.75ID:0wOUtf7+0
読み返してたんだけど>>557の前者って使うことないものなの?

590デフォルトの名無しさん (ワッチョイ 955b-zBrR)2018/09/03(月) 11:36:23.62ID:Shssq38w0
>>587
ネタにマジレスしとくと
dieの発音は「ディエ」じゃなく「ダイ」だし
exitとdieは等価なので、エラーログに残るとかは嘘

exitの方が一般的だとは思うが好きな方を使えばOK
あくまで予想だが、die()はperl言語出身者に配慮して作ったんじゃなかろうか

591デフォルトの名無しさん (スププ Sd43-Oaw6)2018/09/03(月) 12:01:10.60ID:Nk9MF4uYd
height
align
allow
deny

web系に関わってるのにこういう単語の読み方がおかしな人の言う事は疑ってかかった方がいいという経験則

592デフォルトの名無しさん (ワッチョイ 5b9f-SMhC)2018/09/03(月) 12:08:27.54ID:lQhKIzFA0
>>590
すまん。perlの関数と勘違いしてた…
PHPにおいてはexitもdieも同じらしい。
dieの引数も標準出力されたw

プログラムは読み手に意図を伝えた方が良い場合もあるから、
exit(1)よりdieの方が致命的エラーなのかなと思わせることはできるかな。
しかし標準出力されるんじゃあ使えないな。

嘘こいてすまん。

593デフォルトの名無しさん (ワッチョイ 5b9f-SMhC)2018/09/03(月) 12:11:22.59ID:lQhKIzFA0
>>591
ヘイト
アリグン

デニー

allowを読み違えてる人は見たことない…

あとは、hrefをハーフ、widthをウィドスは稀に。
ウィドスはまだネイティブに近い方かな?

594デフォルトの名無しさん (ワッチョイ 955b-zBrR)2018/09/03(月) 12:27:19.50ID:Shssq38w0
>>591
ハイト
アライン
アラウ
ディナイ

どれも高校入試の時の発音問題頻出単語(要するに中学レベルの単語)だったような遠い20年以上前の記憶
うんざりする程しつこく教えてくれた当時の英語担任に感謝しないといかん

595デフォルトの名無しさん (ワッチョイ 5b9f-SMhC)2018/09/03(月) 12:40:39.44ID:lQhKIzFA0
アラウか…
何かそこだけ妙にネイティブだな。
アローですまん…

596デフォルトの名無しさん (ワッチョイ 0b81-tpL7)2018/09/03(月) 12:41:40.31ID:wBpew+1c0
本来ネイティブの発音に合わせて読むべきなんだろうけど、
アラウやディナイと発音しても、日本人相手だと通じなかったりする

597デフォルトの名無しさん (ワッチョイ 5b9f-SMhC)2018/09/03(月) 12:44:28.91ID:lQhKIzFA0
アラウはちょっとなあ…
それ言い出すとonlyはオウンリイだし。
日頃はカタカナ英語でいいです。

598デフォルトの名無しさん (スププ Sd43-Oaw6)2018/09/03(月) 12:55:17.57ID:Nk9MF4uYd
ネタなのかマジなのかわからなくなってきたけど正解はもちろん>>594
allow,denyをアローデニーと読んでいた自称サーバー管理者が設定したウンコみたいなサーバーに泣かされて以来トラウマです
そして今なおallow,denyという単語を目にするという事はそれ即ち、去年末にサポートが終わったApache2.2系をまだ使い続けてるというトラウマの再来になる可能性がががが

warning はどうよ

600デフォルトの名無しさん (ワッチョイ 955b-zBrR)2018/09/03(月) 14:06:21.30ID:Shssq38w0
ウォーニング

まぁ会社によって方言みたいなのはあるよね
内心そうじゃないだろ…(ため息)と思いつつ相手に合わせる事も大事

601デフォルトの名無しさん (ワッチョイ 5de9-zBrR)2018/09/03(月) 14:10:12.54ID:fNzMywLO0
今の所全問正解っぽくて安心した

falseをファルスと読む人を見る度に
パルスのファルシのルシがコクーンでパージを思い出す

602デフォルトの名無しさん (ワッチョイ 0bb8-Wsjv)2018/09/03(月) 14:18:24.08ID:bh6+crPg0
アリグンとかデニーとかいってるならヘイグヒトぐらいにしないと

603デフォルトの名無しさん (ワッチョイ 5b9f-SMhC)2018/09/03(月) 14:53:06.39ID:lQhKIzFA0
あんまりこだわると意識高い系とか嫌味を言われそうだし、
まあわかればいいやね…

ここじゃないかもだかど、どっかのPHPスレで
エチョーと書いたらウケたよ。

604デフォルトの名無しさん (ワッチョイ 0b81-tpL7)2018/09/03(月) 14:55:19.36ID:wBpew+1c0
>>603
コーヒー吹くとこだったぞ

allowというかau音はアゥからオゥに寄った側に聞こえるからカタカナ英語的にはアロゥはアリかなと思う
arrowと区別したいときはアラゥと言うべきだと思うけど

デニーとかアリグンは流石にねーなw

606デフォルトの名無しさん (ワッチョイ 23d2-6oUK)2018/09/03(月) 16:58:16.51ID:MppWbPja0
ini → イニ? アイエヌアイ?
array → アレイ? アライ?
あと正直str系の関数が読めない
strlen strpos当たりはわかるけど
stripos strrpos strripos
あたり

607デフォルトの名無しさん (ワッチョイ 955b-zBrR)2018/09/03(月) 17:56:38.19ID:Shssq38w0
array:アレイ

ini:initializationの略
stripos:string case-insensitive postionの略だと勝手に思ってる
strrpos:string reverse positionの略だと勝手に思ってる

かっこよく読みたいなら元の単語を略さずに読めばいいんだろうが
実用的にはアルファベットをそのまま読めばいいじゃなかろうか

608デフォルトの名無しさん (ワッチョイ b58a-zBrR)2018/09/03(月) 19:06:04.00ID:w8msLsZZ0
if
イフ

then
ゼン?

else
エルス?

true
トゥルー?

false
フォールス?

try
トライ?

throw
スロー?

catch
キャッチ?

609デフォルトの名無しさん (ワッチョイ 1d9f-J7KC)2018/09/04(火) 00:34:18.87ID:3EnQXiZU0
すみません、>>583で質問したのですが、
再度質問してよろしいでしょうか

サーバのドキュメントルートに置いた
CakePHPプロジェクトフォルダ(仮にCakeとします)
直下の.htaccessを消去しても
http://{hostIP}/cake/
をアドレスバーに打ち込むと、なぜか
https://{hostIP}/cake/webroot/
にリダイレクトされる現象が起きています

.htaccess以外にリダイレクトが起きる原因として考えられるものがあれば
教えていただきたくお願い申し上げます
なお、サーバはapache2.4.10、OSはDebian8.0です

610デフォルトの名無しさん (ワッチョイ 5b9f-SMhC)2018/09/04(火) 11:43:27.54ID:2slzjYMb0
routes.phpとかは?
アプリのリダイレクトなのか、
apacheのリダイレクトなのか切り分けていくと良いのでは。

611デフォルトの名無しさん (ワッチョイ db9e-J7KC)2018/09/04(火) 21:34:32.07ID:8BTVVQRQ0
include('/path/file.txt');
include('http://www.example.com/path/file.txt');
って何か違いはありますか?

612デフォルトの名無しさん (ワッチョイ 0b80-4Jnz)2018/09/04(火) 22:55:22.87ID:JkSql3w10
>include('/path/file.txt');

/ から始まっているから、何かからの絶対パスかな?

プロジェクトルートか、公開サイトのルートからの絶対パスかな?

613デフォルトの名無しさん (ワッチョイ 5b9f-SMhC)2018/09/04(火) 23:04:14.00ID:2slzjYMb0
上のは言ってみればfile://になるんじゃないの? 違う?

614デフォルトの名無しさん (ワッチョイ a3d0-hHnA)2018/09/05(水) 16:46:47.73ID:dwWFM3zt0
公式のmail()とmb_send_mail()のページを見ていたのですが、
mail()のsubjectは表題、messageはメッセージ、
mb_send_mail()のsubjectは件名、messageは本文となっていました。
これは何かが違うということでしょうか。
くだらない質問と思いますが、よろしくお願いします。

615デフォルトの名無しさん (ワッチョイ 0be8-Bzg2)2018/09/05(水) 17:13:31.91ID:eC5bTWUj0
全く同じ意味ですが異なります
この事に気をつけて厳密に取捨選択し、
どっちでもいいから適当に使いましょう

616デフォルトの名無しさん (ワッチョイ 5b9f-SMhC)2018/09/05(水) 17:23:40.98ID:HJ2kcLma0
mailはエンコードしてくれないから自分でしてから呼び出す。
mbはエンコードしてくれる。

というか、ググれよ!

617デフォルトの名無しさん (ワッチョイ 65b3-zBrR)2018/09/05(水) 17:28:21.76ID:+CD9GwZX0
どっちの関数も直接使うには勝手が悪いので、さっさと基礎理解してライブラリ使うようにしましょう。

618デフォルトの名無しさん (ワッチョイ a3d0-hHnA)2018/09/05(水) 17:46:40.68ID:dwWFM3zt0
アドバイスありがとうございました。

619デフォルトの名無しさん (ワッチョイ 969e-O+me)2018/09/06(木) 17:01:57.65ID:kzkzi/Yy0
<form method="get" でsubmitした場合、
$_GETを使うのが普通だと思うのですが
$_POSTでも値が取れるのですが、そういうもんですか?

620デフォルトの名無しさん (ワッチョイ 569f-vdZN)2018/09/06(木) 17:39:08.61ID:bmlthp5L0
普通だけど普通じゃなくなって来たから、filter_input使う。
このスレの上の方にも出てる。

621デフォルトの名無しさん (ワッチョイ ae81-7GfT)2018/09/06(木) 19:14:57.47ID:xdo6cDUj0
>>619
それちゃんとGETメソッドで送ってる?
GETとPOSTでは受け渡し方法が違うから
ちゃんとやっていればPOSTでは受けとれないはず

622デフォルトの名無しさん (ワッチョイ 969e-O+me)2018/09/06(木) 20:05:38.46ID:kzkzi/Yy0
>>621
WordPressなんですが、
form タグを埋め込んでbuttonクリックでsubmitしているので間違は無いと思います。
でも何故か$_GETでも$_POSTも値が取れるんです。

623デフォルトの名無しさん (ワッチョイ 569f-vdZN)2018/09/06(木) 20:59:34.70ID:bmlthp5L0
GETとPOSTと両方送ってるとかじゃないの…w

624デフォルトの名無しさん (ワッチョイ 8b80-f65Y)2018/09/06(木) 21:15:35.52ID:64ZwjQvb0
methodをgetでサブミットしてるなら
HTTPプロトコルではcontent bodyの部分は空になる
そういう仕様だからな
つまり通常postで取得できる部分はからっぽ

methodをpostでサブミットしてるなら
そういう状況はHTTPプロトコルでも十分にありえる
uriにurlエンコードされた文字列が含まれる状況でpostしたケースならありえるということになる

ちなみにオレはスクリプトの変数にその値がどう格納されるかは知らない

質問してるヤツは

 getでサブミットしてんのになんでそんなことがおきんの?

というのが質問の主旨と理解した
低学歴知恵遅れがその質問をどう解釈したかは知らない

625デフォルトの名無しさん (ワッチョイ ae81-7GfT)2018/09/06(木) 21:39:08.51ID:xdo6cDUj0
>>619
サーバーのログって見ることは出来ない?
リクエストがどういうメソッドでやり取りされたか分かると思うけど

626デフォルトの名無しさん (ワッチョイ 569f-vdZN)2018/09/06(木) 22:24:24.23ID:bmlthp5L0
>>624
冗談にムキになって… 低学歴知恵遅れとかw
主旨についてはわかってて書いてんの。
それが5chというところだから。

627デフォルトの名無しさん (ワッチョイ 8b80-f65Y)2018/09/06(木) 22:27:25.22ID:64ZwjQvb0
はい低学歴知恵遅れ図星
ごまかそうとしても
もうバレてるからな

分かりやすいわ。。。

628デフォルトの名無しさん (ワッチョイ 569f-vdZN)2018/09/06(木) 22:52:05.75ID:bmlthp5L0
正解です。でも知恵遅れはないよ。

629デフォルトの名無しさん (ワッチョイ ae81-7GfT)2018/09/06(木) 22:55:48.48ID:xdo6cDUj0
冗談は冗談が通じる相手にしないと

この質問者はPOSTとGETについて理解できていないんだから
冗談だとは受けとってないと思うぞ

630デフォルトの名無しさん (ワッチョイ 569f-vdZN)2018/09/06(木) 22:59:57.65ID:bmlthp5L0
冗談とは言え、とりあえずパケットキャプチャしてみたら?に行き着いて欲しかったんだけどな。
その後、フレームワークなりの変数の検査するとか。

やり方を切り分けて絞り込んでいかないといけない。

631デフォルトの名無しさん (ワッチョイ 7ad0-O+me)2018/09/07(金) 09:44:56.47ID:9ghtkfrV0
PHPを始めたのですが分からないことがあるので教えてください。

https://qiita.com/mpyw/items/2f9955db1c02eeef43ea
上記ウェブサイトに次のコードがあるのですが、配列?を使用する理由を教えてください。

if (!isset($_POST['email'])) {
 $errors[] = 'Eメールアドレスが送信されていません';
} elseif ($_POST['email'] === '') {
 $errors[] = 'Eメールアドレスが入力されていません';
}

よろしくお願いします。

632デフォルトの名無しさん (ワッチョイ bbb3-fTNn)2018/09/07(金) 10:03:27.93ID:0+aYiLfb0
>>631
この例文の中では特に意味はない。post したページに戻る際、エラーをまとめて送る時に使う。

633631 (ワッチョイ 7ad0-O+me)2018/09/07(金) 10:16:38.86ID:9ghtkfrV0
>>632
このような使い方もあるんですね。
教えてくださり、ありがとうございました。

634デフォルトの名無しさん (ワッチョイ 7ad0-O+me)2018/09/09(日) 16:54:11.51ID:kcIkPUJb0
HTMLとPHPを使ってメールを送信するため、次のように書いたのですが、良いか悪いか判断ができません。
右も左も分からないため、どのようなことでも構いませんのでアドバイスをください。
メールは【入力】→【確認】→【送信】の流れで送信されます。
どうか、よろしくお願いします。

【input.php】
https://ideone.com/cEGHAA



【check.php】
https://ideone.com/R9GueN



【thanks.php】
https://ideone.com/R2mR1b

635デフォルトの名無しさん (ワッチョイ 569f-vdZN)2018/09/10(月) 09:10:57.34ID:LEZi3nV80
form.php
confirm.php
send.php
こうすると良いと思う

636634 (ワッチョイ 7ad0-O+me)2018/09/10(月) 14:59:46.15ID:Jh3v7l2E0
>>635
アドバイスありがとうございます。
辞書を引いたら納得しました。
さっそく反映したいと思います。

637デフォルトの名無しさん (ワッチョイ 569f-vdZN)2018/09/10(月) 20:03:31.22ID:LEZi3nV80
ネタにマジレスしてるんで、仕方ないからチラ見してみた。
このスレのダメな例の集大成みたいだな。

受け取った値の長さに制限を掛けて、巨大データを受け入れないようにする。
HTML側でもmaxlengthやtype="email"やrequiredを使うと気休めになるかも。
PHP側でも長さをチェックする。

filter_inputの使い方が違う。
受け取った価をあえて$_SESSIONに入れてどうする?
それは使わずに$subjectとかに代入する。

mail関数に入れるデータはエンコードするか、mb_send_mailを使う。

あとは動いてるならいいんじゃない?

勉強のためならいいけどガチでサービスに導入とかはしない方がいいと思うよ
既存のサービス使った方が絶対に安全

639デフォルトの名無しさん (ワッチョイ 532a-5rD0)2018/09/11(火) 12:49:51.36ID:swAVBRLl0
class内のプロパティに関数って指定できないでしょうか?

class Test {
public $date = date("Y-m-d");
}

というイメージです。これを記述しても
Parse error: syntax error, unexpected '(', expecting ',' or ';'

というエラーが出るので無理だと思っているのですが、
できる方法があれば教えてください。

640デフォルトの名無しさん (ワッチョイ 8723-eFvF)2018/09/11(火) 13:07:18.10ID:B2tEflKb0
やり方はいろいろあるが、一般的にはコンストラクタの中で代入するんじゃないかな

やり方はいろいろあるが、一般的にはコンストラクタの中で代入するんじゃないかな

642634 (ワッチョイ 7ad0-O+me)2018/09/11(火) 17:53:48.50ID:sA/7deNB0
>>637
アドバイスありがとうございます。
次を課題に学習を進めたいと思います。
・HTMLとPHPで値の長さに制限を掛ける
・filter_inputの使い方を理解する

mail関数に関してもmb_send_mail関数と合わせて考え直します。
セッション変数については入力されたデータを持ちまわる体で使用しようと考えているのですが、type="hidden"の方が良いのでしょうか。
今は自身の理解が不足しているので、もう一度最初から取り組みます。

アドバイスありがとうございました。

>>638
アドバイスありがとうございます。
やはり既存のサービスの方が安全ですか。
今は自身のために勉強したいと思います。

アドバイスありがとうございました。

643デフォルトの名無しさん (ワッチョイ 569f-vdZN)2018/09/11(火) 19:04:42.02ID:Of5zYKw20
>>642
hiddenよりはセッションを使ってください。
なんか勘違いしてそうだから。
https://teratail.com/questions/63786

644デフォルトの名無しさん (ワッチョイ 96d5-tygy)2018/09/11(火) 20:24:28.80ID:NY6FXi0j0
このくらいのフォームなら hidden の方がいいんじゃね。
セッションでなんかメリットある?

645デフォルトの名無しさん (ワッチョイ 569f-vdZN)2018/09/11(火) 21:33:19.08ID:Of5zYKw20
使い方を間違えてるから正した方が良いと思っただけ

646634 (ワッチョイ 7ad0-O+me)2018/09/12(水) 08:16:38.34ID:uWMSldyR0
>>643
参考URLありがとうございます。
hiddenとセッションの使い分けを勉強します。

647デフォルトの名無しさん (ワッチョイ 569f-vdZN)2018/09/12(水) 08:31:17.86ID:t1WfAWi+0
>>646
う、うん。
でも一番はそこじゃないんだな。
スーパーグローバル変数を書き換えるべきではないのに、
そらをしてしまっているところね。
そもそもスーパーグローバルを使わないためのfilter_inputだから。
最初は誰でもそんなもんだから頑張ってね。

648634 (ワッチョイ 7ad0-O+me)2018/09/12(水) 08:36:21.52ID:uWMSldyR0
>>647
さっそく勘違いしてしまいました。
アドバイスありがとうございます。

649デフォルトの名無しさん (ワッチョイ 5e92-fTNn)2018/09/12(水) 11:26:01.33ID:/jhmkHwQ0
どうしてもわからないので質問お願いします。

私はWindows7でxamppを使いPHPを動かしています。
類似画像の比較のため「libpuzzle」というライブラリを使いたいのですが、インストールのやり方がわかりません。
インストールが簡単とのことで下記のページを参考にしようと思っているのですが、何をやっているのかわかりません。

https://fei-yen.jp/maya/wordpress/blog/2011/05/05/php%E3%81%A7%E7%94%BB%E5%83%8F%E3%81%AE%E9%A1%9E%E4%BC%BC%E5%BA%A6%E5%88%A4%E5%AE%9A%E3%81%AE%E3%81%A7%E3%81%8D%E3%82%8B%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA/

ひとまず「libpuzzle-0.11.tar.bz2」はダウンロードしました。

650デフォルトの名無しさん (ワッチョイ 569f-vdZN)2018/09/12(水) 12:09:08.51ID:t1WfAWi+0
そのURLを見たけど、tarファイルを展開してLinuxでコンパイルしてるよね。
この時点でWindowsはまったく該当しないので見てもわかるわけない。
Windows用のコンパイル済みバイナリをインストールするのが正解かと。
それか、そのファイルをWindowsで自前コンパイルするか。

651デフォルトの名無しさん (ワッチョイ 5e92-fTNn)2018/09/12(水) 12:24:56.89ID:/jhmkHwQ0
ありがとうございます。

いくつか調べてlibpuzzleがC言語で作られているはわかりました。
Windowsだとsoファイルではなくdllファイルで動かすみたいだから
libpuzzle.cをコンパイルしてdllにする、という感じなのでしょうか?

652デフォルトの名無しさん (ワッチョイ 569f-vdZN)2018/09/12(水) 12:36:07.34ID:t1WfAWi+0
はい。恐らく…

653デフォルトの名無しさん (ワッチョイ 5e92-fTNn)2018/09/12(水) 14:11:08.65ID:/jhmkHwQ0
C言語は…、ちょっというかさっぱりわからないですね…。

GitHubでlibpuzzleの解凍されたフォルダが有りました。

https://github.com/jedisct1/libpuzzle

もし参考になれば

654デフォルトの名無しさん (ワッチョイ 96d5-tygy)2018/09/12(水) 16:38:39.22ID:bjh9HqnE0
>>647
そこで言ってるスーパーグローバルの書き換えって $_SESSION のこと?

655デフォルトの名無しさん (ワッチョイ 569f-vdZN)2018/09/12(水) 19:23:24.37ID:t1WfAWi+0
>>654
そう。
言われてハッとしたんだが、もしかして俺すげー嘘ついてる?
フレームワーク無しなら$_SESSIONに代入せざるを得ないか?
何かもう忘れたわ。

適当な記憶でたまに嘘ぶっこくから少し自重する。

656デフォルトの名無しさん (ワッチョイ ae81-7GfT)2018/09/12(水) 19:28:11.72ID:WDc70fCa0
面白い議論だと思ってたんだけど
できれば続けてくださいな

セッションは使用禁止にすべきかどうかまで

657デフォルトの名無しさん (ワッチョイ 96d5-tygy)2018/09/12(水) 21:31:55.13ID:bjh9HqnE0
>>655
うん、$_SESSION はこれを直接触る以外のアクセス方法は無いと思う。
そしてセッションのクリアとか考えるのも面倒なので、今回のケースだと hidden の方が手軽だと思う。

658デフォルトの名無しさん (ワッチョイ 5e92-fTNn)2018/09/12(水) 23:14:04.91ID:/jhmkHwQ0
libpuzzleはインストールが困難と判断したので、
他のものを調べたところ、Perceptual Hashが良さそうだったので変更しました。

コンポーザーをダンロードして、インストールはできました。

ですが、実行すると「Uncaught Error: Class 'Jenssegers\ImageHash\ImageHash' not found」といったように認識されません。
Windows7のXAMPPだとuseの書き方が違うのでしょうか?
ソースは以下の通りです。


use Jenssegers\ImageHash\ImageHash;
use Jenssegers\ImageHash\Implementations\DifferenceHash;

$hasher = new ImageHash(new DifferenceHash());
$hash = $hasher->hash('path/to/image.jpg');

echo $hash;
// or
echo $hash->toHex();

659デフォルトの名無しさん (ワッチョイ 5e92-fTNn)2018/09/12(水) 23:14:32.81ID:/jhmkHwQ0

660デフォルトの名無しさん (ワッチョイ 9776-ebpV)2018/09/13(木) 00:39:50.34ID:Mmakf2Wk0
ちゃんとautoload.phpをrequireしてるか?

661デフォルトの名無しさん (ワッチョイ bf9f-ID1G)2018/09/13(木) 07:41:47.23ID:WElsz8IU0
>>648
>>657だって! 本当に申し訳ないです。

662デフォルトの名無しさん (ワッチョイ 17b3-+ow7)2018/09/13(木) 08:13:46.95ID:1dHQYyj40
投稿フォームは、確認画面なくすと session 使う必要がなくて、スマートな実装になるよ。
そもそも確認が必要な内容かどうか検討してみると良いです。
確認が必須なら、モーダルで一旦表示させて投稿させると UX も向上して happy。
ただ、画面はちょっとややこしくなるけどねぇ。。。

663デフォルトの名無しさん (ワッチョイ 7f92-+ow7)2018/09/13(木) 09:25:37.97ID:Rrxby3/D0
>>660
何それ…
やってない
帰ったらやってみる

664デフォルトの名無しさん (ワッチョイ 9fd0-cC+K)2018/09/13(木) 17:07:19.50ID:yxnhKk7t0
>>634のfilter_inputって使い方間違ってるん?(´・ω・`)

665デフォルトの名無しさん (ワッチョイ bf9f-ID1G)2018/09/13(木) 18:13:28.78ID:WElsz8IU0
美しさはともかく、間違ってはいない。
勘違いしていたのは俺…
申し訳ないです。

666デフォルトの名無しさん (スッップ Sdbf-t6RF)2018/09/14(金) 11:13:27.37ID:LYVyvVvXd
提唱者が逃げ出したから、
こういう時にどう使ったら良いか
教えてくれない

667デフォルトの名無しさん (ワッチョイ 9fd0-cC+K)2018/09/15(土) 11:16:20.77ID:h4tGgfju0
ユーザー入力を画面上に表示する場合、どんな時でもhtmlspecialchars関数を使った方がいいんですか !?

668デフォルトの名無しさん (ワッチョイ 17b3-+ow7)2018/09/15(土) 11:29:57.48ID:4K9/kzuG0
>>667
個人的にはここの説明が納得しやすかった
https://qiita.com/mpyw/items/19e6fed835ccdbcb0d6d

画面表示で Content-Type: text/plain の時は、当然だけど必要無い。
text/html な中で、text/plain はちょっと思いつかなかった。
だれかフォローよろしくw

669デフォルトの名無しさん (ワッチョイ 97b8-Moip)2018/09/16(日) 09:00:18.99ID:yeSA5Nar0
考えられるパターンとしては
1.入力値の検証はせずそのまま出力する
2.入力値の検証はせずhtmlspecialcharsを使う
3.入力値の検証→問題はないのでそのまま出力
4.入力値の検証→問題なのでhtmlspecialcharsを使う
5.入力値の検証→問題はないがhtmlspecialcharsを使う
6.入力値を出力前に無害化してそのまま出力

1は当然やっちゃだめ
6は元の入力値と異なる可能性が生まれるので使うなら重要でない箇所限定(非推奨)
5は冗長だが5が一番おすすめ

670デフォルトの名無しさん (ワッチョイ 9f80-bWaM)2018/09/16(日) 19:43:02.43ID:Fs79WbqO0
phpの質問じゃないかもしれないんだけど
URLから指定のディレクトリにアクセスした時に
ファイル名が何だろうと指定のファイルを参照させることって出来ますか?

hoge.com/rand/test.txt
hoge.com/rand/aaa.jpg

randディレクトリにアクセスしたら
ファイルの有無に関わらず
hoge.com/rand/index.phpを参照させて
test.txtやaaa.jpgのURL文字列に応じて
phpが振る舞いを変えてコンテンツを表示させたいです

そんなこと可能でしょうか?

671デフォルトの名無しさん (ワッチョイ 9f80-bWaM)2018/09/16(日) 19:57:17.91ID:Fs79WbqO0
要するに
hoge.com/rand/aaa.jpg
を見てるつもりで
hoge.com/rand/index.php?q=aaa.jpg
で内部的に処理して返したいってことです

672デフォルトの名無しさん (ワッチョイ 9776-ebpV)2018/09/16(日) 20:17:40.26ID:xrMzIoGe0
mod_rewrite使うとか

673デフォルトの名無しさん (ワッチョイ 7f9f-AvBu)2018/09/16(日) 20:28:28.45ID:Lgam3puB0
file(”aaa.jpg”)
で表示できたような

674デフォルトの名無しさん (ワッチョイ 7f9f-AvBu)2018/09/16(日) 20:31:03.90ID:Lgam3puB0
print file($_GET[q])
だったかな
忘れた

675デフォルトの名無しさん (ワッチョイ ff81-okpm)2018/09/17(月) 01:27:02.97ID:aY8QKU/10
>>671
mod_rewriteを使って、

RewriteCond %{REQUEST_FILENAME} hoge.com/rand/(.*)$
RewriteRule ^hoge.com/rand/(.*)$ %1/%2/index.php?q=$1

こんな感じでリクエストを書き直す?
うまく行くかちょっと自信ない

676デフォルトの名無しさん (ワッチョイ 9fd0-cC+K)2018/09/17(月) 11:11:17.62ID:B1zUo4Ps0
PHPの処理はHTMLの外で行い、結果だけをHTMLの中に表示する方法が良いんですか?(´・ω・`)

677デフォルトの名無しさん (ワッチョイ bfd5-Un1/)2018/09/17(月) 12:21:19.45ID:hbuTlOjm0
>>676
その方がいいと思うよ。
HTMLを修正する理由と処理を修正する理由は大抵違うから、それぞれ分けておくと都合がいいと思う。
分業の面でもいいし、処理の見通しも良くなる。

ただそう作るなら、表示(見た目)のためのコードは処理側から排除するのがいいと思う。
エスケープはもちろん、例えばマイナスの数値を表示するのに▲を付ける仕様だったとして、それを行うコードはHTML側に実装する感じ。
処理側で▲付きの文字列を作るようなことするとカオスになっていく。

678デフォルトの名無しさん (ワッチョイ bfd5-Un1/)2018/09/17(月) 12:29:30.95ID:hbuTlOjm0
>>676
そしてPHPはHTMLを分けるというのが非常に簡単にできるから、やらなくちゃ損くらいに思った方がいい。

<?php
:
いろいろ処理;
:

include 'gamen.html';
?>

みたいに include するだけで表示されるんだから。
実際には gamen.html にはわずかなPHPコードも入る純粋な HTML ではないから拡張子を .html とするよりは、.php なり .tpl(テンプレート)なりそれっぽいのにしておくといいと思う。
案外 .php にしておくと、ブラウザからそれを直接見てもPHPのコードは直接見えないから手軽な安全策かも。

679デフォルトの名無しさん (ワッチョイ 9fd0-cC+K)2018/09/17(月) 15:38:02.41ID:B1zUo4Ps0
>>677
>>678
分けた方が管理しやすいですか(゜-゜)
ありがとうございました。

680デフォルトの名無しさん (アウアウカー Saeb-Gwc+)2018/09/18(火) 18:36:46.23ID:LS9+DTCza
今回乗っ取りが可能な脆弱性が発見されましたが、その脆弱性を試したいです。
どうすればいいのでしょうか?

681デフォルトの名無しさん (ワッチョイ 97b8-Moip)2018/09/19(水) 12:22:09.46ID:hsm6EpoV0
Bug #76582が原因らしいからバグレポート読んでみたら?
再現コードも書いてるよ
まぁ単にXSSが可能だったってだけでそれ以上でもそれ以下でもないが

682デフォルトの名無しさん (ワッチョイ bf4b-72gh)2018/09/19(水) 20:12:04.29ID:2g+A18ll0
laravelを始めようと思うのですがrailsと比べて何が良くて何が悪いのか聞きたいです
僕自身railsはチュートリアルやったくらいしか知りません

683デフォルトの名無しさん (ワッチョイ 2d8a-Lcjh)2018/09/20(木) 08:52:56.46ID:2cUVSblD0
set_file_buffer (stream_set_write_buffer)が動作しないということが2003年ごろから言われているみたいですが
今さっき検証してみたところやはり-1が返ってきて動作していないようです
何故こんな関数が未だに存在しているのか、わかる方よろしくお願いします
http://jp2.php.net/stream_set_write_buffer

684デフォルトの名無しさん (ワッチョイ 82d0-Y82R)2018/09/21(金) 10:36:19.22ID:0nwAv71v0
POSTされた値を最初に変数に代入してから検証するのと、
検証してから変数に代入するのとでは安全性に違いはありますか?

変な質問で申し訳ない(´・ω・`)

685デフォルトの名無しさん (ワッチョイ 6d23-v8+k)2018/09/21(金) 12:16:47.46ID:CXW/z+bx0
一概には言えないが、値の検証はその値を使う直前にやるのが一番良い
検証の後に不用意に値が書き換わってたら検証の意味がない

686デフォルトの名無しさん (ワッチョイ 82d0-Y82R)2018/09/21(金) 16:41:58.26ID:0nwAv71v0
>>685
いただいたレスを参考に考えた結果、値を使う直前に検証することにしました。
アドバイスありがとうございました。

687デフォルトの名無しさん (ワッチョイ fe92-tHrl)2018/09/21(金) 18:17:31.43ID:2dxDcAKa0
>>658です。
お返事遅くなってしまい申し訳ないです。

>>660
うまくいきました。
XAMPPだと相対パスだとうまく行かなかったのですが、
絶対パスだとうまく行きました。

どうもありがとうございます。

新着レスの表示
レスを投稿する