PHP質問・雑談スレ4【初心者お断り(ROM歓迎)】 [無断転載禁止]©2ch.net
レス数が900を超えています。1000を超えると表示できなくなるよ。
PHPに関する質問や雑談をするスレです。
初心者お断り(ROM歓迎)と書いてますが、初心者用のスレが用意されているからで、
難しい質問や話題をしなければいけないわけではありません。
PHPマニュアルの読み方を概ね理解していて、関数リファレンスが正しく読める方用のスレです。
PHP未導入の方や、手取り足取りが必要な初心者の方はム板のくだスレへどうぞ。
http://mevius.2ch.net/tech/ (【PHP】で板内を検索)
前スレ
http://medaka.2ch.net/test/read.cgi/php/1486956982/
その他リンク
・PHPマニュアル
https://secure.php.net/manual/ja/index.php
・コードテスト・貼り付け用
http://ideone.com/
・プログラミングのお題スレ (求PHPer参戦)
http://mevius.2ch.net/test/read.cgi/tech/1480579110/
このスレで扱う話題
・PHPのコード,設定や設定値に関する質問
・常識的範囲内でのコードレビュー依頼・改良相談
・PECL,PEARに関する質問
・PHP新機能やPHP関連トレンドの話題
(FWや非公式ライブラリの話題や特徴比較は良いが使い方から先の話題は専スレへ)
・PHPのバグ発見報告・公式に報告する前の検証依頼
このスレで扱わない話題
・直接関係ない○○特有の質問(専スレへ)
(HH,エディタ,IDE,サーバ,OS,DB,SQL,FW,テンプレート,非公式ライブラリ・アプリケーション等)
・PHPの改造 DevOpsってさあ…
昔やってた開発と運用のいっしょくたに戻しただけだよね。
理想は違うんだろうが現実は(笑)
10年後はまた分業とか言ってんだぜ、どうせ… なんかPHPって覚えるスキルRubyやPythonよりおおくね? PHPはWebProg言語としては登場時期は早かったが
いかんせん類友なのか開発陣が無能なもんでいつもどこかの後追い
PHPerだからといって覚えることが特に多いわけではなく
他言語にはあるがPHPにはないから作ろう
そんな車輪の再発明まがいのことを続けてきた結果であって
一言で言えばご苦労なだけなのである 別に先陣切って何かを実装してくれとは思わないからいいよ。
それに、他はできるのにPHPはできないってのも良くないだろw 俺はもうDockerが無いと生きていけない体にされてしまった
必要なプログラムが全て入ったイメージが作れるので
実際に本番環境にアップロードしたら動かなかったけど、
ローカルの開発環境では動いたんだよ!
みたいな事が起こるリスクを下げる
各開発者の開発環境の構築も簡単
docker-composeのファイルとか配ればいい そんでもってテスト用のまま間違って本番稼働させるんだろう?
知ってるよ 仮想化は楽だろうしDockerはGoogleのハードな使い方にも耐えてるほど
耐久性も信頼性も高いのだろうけど
やっぱり専用サーバで環境作るのが俺は好きなんだよ! 手段と目的を間違えて無ければ何でもいいよ。
Dockerはもちろん良い物だけど必須ではない。 PHPで動画編集できるライブラリ無いかな?画像編集できるGDみたいなさ
既存動画のカットと動画連結、字幕が付けれて、それをmp4に出力で来て、
youtubeでアップロードできれば最高なんだけど
コマンドラインで別のプログラム実行するとかじゃなくてね
まぁ無理かな… PHPの場合, ライブラリでやるとなるとピュアPHPになるが動画編集はそれじゃあ重過ぎるだろう
他の言語だとネイティブに近いレイヤのライブラリをラップしてバインディングすると思うけどPHPには実行時にネイティブ拡張をロードする機能がない 文章が臭いなと思ったが
>既存動画のカットと動画連結、字幕が付けれて、それをmp4に出力で来て、
なんかやることが量産クソyoutubeアフィっぽい 動画編集をブラウザでやるってのが無理ありすぎ
重い 遅い 面倒なのは容易に想像でき
あきらかにプラットフォームに向いてない そのぐらいのオンラインサービスなら既にありそうだけどね。 WebGL使えば何でも出来る
動画をテクスチャにすればどんなエフェクトも実現出来る
ブラウザ上ではプレビューだけで
エンコードは強力なサーバーのCPUとGPUをぶん回す
PHPとかもう関係ねえか gif動画くらいならまだわからんでもないがmp4ってご職業をたずねたくなる >エンコードは強力なサーバーのCPUとGPUをぶん回す
サービス化するとなると結構きついよそれ
JSで各クライアントにやらせたほういいね
そうすると専用ソフトでやったほうがいいってとこに帰結する jsで動画エンコードってさ、こうなりそう
利用者=負荷がかかるとわかってる
→鯖管理者=coinhiveみたいなminerを仕込んでおく
→鯖管理者=広告と採掘で両得、サーバ負荷なし ffmpegをEmscriptenで動かすような方式なら
オーバーヘッドでかいしシングルスレッドだが動く
SharedArrayBuffer使えば
マルチスレッド出来るらしいがSpetre、Meltdownのせいでしばらくは復活しない CRON起動すると多重で起動されたりするのって当たり前? いいえ
処理時間が長すぎて、前回の処理と重複してんじゃないですかね? >>843
ロックしたらいいんじゃね?
ロックが確保出来なかったら
前回の処理が実行中とみなして処理を行わない
Symfonyにこの目的のコンポーネントがある
https://symfony.com/doc/current/components/lock.html * * * * * /path/to/unko.php
のういうの見ると、daemonにしてよとか思う。 そんなクソなコードなの…?
まあでも、起動時に一応ulimitしたり落ちたら再起動とかフォローはするけど。 Drupalはメモリの内容を使い回すphp-pmではメモリリークして安定動作しないらしい
php-pmにも一定数のリクエストを処理すると再起動する機能があるが、リークの程度が大きいとそれでも問題になる
Drupalのコードはメモリの内容をリクエスト後に破棄する前提で
あちこちでキャッシュしまくってんのかな? >>846
なんで?落ちたら再起動させるようにするとかよっぽど手間じゃないか 今まで見て来た範囲で大半は、
リアルタイムにしたいのに技術力がなくてできなくて、
そんでもって処理も下手で起動が遅かったり
多重動作したりしてたから。
daemonにしたらそういうことはなくなる。
そもそも落ちるなんて稀な品質で作るし、
落ちたら条件付きで自動再起動するのは
他のサービスでもやるからね。
毎分起動ですぐに処理が終わって、
リアルタイム性を要求されてないならOKだよ。
でもそんなの少ない。 コンテナオーケストレーターのAmazon ECS使うわ
プロセスが仮に落ちても自動で再起動してくれる
使用するメモリーも制限できる
cronのような定期実行も一応出来る >>851
>リアルタイムにしたい
それバッチでやることじゃないのにバッチを使ってる、っていう転用事例だよな後出しじゃん
>そんでもって処理も下手で起動が遅かったり
>多重動作したりしてたから
バッチ利用が悪くてdaemonなら良い、っていう問題じゃないよなコレ。ただの技術力の低さ
>毎分起動ですぐに処理が終わって、
>リアルタイム性を要求されてないならOKだよ。
>でもそんなの少ない。
後の2行はdaemon利用であるかどうかと無関係
むしろ上述の前提のとおり技術力がないならdaemonでもトラブル多発する
>毎分起動ですぐに処理が終わって、
>リアルタイム性を要求されてないならOKだよ。
>でもそんなの少ない。
オレオレ常識を前提にして語らないでくれます? なんかカス知識しかない営業や広報が「ファイルなんてあり得ないDBなら問題ゼロなのに」と言ってる感じ >>853
何だよ、連投して噛み付きたいだけか。若いな…
ごめんね。
自分で作った訳じゃないから技術力は俺のせいじゃないしw
お客さんか、その場開発元に言って。 >>856
後出し、論点すり替え、に追加で人格攻撃に責任転嫁
倍満ってとこかな?
まあ大方ステマの類だろうけど リアルタイムと言うけど
一体全体どんな処理を想定しているんだ
手段として常駐化が使えてかつ常駐化が効率的であるケースはそう多くない
というかぶっちゃけかなり少ないように思われるんだけど どちらかといえば実装ではなく設計もしくはその上流の問題かな
オンデマンドでもなく毎分起動、しかもphp実装
ポート開けて待ち構えるでもない
問題があるとすればその所在はdeamon云々ではなく別のところ >>109
みやえらってYouTubeでも他のアフィリエイターの名前を利用して集客してるよね。
それで散々否定した上で、自分のサロンみたいなものに誘導してる。
一番、卑怯なタイプですよね。 phpって
クラスのフィールドに代入する時
クラスで定義してない名前のフィールドにも代入出来る?
何でこの辺ゆるゆるなんだ 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">
と自分自身に渡す場合エラーになってしまいます。
どうすべき、どうしてますか? if(!isset($_POST["token"]) || $_POST["token"] !== 値 ){エラー表示}
のところの「値」が数値型になってないか? ifの中身が予想に反する結果になるんだったらまずvar_dumpして原因探れよ >>865
文字型です。
別画面へ移動ならエラーにならないのでそこは問題ありません。
>>866
予想通りの結果です。
CSRF対策で、ページが最初に読み込まれたときの処理をどうしてますか? >>867
hoge1.phpとhoge2.phpの内容を
(おおまか)
などと言って省略しないで全部出せ
それか、再現可能な最小のコードを書け 質問者の意図がわからずブチ切れ
ほぼ間違いなくCSRF対策の意味がわかってない 配列長が500、[0]から[99]までは値が1、[100]から[499]までは値が0、という配列を作るのってどうすればいいですか?
やはり面倒でもforでまわすのが確実でわかりやすいでしょうか <form action="hoge2.php">
methodが抜けてる時点で、お話にならない。 >>872
配列長100で全要素の値が1の配列Aに、配列長500で全要素の値が0の配列Bをmargeするということでしょうか 連投すいません
array_mergeの動作を勘違いしていました
array_merge( array_fill(0, 100, 1), array_fill(100, 400, 0) )
これだけで重複させずに生成できるんですね
ありがとうございました >>871
質問に余分な箇所は削るという感じでしたので省略しました。
そこ必要でしたか?ちなみにPOSTです。 >>871
methodが何であれ対策に根本的には関係ない
すでに書かれてるのにあえてまた書くがエラーが出て困ってるのではないとわかってる? >>871は頭悪いのか?なくても予想できるだろ
>別画面へ移動ならエラーにならない 問題点が見えていない2人(か1人か)のために書くと
$_POST['token']には何かしら値が入っているはず
入ってなければ不正アクセス等(で強制終了可)
ところが自分呼び出しでは最初は値が入っていない
だからエラー処理してるとそれになる
不正アクセス等の区別をどうするかということだな
エラー処理せずスルーするか sessionが空
postが空
sessionとpostが一致しない
=> でてけ! >>868
(おおまか)は !is_string($_POST['token']) など質問に全く関係ないバリデなどです。
他スレではどこも関係ない部分は消せと言われますがここは全部書いた方がいいのでしょうか?
>>864は100%再現します。 $_POST['token']以外に何も判断材料がないのかね method記述がないコードでhoge2.phpに投げるとなぜか$_POST['token']に値が入ります!再現します! >>884
判断材料とはなんでしょうか?>>881の通りです。
フラグに初回で値入れるか変えて
それ以降受け渡して使い回しすれば判定できますがそれはちょっと。
みなさんはどう判定してるのでしょうか? filter_input覚えたからってスーパーグローバルだから使うなって理屈はおかしい
スーパーグローバルがいじれてしまっても意図したことなのでなんの不都合もない バリデーションが貧弱でFILTER_CALLBACK使いまくりの
汚らしいコードになるのがfilter_input
すっきりでもなんでもねえや ageてるやつはちょっと頭悪すぎてこのスレに不要なんで消えてくれるかな スーパーグローバルなんて使ったらテスト出来ないじゃん
禄にテストしないとgoto failを誤記述してセキュリティに大穴空けたiOSみたいになるぞ 自己呼び出しはそんな特別なことでもないのにな
皆対策してないのか CSRF対策とはなんぞや、から説明し出す人を待ってるのかな OAuth2のstateは?
リンクを踏ませて攻撃者のアカウントにログインさせられるのを防ぐらしい
図解:OAuth 2.0に潜む「5つの脆弱性」と解決法 (2/4)
http://www.atmarkit.co.jp/ait/articles/1710/24/news011_2.html
しかし、ユーザーのアカウントを盗むのではなく
騙して攻撃者のアカウントにログインさせるのって
何に使えるんだ? >>900
そんな説明はいらんし、上見た感じ質問者以外説明できるのここにはいないだろ なんぞやを引き出そうとは読めんしな。
>>901
読んでないがカウンターじゃね。 $_POST["token"] !== 値
!==だから「$_POST["token"]」と「値」では型が違うんじゃね?くらいしかわからん
値をどうやって作ってるのか見ないと何とも言えない 知っておくべきことやっておくべきことではあるが、初歩ではないぞ 初歩的な知識ではあるが技術的にはかなりしんどい
単純なシステムならいいが、複ログインや古いシステムが絡まると手がつけられなくなる >>904
いやだから同じページでなければそこは正常動作してるんだって
初期表示と不正侵入の区別
これは理論上無理だからページ構成変えるとか
例えばお問い合わせフォームなら次ページ次ページと行けるから自然と値は入る CakePHPとか何かフレームワーク入れりゃそれがXSS対策・CSRF対策をしてくれるからな
特段なんか対策用の仕組みを考えたりとかしてないだろ? CSRFとその他をごっちゃにしすぎ
まずはCSRFだけに注目して考える
それでどういう対策が有効かを考え
その対策をしたときに生まれる新たな問題がないかを検討
そうやって問題がないところまで考えることができればミジンコ卒業 FW使えば問答無用で対策がされるわけないだろ
FWのルールに従い FWの機能を使っているうちはそうではあるが
もともと備わってるそういう機能やルールがあるのを知らず
一歩踏み外して自前でコードを書き出せば常に危険は伴う
ただしいリスクに対する対策ができればそういったケースでも安全
FWにも学習コストがかかるわけで
方言のようなFWの流儀覚えるからセキュリティなんて考慮しないではなく
標準語としてピュアPHPなコードで学習しないとFWに頼りきってると痛い目見る >>913
CSRF以外話には出てないが?
君がごっちゃにしてるだけだろ >>914
同感
壁にぶつかってそれを対策するためだけにFW使えとは本末転倒
FW使うにしろ基本に取り組むことは正しいし後々役に立つこともある
>>916
>>880 レス数が900を超えています。1000を超えると表示できなくなるよ。