PHP質問・雑談スレ4【初心者お断り(ROM歓迎)】at PHP
PHP質問・雑談スレ4【初心者お断り(ROM歓迎)】 - 暇つぶし2ch539:nobodyさん
18/07/14 19:21:07.65 .net
>>522
海外アクセス弾くだけでほぼ無くなる。「htaccess 海外 拒否」などで検索
もしくはNGワードの処理をかます。
これは書き込み後にテキトーに判定してdie()するだけでいい。めんどくさい事は後で考えて、生産的な事をまずやろう

540:nobodyさん
18/07/14 20:48:13.31 .net
>>525
私は書き込み文字の中に全角文字がひとつも無かったら、「全角文字を含めてね」ってメッセージを出して弾くようにしたら、海外のスパム書き込みは100%排除できました。

541:nobodyさん
18/07/14 21:12:36.64 .net
>526
頭いいな、いろんな意味で完璧な対策と思う
素直にすごい

542:nobodyさん
18/07/14 21:25:53.98 .net
中国弾けなさそう

543:nobodyさん
18/07/14 21:46:15.25 .net
>>528
確かに中国語だと弾けないですね笑
でも今まで中国語の書き込みは無いです。
てか、もし私が中国のスパム業者なら、日本や欧米の掲示板に中国語で書き込んだりせず、書くならやっぱり英語だと思います。

544:nobodyさん
18/07/14 23:27:28.81 .net
ジェレレーターw

545:nobodyさん
18/07/15 14:57:05.88 OQU8pbJ/.net
考える人より手を動かした人の方が早く覚えるよ
まずは本買うなりサイト見るなりして作ってみればいい

546:nobodyさん
18/07/15 18:25:13.91 .net
外部設計と内部設計の違いもわからないような奴が
いくら本を読んでも手を動かしても100%無理
既存のサービスやプログラムをとっかかりにして
仕様も機能もひとつひとつなぜ存在するのかなぜこうなってるのか学ぶしかない

547:nobodyさん
18/07/15 18:40:30.19 .net
公開されてるの?

548:nobodyさん
18/07/16 01:05:08.50 .net
公開されてるのもある
公開されてないものも設計を考える力を養うにはもってこいの材料

549:nobodyさん
18/07/16 21:26:48.20 .net
!omikujiみたいな公開しないとわからん機能じゃなくて
使ってて目に見える部分であれば
たいていどういう風に作るかイメージが沸く
このスレの人はtwitterだろうがfacebookだろうが作ろうと思えば作れるんじゃないか?
気力がない 作っても流行らない うっかり流行ったら500との闘い 解消するためにサーバ月何十万
PHPerの限界とは経済力と時間の限界なのである

550:nobodyさん
18/07/16 21:30:35.61 Jh/2B4in.net
AWSもLinuxもそこそこ扱えるし作ろうと思えば作れるけど、
レッドオーシャンに飛び込むような元気はない

551:nobodyさん
18/07/16 22:29:54.30 .net
このぐらいだったら作れる
URLリンク(stdput.com)

552:nobodyさん
18/07/16 22:36:10.37 .net
機能それぞれ単体なら比較的容易
全部まとめて、さらにセキュリティ、速度、……となると設計だけでも
かなり複雑になってくるから時間がかかるようになる
ただ、10年前の自分じゃ機能単体もおぼつかなかったと思う

553:nobodyさん
18/07/17 20:43:36.89 .net
>>536
今の知識もったまま20年前にタイムスリップしたいよな

554:nobodyさん
18/07/18 12:47:15.98 B1Xdglk2.net
【放射能の影響か?】 道路の真ん中で直立不動で失神しているトンビ、多発している認知症事故と関連!?
http://


555:rosie.5ch.net/test/read.cgi/liveplus/1531880720/l50 動物まで意識障害?



556:nobodyさん
18/07/20 17:25:59.13 .net
JSのように
$a = 10;
$b = $a || 20;
echo $b; //20
にならんかなあ
これ糞便利なんだけど
論理演算子はorだけでもいいよねえ

557:nobodyさん
18/07/20 17:26:34.38 .net
$a = 10;
$b = $a || 20;
echo $b; //20
ごめんこれ10だわw
$a = 0って書いたつもり

558:nobodyさん
18/07/20 17:50:29.12 .net
null合体演算子(??)を使え
短絡評価した結果何を返すのかなんて後から変えられるわけねぇだろ

559:nobodyさん
18/07/20 19:43:58.83 .net
型ってもんがあるからtrue/falseで返してくれないと怖い

560:nobodyさん
18/07/20 23:00:07.46 .net
>>543
Python3 呼んだ?

561:nobodyさん
18/07/20 23:26:40.30 .net
>>545
いっそそこまで覚悟出来るならやればいいとは思う
混乱はあったけど結果としてPythonの決断は正しかったのだろう
とは言え短絡評価を結果をbooleanにするのも最終評価値にするのも良し悪しだからなぁ

562:nobodyさん
18/07/20 23:57:25.93 .net
何が入るかわからないのがな
最悪を想定するなら短絡評価の前に中身の判別を入れなきゃならない
想定した型かどうか事前に判別するなら短絡評価要らない

563:nobodyさん
18/07/21 17:38:08.88 gWhxLgcg.net
$b = (!empty($a)) ? $a : 20;
NULL合体演算子はissetだからだめだな

564:nobodyさん
18/07/21 19:13:06.04 .net
JavaScriptも三項演算子使えるんだからそれでよくね
短絡評価は言語ごとに差があるからあんまり使いたくない

565:nobodyさん
18/07/21 19:16:09.41 .net
愚直でもわかりやすい判断分岐で書かれてると読む人間にはありがたい

566:nobodyさん
18/07/21 19:18:20.55 .net
なんでも短絡や三項にすれば短いだろってより
素朴にIF文使って書いてある方が
読みやすい場合が多々あるな

567:nobodyさん
18/07/21 19:25:35.94 .net
ネストしてないに限れば三項演算子は読みやすいな
条件部分を>>548のようにちゃんと()で囲ってればif文の変化形にも見えるし
コーディング規約で禁止してるとこは結構あるし賛否両論なのは確かだが

568:nobodyさん
18/07/21 19:33:59.72 .net
phpで三項演算子のネスト書く奴は頭からカレーかけられても文句言えない
ネスト階層が深けりゃコーンスープ付き

569:nobodyさん
18/07/22 05:26:38.13 .net
ifだとクロージャー使って即時実行したくならない?
if (!!$a) {
 $b = $a;
} else {
 $b = 20;
}
$b = (function() use ($a) {
 if (!!$a) {
  return $a;
 } else {
  return 20;
 }
})();
上だとなんか感覚的にいやだ

570:nobodyさん
18/07/22 05:45:59.43 .net
何に代入しているのかを特に明示したいならそれでいんじゃね
単純な代入ならインデントで即わかるとは思うが
読みやすさわかりやすさを理由に(if等で)わかりやすい分岐を・・・って話の流れで
if使いながら$aそのまま(のbool変換値)ifに流すだけなところと
ifに渡すだけの箇所で!!$aってやってるところが意味不明だが

571:nobodyさん
18/07/22 06:26:18.55 .net
> !!$a
これ、 $a == true と等価だよな?
数文字タイプする手間を惜しんで2回反転させる計算コストを発生させてる?

572:554
18/07/22 06:58:19.63 .net
booleanキャストのつもりで使ったが
確かにいらんな

573:nobodyさん
18/07/22 07:54:39.39 .net
素直メンはイケメン

574:nobodyさん
18/07/22 08:21:29.99 .net
!!って書けることを知らなかったw
!!!もできる?

575:nobodyさん
18/07/22 08:32:08.34 .net
やってどうすんのよ

576:nobodyさん
18/07/22 09:22:46.00 .net
エントロピーを増


577:大させるのだ



578:nobodyさん
18/07/22 10:22:27.72 .net
>>560
その発想がなかったから、そんな事できるんだって目から鱗なだけ。

579:nobodyさん
18/07/22 10:39:15.79 .net
!!!$varは!$varと等価だろ

580:nobodyさん
18/07/22 11:57:10.28 .net
いやだからさ、そんな事もできるんだ!
すごい面白い!
じゃあ何個まで重ねられるんだろう?って話だよ。
どこかでエラーにされて怒られるとは思うけどさ。

581:nobodyさん
18/07/22 13:15:13.80 .net
eval()あんだから自分で試してみりゃいいじゃん

582:nobodyさん
18/07/22 13:35:16.79 .net
>>554
下はJavaScriptが好きそうだな
「名前空間が汚れる」とか言って
でも上のシンプルな方が読みやすい
>>556
>$a == true
これもこの素朴な方が分かりやすい
「!!$a」とか多用すると読みにくい
トリッキーな書き方より
それを抑えて読みやすくする方が大事

583:nobodyさん
18/07/22 15:58:11.39 .net
unless (!!$a || !$b)

584:nobodyさん
18/07/22 17:01:30.11 .net
>>550
>>551
同意
書く方は短い方が書きやすいんどろうけど

585:nobodyさん
18/07/22 19:17:55.24 .net
短く書くことが目的化してるコードはバグ出やすい上にデバッグし難いんだよなあ

586:nobodyさん
18/07/22 19:19:38.87 .net
でもさすがにisset($_POST/$_GET)は三項演算子使うでしょ?

587:nobodyさん
18/07/22 19:23:07.08 .net
>>570
filter_input 使うから、使わない

588:nobodyさん
18/07/22 19:35:16.04 .net
まとめて初期化、まとめて確認って手もあるしなあ
スタンダードというわけじゃなし

589:nobodyさん
18/07/22 19:40:11.51 .net
filter_inputってバリデーションでしょ?
issetしたあとに使うものだよね?

590:nobodyさん
18/07/22 19:56:43.65 .net
転載アフィか何かなの?

591:nobodyさん
18/07/22 20:01:42.81 .net
その辺の処理は各々好きにしろとしか
・NOTICEが出ない
・その後の処理でバグを生まないようにする(デフォルト値設定、検証除去etc)
これが出来てれば良いわけで

592:nobodyさん
18/07/22 20:10:17.68 .net
>>573
マニュアル読んでみ。幸せになれる。スーパーグローバルから開放されるぞw

593:nobodyさん
18/07/22 20:36:58.12 .net
>>554
elseまでいかんでも
$b = $a;
if (!$b) $b = 20;

594:nobodyさん
18/07/22 20:41:29.86 .net
>>575
後々、それが出来てるかどうか、バグを生んだのがそこかどうか確認するのに
文字数少ない代わりにわかりにくい書き方とか最悪だろって話

595:nobodyさん
18/07/22 20:47:50.31 .net
$aの型が例えばintなどと保証されてるのか?
保証されてるなら!$aなんてint(0)の判別にしかならないのに直感的じゃない
保証されてないなら'abc'やarray(0)が来た時どうすんの

596:nobodyさん
18/07/22 20:52:50.72 .net
三項演算子の何がわかりにくいのか理解に苦しむな
ワンライナーで書けるってだけでif-elseと変わらんのに
(condition)
?
 when-true
:
 when-false
;

597:nobodyさん
18/07/22 21:18:33.98 .net
プログラム書く上で1行で書けるかどうかってなんか価値があるの?
コードゴルファーphp?

598:nobodyさん
18/07/22 21:22:28.39 .net
if( ~~~~ ) ~~~~; else ~~~~;
三項演算子の特権じゃないじゃん

599:nobodyさん
18/07/22 21:25:51.63 .net
>>581
1行だ短いだなんだじゃなくて、何がわかりにくいのか理解不能

600:nobodyさん
18/07/22 21:34:23.08 .net
ワンライナーって見ただけで私アホですと脳内変換されるわ

601:nobodyさん
18/07/22 21:36:59.50 .net
>>584
ぺちぱーってバカにされんぞ

602:nobodyさん
18/07/22 21:39:59.36 .net
>>585
ワンライナー
-rオプション使いまくってる人?えっ違うのですか?
ぺちぱー
吠えてるだけ

603:nobodyさん
18/07/22 21:42:00.36 .net
関数型言語で発狂してこいよ

604:nobodyさん
18/07/22 21:42:30.07 .net
価値はある
行数ベースで費用計算してるとき安くなる

605:nobodyさん
18/07/22 21:43:56.87 .net
三項演算子は短く書くためのものじゃないが。
その程度の理解なのなら自分で言ってるように使わないのが無難だな。
無駄にマウント取ってるのは笑えるがw
ifelseは組み込み制御構文で三項演算子のように式が要求されるところには置けない(評価されて値になれない)

606:nobodyさん
18/07/22 22:05:07.77 .net
同じことが実現できる場合の書き方の比較であって
誰もそんな当たり前の話しとらんのだが

607:nobodyさん
18/07/22 22:06:35.91 .net
嘘乙w

608:nobodyさん
18/07/22 22:09:52.68 .net
ドヤ顔マウンターぺちぱー(笑)

609:nobodyさん
18/07/22 22:25:04.60 .net
で、1行でかけることになにか価値あるの?

610:nobodyさん
18/07/22 22:29:44.80 .net
ないよ。正確にいうと関係ない。
一行で書くためにあるものじゃないからね。三項演算子は。

611:nobodyさん
18/07/22 22:34:07.28 .net
なんで話の流れと関係ないのに、三項演算子だけの特権でもないのに、ワンライナーで書けるってことをわざわざ書いたの?

612:580
18/07/22 22:39:48.38 .net
ん?俺がワンライナーとか言ったのがまずかったのか?
普通三項演算子はワンライナーで書くもんだからそう言っただけなのだが
別にそこはメインじゃないし主題ではない
?:という2つの演算子しか使っておらず、間違い探しをするようなものでもなく
何がわかりづらいのか理解できないって話をしただけ
ちなみに会話してんの俺じゃないぞ・・・

613:nobodyさん
18/07/22 22:40:24.80 .net
少ない行がいいなら最期に¥rと¥nを置き換えて1行にすればいいやんm

614:nobodyさん
18/07/22 22:44:10.15 .net
>普通三項演算子はワンライナーで書くもんだから
俺ルール広めようとしないでくれない?

615:580
18/07/22 22:49:21.00 .net
主観ではあるけど
googleで画像検索したりしても、実際ワンライナーが多数派じゃない?
そもそもネストするようなケースじゃほとんど使われないし
これも主観だけど感覚的に正しいと思う

616:nobodyさん
18/07/22 22:53:20.12 .net
改行とインデントで整えないなら1層ですら可読性低いんだけど
しかし、なんで一行・1行などと書かないでワンライナーって書くのかね
文字数多いじゃん検索用ってか

617:nobodyさん
18/07/22 23:10:04.34 .net
if (age < 18) {
  if (gender == 'male') {
    title = 'Master';
  } else {
    title = 'Miss';
  }
} else {
  if (gender == 'male') {
    title = 'Mr';
} else {
  title = 'Ms';
}
if (age < 18) {
  title = (gender == 'male') ? 'Master' : 'Miss';
} else {
  title = (gender == 'male') ? 'Mr' : 'Ms';
}
title = (age < 18) ? (gender == 'male') ? 'Master' : 'Miss' : (gender == 'male') ? 'Mr' : 'Ms'

618:580
18/07/22 23:14:53.52 .net
可読性の定義は人によってさまざまだけど
長ったらしいのはかえって可読性が下がると俺は思う
>>601では真ん中が一番読みやすい

619:nobodyさん
18/07/22 23:16:56.10 .net
ビットにしてswitchしよう

620:580
18/07/22 23:19:58.63 .net
一番上がおかしかった
if (age < 18) {
  if (gender == 'male') {
    title = 'Master';
  } else {
    title = 'Miss';
  }
} else {
  if (gender == 'male') {
    title = 'Mr';
  } else {
    title = 'Ms';
  }
}
やっぱこれは俺にはあってないな

621:nobodyさん
18/07/22 23:20:56.62 .net
一番下もおかしいんだが
php書けないのか

622:580
18/07/22 23:25:42.57 .net
>>605
これPHPじゃないし
三項演算子の可読性について、stackoverflowで引き合いに出されてたコード
PHPは評価の仕方が他の言語と違うので
そもそも一番下のようなコードは書いたことがない

623:nobodyさん
18/07/22 23:33:07.26 .net
>>602
同意
ネストしないなら3項演算子がシンプルでよいがネストさせるヤツは死ねと思ってしまう

624:nobodyさん
18/07/22 23:37:49.88 .net
俺Pythonistaだけど、{}が読みづらい原因だから、こうするといいよ。
if ($age < 18)
  if ($gender == 'male')
    $title = 'Master';
  else
    $title = 'Miss';
else
  if ($gender == 'male')
    $title = 'Mr';
  else
    $title = 'Ms';

625:nobodyさん
18/07/22 23:43:15.32 .net
PSR-2>呼んだ?

626:nobodyさん
18/07/22 23:59:30.06 .net
$titles = [
 'male'  => [ 'u18' => 'Master', 'other' => 'Mr' ],
 'female' => [ 'u18' => 'Miss',  'other' => 'Ms' ],
];
$age_category = ( $age < 18 ) ? 'u18' : 'other' ;
// もしくは
if( $age < 18 )
 $age_category = 'u18';
else
 $age_category = 'other';
$title = $titles[ $gender ][ $age_category ];
一定以上複雑なときはこうしておくかな
判断が増えたとき処理構造を大変更したくないから
というか、性別やu18かどうかをフラグで持っておくのが普通だと思うが
三項演算子だとすごく短い2つの文字列どちらか選択とかならまだいいけど
関数や式が絡むと : の区切りがわかりづらくなるんだよな

627:nobodyさん
18/07/23 00:00:45.23 .net
実務的にはそれぞれ属性を自分のobjectに聞いて、って感じのが多いかな

628:nobodyさん
18/07/23 00:14:43.72 .net
stackoverflow探してみたけどそれっぽいのが見つからないわ

629:nobodyさん
18/07/23 00:48:54.19 .net
URLリンク(www.quora.com)
stackoverflowではないな

630:nobodyさん
18/07/23 01:16:15.86 .net
echo 'こんにちは、' . ($name && strlen($name) > 0) ? trim($name) : "anonymous" . "さん";
$name = ($name && strlen($name) > 0) ? trim($name) : "anonymous";
echo "こんにちは、{$name}さん";
var = a ? b : c;を徹底して、
それ以外を組み込んだ、上のような使い方をしなければ問題ないと思う。
Viewには処理済み変数のみを埋め込むのを徹底すればいい。

631:nobodyさん
18/07/23 01:22:26.76 .net
表示名の場合はだいたい
$nameを先に'anonymous'で初期化しておいて
セッションがあってDBから取ってくる等の時に$nameを上書きする
ってやるよね

632:nobodyさん
18/07/23 01:27:12.91 .net
そだねー

633:nobodyさん
18/07/23 01:27:21.03 .net
条件2つ処理する2x2の構図でも
条件1の結果によって条件2の式自体が変わる場合は
Balancedケースでも可読性落ちるよね

634:nobodyさん
18/07/23 01:44:19.98 .net
三項演算子を使うときに可読性が落ちない条件を突き詰めていくと
一重であることと
代入される部分が簡潔で統一されてることのほかに
条件部分が簡潔で統一されてることも必要だと思うんだ
18<=ageのときは性別にunknownやnewhalfが追加されたら、途端に難解になるし
age<18ではgender==='male'だけど18<=ageではchecktitle(age,gender)の戻り値だったりすると、わりとめちゃくちゃ

でもそうするとvar=(a)?a:20;みたいな条件になりがちになって
短絡評価のわかりにくさの話に戻るんだよね
$var = (expr) ?
  value1 :
  value2 ;
みたいな書き方だったら多少複雑でもいい

635:nobodyさん
18/07/23 01:46:11.40 .net
簡潔じゃないと1重なのか2重3重になってるのかパッと見てわからないからな
その辺ifでは迷ったことがあまりない

636:nobodyさん
18/07/23 06:55:36.75 .net
> 18<=ageのときは性別にunknownやnewhalfが追加されたら
そこまでくると>>603が良さそう
1(under18)
2(over18)
4(male)
8(female)
16(unknown)
32(newhalf)
ちなみにnewhalfじゃなくて
shemaleとかladyboyが正しいおっぱいおちんちんMAN

637:nobodyさん
18/07/23 07:10:51.79 .net
なんだそれは
ageもgenderも1つに閉じ込めてbit演算するならunder18/over18は下位1bit、genderは以降上位bit、ってとこだろう
maleやfemaleを両方選択可能の並存状態にしてどうするんだよ
2値が1種、4値が1種なら3bitで済むだろう

638:nobodyさん
18/07/23 07:29:32.52 .net
そもそも話題が>>618の趣旨とは離れることだが、1点付け加えると
条件がどう動くかわからず拡張性を考えるのであれば
愚直にifやswitchで構造化するか
>>610のように1つ1つ条件を絞れば引き当てられるtableを作るのが筋だろう
ageの判定処理は完全固定と断定できないだろうし
age自体を現在日付とユーザ誕生日設定によって動的に取得させることになる可能性がある
フラグ化してのbit演算では柔軟性・拡張性に乏しい、全然良さそうじゃない

639:nobodyさん
18/07/23 09:03:36.27 .net
えせグラマ

640:nobodyさん
18/07/23 10:47:42.67 .net
$age+$genderでやれば拡張も容易

641:nobodyさん
18/07/23 11:17:26.62 .net
elseifを使えばネストなく簡略化できる
sql のselect case見たいな表記できる
if ($age < 18 and $gender == 'male') {
 $title = 'Master';
} elseif ($age < 18){
 $title = 'Miss';
} elseif ($gender == 'male') {
 $title = 'Mr';
} else {
 $title = 'Ms'
}

642:nobodyさん
18/07/23 11:34:04.40 .net
$title = [
 5=>'Mr', 6=>'Master',
 9=>'Ms', 10=>'Miss',
 17=>'Mr/Ms', 18=>'Master/Miss',
 33=>'Mx', 34=>'Mx'
];
switchは伸びがちになるしテーブル作るより遅くなるけど
可読性の面では
case GENDER_TS+AGE_UNDER18:
case GENDER_TS+AGE_OVER18:
 $title = 'Mx';
みたいに出来るから考えようによってはいいかもね

643:nobodyさん
18/07/23 11:39:51.37 .net

配列も出来るらしい
$title = [GENDER_TS+AGE_UNDER18 => 'Mx'];
みたいに
知らなかった

644:nobodyさん
18/07/23 11:43:37.99 .net
>>610と比較して1次元になるだけでメリットはないな

645:nobodyさん
18/07/23 11:48:06.16 .net
条件使わなくて済むよ
下準備も大変になるけど

646:nobodyさん
18/07/23 12:06:46.43 .net
>>625
ぱっと見何やってるのかよくわからない
三項演算子もそうだけど結局読む人のレベル次第だな

647:nobodyさん
18/07/23 14:58:02.10 .net
>>629
三項演算子だと処理が煩雑になるほど記述が鬱陶しくなるか難しいかのトレードオフじゃん

648:nobodyさん
18/07/23 15:11:43.17 ci3EIyjd.net
Pythonにすれば良い
$bar = $fooVal == 10 ? $trueVal : $falseVal
の代わりに
$bar = $trueVal if $fooVal == 10 else $falseVal
みたいに書けてちょー分かりやすい

649:nobodyさん
18/07/23 15:14:29.70 .net
ちょー(笑)

650:nobodyさん
18/07/23 15:19:01.63 .net
phpどころかビット演算というプログラムの基本すら知らない奴が居付いている

651:nobodyさん
18/07/23 15:21:44.19 KYWJiLD7.net
関数型言語では同じ変数に何度も代入するって事は基本やらない
明示的に値を変更可能な変数にすれば再代入可能だが
乱用すると関数型使う意味が無くなる
なぜ再代入を避けるかって言ったら
理由は色々あるが
一番はバグの原因になるから
ScalaにもPythonのような式扱いのif文があったり
switchが無く代わりにmatchを使うのもそれが理由

652:nobodyさん
18/07/23 17:34:07.95 .net
ビットフラグ立ててるだけでビット演算をしてるわけじゃないからな

653:nobodyさん
18/07/23 18:00:32.66 .net
初見のわかりやすさってのはシンボルか単語かの違いってのが大きいのだろうけど
みんな大嫌い正規表現だって慣れれば大したことはない
三項演算子はネスト出来ることが問題なのであってネストしなければ問題はないのである

654:nobodyさん
18/07/23 18:05:34.79 .net
正規表現わけわかんないよ
慣れるしかないんだろうね

655:nobodyさん
18/07/23 18:17:28.84 .net
どこまでが条件部かどこが区切りか
誰が見ても即座にわかる単純明快なケース限定ならいいかもね
それかキッチリ改行入れること

656:nobodyさん
18/07/23 19:16:40.02 .net
改行が減る=行数ベースの料金が下がる
文字数が減る=文字数ベースの料金が下がる

657:nobodyさん
18/07/23 19:38:29.41 .net
プログラムがより単純化するのは流れであって
コード単価あげるか 成果物に対して報酬をもらえば�


658:ィk



659:nobodyさん
18/07/23 20:20:18.09 .net
正規表現はperl時代に超覚えてマスターした気になっていたが、
PHPやJavaScriptだと微妙に違ったり後方参照も違ったり、
なんか1日中悩んでたりする。

660:nobodyさん
18/07/23 21:10:25.52 .net
>>642
言語で微妙に違うんですね
苦手です

661:nobodyさん
18/07/23 21:41:55.31 .net
>>643
慣れの問題だと思います。
PCREなのに使いこなせない自分が情けない…
preg_matchすら悩むw

662:nobodyさん
18/07/25 20:02:42.21 .net
parse_ini_fileの結果を取得するときに、
セクション名そのものを取得したい場合はどう書いたら良いでしょう?

663:nobodyさん
18/07/25 20:27:43.62 .net
2番目の引数にtrue設定すればいいんじゃね

664:nobodyさん
18/07/25 21:42:20.18 .net
ありがとうございます。
それは知っていたんですが、そういう次元じゃなかったです。
変数名をtypoしていただけでしたw
お騒がせしました…

665:nobodyさん
18/08/01 15:19:07.84 .net
typo typer

666:nobodyさん
18/08/01 16:33:29.44 .net
ペチペスト

667:nobodyさん
18/08/02 09:21:17.41 .net
ペチパン

668:nobodyさん
18/08/03 08:21:39.65 .net
Windows版のPHP7(XAMPP)で、posix関数を使うにはどうしたら良いですか?
今は特に何もせずにデフォルトインストール状態で、
関数がundefinedエラーになってしまいます。

669:nobodyさん
18/08/03 08:30:42.36 .net
URLリンク(php.net)
>注意: この拡張モジュールは Windows 環境では利用できません。
どうしたら良いかというと、VirtualBoxでWindowsの上にLinuxを乗っける、などしか手はないかと

670:nobodyさん
18/08/03 09:00:23.87 .net
了解です。ありがとうございました!
OS判定して、Windows版の時はその処理はスルーして目を瞑ることにします。
PHPはやっぱりLinuxの方がいいですね。

671:nobodyさん
18/08/04 14:46:44.62 .net
URLリンク(php.net)
この辺使ったりshell_exec系使ってcmd叩けば似たようなことはできるんでないの

672:nobodyさん
18/08/05 09:24:57.34 .net
ActiveRecodeのORMはたくさんありますけど
パフォーマンスが特に優れてるおすすめのものありますか?
処理性能重視したらPDOでSQLゴリゴリ書いたほうがいいのでしょうけど
いまいち自分のSQLに自信がもてないのでSQL書くのは減らしていこうと思っています

673:nobodyさん
18/08/05 10:18:40.81 .net
早過ぎる最適化

674:nobodyさん
18/08/05 13:09:36.79 .net
どれでも大差ないんじゃね?
一番メジャーなのを使っておくのが後々のため…

675:nobodyさん
18/08/05 15:07:22.88 .net
DB設計を確認したほうがパフォーマンス改善効果見込めるのでは

676:nobodyさん
18/08/05 15:07:42.32 .net
俺がそうなんだけど、抽象化がたりないとSQLベタ書きDAOパターンになるよね。

677:nobodyさん
18/08/05 22:12:43.12 .net
元DB屋的にはORMで結合グチュグチュやるより
出来るところはビュー作っといた方がいい希ガス

678:nobodyさん
18/08/05 22:36:24.70 .net
DB担当に流せる仕事は最大限DB担当に流してしまえという風潮
合理的だと思う

679:nobodyさん
18/08/06 19:58:51.12 .net
composerってなんでjsonわざわざ書くの?それが主流みたいだけど
installコマンドは一応用意されてるんだよね?
なんか理由あるんですか?

680:662
18/08/06 20:00:59.88 .net
installじゃなくてrequireか
composer require 'namespace/some_package.3.2.1'

681:nobodyさん
18/08/06 20:38:35.03 .net
流行り
かっこいい気がする
OSSのフロントエンドはこんなノリ

682:nobodyさん
18/08/07 09:57:45.32 spyDBr61.net
どっちもできることにこしたことはないと思うが

683:nobodyさん
18/08/07 10:39:10.39 .net
質問失礼します。
2つサーバーを試行錯誤しながら立てました。
サーバー①には Environment で USER と HOME の設定がありません。
サーバー②には phpinfo で Environment の USER と HOME が設定されているようでした。
--------
USER hoge
HOME /home/hoge
--------
Environment の設定している場所を特定したいのですが、どこを見たら良いでしょうか?
/etc/httpd/conf/httpd.conf
/etc/sysconfig/php-fpm
/etc/sysconfig/httpd
上記のファイルは調査しましたが hoge が見当たりませんでした。
よろしくお願いします。

684:nobodyさん
18/08/07 10:44:03.07 .net
そのapacheを起動した人が手順を知らないか間違えてるんだと思うぞ。
環境変数が付いてる方の起動方法を間違えてる。 
個人のプロセスじゃないのに、個人の環境変数を引き継いでどうすんだよw
serviceコマンドとか使わずに、いきなりhttpdを起動したんじゃないかと。

685:nobodyさん
18/08/07 11:11:49.87 .net
> Environment の設定している場所を特定したいのですが、どこを見たら良いでしょうか?
hogeユーザのHOMEディレクトリ指定はApache httpd側ではなくOS側
/etc/passw d
たぶんLinuxだと思うけど、ならここに書かれてる
ただし、わかってるなら直接編集してもいいけど通常はコマンド経由で変えるもんだと思う

686:nobodyさん
18/08/07 11:17:25.39 .net
>>667
>環境変数が付いてる方の起動方法を間違えてる。 
>個人のプロセスじゃないのに、個人の環境変数を引き継いでどうすんだよw
別に$HOMEが設定されてること自体はあんまり問題じゃないかも
個人の環境変数を引き継ぐ、というのも……じゃあ誰権限で実行すんの?ってことだし
"service httpd"等で起動していても、誰かの権限で動くのだから
※Windowsだとサービス化してればlocalService権限だっけ
んなことよりデーモン起動ユーザのシェルを/sbin/nologinにしとこう

687:nobodyさん
18/08/07 11:26:09.24 .net
どんなユーザ権限で実行しているか等は基礎の基礎
起動ユーザ権限のことを知りたければhttpd.confのUserとGroupの説明をよく嫁そして100%理解しろ

688:nobodyさん
18/08/07 11:38:33.77 .net
かの有名なqmailの作者であるdjb様は、
env - /path/to/bin
のような起動方法を推奨してたぞ。
って今時そんな人知らんかw

689:nobodyさん
18/08/07 11:43:59.63 .net
Linux serviceコマンド 環境変数
これでググっておけよ。
環境変数を意識してないと超レアだが意図しない結果に繋がる可能性はある。

690:nobodyさん
18/08/07 11:48:30.16 .net
単純にchkconfig/serviceで動かすようにしたところ意図せずroot権限で動かしてしまってて書いた.phpの穴突っつかれて以下略
こわいこわい

691:nobodyさん
18/08/07 11:55:14.18 .net
httpdをrootで動かすにはコンパイルオプションが必要…

692:nobodyさん
18/08/07 12:00:18.77 .net
phpのコンパイル直後のmake testに疑問を感じて早数年
でも毎回ちゃんとやってちゃんと結果確認してる

693:nobodyさん
18/08/07 12:03:09.00 .net
>>668 >>669
ワロタ

694:nobodyさん
18/08/07 12:04:52.52 baYuORhx.net
>んなことよりデーモン起動ユーザのシェルを/sbin/nologinにしとこう
なんで?
起動ユーザはrootで、nologinにするのはWorkerプロセスのユーザでしょ。
ApacheにしろNginxにしろ、そういう風に作られてるわけで。
単一で動くタイプとごっちゃにしたらいかんよ。

695:nobodyさん
18/08/07 12:13:53.51 .net
>>677
全面的にすまんかった
> nologinにするのはWorkerプロセスのユーザ
こっちを意図して「デーモン起動ユーザ」と書いてた

696:nobodyさん
18/08/07 12:39:41.49 .net
chsh -s /sbin/nologin root

697:nobodyさん
18/08/07 12:44:15.65 .net
root router

698:nobodyさん
18/08/07 14:28:42.07 .net
突然思い出したが、
むかーしのFre


699:eBSDってnologinの中身がexitって書かれてるシェルスクリプトだったなw



700:nobodyさん
18/08/07 14:33:20.67 .net
それで機能しちゃうもんなのか

701:nobodyさん
18/08/07 17:00:47.53 7Qa/G72W.net
/bin/falseとかでもええんやで。

702:nobodyさん
18/08/07 17:39:43.15 .net
特に理由もなく/dev/nullが好きだった時期があった

703:nobodyさん
18/08/07 19:04:34.22 .net
UNIXアカウント=メアドという古き良き安全なインターネットの時代は、
/usr/bin/passwdをログインシェルに設定して、
パスワード変更はtelnetで繋ぐとかもあったな。

704:nobodyさん
18/08/07 22:31:33.33 .net
>>666
php-fpmならpool.dは見たのかな
php-cgiでsuexecやmod_suphpならユーザー権限になって当然だし
>>667
あなたの環境では非特権ユーザーがポート80をバインドできるようにlibcapを使っているんですね
それはあまり普通じゃないので、人と話すときの前提にしない方がいいですよ
>>671
バーンスタイン先生はEd25519でSSHやTLS界隈じゃバリ現役

705:nobodyさん
18/08/08 01:27:35.83 .net
phpで、 $var = 'text'; // ←これ、この代入を検知して代入直後に何らかの処理を自動発動させる、ってこと、できる?
ループ中で逐一$varをチェックする、というようなのではなく

706:nobodyさん
18/08/08 01:38:57.92 .net
その代入文の次の行に処理書けばいいだけでは?

707:nobodyさん
18/08/08 03:47:12.65 .net
オブジェクトにしてセッター通す

708:nobodyさん
18/08/08 07:06:46.06 .net
>>686
無理してるなあ

709:nobodyさん
18/08/08 10:39:23.28 8EBBnoJ7.net
>>686
qmailとかなんとかdnsとかdaemontoolsとか見事に全部放り投げたなw
あんだけ他攻撃してたくせに。

710:nobodyさん
18/08/08 15:42:04.42 .net
PHPマニュアルってすげー優秀だなー
セキュリティーで嫌煙されてるがCHMが用意されてるのがでかい
これでネットもつながらない山の中でもPHPならスムーズに開発ができるわ

711:nobodyさん
18/08/08 15:53:58.68 .net
CHMってなんだと思いかけたけど
あれかhtmlヘルプファイルの.chmか
用意されてるの知らんかったサンキュー兄貴

712:nobodyさん
18/08/08 16:53:50.96 .net
>>693
おうよブラザー
ダウンロードしたCHMはセキュリティ厳しくなっててそのままじゃ見れないから
プロパティ開いてブロック解除忘れずにね

713:nobodyさん
18/08/08 17:11:31.35 .net
>>691
しかし、あの考え方はその後に大きな影響を与えたと思う。
Postfixなんてのが良い例かと…
攻撃という意味では、日本のqmaiサイトを運営してた某教授の方が酷かったw

714:nobodyさん
18/08/08 19:06:25.42 .net
>>691
public domainにしてくれたのはありがたかった
qmailはまだまだ現役で運用してるとこ結構ある
djbdnsはパッチなしだと来年死ぬけどね
>>695
大岡山かw

715:nobodyさん
18/08/09 02:14:42.91 .net
djbdns使ってないからdjbdnsが来年ってなんだろうと思って 2019年 djbdns ぐぐった
2番目に出てきたURLのタイトルが「2019年入籍日おすすめランキング」だった
終わってんな

716:nobodyさん
18/08/09 02:42:28.01 .net
わたしもqmailまだ使ってる

717:nobodyさん
18/08/09 08:04:46.57 .net
daemontoolsってCD/DVD/BDとかの仮想ソフトじゃなかったっけ
って思ったら全く関係なかったでござる

718:nobodyさん
18/08/10 17:13:37.72 .net
ドラえもん道具?

719:nobodyさん
18/08/10 20:47:


720:36.56 ID:???.net



721:nobodyさん
18/08/11 19:13:48.05 .net
djbphp

722:nobodyさん
18/08/11 19:58:51.69 .net
>>695
M野先生?准教授止まりじゃなかった?

723:nobodyさん
18/08/11 22:30:59.56 .net
net-qmail

724:nobodyさん
18/08/12 04:37:30.63 .net
>>695
あの人ちょっとゴリホーモ入っとるよな

725:nobodyさん
18/08/12 12:00:04.80 .net
PHPのネタないの?

726:nobodyさん
18/08/12 16:05:25.58 .net
ネタは無いがphpとシェルや他言語とのバッチの書きやすさの違いを聞いてみたい

727:nobodyさん
18/08/12 16:48:11.26 .net
>>707
慣れとしか言えないと思う
バッチファイルはphpで書いて、シェルからアクセスするというやり方にしてるわ

728:nobodyさん
18/08/12 17:55:27.72 .net
#!/sbin/php

729:nobodyさん
18/08/12 20:32:52.06 .net
正直マオリ語か何かにしか思えないperlで書かれたバッチも、慣れれば都なのだろうか

730:nobodyさん
18/08/12 20:36:16.09 .net
そうではないから廃れたんやぞ

731:nobodyさん
18/08/12 21:12:13.44 .net
prelは正直、割とマジでキツイ
文法が違いすぎるから、しばらく離れてるとどう読んで良いのかがわからない

732:nobodyさん
18/08/12 21:27:47.32 .net
perlはプリミティブなんだよな。
やりたい事を細かく制御して書かないといけない。
でも文字列処理だけは感心する。

733:nobodyさん
18/08/12 21:51:00.56 .net
phpの話じゃなくてperlの話になってるじゃないですか!

734:nobodyさん
18/08/12 21:56:40.87 .net
個人的にはPHPの方が気楽に書けて好きなんだけど, 現実的にはPythonで書くのがいいんだろうなぁ
PHPとPythonの共通点はbattery includedなあたりか

735:nobodyさん
18/08/12 22:33:57.36 .net
phpとperl、cgiは一昔前は選択性みたいな感じだったのにね
いつの間にやらphp一辺倒になってた
>>715
一度pythonでサイト作ってみたけど本気でめんどくさかった
phpがもてはやされる理由がよくわかった

736:nobodyさん
18/08/12 22:40:19.13 .net
ちょっと離れるけどバッチもWebもnodeであれこれやってみたことがあった
くそめんどかった

737:nobodyさん
18/08/13 00:07:08.75 .net
>>710
鯖管あたりは配列とループ使うのにシェルスクリプト代わりにperlって人多い

738:nobodyさん
18/08/13 07:03:51.93 .net
言語的な扱いやすさを取るか環境的な扱いやすさを取るかの天秤
そういう意味ではperlはありでもpyは意味がわからないo

739:nobodyさん
18/08/13 13:44:45.42 .net
なぜPythonはダメ?
いずれ何でもかんでもPythonになる可能性すら秘めているのに…
まあ、互換性は不安あるけど。
Perlは下位互換が優秀だったからなあ…

740:nobodyさん
18/08/13 14:25:38.56 sZ92TvgJ.net
配列とループw
PerlもPHPもPython他の足元にも及ばんだろ。
ちょっとしたデータ処理しようと思ったときに、絶対に選ばない2大言語。

741:nobodyさん
18/08/13 15:45:58.02 zFMgiLTA.net
適材適所だし、どっちが上とかないしょ
PHPが未だにこれだけ使われてるしね

742:nobodyさん
18/08/13 16:08:50.29 .net
>ちょっとしたデータ処理
環境構築を考えれば、こんなもん普段使ってる言語一択だろ
バカか

743:nobodyさん
18/08/13 16:41:01.31 .net
自分のとこだけで動かすなら普段使いの言語だが, 他環境で動かす可能性があるならLSBに入ってるPerlかPythonだなー

744:nobodyさん
18/08/14 01:01:33.04 .net
>>721
わかってないねぇ
標準インストールで入ってる可能性がダントツで高いのがperlなんだよ

745:nobodyさん
18/08/14 05:00:24.02 .net
連想配列をjson_encodeでjsonにした際、「/」が、エスケープ処理されておらず困っているのですが
対処法はありますか?
オプションにJSON_UNESCAPED_SLASHESを指定しなければ、エスケープされるような記載を見掛けるのですが・・・
PHPバージョンは7.1です

746:nobodyさん
18/08/14 06:07:12.85 .net
手元の7.2.1でjson_encode('test/test')とすると、test\/testが返ってくる
json_encodeの第二引数を明示的に 0 にしてみるとか
事前に(必要に応じて再帰的に)自分で/を\/にするとか

747:nobodyさん
18/08/15 08:05:27.87 qP4cYvWG.net
デフォルトがエスケープありになってるのか。

748:nobodyさん
18/08/17 14:43:40.86 .net
ログインシェルをPHPにしたらオワタ

749:nobodyさん
18/08/17 14:54:08.54 .net
お前の頭がインタラクティブ

750:nobodyさん
18/08/17 22:51:59.09 .net
マルチメディアに対応したかったんだよ…

751:nobodyさん
18/08/18 01:34:32.30 .net
>>727
すみません。勘違いしていました。
「/」ではなく、U+2044というFRACTION SLASHを記載して、
それに対してエスケープされないと嘆いてました。

752:nobodyさん
18/08/18 19:23:26.94 .net
言われてるほどシェル言語としてだめなわけじゃない
あきらかにshやbashよりは使いやすいだろう

753:nobodyさん
18/08/19 12:23:47.75 .net
win10のie11で外部pcの共有フォルダに置いてるpdfをphp関数で表示したいのですがどうすればいいでしょうか?
fopenのハンドルも取れず、readfileでも無反応です
ブラウザからファイルパス入力だと表示できます

754:nobodyさん
18/08/19 12:25:45.74 .net
ブラウザ関係なくね?
他のブラウザなら思った通りになるの?

755:nobodyさん
18/08/19 12:32:11.81 Il2RNG8O.net
何やりたいかさっぱり分からん
質問するなら他人にちゃんと伝わるように書け

756:nobodyさん
18/08/19 12:36:15.56 .net
NASみたいな共有フォルダにあるファイルにアクセスしたいってことでしょ…
PDFかどうか以前に、他のファイルも試してみろと。
PHPはなにのサーバーで動いていて、
バージョンはいくつなのかとか環境を書けよ。
ブラウザとかどうでもいいしw

757:734
18/08/19 12:37:22.17 .net
vistaのie9だとできてたんですが
最新環境だとできないのです

758:734
18/08/19 12:38:27.17 .net
apache2.2 php4.3です

759:nobodyさん
18/08/19 12:38:35.98 .net
ふーん…

760:nobodyさん
18/08/19 12:40:22.71 .net
最新って何?
XAMPPとか使っててPHP 7.2.xとか?

761:734
18/08/19 12:42:00.39 .net
最新と言うのはOSとブラウザがってことです 64bitです vistaは32bitです
phpとapacheはそのままです

762:nobodyさん
18/08/19 12:47:01.68 .net
ここまでのやりとりで、教えるのは無理とわかったから他に行きな。
まともに質問すらできないんだから教えようがない。

763:nobodyさん
18/08/19 13:01:24.89 .net
初心者お断りスレだしなー

764:nobodyさん
18/08/19 14:34:59.94 Il2RNG8O.net
まずはログとか見ろよ
ログに何も出てないなら何か根本的に間違ってるってこと

765:nobodyさん
18/08/19 14:49:41.25 .net
俺の頭髪も根本が根本的に間違ってる

766:nobodyさん
18/08/19 17:12:58.11 kRBINjI+.net
PHPのsystem()でmysqldumpを使ってテーブルごとのsqlファイルを出力して、
それを圧縮して保存するプログラムを作った。
直接ブラウザでアクセスしてプログラムを動かすと正常に圧縮ファイルが保存される。
しかしcronで動かすと、全く空欄のsqlファイルを圧縮したものが保存される。
私には、全く原因が分からず修正できません。
原因はどういったものが考えられますでしょうか?

767:nobodyさん
18/08/19 17:17:02.88 .net
cronでやらないで、CLIで一度実行してみたらいい
権限関係でねーのと思う

768:!ninja
18/08/19 17:18:09.56 .net
ブラウザの裏で動いているPHPのユーザー権限や、
crontabのユーザー権限や、
ファイル類のパス、
実行カレントディレクトリ等は一致してますかね?

769:nobodyさん
18/08/19 18:18:48.73 Il2RNG8O.net
cronでありがちなのはファイルパスの指定ミス
実行プログラムやファイルの指定を相対パスで書くと事故ること多し
簡単に対応するなら全部絶対パスで書け

770:747
18/08/19 19:28:59.75 kRBINjI+.net
皆さん、ありがとう御座います。
まだ解決は出来てないのですが、調べるべき方向は見えてきました。

771:nobodyさん
18/08/19 19:31:32.86 .net
実行権限の違いじゃね
webサーバはapache で
cron はcrontab -eで登録したユーザー
とか

772:nobodyさん
18/08/19 21:13:04.70 .net
id > /tmp/log
pwd >> /tmp/log
env >> /tmp/log

773:nobodyさん
18/08/25 11:11:15.78 mbihd+U1.net
composerのclassmap-authorativeの最適化
場合によっては遅くなるってマジ?
速くなる場合もあるが以下の条件では遅くなるって
・依存ライブラリが多い
・リクエストで実際には使わないクラスが多い
・ファイルシステムからの検索が速い
最適化を有効にすると
読み込めるクラスを全部PHPの配列に入れるから
逆に速度が落ちる場合もある
opcacheが有効だとファイルシステムが遅くても緩和されるし
PHPファイルが更新されないならタイムスタンプのチェックも無効にすれば
PHPファイルを見る必要無くなるね
URLリンク(blobfolio.com)
APCU使った最適化については書いてない

774:nobodyさん
18/08/25 18:38:08.55 .net
真実かどうか聞きたいのか、それとも自分で確認した事実を書きたいのか

775:nobodyさん
18/08/25 19:07:29.36 yUon0wwz.net
どうしても知りたいなら自分でベンチ取ってみるしかないだろう

776:nobodyさん
18/08/25 19:26:31.29 .net
環境のせいで多少遅ってるかもしれない可能性を確認するよりも
コードを見直したほうがずっと早く改善できそう

777:nobodyさん
18/08/26 09:42:55.24 nAEEME22.net
こちらで質問させてください
classの必要性がいまいちわからないんですが、普通に自作関数を使うのとどう違うんでしょうか?

778:nobodyさん
18/08/26 10:00:36.02 .net
classと同じようなことの実現は関数・objectを駆使すればたぶん無理ではない
けど非常にめんどい
継承とか再利用なんかはどうしようと悩む

779:nobodyさん
18/08/26 10:00:45.66 .net
>>758
一人で作るプロジェクト、しかも関数だけだと特に変わらないね
消費税の計算するだけなら別にどっちでもいい。関数にもしなくて良い

今はまだ分からないかもしれないけど、
コンストラクタ、ガベージコレクション、トレイトなど便利な機能が山程ある
其内色々な機能を使うようになると思うので、とりあえずclassに慣れておいた方が良い・・・としか言えない

780:nobodyさん
18/08/26 10:01:30.69 .net
>>759
継承の場合は丸ごとコピーになるね
で、一箇所かえたら両方変更する必要があり・・・とどんどん煩雑になる

781:nobodyさん
18/08/26 10:06:53.90 .net
>>761
コードをコピペしたらもうそれは継承ではなくなってしまうな
関数名を扱うことでコールバック的にやろうとすれば、そこはもう地獄
うーむ

782:nobodyさん
18/08/26 10:10:44.53 .net
とりあえずGCはclassに限った話じゃなくね?
関数内でも一応無関係ではないはず
インスタンスに対するGCは
関数主体の場合だと関数内の変数や関数外の変数に対するGCが当てはまるわけで

783:nobodyさん
18/08/26 10:25:52.22 .net
あまりclassがうんぬんを意識しないで使ってるものを考えたらわかりやすいかも
PDOとかExceptionとか

784:758
18/08/26 11:12:05.68 nAEEME22.net
独学で基礎的なことだけ覚えたんですが、わりと小規模な会員機能付きのブログエンジンやデータベース系のサイト程度なら作れるようになったんですが(プロから見たら多分穴だらけ)、クラスの必要性が分からず全て関数作ってやってました
コードの使い回しにしても関数にしておいて1度呼び出しておけば何度も使えるし、継承にしても関数内で別の関数を呼び出したりして
直感的にも使いやすかったのでそうしてるんですが、今後もっと複雑な事をやろうとするとやっぱりクラスに慣れて使った方がいいんですかね
関係ない話ですが、人のコードとか見ると多次元配列の回し方とか他にもいろいろ人と違うし自分の脳の作りを疑ってしまう。。

785:nobodyさん
18/08/26 11:43:42.77 .net
>>765
その場合は「状態」を誰が持っているのかってのが一つのポイントだと思う
状態をグローバル変数に持つのは嫌だし, 関数に持たせるのも良くない

786:nobodyさん
18/08/26 15:35:20.70 .net
コードの書き方は設計にもつながるからなあ
DB使ってるならPDOがまさにインスタンスごとに別のコネクションを保持できて
class=インスタンスの中に関係関数がまとまってて
classの利点がわかりやすい

787:nobodyさん
18/08/26 15:36:42.57 .net
名前空間が分かれるだけでもありがたいよ

788:nobodyさん
18/08/26 18:00:16.90 .net
標準クラスの名前空間って\だよね?

789:nobodyさん
18/08/26 22:34:08.74 .net
>わりと小規模な会員機能付きのブログエンジンやデータベース系のサイト程度
ここら辺に何かを感じる

790:nobodyさん
18/08/27 00:48:28.21 .net
そこはいいの。お節介するところじゃない。

791:nobodyさん
18/08/27 01:47:28.99 .net
まあ怪しいな

792:nobodyさん
18/08/27 12:57:27.44 .net
file_get_contentsで他サーバーのデータを取得した際、
データが途中までしか入って無い場合があり、困ってるのですが対処方法はありますか?
$http_response_headerに載っているContent-Lengthに比べても少ない
file_get_contentsの戻り値が、falseではないがデータが半分くらいしか入ってない状態で、エラーも何もなくそのまま処理が継続してしまう形です。
そのタイミングでリトライしても結果は変わらず、時間置くくらいしか正常に動作しません。
ただ発生するときは、file_get_contentsで他サーバーのデータを17ファイル連続で取りに行く場合などで、
その場合、3ファイル程データがおかしくなっているという感じです。
1ファイル処理する分には正常に動作し、再現しません。

環境はLinux / apache2-api-20120211 / PHP 7.1.18です。

793:nobodyさん
18/08/27 13:10:26.40 .net
>$http_response_headerに載っているContent-Lengthに比べても少ない
>そのタイミングでリトライしても結果は変わらず
比べてみて、少なかったら
成功するまでリトライすればいいじゃない
contextつきでもfile_get_contentsで問題があって、しかしcurlを使うと問題が出なくなるということもある(※実話)

794:nobodyさん
18/08/27 14:00:52.82 .net
自分の場合どっちもだめでfsockopenでようやくいけたなんてことがあったな
一番詳細なこと出来るのはfsockopenだからねえ

795:nobodyさん
18/08/27 14:23:18.31 .net
自前でソケット通信考えたらredirectとかkeepaliveとかくっそ面倒だった記憶がある

796:nobodyさん
18/08/27 14:56:47.44 .net
>>774
>成功するまでリトライすればいいじゃない
同プロセスでは何度やっても一度も正しく取得できないんです…
別プロセスで起動し直すと正しく取得できるときもあるのですが、
それは使用リソース的な問題であまりやりたくないというか…
curlを試してみるしかないですかね
>>775
どっちもだめ…curlの勝算も低いですかね…
fsockopen使うくらいなら別言語を検討してしまいそうだ

797:nobodyさん
18/08/27 15:20:54.44 MKVYhJ6R.net
ググったら1番上の記事(公式マニュアル除く)にあるじゃん。

798:nobodyさん
18/08/27 15:46:07.23 .net
具体的に何回やったのか
そのうち本当に通信が発生してるのは何回か
調査と試験どっちもしないの

799:nobodyさん
18/09/01 14:57:08.37 xLd9eNnQ.net
APCuキャッシュを使っている。
管理画面apc.phpに表示されるFragmentationが日々上がっていっている。
現在10%ぐらいだが、まだまだ上がりそう。
この断片化率が上がると何か問題があるのか?
何%ぐらだと問題で、対策はどうすればいいのか?

800:nobodyさん
18/09/01 15:32:43.35 .net
APCuって自分でなんとかできる人が使うもんじゃなかったっけ
ほかの選択肢あるっしょ

801:nobodyさん
18/09/01 15:45:20.23 .net
ググってわからなかったら、
夜中とか定期的に完全削除しちゃえ。
キャッシュなんてすぐ育つから。

802:780
18/09/01 16:19:01.86 xLd9eNnQ.net
俺は、自分で調べないわけじゃないぜ。ただ少なくとも日本語の情報は殆どない。
「apcu 断片化」では20件程度、「apcu Fragmentation」なら沢山ヒットするが、対象を日本語ページに絞ると10件程度しかない。
これらは全部読んだが「Fragmentationが高くなったら、キャッシュをクリアしろ」ということが書いてあっただけで、
何%だと問題なのか、そもそもどのような問題が発生するのか分からない。
英語が読めないわけじゃないけど、英語で検索して必要な情報を調べるのは苦労するよ。

803:nobodyさん
18/09/01 16:28:38.69 .net
自分でベンチマーク取って検証するんだ。
そして報告すれば誰かの役に立つ。
ちなみに俺は何も知らない。すまん…w

804:nobodyさん
18/09/01 16:30:11.58 .net
いっそのことソース読んだら

805:nobodyさん
18/09/01 16:30:52.08 .net
ソース読んで効果がわかる部分じゃないだろ…

806:nobodyさん
18/09/01 16:44:49.29 .net
ソース読めば全部わかるだろ

807:nobodyさん
18/09/01 16:52:55.17 .net
ソース読んで、何%断片化すると悪影響が出るかわかる?
キャッシュの実装方法がわかっても測定しないとわからないことだよ。

808:nobodyさん
18/09/01 16:58:46.78 .net
APCuって
オペコードキャッシュ部分がなくなって、cookieみたいなkey-valueのデータを自前で自サーバのメモリに共有するだけに単純化されたもんでねえの
DISKにcsvで持ったりDB使ったりで共有するんじゃなくてメモリに持って共有しましょう的な
だとすると、キャッシュクリア=メモリ上の情報破棄だから気軽にやっちゃあかんし
fragmentになってるっていうなら、
それがメモリ上にあるというだけで他はDISKにおけるfragmentと同じでしょ?同じように考えりゃいいじゃん

809:nobodyさん
18/09/01 17:03:03.50 .net
>>788
メモリにどういう配置してどう読み書きしてるかがわからないと
断片化を操作する検証も度合いごとに断片化が及ぼす影響の調査もできなくない?
ことが断片化だから、意図的に特定の断片化状態を作るのって
内部知らないと相当難しいように思うんだけど

810:nobodyさん
18/09/01 17:04:43.00 .net
突き詰めるとメモリ領域の話になってくるんけ?

811:nobodyさん
18/09/01 17:17:23.22 .net
ソースだけ見れば分かるならプロファイラ何か要らないんだよなー

812:nobodyさん
18/09/01 18:19:46.16 .net
Fragmentationが100%に達してても
キャッシュヒット率が高ければ問題ないらしい
(書き込みは遅くなるが読み取りは遅くならない)
URLリンク(serverfault.com)
とは言っても書き込みは遅くなるわけで
実際パフォーマンスにどれくらい影響が出るかは使用状況によるので一概に言えない
本番環境のパフォーマンスを見るには
New Relic APMがおすすめらしいけど
自分は使ったこと無い

813:nobodyさん
18/09/01 18:45:33.01 .net
JavaのGCだとコンパクションとか
断片化を防ぐ仕組みはあったけど
多分apcuにはそんな仕組みはないと思われ
動的に確保するから更新・削除を何度も行うと細切れになる
断片化率は5MB以下のブロックが全体に占める割合みたいなことが書いてある
解放されたブロックが隣接してたらマージして1つのブロックにする、とも書いてあるが
これだけだと完全に断片化は防げないとか?
URLリンク(github.com)
NewRelic使えとかはこの辺で見た
URLリンク(medium.com)

814:nobodyさん
18/09/01 18:52:38.08 .net
Symfonyも
書き込みや削除が多い用途にAPCUを使うと断片化しやすいから使うなって言ってる
多分それをやるとAPCUの管理するブロックの数がどんどん増えていって
新しいブロックの確保が遅くなるんだろう
代わりにRedisとかmemcachedとか使えば?
遅延があるとかで場合によっては使えないかもしれないが
Use of this adapter is discouraged in write/delete heavy workloads, as these operations cause memory fragmentation that results in significantly degraded performance.
URLリンク(symfony.com)

815:780
18/09/01 21:31:23.17 xLd9eNnQ.net
ありがとう。少し分かってきた。
英語での情報収集が必要とかレベルが上ってきた感じがしていいね。

816:nobodyさん
18/09/02 06:36:05.35 .net
クソッ、話が高度すぎる・・・
今日からPHPUnit使うなんて言い出せないじゃないか。

817:nobodyさん
18/09/02 09:08:26.43 .net
APCuってしらんが
セッションにDBのハンドラ入れても使えなかったのを
使えるようになるような代物かね?

818:nobodyさん
18/09/02 09:36:09.10 .net
>>798
言ってる意味がわからない
DBの接続はリクエスト終わったら切られるだろ

819:nobodyさん
18/09/02 10:26:34.63 .net
>>799
いやわかるけど
で、sessionで使えなかったのを使えるようになるような代物ではない
serializeできないものは無理、sessionも共有メモリもそう
リソース型と一部のオブジェクトは無理

820:nobodyさん
18/09/02 10:35:20.45 .net
DB接続やファイルハンドラが処理終了時に自動的に切られるのは、
そういう扱いをされるべきリソース型であって確実にデストラクタが呼ばれてるからという理由であって、
処理終了時にシンボルテーブルにある全変数が解放されるのとは無関係、
よって、変数の格納先が異なるだけの$_SESSIONや共有メモリでもこの事情は変わらない、
と理解している
json化できないものは入れられないwebStorageみたいな感覚

821:nobodyさん
18/09/02 20:02:16.35 .net
Dockerで
nginxコンテナとphpfpmコンテナを分けてコンテナで分けて作った時
nginxの方はphpファイル入ってなくてもディレクトリさえあれば普通に動くな
開発する時はDockerボリュームを2つのコンテナにマウントしてたが
本番用イメージをCIで作る時は・・・?2つのイメージに同じphpファイルを入れなくちゃいけないのか?って思って調べたらこのような方法が見つかった
画像やCSSとかの静的ファイルは・・・nginxの方だけに入れるか

822:nobodyさん
18/09/02 20:04:53.11 .net
phpMyAdminの公式Dockerイメージはnginxとphpが一つのコンテナになってたけど
あれって面倒?
php:7.2-fpmをベースイメージとしてそのまま使うのは出来なくなるよな
それだけでめんどそう

823:nobodyさん
18/09/03 07:53:52.79 .net
速度重視じゃないから構わないのでは…

824:nobodyさん
18/09/03 14:47:55.71 .net
というかホスト側ポートに繋げて直接外に晒すなりのホストのhttpdからリバースプロキシして使うもんだろ?
nginxコンテナとphp-fpmコンテナに静的コンテンツと動的コンテンツを分けて入れてnginxコンテナからphp-fpmコンテナを見えるようにしてとか, そんな細かい粒度にする必要を感じない

825:nobodyさん
18/09/03 19:59:04.77 .net
phpMyAdminのDockerイメージが使ってるのはsupervisordだった
ベースイメージはphpで、supervisordやnginxを別途インストールしている
意外と難しくない?

826:734
18/09/03 20:04:21.13 .net
遅ればせながら自己解決

827:nobodyさん
18/09/04 11:02:04.45 .net
supervisordは落とし穴が多い
使わなくて済むなら使いたくない

828:nobodyさん
18/09/05 07:35:09.46 .net
俺なんかhttpdはinetdの下でいいやと思うことすらある。
ただし、apapche 1みたないのよりずっと軽いやつね。

829:nobodyさん
18/09/05 08:52:13.09 WQzBx9At.net
どうしても一つにしたいならApacheでいいじゃん。
docker-composeとかあって分けるのが大した面倒でもないのに、一つに拘る理由がわからんけど。

830:nobodyさん
18/09/05 08:58:29.76 .net
Dockerが使えれば女の子にモテモテ

831:nobodyさん
18/09/05 11:51:33.55 .net
どっか行きたい

832:nobodyさん
18/09/05 12:09:37.13 .net
Docker使えるならいいと思うよ

833:nobodyさん
18/09/05 13:10:38.80 .net
>>812
オヤジギャグかよ…

834:nobodyさん
18/09/05 17:00:56.76 .net
dockerってぶっちゃけそこまで便利というか必須?

835:nobodyさん
18/09/05 17:21:02.69 .net
Dockerの誤解と神話。識者が語るDockerの使いどころとは? Docker座談会(前編)
URLリンク(thinkit.co.jp)
下手したらバズワードで終わる…ほど酷くはないな。
大昔のフロッピー起動みたいに
ガチャガチャ差し替えて使うようなもんかね。

836:nobodyさん
18/09/05 17:47:40.73 .net
コンテナでアプリケーション作るならDocker-ComposeないしはDocker単体でいいけどサービス作るならKunernetesくらいは知っとけよって感じ

837:nobodyさん
18/09/05 18:02:18.87 .net
え?なんだって?

838:nobodyさん
18/09/05 18:07:56.14 .net
DevOpsってさあ…
昔やってた開発と運用のいっしょくたに戻しただけだよね。
理想は違うんだろうが現実は(笑)
10年後はまた分業とか言ってんだぜ、どうせ…

839:nobodyさん
18/09/05 18:13:01.00 .net
10年後には地球がなくなってるよ
絶対だよ

840:nobodyさん
18/09/05 19:43:49.28 lhQCR9Kb.net
URLリンク(m-fetishism.com)

841:nobodyさん
18/09/05 22:49:42.31 .net
なんかPHPって覚えるスキルRubyやPythonよりおおくね?

842:nobodyさん
18/09/05 23:46:31.60 .net
かわんないだろ

843:nobodyさん
18/09/06 07:11:57.58 .net
バッドノウハウと関数がね

844:nobodyさん
18/09/06 12:33:18.54 .net
PHPはWebProg言語としては登場時期は早かったが
いかんせん類友なのか開発陣が無能なもんでいつもどこかの後追い
PHPerだからといって覚えることが特に多いわけではなく
他言語にはあるがPHPにはないから作ろう
そんな車輪の再発明まがいのことを続けてきた結果であって
一言で言えばご苦労なだけなのである

845:nobodyさん
18/09/06 13:44:51.41 .net
別に先陣切って何かを実装してくれとは思わないからいいよ。
それに、他はできるのにPHPはできないってのも良くないだろw

846:nobodyさん
18/09/06 15:12:11.31 .net
俺はもうDockerが無いと生きていけない体にされてしまった
必要なプログラムが全て入ったイメージが作れるので
実際に本番環境にアップロードしたら動かなかったけど、
ローカルの開発環境では動いたんだよ!
みたいな事が起こるリスクを下げる
各開発者の開発環境の構築も簡単
docker-composeのファイルとか配ればいい

847:nobodyさん
18/09/06 15:57:43.54 .net
そんでもってテスト用のまま間違って本番稼働させるんだろう?
知ってるよ

848:nobodyさん
18/09/06 17:52:35.05 .net
仮想化は楽だろうしDockerはGoogleのハードな使い方にも耐えてるほど
耐久性も信頼性も高いのだろうけど
やっぱり専用サーバで環境作るのが俺は好きなんだよ!

849:nobodyさん
18/09/06 18:26:07.22 .net
手段と目的を間違えて無ければ何でもいいよ。
Dockerはもちろん良い物だけど必須ではない。

850:nobodyさん
18/09/07 16:08:31.23 .net
PHPで動画編集できるライブラリ無いかな?画像編集できるGDみたいなさ
既存動画のカットと動画連結、字幕が付けれて、それをmp4に出力で来て、
youtubeでアップロードできれば最高なんだけど
コマンドラインで別のプログラム実行するとかじゃなくてね
まぁ無理かな…

851:nobodyさん
18/09/07 16:58:28.42 .net
PHPの場合, ライブラリでやるとなるとピュアPHPになるが動画編集はそれじゃあ重過ぎるだろう
他の言語だとネイティブに近いレイヤのライブラリをラップしてバインディングすると思うけどPHPには実行時にネイティブ拡張をロードする機能がない

852:nobodyさん
18/09/07 17:15:32.51 YySmCjy1.net
URLリンク(phpopencv.org)
これ使って何とかならんの?

853:nobodyさん
18/09/07 19:18:12.39 .net
文章が臭いなと思ったが
>既存動画のカットと動画連結、字幕が付けれて、それをmp4に出力で来て、
なんかやることが量産クソyoutubeアフィっぽい

854:nobodyさん
18/09/07 20:20:39.44 .net
動画編集をブラウザでやるってのが無理ありすぎ
重い 遅い 面倒なのは容易に想像でき
あきらかにプラットフォームに向いてない

855:nobodyさん
18/09/07 21:02:34.48 .net
そのぐらいのオンラインサービスなら既にありそうだけどね。

856:nobodyさん
18/09/07 21:24:58.65 .net
WebGL使えば何でも出来る
動画をテクスチャにすればどんなエフェクトも実現出来る
ブラウザ上ではプレビューだけで
エンコードは強力なサーバーのCPUとGPUをぶん回す
PHPとかもう関係ねえか

857:nobodyさん
18/09/07 21:27:57.53 .net
JavaScriptだな

858:nobodyさん
18/09/08 00:15:30.05 .net
gif動画くらいならまだわからんでもないがmp4ってご職業をたずねたくなる

859:nobodyさん
18/09/08 00:59:50.88 .net
>エンコードは強力なサーバーのCPUとGPUをぶん回す
サービス化するとなると結構きついよそれ
JSで各クライアントにやらせたほういいね
そうすると専用ソフトでやったほうがいいってとこに帰結する

860:nobodyさん
18/09/08 01:05:23.39 .net
jsで動画エンコードってさ、こうなりそう
利用者=負荷がかかるとわかってる
→鯖管理者=coinhiveみたいなminerを仕込んでおく
→鯖管理者=広告と採掘で両得、サーバ負荷なし

861:nobodyさん
18/09/08 07:30:59.70 .net
ffmpegをEmscriptenで動かすような方式なら
オーバーヘッドでかいしシングルスレッドだが動く
SharedArrayBuffer使えば
マルチスレッド出来るらしいがSpetre、Meltdownのせいでしばらくは復活しない

862:nobodyさん
18/09/11 17:07:25.22 .net
CRON起動すると多重で起動されたりするのって当たり前?

863:nobodyさん
18/09/11 17:31:28.03 .net
いいえ
処理時間が長すぎて、前回の処理と重複してんじゃないですかね?

864:nobodyさん
18/09/15 11:17:45.89 .net
>>843
ロックしたらいいんじゃね?
ロックが確保出来なかったら
前回の処理が実行中とみなして処理を行わない
Symfonyにこの目的のコンポーネントがある
URLリンク(symfony.com)

865:nobodyさん
18/09/15 11:31:27.49 .net
* * * * * /path/to/unko.php
のういうの見ると、daemonにしてよとか思う。

866:nobodyさん
18/09/15 11:38:58.70 .net
>>846
メモリリークとか蠱惑ね?

867:nobodyさん
18/09/15 11:57:01.30 .net
そんなクソなコードなの…?
まあでも、起動時に一応ulimitしたり落ちたら再起動とかフォローはするけど。

868:nobodyさん
18/09/15 13:00:39.79 AkqW0gAt.net
Drupalはメモリの内容を使い回すphp-pmではメモリリークして安定動作しないらしい
php-pmにも一定数のリクエストを処理すると再起動する機能があるが、リークの程度が大きいとそれでも問題になる
Drupalのコードはメモリの内容をリクエスト後に破棄する前提で
あちこちでキャッシュしまくってんのかな?

869:nobodyさん
18/09/15 14:19:19.63 .net
>>846
なんで?落ちたら再起動させるようにするとかよっぽど手間じゃないか

870:nobodyさん
18/09/15 14:36:06.00 .net
今まで見て来た範囲で大半は、
リアルタイムにしたいのに技術力がなくてできなくて、
そんでもって処理も下手で起動が遅かったり
多重動作したりしてたから。
daemonにしたらそういうことはなくなる。
そもそも落ちるなんて稀な品質で作るし、
落ちたら条件付きで自動再起動するのは
他のサービスでもやるからね。
毎分起動ですぐに処理が終わって、
リアルタイム性を要求され


871:てないならOKだよ。 でもそんなの少ない。



872:nobodyさん
18/09/15 14:38:21.89 g0abHATJ.net
コンテナオーケストレーターのAmazon ECS使うわ
プロセスが仮に落ちても自動で再起動してくれる
使用するメモリーも制限できる
cronのような定期実行も一応出来る

873:nobodyさん
18/09/15 14:50:10.75 .net
>>851
>リアルタイムにしたい
それバッチでやることじゃないのにバッチを使ってる、っていう転用事例だよな後出しじゃん
>そんでもって処理も下手で起動が遅かったり
>多重動作したりしてたから
バッチ利用が悪くてdaemonなら良い、っていう問題じゃないよなコレ。ただの技術力の低さ
>毎分起動ですぐに処理が終わって、
>リアルタイム性を要求されてないならOKだよ。
>でもそんなの少ない。
後の2行はdaemon利用であるかどうかと無関係
むしろ上述の前提のとおり技術力がないならdaemonでもトラブル多発する
>毎分起動ですぐに処理が終わって、
>リアルタイム性を要求されてないならOKだよ。
>でもそんなの少ない。
オレオレ常識を前提にして語らないでくれます?

874:nobodyさん
18/09/15 14:53:20.31 .net
なんかカス知識しかない営業や広報が「ファイルなんてあり得ないDBなら問題ゼロなのに」と言ってる感じ

875:nobodyさん
18/09/15 14:54:04.17 .net
すまん広報は上のオレオレ常識だな忘れてくれ

876:nobodyさん
18/09/15 14:59:44.14 .net
>>853
何だよ、連投して噛み付きたいだけか。若いな…
ごめんね。
自分で作った訳じゃないから技術力は俺のせいじゃないしw
お客さんか、その場開発元に言って。

877:>>854-855
18/09/15 15:00:39.55 .net
なんかすまんな営業君

878:nobodyさん
18/09/15 15:09:30.71 .net
>>856
後出し、論点すり替え、に追加で人格攻撃に責任転嫁
倍満ってとこかな?
まあ大方ステマの類だろうけど

879:nobodyさん
18/09/15 20:11:41.06 .net
完全論破( ー`дー´)キリッ

880:nobodyさん
18/09/15 20:16:27.14 .net
リアルタイムと言うけど
一体全体どんな処理を想定しているんだ
手段として常駐化が使えてかつ常駐化が効率的であるケースはそう多くない
というかぶっちゃけかなり少ないように思われるんだけど

881:nobodyさん
18/09/15 20:57:38.10 .net
どちらかといえば実装ではなく設計もしくはその上流の問題かな
オンデマンドでもなく毎分起動、しかもphp実装
ポート開けて待ち構えるでもない
問題があるとすればその所在はdeamon云々ではなく別のところ

882:nobodyさん
18/09/16 22:52:24.26 .net
>>109
みやえらってYouTubeでも他のアフィリエイターの名前を利用して集客してるよね。
それで散々否定した上で、自分のサロンみたいなものに誘導してる。
一番、卑怯なタイプですよね。

883:nobodyさん
18/09/17 11:09:15.41 pOFnQ2V0.net
phpって
クラスのフィールドに代入する時
クラスで定義してない名前のフィールドにも代入出来る?
何でこの辺ゆるゆるなんだ

884:nobodyさん
18/09/17 15:16:51.62 4qZo9f4+.net
CSRF対策で質問です。フォームで別の画面にトークンを渡す場合
hoge1.php
<form action="hoge2.php">
<input type="hidden" name="token" value="生成した値">
<input type="submit" value="OK">
</form>
hoge2.php
if(!isset($_POST["token"]) || $_POST["token"] !== 値 ){エラー表示}
のようにしてますが(おおまか)
<form action="hoge1.php">
と自分自身に渡す場合エラーになってしまいます。
どうすべき、どうしてますか?

885:nobodyさん
18/09/17 15:29:30.63 .net
if(!isset($_POST["token"]) || $_POST["token"] !== 値 ){エラー表示}
のところの「値」が数値型になってないか?

886:nobodyさん
18/09/17 17:02:21.91 .net
ifの中身が予想に反する結果になるんだったらまずvar_dumpして原因探れよ

887:nobodyさん
18/09/17 21:53:00.13 .net
>>865
文字型です。
別画面へ移動ならエラーにならないのでそこは問題ありません。
>>866
予想通りの結果です。
CSRF対策で、ページが最初に読み込まれたときの処理をどうしてますか?

888:nobodyさん
18/09/17 22:03:36.74 .net
>>867
hoge1.phpとhoge2.phpの内容を
(おおまか)
などと言って省略しないで全部出せ
それか、再現可能な最小のコードを書け

889:nobodyさん
18/09/17 22:27:37.65 .net
質問者の意図がわからずブチ切れ
ほぼ間違いなくCSRF対策の意味がわかってない

890:nobodyさん
18/09/17 22:37:31.33 .net
配列長が500、[0]から[99]までは値が1、[100]から[499]までは値が0、という配列を作るのってどうすればいいですか?
やはり面倒でもforでまわすのが確実でわかりやすいでしょうか

891:nobodyさん
18/09/17 22:50:49.71 v4ZYnSR8.net
<form action="hoge2.php">
methodが抜けてる時点で、お話にならない。

892:nobodyさん
18/09/17 22:55:19.99 .net
>>870
array_fill()
URLリンク(php.net)

893:nobodyさん
18/09/17 23:02:38.57 .net
>>872
配列長100で全要素の値が1の配列Aに、配列長500で全要素の値が0の配列Bをmargeするということでしょうか

894:nobodyさん
18/09/17 23:06:54.07 .net
連投すいません
array_mergeの動作を勘違いしていました
array_merge( array_fill(0, 100, 1), array_fill(100, 400, 0) )
これだけで重複させずに生成できるんですね
ありがとうございました

895:nobodyさん
18/09/17 23:14:38.03 .net
>>871
質問に余分な箇所は削るという感じでしたので省略しました。
そこ必要でしたか?ちなみにPOSTです。

896:nobodyさん
18/09/17 23:18:31.41 .net
>>871
methodが何であれ対策に根本的には関係ない
すでに書かれてるのにあえてまた書くがエラーが出て困ってるのではないとわかってる?

897:nobodyさん
18/09/17 23:20:48.74 .net
>>871は頭悪いのか?なくても予想できるだろ
>別画面へ移動ならエラーにならない

898:nobodyさん
18/09/17 23:41:23.43 .net
>>869 >>876-877
無能質問者の自演乙

899:nobodyさん
18/09/17 23:48:00.20 .net
とうとう自演扱いw
まさに>>869

900:nobodyさん
18/09/18 06:05:33.23 .net
低レベルな喧嘩は初心者スレでやってくれる?

901:nobodyさん
18/09/18 19:59:18.63 .net
問題点が見えていない2人(か1人か)のために書くと
$_POST['token']には何かしら値が入っているはず
入ってなければ不正アクセス等(で強制終了可)
ところが自分呼び出しでは最初は値が入っていない
だからエラー処理してるとそれになる
不正アクセス等の区別をどうするかということだな
エラー処理せずスルーするか

902:nobodyさん
18/09/18 20:26:37.82 UTbc9qbB.net
sessionが空
postが空
sessionとpostが一致しない
 => でてけ!

903:nobodyさん
18/09/18 21:16:13.02 .net
>>868
(おおまか)は !is_string($_POST['token'])


904: など質問に全く関係ないバリデなどです。 他スレではどこも関係ない部分は消せと言われますがここは全部書いた方がいいのでしょうか? >>864は100%再現します。



905:nobodyさん
18/09/18 21:19:41.01 .net
$_POST['token']以外に何も判断材料がないのかね

906:nobodyさん
18/09/18 21:22:12.02 .net
method記述がないコードでhoge2.phpに投げるとなぜか$_POST['token']に値が入ります!再現します!

907:nobodyさん
18/09/18 21:55:49.75 .net
>>884
判断材料とはなんでしょうか?>>881の通りです。
フラグに初回で値入れるか変えて
それ以降受け渡して使い回しすれば判定できますがそれはちょっと。
みなさんはどう判定してるのでしょうか?

908:nobodyさん
18/09/18 22:03:33.79 .net
>>885
>>880

909:nobodyさん
18/09/19 15:07:37.46 vkVFY1/A.net
そもそもスーパーグローバルとか使うなや

910:nobodyさん
18/09/19 19:30:11.00 .net
SESSIONならいいんじゃね

911:nobodyさん
18/09/19 20:44:33.16 .net
別に使っても構わんだろ

912:nobodyさん
18/09/19 22:12:38.81 .net
filter_input覚えたからってスーパーグローバルだから使うなって理屈はおかしい
スーパーグローバルがいじれてしまっても意図したことなのでなんの不都合もない

913:nobodyさん
18/09/19 22:42:03.69 AG3DKNyH.net
そもそもPHP使うなや

914:nobodyさん
18/09/19 23:27:35.58 .net
なんでやねん

915:nobodyさん
18/09/20 04:30:30.01 .net
バリデーションが貧弱でFILTER_CALLBACK使いまくりの
汚らしいコードになるのがfilter_input
すっきりでもなんでもねえや

916:nobodyさん
18/09/20 07:47:03.15 RWskJfDy.net
なんでPHPのフレームワーク使わないの?

917:nobodyさん
18/09/20 08:22:15.22 .net
ageてるやつはちょっと頭悪すぎてこのスレに不要なんで消えてくれるかな

918:nobodyさん
18/09/20 15:04:04.76 r6jO1NK4.net
スーパーグローバルなんて使ったらテスト出来ないじゃん
禄にテストしないとgoto failを誤記述してセキュリティに大穴空けたiOSみたいになるぞ

919:nobodyさん
18/09/20 15:25:27.37 .net
ん?

920:nobodyさん
18/09/20 19:08:24.84 .net
自己呼び出しはそんな特別なことでもないのにな
皆対策してないのか

921:nobodyさん
18/09/20 20:58:49.72 .net
CSRF対策とはなんぞや、から説明し出す人を待ってるのかな

922:nobodyさん
18/09/20 21:56:25.03 .net
OAuth2のstateは?
リンクを踏ませて攻撃者のアカウントにログインさせられるのを防ぐらしい
図解:OAuth 2.0に潜む「5つの脆弱性」と解決法 (2/4)
URLリンク(www.atmarkit.co.jp)
しかし、ユーザーのアカウントを盗むのではなく
騙して攻撃者のアカウントにログインさせるのって
何に使えるんだ?

923:nobodyさん
18/09/20 23:15:09.43 .net
>>900
そんな説明はいらんし、上見た感じ質問者以外説明できるのここにはいないだろ

924:nobodyさん
18/09/21 00:22:36.65 .net
なんぞやを引き出そうとは読めんしな。
>>901
読んでないがカウンターじゃね。

925:nobodyさん
18/09/21 02:45:20.98 .net
$_POST["token"] !== 値
!==だから「$_POST["token"]」と「値」では型が違うんじゃね?くらいしかわからん
値をどうやって作ってるのか見ないと何とも言えない

926:nobodyさん
18/09/21 09:29:51.47 .net
CSRFなんてXSSと並んで初歩中の初歩なんだが

927:nobodyさん
18/09/21 17:04:25.95 .net
知っておくべきことやっておくべきことではあるが、初歩ではないぞ

928:nobodyさん
18/09/21 22:40:04.68 .net
初歩的な知識ではあるが技術的にはかなりしんどい
単純なシステムならいいが、複ログインや古いシステムが絡まると手がつけられなくなる

929:nobodyさん
18/09/21 22:55:58.39 .net
初心者お断りスレの対象じゃないということで

930:nobodyさん
18/09/21 23:23:26.53 .net
>>904
いやだから同じページでなければそこは正常動作してるんだっ�


931:ト 初期表示と不正侵入の区別 これは理論上無理だからページ構成変えるとか 例えばお問い合わせフォームなら次ページ次ページと行けるから自然と値は入る



932:nobodyさん
18/09/21 23:29:16.47 .net
理論上ふいた

933:nobodyさん
18/09/22 02:15:22.08 .net
CakePHPとか何かフレームワーク入れりゃそれがXSS対策・CSRF対策をしてくれるからな
特段なんか対策用の仕組みを考えたりとかしてないだろ?

934:nobodyさん
18/09/22 05:13:29.59 .net
新手のオラつき方だな

935:nobodyさん
18/09/22 06:03:21.81 .net
CSRFとその他をごっちゃにしすぎ
まずはCSRFだけに注目して考える
それでどういう対策が有効かを考え
その対策をしたときに生まれる新たな問題がないかを検討
そうやって問題がないところまで考えることができればミジンコ卒業

936:nobodyさん
18/09/22 08:04:21.67 .net
FW使えば問答無用で対策がされるわけないだろ
FWのルールに従い FWの機能を使っているうちはそうではあるが
もともと備わってるそういう機能やルールがあるのを知らず
一歩踏み外して自前でコードを書き出せば常に危険は伴う
ただしいリスクに対する対策ができればそういったケースでも安全
FWにも学習コストがかかるわけで
方言のようなFWの流儀覚えるからセキュリティなんて考慮しないではなく
標準語としてピュアPHPなコードで学習しないとFWに頼りきってると痛い目見る

937:nobodyさん
18/09/22 14:55:29.83 .net
>>913
CSRF以外話には出てないが?
君がごっちゃにしてるだけだろ

938:nobodyさん
18/09/22 14:57:31.34 .net
まあまずは頭の中を整理しよな

939:nobodyさん
18/09/22 16:06:23.64 .net
>>914
同感
壁にぶつかってそれを対策するためだけにFW使えとは本末転倒
FW使うにしろ基本に取り組むことは正しいし後々役に立つこともある
>>916
>>880

940:nobodyさん
18/09/22 21:20:14.76 .net
>>910
なにがおかしい?そのままその通りだが

941:nobodyさん
18/09/22 21:59:52.93 .net
>>905
なら答えようか、初回のエラー対策。
はいどうぞ↓

942:nobodyさん
18/09/22 22:03:57.01 .net
>>919
丸一日半も経ってからその程度しかレスできないの?
君、生きてる価値ないw

943:nobodyさん
18/09/22 22:11:29.54 .net
>>918


944:nobodyさん
18/09/22 23:47:56.96 .net
>>920
丸一日?誰と勘違いしてんだ。
ようは答えられないのだな。

945:nobodyさん
18/09/23 00:29:13.67 .net
ここは答えられない人がいちゃもんつけるスレです

946:nobodyさん
18/09/23 06:27:52.89 .net
ぼくはまちちゃんも知らない新参が増えてきてんだな

947:nobodyさん
18/09/23 07:57:41.92 .net
よそのサイトがよそのサイトにリクエスト送って
それを受理してしまうとまずい状況なのがCSRFな
別にまずくないなら仕様で片付けられる問題

948:nobodyさん
18/09/23 09:00:09.80 .net
>>911
間違いなくCakePHPだと今回のような同一ページでも対策してくれる?
他に同一ページで対策するものはある?

949:nobodyさん
18/09/23 09:21:26.76 .net
もう1週間近くになるのにまだできてないの

950:nobodyさん
18/09/23 09:47:44.59 .net
もう1週間近くになるのにまだ答えられてないの

951:nobodyさん
18/09/23 10:47:41.49 .net
そもそも質問した人と断定してることが痛い

952:nobodyさん
18/09/23 11:04:50.91 .net
ほんと初心者スレでやってくんないかな
ここ過疎スレなんでねえ
下らないレスで流さないでほしいんだわ

953:nobodyさん
18/09/23 14:16:22.72 .net
>>930
雑談スレでもあるから話自体はOK
892, 920のような不毛なレスが余計なだけ

954:nobodyさん
18/09/23 19:01:10.04 .net
>>927
とうにできてます。
速度など別の理由で>>909に近い感じにしつつ自分自身に渡すようにしました。
元々お問い合わせフォームの


955:流れなら全く問題なかったので。



956:nobodyさん
18/09/23 23:50:42.36 .net
指摘できるならここぞとばかり反論してきたであろう>>910
結局何も言えずに終わったな
これへの返しもwだけだろ

957:nobodyさん
18/09/23 23:56:07.09 .net
>>933


958:nobodyさん
18/09/24 12:45:34.83 .net
釣られてやんのw

959:nobodyさん
18/09/26 19:14:49.36 .net
>>926
そもそも>>864だけでは再現性が無い
>>871指摘、>>875の通り、method="post"と書けば動作する
問題のコードが端折られているから何が問題なのか分からん

960:nobodyさん
18/09/26 19:46:53.24 .net
初心者スレでないからといって
エラーがなにかを書かないとエスパーじゃないと答えられん

961:nobodyさん
18/09/26 20:47:45.23 .net
くどい、まだ言ってるのか
>何が問題なのか分からん
読解力が問題

962:nobodyさん
18/09/26 21:52:45.49 .net
Windows10でXAMPP使ってる人に
ProでなくHomeで使ってる人いる?

963:nobodyさん
18/09/26 21:58:12.55 .net
>939
xamppとwindowsのhome/proは関係ないと思うけど、何を聞きたいの
結局hostsw書き換えるだけだよ

964:nobodyさん
18/09/26 23:15:25.06 .net
>>940
肝心なこと書いてなくてすまん
windowsの更新で問題点や面倒さなど違いあるかなと
みんな自動更新抑制ツールなど入れてるだろうから同じことかな

965:nobodyさん
18/09/26 23:22:34.52 .net
>>941
特にない
強いて言えば、仮想環境を作る時にPROの方が多少パフォーマンスが優遇されてた気がする

966:nobodyさん
18/09/26 23:27:14.94 .net
ProだとHyper-Vが使える
そもそもXAMPP使わないけど

967:nobodyさん
18/09/27 08:42:18.63 .net
10 homeでxampp使ってるぞ
もともと7 homeからたけどな
phpの動作確認なんてこれで十分や

968:nobodyさん
18/09/27 19:59:39.18 .net
みんなありがとう、よく参考になった

969:nobodyさん
18/09/27 20:31:30.36 .net
本件から逸れて申し訳ないけど, XAMPPって中途半端じゃない?
手元での動作確認ならビルトインサーバでいいしテスト用環境ならコンテナなり仮想なりで動かすし
実際にApacheで動かせるって言っても今はphp-fpmの方もかなりあるし
何れにしてもビルトインサーバよりXAMPPのほうがいい状況が分からない(MariaDBも一緒に入ってくることくらい?)

970:nobodyさん
18/09/27 20:49:57.19 .net
>>936
答えてもいいがもうくどいしそういう流れでもないからヒントだけ書く
自分で実際にやってみなさい
値は乱数でもsessionでも極端に定数でも何であれ関係ない

971:nobodyさん
18/09/28 02:52:40.17 .net
ビルトインでは何か挙動が違うことがない?
ディレクトリ設定というか、エイリアス処理をしてる場合とか。
本番環境ならhoge/であのスクリプトにアクセスするのにビルトインだと違うみたいな
コンテナなり仮想環境なりは実行まで手間が掛かったりしない?
仮想環境起動に6秒くらい掛かったり、配備が手間だったり。

972:nobodyさん
18/09/28 08:00:49.46 .net
ビルトインこそ中途半端だわ
アプリケーション毎に仮想環境を用意するのも自分はあんま理解できんな
XAMPPで作ったやつが動かんことあっても5分で修正出来るレベルの内容だろう

973:nobodyさん
18/09/28 08:08:40.57 .net
OSやバージョン無視したコード書かないのが大前提でね
初心者じゃないしマニュアル見ながらそんくらい把握できるじゃろ

974:nobodyさん
18/09/28 08:09:11.73 .net
結局どうやってもサーバーと色々差異があるので、dev.example.~にしてるわ
コピーして終わり
よぽど特殊なサイトはxampp

975:nobodyさん
18/09/28 08:15:32.89 .net
スルーしてたけどビルトインサーバってもしかしてphpのビルトインウェブサーバ?
使いもんになるのアレ

976:nobodyさん
18/09/28 08:20:50.57 .net
>OSやバージョン無視したコード書かないのが大前提でね
これどういうこと?
何使うにしてもテスト環境あるならそのverで使えない組み込み関数使えば
テストでエラー吐かれるんだしバージョン無視コードがわからない
OS無視コードも何を指してるのかわからない

977:nobodyさん
18/09/28 09:25:43.46 .net
>>953
XAMPP使って仮想環境を用意しないということは
本番とはバージョンやOSが違う状態で開発してるという想定をして
ちゃんとコードをかけるかどうかっていう話だがそんな難しいことじゃねえだろ

978:nobodyさん
18/09/28 09:52:55.62 .net
>>954
バージョン違うとは限らんだろ
OSにしてもOS依存のコードって意識的に書かないと無理でね?

979:nobodyさん
18/09/28 09:56:23.92 .net
Windowsじゃ使えない機能はいくつか知ってるけども
あとは……なんかあったっけ?

980:nobodyさん
18/09/28 10:29:29.10 .net
>>955
意識的にかけるならいいんだよ
書けない人が動かんって言ってるわけで
>>956
関数でOSやFSに依存したり制限をうけるものもそうだけど
(問題になるかは別として)CRLFをPHP_EOLで書いてみたりとか
(このスレにいるかは別として)C:\users\unko\manko.pngとかパス書いちゃうやつとか
ちょっとバイナリプログラミングに手を出してみてエンディアン考えない実装したりとか
ほとんどミラクルケースではあるがまあいろいろある

981:nobodyさん
18/09/28 10:46:04.89 .net
>>957
とりあえずOSについてだけ、だけど、正直あんまり同意できない
ファイルシステム関係は・・・どんなんがあった?
意識してWindowsの特有のACLを操作するときとか?わからんけど
PHP_EOLはわざわざ意識的に「OS依存の改行コード」を指定してるんだから関係なくね
パスの問題は環境が異なるのに絶対パスで書くこと自体がNGなのであってOS関係ないはず
エンディアンが問題になるって、ファイル読んで$char[$n]だったら問題にならないし
pack/unpackだったらまず間違いなくOSによらず意識的にエンディアン指定するんでねーの
あと意識しないで改行コードが変わりうるfputcsvみたいなやつか
parse_ini_fileはどうだったっけ

982:nobodyさん
18/09/28 10:48:09.51 .net
ミラクルケースに近いけど32bit/64bitの数値上限とか

983:nobodyさん
18/09/28 12:34:50.29 .net
>PHP_EOLはわざわざ意識的に「OS依存の改行コード」を指定してる
$tmp_path = "/var/tmp";
$updir = $tmp . DIRECTORY_SEPARATOR . "upload";
とか明らかに無意識というか脳死してる人は割と多い。

984:946
18/09/28 12:46:39.01 .net
今時PHPを含めスクリプトならどんな言語でも開発用には簡易サーバ使うと思ってる
PHPならビルトインサーバだしRubyならWebrick, PythonならDjangoのdevserverが主要どころだろう
多人数の開発でApacheの設定をさせるのって難しくない?
自分だけで開発してるならXAMPPも分かるけど, でもフレームワークの開発用サーバ起動コマンド使う方が楽じゃない?
手元では簡易サーバで動かしたりテスト走らせたりしつつ, リポジトリpushしたときにCIサーバ側でテスト用コンテナ立ててテスト走らせれば本番環境に近い環境でテスト出来るし

985:nobodyさん
18/09/28 12:58:27.95 .net
単一ページならともかく
リクエストまたぐときは論外

986:nobodyさん
18/09/28 13:25:42.97 .net
OS依存とかバージョン依存話してる奴らはまだいい
946ちゃんはアカン

987:nobodyさん
18/09/28 13:29:07.65 .net
>>960
WinでもLinuxでもパス区切り記号は / 使っていいと思ってたわ
いや実際普通に使えるんだが。絶対パスやマルチバイト使わなきゃ大抵は平気なんだが
むしろなんでそんな定数使おうとするんだろう。一体何を考えて・・・

988:nobodyさん
18/09/28 17:28:51.84 .net
964に同意でーす
DIRECTORY_SEPARATORなんて使ったことねーぞ
頭の中では死語になってる

989:nobodyさん
18/09/28 20:14:32.88 .net
>>961
Apacheの設定って設定終わったら設定コピーするだけじゃん
多人数だとその設定はリポジトリを通して共有されるものだろう?

990:nobodyさん
18/09/28 20:15:52.53 .net
pathに"C:"が入ってたらデバッグモード・・・
ってのを昔やってたな
色々めんどくなってサブドメイン管理にするようになったけど

991:nobodyさん
18/09/28 20:23:44.53 .net
DIRECTORY_SEPARATORは確かCakeに入ってたな
今も入ってるかしらないけど
define("DS", DIRECTORY_SEPARATOR)
とかでDSだらけだった記憶が

992:nobodyさん
18/09/28 22:36:46.84 .net
php.iniならまだギリわかるが(設定コピーすりゃいいけど)
apache httpdのhttpd.confでなんか開発に影響あってめんどいのってあるか?
httpdの設定も満足にできない、って相当だぞ

993:nobodyさん
18/09/28 22:47:02.93 .net
>>969

レンサバの保守をやる場合サーバー側で設定できない事がある
専サバなら本当に楽

994:nobodyさん
18/09/28 22:49:40.40 .net
>>970
これ手元のローカルの開発環境の話だろ
レンサバでphpのビルトインウェブサーバ使うのかお前は

995:nobodyさん
18/09/28 22:52:55.62 .net
>>971
そりゃそうでしょ
レンサバでphpのビルトインウェブサーバは使えないだろう
・・・と思ったけど使えたらすまん

996:nobodyさん
18/09/28 23:01:47.62 .net
非開発者が話に混じってる感

997:946
18/09/28 23:20:50.08 .net
楽出来るなら楽した方がいいよねって話よ
何よりビルトインサーバの方が手間が少ないから
あとApacheとかnginxとかのフル機能Webサーバの設定ってコピペだけならいざ知らずちゃんとやるのはかなり勉強が必要だと思うけど
ましてトラブル発生時とか
上でも書いたけどPythonやRoRのプロジェクトでrunserverとかrails sとか開発時にはそっち使わない?
開発時からApache/nginx + Passenger/Unicorn/gunicorn/uWSGIとかでやるのが普通なのかな

998:nobodyさん
18/09/28 23:45:46.98 .net
httpd.confの編集がおぼつかないというのは
socketってなんですかpathってなんですか正規表現ってなんですか、というレベルだろう
ふれーむわーくに頼ってて中身把握できてない人材と同じ系統
むしろ学ばせてレベル底上げする、あるいはふるいにかける良い機会では


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch