PHP質問・雑談スレ4【初心者お断り(ROM歓迎)】 [無断転載禁止]©2ch.net
レス数が1000を超えています。これ以上書き込みはできません。
PHPはFWが乱立しすぎて首をしめてるな
その点node.jsはどこいってもexpressでいいよだから楽
環境構築でいえばPHPのほうがだいぶ楽だから
サーバエンジニアがいないとどうしてもPHPになってしまうのだろう >>375
他に比べたらオプソFW乱立って程でもない
総じて質が低いのが問題
それに起因するのかオリジナルFWが輪をかけてゴミまき散らしてて首絞めてる このスレで使うFWを統一しよう(名案
そしたら他の死んだスレで一向に答えが来ない独り言しないで済むしな public function foo()
{
return [
'a' => 'b',
'c' => 'd',
];
}
FWでこういうコードを入れる必要があるのですが、
何を意図してこんなことをさせるのですか?
$foo = ['a' => 'b', 'c' => 'd'];
でよくないですか? ここのイケメン先輩達に質問しようと思って質問内容を整理して文を書いていたら、途中で答えがわかりました
ありがとうございました PHPって1リクエストで1プロセス使うの?
効率悪くね?
1万件コネクションあったら1万プロセス生成するの?
無理じゃね? >>383
その辺はうまく最適化されてるからそこまで考えなくてもいい
実際、動いてるっしょ >>384
貧弱なサーバーだと一万もプロセス生成できなくね?
プロセス大量に生成しない他言語の方が有利でしょ WebサーバがPHPを実行する際の仕組みに依存するんだから言語は関係ない
Apache+CGIならリクエスト毎にプロセス立ち上げるし
Apache+mod_phpならApacheのMPM次第だし
Apache/nginx+php-fpmならひとつのプロセスで複数のリクエストを捌くし >>387
>ひとつのプロセスで複数のリクエストを捌くし
同時には無理でしょ?
1万件接続されても1万プロセスは作らないけど
リクエストが来た時割り当てられるプロセスが無かったら
空きが出るまで待たされるってことだろ
nodeはそもそもApacheモジュールとかFastCGIとか使ってなくて
node単体でもHTTPサーバーとして動作するって話だ
nginxと組み合わせる場合はHTTPで通信する
nodeは非同期I/Oだから前のリクエストが終わらないと一切次のリクエストの処理が開始できないって事も無い
FastCGI自体1996年ぐらいに出てきてから
そんな進歩してないっぽいし >>386
もちろんそう
phpは基本Cのラッパーだから、直接C言語で書けば爆速で動くよ
いつ完成するかは知らないけど頑張って
>>388
言ってる意味がよくわからなi
おそらくリクエストが最多のgoolgleやyahooが重くて仕方ないならその意見はわかるけど、
一体何に対しての意見なの? レストランで喩えると
コース料理を全部出し終わるまで
次の客を待たせるのがPHP
料理を作り終わって
客が食べている間に時間が空いても
他の客の料理は決して作らない 客一人に一人ウェイターが付くシステムのレストラン=PHP
ウェイターが5人なら注文を聞ける客は5人まで
それでもレストランで食事がしたい客は待つしかない
混雑に対応するにはウェイターの人数をかなり増やす必要がある
しかし常に大人数のウェイターを待機させておくと暇な時の人件費が嵩む
だからって混雑時だけ応援を呼ぶと対応に時間が掛かる
普通のレストラン=Node.js
一人のウェイターが複数の客の注文を取るので遥かに効率的
混雑していても客はとりあえず店に入って注文を出せる
客の人数がウェイターの人数を超えると一切注文を出せず、料理も来ないPHPとは対照的
混雑時もPHPほど大人数のウェイターは必要ない PHPスレで, しかもPHPに限らないことでPHPをディスってもなぁ
nodeが最適な場面は確かにPHPには向いてないだろうけど, それ以上でもそれ以下でもない プロセス生成(prefork)するので
今でも使われてるのってRubyのUnicornぐらいしか知らない PHPでもnodeみたいな非同期処理を実現するものとして
php-pmとかSwooleがあるけど
本番で使ってる奴なんておらんやろ? 非同期処理でややこしくするよりかはサーバー増やしたほうがよっぽどコストがかからん Swoole使うと
最大で30倍近く速くなるらしいのでそれは暴論 1万リクエストあるからって1万生成されるわけじゃないし
プロセス生成数なんて気にする必要はない 実際Node.jsでそれだけ回すと非同期(笑)状態がよくあるしな https://laravel-news.com/laravel-swoole
nginx/FPMの一般的な構成だと80.93リクエスト/秒なのが
Swoole仕様では8717リクエスト/秒に増加している
30倍どころか100倍以上
同期(笑)
メモリリークや不具合を起こす危険と引き換えに時間の掛かるPHPやフレームワークの初期化も省略できるからな
そりゃ早いだろ
php-pmはメモリリークを防ぐために一定数のリクエストを処理後に再起動出来たが
Swooleは知らない Swoole自体は面白いと思うけど, FPMのチューンが分からないからその比較に意味は無い
仕組み上捌けるリクエストは増えると思うけども Swooleって何?PHPのアプリケーションサーバー? 非同期ネットワークIOの拡張モジュール written by C reactphpとはちがうのん?よくわからん・・・ 使ったことないからアレだけど, 機能的には重複すると思う
Cで書かれた拡張かPHPで書かれたライブラリかの違い なるほど、じゃSwoolのほうがよさそうだね
日本語資料少ないけどちょっと使ってみよう Falconみたく中身弄れる人限定とかじゃないの? 従来PHPですべてやってたことを
PHP+AngularJSで開発しようとおもってます。
この場合PHPが行うことはWebAPIとして入力値からCRUDして
JSONなどAngularJS側で使うデータの出力でいいんですよね? >>411
どうもありがとうございます。
作ったことはないのですが、確か最近の応用情報かなんかの過去問見たとき、
WebAPI作る問題出てて、そこでも確かにHTTPSでBasic認証してました。
ちゃんとWebAPIの作り方調べてやってみたいと思います。 >>412
何で例に出すのがBASIC認証なのか
APIならOAuthとかじゃねえの 自分一人が個人的に使うシステムでも無い限り
OpenAPIやSwaggerで仕様を明確化した方がよい
あるいは昔ながらのREST APIではなくGraphQLでも良いかもしれない
RESTは自分でも作れるかもしれないが
GraphQLは割と複雑な仕様なのでライブラリーが必須
OAuthはOAuthで難しい
変な実装をすれば車が通れる程の大穴セキュリティホールが開く
https://www.sakimura.org/2012/02/1487/ プログラミングを誰でも習得できる方法は、「前場アキドルのプログラミングマスター方法」というブログで見られるらしいよ。ネットで調べると見られるらしいです。
5648W 掲示板が作りたくてデータベースとのやり取りをするPHPとそれのインターフェイスとなるHTMLを作りました
投稿時の想定は「まずHTMLにアクセスしてそこで項目を入力してPHPを通してデータベースにデータを入力」です
これはAjaxやPDOを使うことで作ることが出来ました
しかしHTML(JavaScript)のソースコードからPHPのファイル名を見つけてPHPを直接叩くことで簡単に荒らしが出来てしまいます
この問題を解決したいと思い、PHPをドキュメントルートから外したのですがそれはアクセスが出来ず失敗に終わりました
皆さんはこのような問題に対してどのような対策を施しているのでしょうか? 相手が荒らすのに苦労する仕組みを作るといい
1文字 同じ文字のみ 英数字のみ URLとかスパムに使われそうなものを制限する
連投制限の仕組み作る(IPベース、クッキーベース、セッションベース、それら組み合わせ)
若干面倒な登録を経て登録者のみ投稿できる会員制にする
ログと投稿をつきあわせて類似度を比較する(処理は遅くなる)
AIで意味のある文章か判断する(PHPerには難易度が高すぎる) 直接PHP叩くのと、フォームから入力するのと、
マクロにとっては荒らしのしやすさになんの差もないと思うのだけど。 reCAPTCHA v3ではユーザーのアクションなしに相手がロボットがどうか
判別できるようになるらしい 回答ありがとうございます
>>418-420
ワンタイムトークンが良さそうだと思いました
>>421
マクロだと確かにそうですね
IPアドレスで連投を規制したりすることも検討してみます PeachPieって言う.NETでPHP動かす環境あるらしいけど
どうなの?
そもそも使い物になる? >>424
使ったこと無いけど、ASP.NET Webサーバー使ってるなら良さそう
ってかそれ意外になにもメリットなさそう PeachPieはtechempowersのPlainTextのベンチマークでは99位
それでもFramework OverheadでPHPより1.87倍ぐらい速い
https://www.techempower.com/benchmarks/#section=data-r16&hw=ph&test=plaintext CILにコンパイルされてから実行されるわけだからパフォーマンスは向上するわな(Phalangerと同じ)
あとはエクステンションがどのくらい互換性持って提供されるかだと思う
使い物になるかで言えば公式が「まだexperimentalだよ」って言ってる以上は(productionでは)全く使えない
>>428
plaintextのベンチとか意味あるの? 単なるプレーンテキストの送信でも言語やフレームワークによってかなり差が出るのは分かる
PeachPie自体はまだ実験的な物ではあるが
WordPressは既に動かせるらしい composerってメモリ使い過ぎじゃね?
サーバーの利用可能なメモリが少ないとSymfony4のインストールすら完了しない
composerのロックファイルは
十分メモリのあるローカル環境で作り
メモリーの少ないサーバーではロックファイルからcomposer installするのがオヌヌメらしい
とは言えもう少し少なく出来ないのか? >>410あたりを見て気になったんだけど
API作るというだけでは認証機構入れる必要これっぽっちもないよね?
BASIC含め簡単なものや固定のものは投げてる要求確認すれば丸わかり
バッチ等からのアクセスが主だったり他サイトに利用させるとかが絡むなら
事前認証してtoken吐いて……って機構が必要かもしれないけど>>410はブラウザ経由
認証つけるにしても、もしAPI以外でログイン認証してるならそっちのセッションをそのまま使える いろんなところから利用可能にするためにWebAPI使うんじゃないのか そらTwitterみたいに本家がユーザ認証前提の仕組みで他所でも認証してあーだこーだって話なら、な
例えばYahooのルビ振りWebAPIなんかは認証なんてない composerはなぜかパッケージのダウンロードが一個ずつって特徴もある
並列化する非公式プラグインはあるが
何で公式は並列ダウンロードしないのか
https://github.com/hirak/prestissimo 並列ダウンロードが当たり前の他のパッケージマネージャに慣れていると
遅く感じる
プラグイン作者によるプルリクエストがcomposerにあったが
マージされるのはいつか分からない そもそもcomposerってなんで出てきたの?
必要なのこれ
composerじゃなきゃダメなことなんかあるの フレームワーク使いたい奴には必須かもしれないけど
それ以外は別に使わなくても問題ない っていうイメージ
つか何故公式が云々って公式の気持ちなんか知るか国語のテストかよ composerの中の人は忙しいので
並列ダウンロードは皆があったら便利だと思う機能とは知っているが
優先度を低くしている
そんな感じでプルリク作成から2年経った composerは車輪の再発明が嫌いな
再利用大好人間たちがコードを持ち寄って使いあったり
そこから新しいのを作るためのなれ合いツール pear/peclが要らなくなるわけじゃないんだよな composerにあるライブラリって全部PHPでしょ?
pearを進化させたようなもんだよねたぶん ComposerのロゴはGo以来のイラッと感を覚えるわけよ PHPの拡張ってプロジェクト毎にはインストール出来ない?
拡張を実行時に動的に読むdlって関数が昔あったらしいが
削除されてるし
dlは使い物にならなかったのか
他言語ではC拡張のあるライブラリも
他のライブラリと同じ様に
そのプロジェクトだけのインストールができるのが普通 >>459
現状出来ない
実行時に拡張をロードする機能自体が存在しないのでどうにもならない
やりようがあるとすれば実行時ロード機能を提供するPHP拡張を作成することくらい
PECLに登録して最終的に本体にバンドルされるところまで至らないとエコシステムには取り込まれないだろうなぁ
rasmusとかandiとかzeevとかの基幹メンバーがとんでもなく保守的だし正直何やっても絶望的だと思う
この辺は割とマジで根本的に設計上の欠陥だと思うわ .phpから拡張を読み込むことができるようになると
セキュリティホールが量産されそうな気がするが
その辺、大丈夫なのか? 何となくそういう懸念が浮かぶのは分かる
ただ他言語, 具体的にはPythonとかRuby, Nodeなんかでは頻繁に使われてる
system系の関数使って実行ファイルを叩くのとどう違ってくるのかと考えると別に実行時に拡張ロード出来ても良かろう(dlが削除されたのは安定性が理由だと書いてあるし) PHPの用途で動的に読み込めると何が嬉しいのか、
まともな理由がないから削られちゃったんだろ プロジェクト毎にPHPインストールすりゃいいんじゃね >system系の関数使って実行ファイルを叩くのとどう違ってくるのかと考えると
systemやexecは、php.iniで包括的に設定するしか手がない disable_functions 設定で禁止できる
かなり違うんじゃないかね
http://php.net/manual/ja/info.configuration.php#ini.enable-dl
>このディレクティブは、Apacheモジュール版のPHPを使用した場合にのみ 有用です。
>PHPの動的ロード拡張機能をdl()で 仮想サーバー毎またはディレクトリ毎にオンまたはオフに変更することが できます。
>
>動的ロード機能をオフにするのは主としてセキュリティ上の理由によります。
>動的ロード機能により、 open_basedir の拘束を全て 無視することが可能になります。 そもそもdlって最近は削除されて使えないんじゃなかったの? exec使える状態って
アホなアップローダとか置いてた日にはopen_basedirの拘束なんて無視して好き放題されちゃうよね >>466
いや, php.iniだけで動的モジュールロードの可否を与える(php.iniのみで設定可能な)ディレクティブがあれば一緒だろ
自分でdlの例出してるじゃん
mod_phpで実行する場合は権限がWebサーバになるからそれが嫌だというのはよく分かるが dlは安定性に問題があるから削除したって言うけど
他の言語で出来ていることが何で出来ない?
PHPはリクエストの度にメモリの内容破棄するから? extensionの動的ロードしたいってどんなとき PHPは巨大化し過ぎた
山ほどあるビルトイン関数を削除して
プログラミング言語に最低限必要なライブラリだけをOOPで作り
使うかどうか分からない機能は動的ロードするようにすべきだ
そんな事したらもうPHPじゃない?
そんなの知るか そこまでするならフォークして別言語にしろ
QIQとかかっこいい名前付けてもいいぞ >>477のセンスを向上させるにはどうしたらいいですか ビルトイン関数なんて削っても
PHP本体のソースコードがすっきりするだけで
別に劇的に早くなるわけじゃないしユーザ側が受けるメリットなんて大してないだろ すっきりしたら
ごちゃごちゃの状態よりバグが少なくなったり
本体が小さくなるとかのメリットはある
配列とか文字列がプリミティブ型みたいな扱いなのも
なんとかしる
array_系の関数が重ねて適用しようとしたら使いづらいったらありゃしない デフォルトでなんでもアリだからこそ受けてると思うんだけどな
今の時代で多少軽くなってもたかが知れている。ってかそもそもそんなに重くないだろう
そんなに重いならsmartyでも使えばphpの負荷は大きく下がる ビルトイン関数使ってたら
テストを書く時モックするのが難しい
time()とかrand()とか
名前空間使ったハック(\timeのように書いてると不可)やPHP拡張を使う方法もあるが
他の言語だとそんなの必要ないじゃん
キモい
テストを全く書いてない奴はお帰りください rubyのnokogiriみたくネイティブライブラリをラップするライブラリって使えれば需要あると思うけど
特にcomposerが普及した今なら更に php4時代のコードでも少しの変更でphp7で動くようにできるというのがphpのメリットで
何するにしても後方互換の問題があるわけで
pythonのような英断をしなければphpが変わることはないし
成熟してしまって時期的にそのチャンスはもう逃した
お前らがforkして新php作ればいいよ
まあオリジナルの差分をコミットする作業が面倒で3日で匙投げるだろうが pythonはpythonで2と3が両立していた時期があってあれはハチャメチャだった php++の前段階として既存の糞ビルトイン関数のラッパークラスをphpで作ればいいよ namespace php\lang;
class String extends Object
{
public function __construct($_str)
{
if (is_string($_str)) $this->str = $_str;
}
public function htmlEscape()
{
$this->str = htmlspecialchars($this->str, ENT_QUOTES | ENT_HTML5, 'UTF-8');
return $this;
}
} あらゆるライブラリがそのラッパークラスとやらに対応してくれないと
何度も変換する必要があって使いづらい イメージ的にはJavaScriptに対するjQuery
jQueryの書き方に慣れてきたころにjQueryの構文やオブジェクトを実装したJavaScript2登場みたいな PHPの言語仕様が嫌だが
PHPのライブラリや既存コードも使う必要があるってなら
他の言語で書いてPHPに変換出来るAltJSならぬAltPHPを使えば良いかも
ただ、PHPの場合それが出来て
ある程度人気があるのはHaxeだけだと思う
JSは本当に色々あるのに
https://stackoverflow.com/questions/6551089/is-there-anything-like-coffeescript-for-php HackはPHPと互換性があるがVMも違うやつ使う必要があるから
AltPHPでは無いよね そんなにjsがいいならjsの子になっちゃいなさい! JSはブラウザで動くのがJSしか無いから
AltJSみたいのが生まれたけど
サーバーサイドは別に代わりがいくらでもあるしね ブラウザで動くのがjsしかないのが異常というか
jsだけとはいえブラウザで動かせること事態が本来異常というか jsで、任意のファイルを読み書きできるの?
出来てしまうとセキュリティ上やばい気がするのだが。。。 >>502
なんの話?
ブラウザのJSは勝手に他サイトやファイルシステムの内容を読めるAPIは無いし
脆弱性を利用してブラウザのセキュリティを突破しようにも
サンドボックスがあったりして難しい サーバサイドプログラムでjsを使う場合の話です。
任意のファイルの読み書きはできるのでしょうか? node.jsならできるよ。
require('fs'); jsだからどうという話ではないな。nodeがそうだというだけで。 >>502=>>504なら
なぜPHPならセキュリティ上問題ないと思った?ていう
まぁ多分本人が考えてることと他のやつが考えてることが違うのだろうけど このスレであってるかな…?
掲示板を作れるようになりたいんだが、正直マジでCSSとHTMLと少しのPHPの知識(スクレイピングなど)ぐらいしか知識がなくてどういう仕組みなのかわからない。
PHPで掲示板って作れる?
理想としてはガールズちゃんねるそのまんまなのが作れたら最高 掲示板と言っても、DBを使う/使わないで難易度が大きく変わる
作らなくてもその辺にサンプルどころかそのまま使えるものが山程落ちてるよ
それを改造するところから初めてみては >>513
DBを使わないPHPの簡易掲示板はコピペしたり改造したりしてなんとか作れた。
ただ、txtファイルに書き込みデータを保存する方法だと簡易的すぎるかなと。
理想はガルちゃんみたいにユーザーが自由にトピックを立てられる形にしたいから、DBを使ってやりたい…
どっかにわかりやすい雛形でもあればいいんだけど、何から手をつければいいかすらわからない… >>514
俺も昔やろうとしたんだけど、掲示板はセキュリティに気をつけないとあっという間に終わる
更にセキュリティ的に問題なくても、連投や巨大投稿、大量の改行コードだけの投稿などをどう取り扱うかで永久に終わらない
トピックというかスレでいいなら
「2ch風掲示板 cgi」
「2ch風掲示板 php」
この辺で検索してみてはどうかな 要求仕様を実現するのに最低限必要なことと、そうでないことを切り分けられる頭がないと無理
ガルch形式のbbsも2ch形式のbbsもc, perl, php, その他わりとどんな言語でも作れる
それとtxt方式かDB利用かは直接関係ないし
どちらにしてもどのようにデータを読み書きするかという設計を自分で出来ないと話にならない
コピペと改造でなんとか、ってレベルで何が簡易的なのか判断しようとしてる時点でおかしいことに気付け まぁこういうアドバイスはガン無視して、結局自分で作ってから気づくんだよね
俺の時もそうだった
とりあえずDBは使わない形がいいよ、セキュリティと言う名の闇が待っている cgi拾ってきてcssとjs設定すれば終わりなのに、何でそんなに難しくしたがるんだろう テキストかデータベースかは、見た目や運用上の設計には関係ないから、とりあえずテキストでいいと思うよ。
書き込みや読み込みの処理の部分をあちこちでやらずに1箇所で行うように設計すれば、あとでデータベース式に変更するのも修正箇所が少なくて済む。
テキストファイルは拡張子をphpとかplとかにして、直接アクセスされたら実行エラーになるようにしておけばよいかと。 BBS {
int createThread(string $title);
bool deleteThread(int $threadId);
Gererator readThread($threadId);
bool writeThread($threadId);
bool saveHTML(string $template);
} >>515
っぽいねー。
実はtxt自動生成して書き込み保存する簡単な掲示板を設置して見たことがあるんだが、放置してたら謎の大量文字化け(スクリプト?)の投稿で荒らされまくってダメだった… >>516
ありがとう。
txtかDBってとこがポイントではないんだね。
txtファイルでも書き込み内容の分類やら保管やらをしっかり設計できれば運営していけるってことか…。
なんとなく通常のサービスはDBを利用してるからDBが正義だと思ってたわ。 まぁ最初から完璧なものなんて作れるわけないしまずはウダウダ言ってないで動くものを作れと >>522
海外アクセス弾くだけでほぼ無くなる。「htaccess 海外 拒否」などで検索
もしくはNGワードの処理をかます。
これは書き込み後にテキトーに判定してdie()するだけでいい。めんどくさい事は後で考えて、生産的な事をまずやろう >>525
私は書き込み文字の中に全角文字がひとつも無かったら、「全角文字を含めてね」ってメッセージを出して弾くようにしたら、海外のスパム書き込みは100%排除できました。 >526
頭いいな、いろんな意味で完璧な対策と思う
素直にすごい >>528
確かに中国語だと弾けないですね笑
でも今まで中国語の書き込みは無いです。
てか、もし私が中国のスパム業者なら、日本や欧米の掲示板に中国語で書き込んだりせず、書くならやっぱり英語だと思います。 考える人より手を動かした人の方が早く覚えるよ
まずは本買うなりサイト見るなりして作ってみればいい 外部設計と内部設計の違いもわからないような奴が
いくら本を読んでも手を動かしても100%無理
既存のサービスやプログラムをとっかかりにして
仕様も機能もひとつひとつなぜ存在するのかなぜこうなってるのか学ぶしかない 公開されてるのもある
公開されてないものも設計を考える力を養うにはもってこいの材料 !omikujiみたいな公開しないとわからん機能じゃなくて
使ってて目に見える部分であれば
たいていどういう風に作るかイメージが沸く
このスレの人はtwitterだろうがfacebookだろうが作ろうと思えば作れるんじゃないか?
気力がない 作っても流行らない うっかり流行ったら500との闘い 解消するためにサーバ月何十万
PHPerの限界とは経済力と時間の限界なのである AWSもLinuxもそこそこ扱えるし作ろうと思えば作れるけど、
レッドオーシャンに飛び込むような元気はない 機能それぞれ単体なら比較的容易
全部まとめて、さらにセキュリティ、速度、……となると設計だけでも
かなり複雑になってくるから時間がかかるようになる
ただ、10年前の自分じゃ機能単体もおぼつかなかったと思う >>536
今の知識もったまま20年前にタイムスリップしたいよな 【放射能の影響か?】 道路の真ん中で直立不動で失神しているトンビ、多発している認知症事故と関連!?
http://rosie.5ch.net/test/read.cgi/liveplus/1531880720/l50
動物まで意識障害? JSのように
$a = 10;
$b = $a || 20;
echo $b; //20
にならんかなあ
これ糞便利なんだけど
論理演算子はorだけでもいいよねえ $a = 10;
$b = $a || 20;
echo $b; //20
ごめんこれ10だわw
$a = 0って書いたつもり null合体演算子(??)を使え
短絡評価した結果何を返すのかなんて後から変えられるわけねぇだろ 型ってもんがあるからtrue/falseで返してくれないと怖い >>545
いっそそこまで覚悟出来るならやればいいとは思う
混乱はあったけど結果としてPythonの決断は正しかったのだろう
とは言え短絡評価を結果をbooleanにするのも最終評価値にするのも良し悪しだからなぁ 何が入るかわからないのがな
最悪を想定するなら短絡評価の前に中身の判別を入れなきゃならない
想定した型かどうか事前に判別するなら短絡評価要らない $b = (!empty($a)) ? $a : 20;
NULL合体演算子はissetだからだめだな JavaScriptも三項演算子使えるんだからそれでよくね
短絡評価は言語ごとに差があるからあんまり使いたくない 愚直でもわかりやすい判断分岐で書かれてると読む人間にはありがたい なんでも短絡や三項にすれば短いだろってより
素朴にIF文使って書いてある方が
読みやすい場合が多々あるな ネストしてないに限れば三項演算子は読みやすいな
条件部分を>>548のようにちゃんと()で囲ってればif文の変化形にも見えるし
コーディング規約で禁止してるとこは結構あるし賛否両論なのは確かだが phpで三項演算子のネスト書く奴は頭からカレーかけられても文句言えない
ネスト階層が深けりゃコーンスープ付き ifだとクロージャー使って即時実行したくならない?
if (!!$a) {
$b = $a;
} else {
$b = 20;
}
$b = (function() use ($a) {
if (!!$a) {
return $a;
} else {
return 20;
}
})();
上だとなんか感覚的にいやだ 何に代入しているのかを特に明示したいならそれでいんじゃね
単純な代入ならインデントで即わかるとは思うが
読みやすさわかりやすさを理由に(if等で)わかりやすい分岐を・・・って話の流れで
if使いながら$aそのまま(のbool変換値)ifに流すだけなところと
ifに渡すだけの箇所で!!$aってやってるところが意味不明だが > !!$a
これ、 $a == true と等価だよな?
数文字タイプする手間を惜しんで2回反転させる計算コストを発生させてる? booleanキャストのつもりで使ったが
確かにいらんな !!って書けることを知らなかったw
!!!もできる? >>560
その発想がなかったから、そんな事できるんだって目から鱗なだけ。 いやだからさ、そんな事もできるんだ!
すごい面白い!
じゃあ何個まで重ねられるんだろう?って話だよ。
どこかでエラーにされて怒られるとは思うけどさ。 eval()あんだから自分で試してみりゃいいじゃん >>554
下はJavaScriptが好きそうだな
「名前空間が汚れる」とか言って
でも上のシンプルな方が読みやすい
>>556
>$a == true
これもこの素朴な方が分かりやすい
「!!$a」とか多用すると読みにくい
トリッキーな書き方より
それを抑えて読みやすくする方が大事 >>550
>>551
同意
書く方は短い方が書きやすいんどろうけど 短く書くことが目的化してるコードはバグ出やすい上にデバッグし難いんだよなあ でもさすがにisset($_POST/$_GET)は三項演算子使うでしょ? >>570
filter_input 使うから、使わない まとめて初期化、まとめて確認って手もあるしなあ
スタンダードというわけじゃなし filter_inputってバリデーションでしょ?
issetしたあとに使うものだよね? その辺の処理は各々好きにしろとしか
・NOTICEが出ない
・その後の処理でバグを生まないようにする(デフォルト値設定、検証除去etc)
これが出来てれば良いわけで >>573
マニュアル読んでみ。幸せになれる。スーパーグローバルから開放されるぞw >>554
elseまでいかんでも
$b = $a;
if (!$b) $b = 20; >>575
後々、それが出来てるかどうか、バグを生んだのがそこかどうか確認するのに
文字数少ない代わりにわかりにくい書き方とか最悪だろって話 $aの型が例えばintなどと保証されてるのか?
保証されてるなら!$aなんてint(0)の判別にしかならないのに直感的じゃない
保証されてないなら'abc'やarray(0)が来た時どうすんの 三項演算子の何がわかりにくいのか理解に苦しむな
ワンライナーで書けるってだけでif-elseと変わらんのに
(condition)
?
when-true
:
when-false
; プログラム書く上で1行で書けるかどうかってなんか価値があるの?
コードゴルファーphp? if( ~~~~ ) ~~~~; else ~~~~;
三項演算子の特権じゃないじゃん >>581
1行だ短いだなんだじゃなくて、何がわかりにくいのか理解不能 ワンライナーって見ただけで私アホですと脳内変換されるわ >>585
ワンライナー
-rオプション使いまくってる人?えっ違うのですか?
ぺちぱー
吠えてるだけ 価値はある
行数ベースで費用計算してるとき安くなる 三項演算子は短く書くためのものじゃないが。
その程度の理解なのなら自分で言ってるように使わないのが無難だな。
無駄にマウント取ってるのは笑えるがw
ifelseは組み込み制御構文で三項演算子のように式が要求されるところには置けない(評価されて値になれない) 同じことが実現できる場合の書き方の比較であって
誰もそんな当たり前の話しとらんのだが ないよ。正確にいうと関係ない。
一行で書くためにあるものじゃないからね。三項演算子は。 なんで話の流れと関係ないのに、三項演算子だけの特権でもないのに、ワンライナーで書けるってことをわざわざ書いたの? ん?俺がワンライナーとか言ったのがまずかったのか?
普通三項演算子はワンライナーで書くもんだからそう言っただけなのだが
別にそこはメインじゃないし主題ではない
?:という2つの演算子しか使っておらず、間違い探しをするようなものでもなく
何がわかりづらいのか理解できないって話をしただけ
ちなみに会話してんの俺じゃないぞ・・・ 少ない行がいいなら最期に¥rと¥nを置き換えて1行にすればいいやんm >普通三項演算子はワンライナーで書くもんだから
俺ルール広めようとしないでくれない? 主観ではあるけど
googleで画像検索したりしても、実際ワンライナーが多数派じゃない?
そもそもネストするようなケースじゃほとんど使われないし
これも主観だけど感覚的に正しいと思う 改行とインデントで整えないなら1層ですら可読性低いんだけど
しかし、なんで一行・1行などと書かないでワンライナーって書くのかね
文字数多いじゃん検索用ってか 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' 可読性の定義は人によってさまざまだけど
長ったらしいのはかえって可読性が下がると俺は思う
>>601では真ん中が一番読みやすい 一番上がおかしかった
if (age < 18) {
if (gender == 'male') {
title = 'Master';
} else {
title = 'Miss';
}
} else {
if (gender == 'male') {
title = 'Mr';
} else {
title = 'Ms';
}
}
やっぱこれは俺にはあってないな >>605
これPHPじゃないし
三項演算子の可読性について、stackoverflowで引き合いに出されてたコード
PHPは評価の仕方が他の言語と違うので
そもそも一番下のようなコードは書いたことがない >>602
同意
ネストしないなら3項演算子がシンプルでよいがネストさせるヤツは死ねと思ってしまう 俺Pythonistaだけど、{}が読みづらい原因だから、こうするといいよ。
if ($age < 18)
if ($gender == 'male')
$title = 'Master';
else
$title = 'Miss';
else
if ($gender == 'male')
$title = 'Mr';
else
$title = 'Ms'; $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つの文字列どちらか選択とかならまだいいけど
関数や式が絡むと : の区切りがわかりづらくなるんだよな 実務的にはそれぞれ属性を自分のobjectに聞いて、って感じのが多いかな stackoverflow探してみたけどそれっぽいのが見つからないわ echo 'こんにちは、' . ($name && strlen($name) > 0) ? trim($name) : "anonymous" . "さん";
$name = ($name && strlen($name) > 0) ? trim($name) : "anonymous";
echo "こんにちは、{$name}さん";
var = a ? b : c;を徹底して、
それ以外を組み込んだ、上のような使い方をしなければ問題ないと思う。
Viewには処理済み変数のみを埋め込むのを徹底すればいい。 表示名の場合はだいたい
$nameを先に'anonymous'で初期化しておいて
セッションがあってDBから取ってくる等の時に$nameを上書きする
ってやるよね 条件2つ処理する2x2の構図でも
条件1の結果によって条件2の式自体が変わる場合は
Balancedケースでも可読性落ちるよね 三項演算子を使うときに可読性が落ちない条件を突き詰めていくと
一重であることと
代入される部分が簡潔で統一されてることのほかに
条件部分が簡潔で統一されてることも必要だと思うんだ
18<=ageのときは性別にunknownやnewhalfが追加されたら、途端に難解になるし
age<18ではgender==='male'だけど18<=ageではchecktitle(age,gender)の戻り値だったりすると、わりとめちゃくちゃ
でもそうするとvar=(a)?a:20;みたいな条件になりがちになって
短絡評価のわかりにくさの話に戻るんだよね
$var = (expr) ?
value1 :
value2 ;
みたいな書き方だったら多少複雑でもいい 簡潔じゃないと1重なのか2重3重になってるのかパッと見てわからないからな
その辺ifでは迷ったことがあまりない > 18<=ageのときは性別にunknownやnewhalfが追加されたら
そこまでくると>>603が良さそう
1(under18)
2(over18)
4(male)
8(female)
16(unknown)
32(newhalf)
ちなみにnewhalfじゃなくて
shemaleとかladyboyが正しいおっぱいおちんちんMAN なんだそれは
ageもgenderも1つに閉じ込めてbit演算するならunder18/over18は下位1bit、genderは以降上位bit、ってとこだろう
maleやfemaleを両方選択可能の並存状態にしてどうするんだよ
2値が1種、4値が1種なら3bitで済むだろう そもそも話題が>>618の趣旨とは離れることだが、1点付け加えると
条件がどう動くかわからず拡張性を考えるのであれば
愚直にifやswitchで構造化するか
>>610のように1つ1つ条件を絞れば引き当てられるtableを作るのが筋だろう
ageの判定処理は完全固定と断定できないだろうし
age自体を現在日付とユーザ誕生日設定によって動的に取得させることになる可能性がある
フラグ化してのbit演算では柔軟性・拡張性に乏しい、全然良さそうじゃない 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'
} $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';
みたいに出来るから考えようによってはいいかもね あ
配列も出来るらしい
$title = [GENDER_TS+AGE_UNDER18 => 'Mx'];
みたいに
知らなかった >>610と比較して1次元になるだけでメリットはないな >>625
ぱっと見何やってるのかよくわからない
三項演算子もそうだけど結局読む人のレベル次第だな >>629
三項演算子だと処理が煩雑になるほど記述が鬱陶しくなるか難しいかのトレードオフじゃん Pythonにすれば良い
$bar = $fooVal == 10 ? $trueVal : $falseVal
の代わりに
$bar = $trueVal if $fooVal == 10 else $falseVal
みたいに書けてちょー分かりやすい phpどころかビット演算というプログラムの基本すら知らない奴が居付いている 関数型言語では同じ変数に何度も代入するって事は基本やらない
明示的に値を変更可能な変数にすれば再代入可能だが
乱用すると関数型使う意味が無くなる
なぜ再代入を避けるかって言ったら
理由は色々あるが
一番はバグの原因になるから
ScalaにもPythonのような式扱いのif文があったり
switchが無く代わりにmatchを使うのもそれが理由 ビットフラグ立ててるだけでビット演算をしてるわけじゃないからな 初見のわかりやすさってのはシンボルか単語かの違いってのが大きいのだろうけど
みんな大嫌い正規表現だって慣れれば大したことはない
三項演算子はネスト出来ることが問題なのであってネストしなければ問題はないのである 正規表現わけわかんないよ
慣れるしかないんだろうね どこまでが条件部かどこが区切りか
誰が見ても即座にわかる単純明快なケース限定ならいいかもね
それかキッチリ改行入れること 改行が減る=行数ベースの料金が下がる
文字数が減る=文字数ベースの料金が下がる プログラムがより単純化するのは流れであって
コード単価あげるか 成果物に対して報酬をもらえばおk 正規表現はperl時代に超覚えてマスターした気になっていたが、
PHPやJavaScriptだと微妙に違ったり後方参照も違ったり、
なんか1日中悩んでたりする。 >>643
慣れの問題だと思います。
PCREなのに使いこなせない自分が情けない…
preg_matchすら悩むw parse_ini_fileの結果を取得するときに、
セクション名そのものを取得したい場合はどう書いたら良いでしょう? ありがとうございます。
それは知っていたんですが、そういう次元じゃなかったです。
変数名をtypoしていただけでしたw
お騒がせしました… Windows版のPHP7(XAMPP)で、posix関数を使うにはどうしたら良いですか?
今は特に何もせずにデフォルトインストール状態で、
関数がundefinedエラーになってしまいます。 http://php.net/manual/ja/intro.posix.php
>注意: この拡張モジュールは Windows 環境では利用できません。
どうしたら良いかというと、VirtualBoxでWindowsの上にLinuxを乗っける、などしか手はないかと 了解です。ありがとうございました!
OS判定して、Windows版の時はその処理はスルーして目を瞑ることにします。
PHPはやっぱりLinuxの方がいいですね。 ActiveRecodeのORMはたくさんありますけど
パフォーマンスが特に優れてるおすすめのものありますか?
処理性能重視したらPDOでSQLゴリゴリ書いたほうがいいのでしょうけど
いまいち自分のSQLに自信がもてないのでSQL書くのは減らしていこうと思っています どれでも大差ないんじゃね?
一番メジャーなのを使っておくのが後々のため… DB設計を確認したほうがパフォーマンス改善効果見込めるのでは 俺がそうなんだけど、抽象化がたりないとSQLベタ書きDAOパターンになるよね。 元DB屋的にはORMで結合グチュグチュやるより
出来るところはビュー作っといた方がいい希ガス DB担当に流せる仕事は最大限DB担当に流してしまえという風潮
合理的だと思う composerってなんでjsonわざわざ書くの?それが主流みたいだけど
installコマンドは一応用意されてるんだよね?
なんか理由あるんですか? installじゃなくてrequireか
composer require 'namespace/some_package.3.2.1' 流行り
かっこいい気がする
OSSのフロントエンドはこんなノリ 質問失礼します。
2つサーバーを試行錯誤しながら立てました。
サーバー@には Environment で USER と HOME の設定がありません。
サーバーAには phpinfo で Environment の USER と HOME が設定されているようでした。
--------
USER hoge
HOME /home/hoge
--------
Environment の設定している場所を特定したいのですが、どこを見たら良いでしょうか?
/etc/httpd/conf/httpd.conf
/etc/sysconfig/php-fpm
/etc/sysconfig/httpd
上記のファイルは調査しましたが hoge が見当たりませんでした。
よろしくお願いします。 そのapacheを起動した人が手順を知らないか間違えてるんだと思うぞ。
環境変数が付いてる方の起動方法を間違えてる。
個人のプロセスじゃないのに、個人の環境変数を引き継いでどうすんだよw
serviceコマンドとか使わずに、いきなりhttpdを起動したんじゃないかと。 > Environment の設定している場所を特定したいのですが、どこを見たら良いでしょうか?
hogeユーザのHOMEディレクトリ指定はApache httpd側ではなくOS側
/etc/passw d
たぶんLinuxだと思うけど、ならここに書かれてる
ただし、わかってるなら直接編集してもいいけど通常はコマンド経由で変えるもんだと思う >>667
>環境変数が付いてる方の起動方法を間違えてる。
>個人のプロセスじゃないのに、個人の環境変数を引き継いでどうすんだよw
別に$HOMEが設定されてること自体はあんまり問題じゃないかも
個人の環境変数を引き継ぐ、というのも……じゃあ誰権限で実行すんの?ってことだし
"service httpd"等で起動していても、誰かの権限で動くのだから
※Windowsだとサービス化してればlocalService権限だっけ
んなことよりデーモン起動ユーザのシェルを/sbin/nologinにしとこう どんなユーザ権限で実行しているか等は基礎の基礎
起動ユーザ権限のことを知りたければhttpd.confのUserとGroupの説明をよく嫁そして100%理解しろ かの有名なqmailの作者であるdjb様は、
env - /path/to/bin
のような起動方法を推奨してたぞ。
って今時そんな人知らんかw Linux serviceコマンド 環境変数
これでググっておけよ。
環境変数を意識してないと超レアだが意図しない結果に繋がる可能性はある。 単純にchkconfig/serviceで動かすようにしたところ意図せずroot権限で動かしてしまってて書いた.phpの穴突っつかれて以下略
こわいこわい httpdをrootで動かすにはコンパイルオプションが必要… phpのコンパイル直後のmake testに疑問を感じて早数年
でも毎回ちゃんとやってちゃんと結果確認してる >んなことよりデーモン起動ユーザのシェルを/sbin/nologinにしとこう
なんで?
起動ユーザはrootで、nologinにするのはWorkerプロセスのユーザでしょ。
ApacheにしろNginxにしろ、そういう風に作られてるわけで。
単一で動くタイプとごっちゃにしたらいかんよ。 >>677
全面的にすまんかった
> nologinにするのはWorkerプロセスのユーザ
こっちを意図して「デーモン起動ユーザ」と書いてた chsh -s /sbin/nologin root 突然思い出したが、
むかーしのFreeBSDってnologinの中身がexitって書かれてるシェルスクリプトだったなw 特に理由もなく/dev/nullが好きだった時期があった UNIXアカウント=メアドという古き良き安全なインターネットの時代は、
/usr/bin/passwdをログインシェルに設定して、
パスワード変更はtelnetで繋ぐとかもあったな。 >>666
php-fpmならpool.dは見たのかな
php-cgiでsuexecやmod_suphpならユーザー権限になって当然だし
>>667
あなたの環境では非特権ユーザーがポート80をバインドできるようにlibcapを使っているんですね
それはあまり普通じゃないので、人と話すときの前提にしない方がいいですよ
>>671
バーンスタイン先生はEd25519でSSHやTLS界隈じゃバリ現役 phpで、 $var = 'text'; // ←これ、この代入を検知して代入直後に何らかの処理を自動発動させる、ってこと、できる?
ループ中で逐一$varをチェックする、というようなのではなく >>686
qmailとかなんとかdnsとかdaemontoolsとか見事に全部放り投げたなw
あんだけ他攻撃してたくせに。 PHPマニュアルってすげー優秀だなー
セキュリティーで嫌煙されてるがCHMが用意されてるのがでかい
これでネットもつながらない山の中でもPHPならスムーズに開発ができるわ CHMってなんだと思いかけたけど
あれかhtmlヘルプファイルの.chmか
用意されてるの知らんかったサンキュー兄貴 >>693
おうよブラザー
ダウンロードしたCHMはセキュリティ厳しくなっててそのままじゃ見れないから
プロパティ開いてブロック解除忘れずにね >>691
しかし、あの考え方はその後に大きな影響を与えたと思う。
Postfixなんてのが良い例かと…
攻撃という意味では、日本のqmaiサイトを運営してた某教授の方が酷かったw >>691
public domainにしてくれたのはありがたかった
qmailはまだまだ現役で運用してるとこ結構ある
djbdnsはパッチなしだと来年死ぬけどね
>>695
大岡山かw djbdns使ってないからdjbdnsが来年ってなんだろうと思って 2019年 djbdns ぐぐった
2番目に出てきたURLのタイトルが「2019年入籍日おすすめランキング」だった
終わってんな daemontoolsってCD/DVD/BDとかの仮想ソフトじゃなかったっけ
って思ったら全く関係なかったでござる ネタは無いがphpとシェルや他言語とのバッチの書きやすさの違いを聞いてみたい >>707
慣れとしか言えないと思う
バッチファイルはphpで書いて、シェルからアクセスするというやり方にしてるわ 正直マオリ語か何かにしか思えないperlで書かれたバッチも、慣れれば都なのだろうか prelは正直、割とマジでキツイ
文法が違いすぎるから、しばらく離れてるとどう読んで良いのかがわからない perlはプリミティブなんだよな。
やりたい事を細かく制御して書かないといけない。
でも文字列処理だけは感心する。 phpの話じゃなくてperlの話になってるじゃないですか! 個人的にはPHPの方が気楽に書けて好きなんだけど, 現実的にはPythonで書くのがいいんだろうなぁ
PHPとPythonの共通点はbattery includedなあたりか phpとperl、cgiは一昔前は選択性みたいな感じだったのにね
いつの間にやらphp一辺倒になってた
>>715
一度pythonでサイト作ってみたけど本気でめんどくさかった
phpがもてはやされる理由がよくわかった ちょっと離れるけどバッチもWebもnodeであれこれやってみたことがあった
くそめんどかった >>710
鯖管あたりは配列とループ使うのにシェルスクリプト代わりにperlって人多い 言語的な扱いやすさを取るか環境的な扱いやすさを取るかの天秤
そういう意味ではperlはありでもpyは意味がわからないo なぜPythonはダメ?
いずれ何でもかんでもPythonになる可能性すら秘めているのに…
まあ、互換性は不安あるけど。
Perlは下位互換が優秀だったからなあ… 配列とループw
PerlもPHPもPython他の足元にも及ばんだろ。
ちょっとしたデータ処理しようと思ったときに、絶対に選ばない2大言語。 適材適所だし、どっちが上とかないしょ
PHPが未だにこれだけ使われてるしね >ちょっとしたデータ処理
環境構築を考えれば、こんなもん普段使ってる言語一択だろ
バカか 自分のとこだけで動かすなら普段使いの言語だが, 他環境で動かす可能性があるならLSBに入ってるPerlかPythonだなー >>721
わかってないねぇ
標準インストールで入ってる可能性がダントツで高いのがperlなんだよ 連想配列をjson_encodeでjsonにした際、「/」が、エスケープ処理されておらず困っているのですが
対処法はありますか?
オプションにJSON_UNESCAPED_SLASHESを指定しなければ、エスケープされるような記載を見掛けるのですが・・・
PHPバージョンは7.1です 手元の7.2.1でjson_encode('test/test')とすると、test\/testが返ってくる
json_encodeの第二引数を明示的に 0 にしてみるとか
事前に(必要に応じて再帰的に)自分で/を\/にするとか >>727
すみません。勘違いしていました。
「/」ではなく、U+2044というFRACTION SLASHを記載して、
それに対してエスケープされないと嘆いてました。 言われてるほどシェル言語としてだめなわけじゃない
あきらかにshやbashよりは使いやすいだろう win10のie11で外部pcの共有フォルダに置いてるpdfをphp関数で表示したいのですがどうすればいいでしょうか?
fopenのハンドルも取れず、readfileでも無反応です
ブラウザからファイルパス入力だと表示できます ブラウザ関係なくね?
他のブラウザなら思った通りになるの? 何やりたいかさっぱり分からん
質問するなら他人にちゃんと伝わるように書け NASみたいな共有フォルダにあるファイルにアクセスしたいってことでしょ…
PDFかどうか以前に、他のファイルも試してみろと。
PHPはなにのサーバーで動いていて、
バージョンはいくつなのかとか環境を書けよ。
ブラウザとかどうでもいいしw vistaのie9だとできてたんですが
最新環境だとできないのです 最新って何?
XAMPPとか使っててPHP 7.2.xとか? 最新と言うのはOSとブラウザがってことです 64bitです vistaは32bitです
phpとapacheはそのままです ここまでのやりとりで、教えるのは無理とわかったから他に行きな。
まともに質問すらできないんだから教えようがない。 まずはログとか見ろよ
ログに何も出てないなら何か根本的に間違ってるってこと PHPのsystem()でmysqldumpを使ってテーブルごとのsqlファイルを出力して、
それを圧縮して保存するプログラムを作った。
直接ブラウザでアクセスしてプログラムを動かすと正常に圧縮ファイルが保存される。
しかしcronで動かすと、全く空欄のsqlファイルを圧縮したものが保存される。
私には、全く原因が分からず修正できません。
原因はどういったものが考えられますでしょうか? cronでやらないで、CLIで一度実行してみたらいい
権限関係でねーのと思う ブラウザの裏で動いているPHPのユーザー権限や、
crontabのユーザー権限や、
ファイル類のパス、
実行カレントディレクトリ等は一致してますかね? cronでありがちなのはファイルパスの指定ミス
実行プログラムやファイルの指定を相対パスで書くと事故ること多し
簡単に対応するなら全部絶対パスで書け 皆さん、ありがとう御座います。
まだ解決は出来てないのですが、調べるべき方向は見えてきました。 実行権限の違いじゃね
webサーバはapache で
cron はcrontab -eで登録したユーザー
とか id > /tmp/log
pwd >> /tmp/log
env >> /tmp/log composerのclassmap-authorativeの最適化
場合によっては遅くなるってマジ?
速くなる場合もあるが以下の条件では遅くなるって
・依存ライブラリが多い
・リクエストで実際には使わないクラスが多い
・ファイルシステムからの検索が速い
最適化を有効にすると
読み込めるクラスを全部PHPの配列に入れるから
逆に速度が落ちる場合もある
opcacheが有効だとファイルシステムが遅くても緩和されるし
PHPファイルが更新されないならタイムスタンプのチェックも無効にすれば
PHPファイルを見る必要無くなるね
https://blobfolio.com/2017/03/benchmark-composer-autoloader/
APCU使った最適化については書いてない 真実かどうか聞きたいのか、それとも自分で確認した事実を書きたいのか どうしても知りたいなら自分でベンチ取ってみるしかないだろう 環境のせいで多少遅ってるかもしれない可能性を確認するよりも
コードを見直したほうがずっと早く改善できそう こちらで質問させてください
classの必要性がいまいちわからないんですが、普通に自作関数を使うのとどう違うんでしょうか? classと同じようなことの実現は関数・objectを駆使すればたぶん無理ではない
けど非常にめんどい
継承とか再利用なんかはどうしようと悩む >>758
一人で作るプロジェクト、しかも関数だけだと特に変わらないね
消費税の計算するだけなら別にどっちでもいい。関数にもしなくて良い
今はまだ分からないかもしれないけど、
コンストラクタ、ガベージコレクション、トレイトなど便利な機能が山程ある
其内色々な機能を使うようになると思うので、とりあえずclassに慣れておいた方が良い・・・としか言えない >>759
継承の場合は丸ごとコピーになるね
で、一箇所かえたら両方変更する必要があり・・・とどんどん煩雑になる >>761
コードをコピペしたらもうそれは継承ではなくなってしまうな
関数名を扱うことでコールバック的にやろうとすれば、そこはもう地獄
うーむ とりあえずGCはclassに限った話じゃなくね?
関数内でも一応無関係ではないはず
インスタンスに対するGCは
関数主体の場合だと関数内の変数や関数外の変数に対するGCが当てはまるわけで あまりclassがうんぬんを意識しないで使ってるものを考えたらわかりやすいかも
PDOとかExceptionとか 独学で基礎的なことだけ覚えたんですが、わりと小規模な会員機能付きのブログエンジンやデータベース系のサイト程度なら作れるようになったんですが(プロから見たら多分穴だらけ)、クラスの必要性が分からず全て関数作ってやってました
コードの使い回しにしても関数にしておいて1度呼び出しておけば何度も使えるし、継承にしても関数内で別の関数を呼び出したりして
直感的にも使いやすかったのでそうしてるんですが、今後もっと複雑な事をやろうとするとやっぱりクラスに慣れて使った方がいいんですかね
関係ない話ですが、人のコードとか見ると多次元配列の回し方とか他にもいろいろ人と違うし自分の脳の作りを疑ってしまう。。 >>765
その場合は「状態」を誰が持っているのかってのが一つのポイントだと思う
状態をグローバル変数に持つのは嫌だし, 関数に持たせるのも良くない コードの書き方は設計にもつながるからなあ
DB使ってるならPDOがまさにインスタンスごとに別のコネクションを保持できて
class=インスタンスの中に関係関数がまとまってて
classの利点がわかりやすい >わりと小規模な会員機能付きのブログエンジンやデータベース系のサイト程度
ここら辺に何かを感じる 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です。 >$http_response_headerに載っているContent-Lengthに比べても少ない
>そのタイミングでリトライしても結果は変わらず
比べてみて、少なかったら
成功するまでリトライすればいいじゃない
contextつきでもfile_get_contentsで問題があって、しかしcurlを使うと問題が出なくなるということもある(※実話) 自分の場合どっちもだめでfsockopenでようやくいけたなんてことがあったな
一番詳細なこと出来るのはfsockopenだからねえ 自前でソケット通信考えたらredirectとかkeepaliveとかくっそ面倒だった記憶がある >>774
>成功するまでリトライすればいいじゃない
同プロセスでは何度やっても一度も正しく取得できないんです…
別プロセスで起動し直すと正しく取得できるときもあるのですが、
それは使用リソース的な問題であまりやりたくないというか…
curlを試してみるしかないですかね
>>775
どっちもだめ…curlの勝算も低いですかね…
fsockopen使うくらいなら別言語を検討してしまいそうだ ググったら1番上の記事(公式マニュアル除く)にあるじゃん。 具体的に何回やったのか
そのうち本当に通信が発生してるのは何回か
調査と試験どっちもしないの APCuキャッシュを使っている。
管理画面apc.phpに表示されるFragmentationが日々上がっていっている。
現在10%ぐらいだが、まだまだ上がりそう。
この断片化率が上がると何か問題があるのか?
何%ぐらだと問題で、対策はどうすればいいのか? APCuって自分でなんとかできる人が使うもんじゃなかったっけ
ほかの選択肢あるっしょ ググってわからなかったら、
夜中とか定期的に完全削除しちゃえ。
キャッシュなんてすぐ育つから。 俺は、自分で調べないわけじゃないぜ。ただ少なくとも日本語の情報は殆どない。
「apcu 断片化」では20件程度、「apcu Fragmentation」なら沢山ヒットするが、対象を日本語ページに絞ると10件程度しかない。
これらは全部読んだが「Fragmentationが高くなったら、キャッシュをクリアしろ」ということが書いてあっただけで、
何%だと問題なのか、そもそもどのような問題が発生するのか分からない。
英語が読めないわけじゃないけど、英語で検索して必要な情報を調べるのは苦労するよ。 自分でベンチマーク取って検証するんだ。
そして報告すれば誰かの役に立つ。
ちなみに俺は何も知らない。すまん…w ソース読んで、何%断片化すると悪影響が出るかわかる?
キャッシュの実装方法がわかっても測定しないとわからないことだよ。 APCuって
オペコードキャッシュ部分がなくなって、cookieみたいなkey-valueのデータを自前で自サーバのメモリに共有するだけに単純化されたもんでねえの
DISKにcsvで持ったりDB使ったりで共有するんじゃなくてメモリに持って共有しましょう的な
だとすると、キャッシュクリア=メモリ上の情報破棄だから気軽にやっちゃあかんし
fragmentになってるっていうなら、
それがメモリ上にあるというだけで他はDISKにおけるfragmentと同じでしょ?同じように考えりゃいいじゃん >>788
メモリにどういう配置してどう読み書きしてるかがわからないと
断片化を操作する検証も度合いごとに断片化が及ぼす影響の調査もできなくない?
ことが断片化だから、意図的に特定の断片化状態を作るのって
内部知らないと相当難しいように思うんだけど ソースだけ見れば分かるならプロファイラ何か要らないんだよなー Fragmentationが100%に達してても
キャッシュヒット率が高ければ問題ないらしい
(書き込みは遅くなるが読み取りは遅くならない)
https://serverfault.com/questions/506328/php-apc-is-100-fragmentation-a-bad-thing
とは言っても書き込みは遅くなるわけで
実際パフォーマンスにどれくらい影響が出るかは使用状況によるので一概に言えない
本番環境のパフォーマンスを見るには
New Relic APMがおすすめらしいけど
自分は使ったこと無い JavaのGCだとコンパクションとか
断片化を防ぐ仕組みはあったけど
多分apcuにはそんな仕組みはないと思われ
動的に確保するから更新・削除を何度も行うと細切れになる
断片化率は5MB以下のブロックが全体に占める割合みたいなことが書いてある
解放されたブロックが隣接してたらマージして1つのブロックにする、とも書いてあるが
これだけだと完全に断片化は防げないとか?
https://github.com/krakjoe/apcu/issues/127#issuecomment-244362339
NewRelic使えとかはこの辺で見た
https://medium.com/@davidtstrauss/avoiding-the-pitfalls-of-apcu-4aa9de00ef93 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.
https://symfony.com/doc/current/components/cache/adapters/apcu_adapter.html ありがとう。少し分かってきた。
英語での情報収集が必要とかレベルが上ってきた感じがしていいね。 クソッ、話が高度すぎる・・・
今日からPHPUnit使うなんて言い出せないじゃないか。 APCuってしらんが
セッションにDBのハンドラ入れても使えなかったのを
使えるようになるような代物かね? >>798
言ってる意味がわからない
DBの接続はリクエスト終わったら切られるだろ >>799
いやわかるけど
で、sessionで使えなかったのを使えるようになるような代物ではない
serializeできないものは無理、sessionも共有メモリもそう
リソース型と一部のオブジェクトは無理 DB接続やファイルハンドラが処理終了時に自動的に切られるのは、
そういう扱いをされるべきリソース型であって確実にデストラクタが呼ばれてるからという理由であって、
処理終了時にシンボルテーブルにある全変数が解放されるのとは無関係、
よって、変数の格納先が異なるだけの$_SESSIONや共有メモリでもこの事情は変わらない、
と理解している
json化できないものは入れられないwebStorageみたいな感覚 Dockerで
nginxコンテナとphpfpmコンテナを分けてコンテナで分けて作った時
nginxの方はphpファイル入ってなくてもディレクトリさえあれば普通に動くな
開発する時はDockerボリュームを2つのコンテナにマウントしてたが
本番用イメージをCIで作る時は・・・?2つのイメージに同じphpファイルを入れなくちゃいけないのか?って思って調べたらこのような方法が見つかった
画像やCSSとかの静的ファイルは・・・nginxの方だけに入れるか phpMyAdminの公式Dockerイメージはnginxとphpが一つのコンテナになってたけど
あれって面倒?
php:7.2-fpmをベースイメージとしてそのまま使うのは出来なくなるよな
それだけでめんどそう というかホスト側ポートに繋げて直接外に晒すなりのホストのhttpdからリバースプロキシして使うもんだろ?
nginxコンテナとphp-fpmコンテナに静的コンテンツと動的コンテンツを分けて入れてnginxコンテナからphp-fpmコンテナを見えるようにしてとか, そんな細かい粒度にする必要を感じない phpMyAdminのDockerイメージが使ってるのはsupervisordだった
ベースイメージはphpで、supervisordやnginxを別途インストールしている
意外と難しくない? supervisordは落とし穴が多い
使わなくて済むなら使いたくない 俺なんかhttpdはinetdの下でいいやと思うことすらある。
ただし、apapche 1みたないのよりずっと軽いやつね。 どうしても一つにしたいならApacheでいいじゃん。
docker-composeとかあって分けるのが大した面倒でもないのに、一つに拘る理由がわからんけど。 dockerってぶっちゃけそこまで便利というか必須? Dockerの誤解と神話。識者が語るDockerの使いどころとは? Docker座談会(前編)
https://thinkit.co.jp/article/2127
下手したらバズワードで終わる…ほど酷くはないな。
大昔のフロッピー起動みたいに
ガチャガチャ差し替えて使うようなもんかね。 コンテナでアプリケーション作るならDocker-ComposeないしはDocker単体でいいけどサービス作るならKunernetesくらいは知っとけよって感じ 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 >>905
なら答えようか、初回のエラー対策。
はいどうぞ↓ >>919
丸一日半も経ってからその程度しかレスできないの?
君、生きてる価値ないw >>920
丸一日?誰と勘違いしてんだ。
ようは答えられないのだな。 よそのサイトがよそのサイトにリクエスト送って
それを受理してしまうとまずい状況なのがCSRFな
別にまずくないなら仕様で片付けられる問題 >>911
間違いなくCakePHPだと今回のような同一ページでも対策してくれる?
他に同一ページで対策するものはある? ほんと初心者スレでやってくんないかな
ここ過疎スレなんでねえ
下らないレスで流さないでほしいんだわ >>930
雑談スレでもあるから話自体はOK
892, 920のような不毛なレスが余計なだけ >>927
とうにできてます。
速度など別の理由で>>909に近い感じにしつつ自分自身に渡すようにしました。
元々お問い合わせフォームの流れなら全く問題なかったので。 指摘できるならここぞとばかり反論してきたであろう>>910
結局何も言えずに終わったな
これへの返しもwだけだろ >>926
そもそも>>864だけでは再現性が無い
>>871指摘、>>875の通り、method="post"と書けば動作する
問題のコードが端折られているから何が問題なのか分からん 初心者スレでないからといって
エラーがなにかを書かないとエスパーじゃないと答えられん くどい、まだ言ってるのか
>何が問題なのか分からん
読解力が問題 Windows10でXAMPP使ってる人に
ProでなくHomeで使ってる人いる? >939
xamppとwindowsのhome/proは関係ないと思うけど、何を聞きたいの
結局hostsw書き換えるだけだよ >>940
肝心なこと書いてなくてすまん
windowsの更新で問題点や面倒さなど違いあるかなと
みんな自動更新抑制ツールなど入れてるだろうから同じことかな >>941
特にない
強いて言えば、仮想環境を作る時にPROの方が多少パフォーマンスが優遇されてた気がする ProだとHyper-Vが使える
そもそもXAMPP使わないけど 10 homeでxampp使ってるぞ
もともと7 homeからたけどな
phpの動作確認なんてこれで十分や 本件から逸れて申し訳ないけど, XAMPPって中途半端じゃない?
手元での動作確認ならビルトインサーバでいいしテスト用環境ならコンテナなり仮想なりで動かすし
実際にApacheで動かせるって言っても今はphp-fpmの方もかなりあるし
何れにしてもビルトインサーバよりXAMPPのほうがいい状況が分からない(MariaDBも一緒に入ってくることくらい?) >>936
答えてもいいがもうくどいしそういう流れでもないからヒントだけ書く
自分で実際にやってみなさい
値は乱数でもsessionでも極端に定数でも何であれ関係ない ビルトインでは何か挙動が違うことがない?
ディレクトリ設定というか、エイリアス処理をしてる場合とか。
本番環境ならhoge/であのスクリプトにアクセスするのにビルトインだと違うみたいな
コンテナなり仮想環境なりは実行まで手間が掛かったりしない?
仮想環境起動に6秒くらい掛かったり、配備が手間だったり。 ビルトインこそ中途半端だわ
アプリケーション毎に仮想環境を用意するのも自分はあんま理解できんな
XAMPPで作ったやつが動かんことあっても5分で修正出来るレベルの内容だろう OSやバージョン無視したコード書かないのが大前提でね
初心者じゃないしマニュアル見ながらそんくらい把握できるじゃろ 結局どうやってもサーバーと色々差異があるので、dev.example.〜にしてるわ
コピーして終わり
よぽど特殊なサイトはxampp スルーしてたけどビルトインサーバってもしかしてphpのビルトインウェブサーバ?
使いもんになるのアレ >OSやバージョン無視したコード書かないのが大前提でね
これどういうこと?
何使うにしてもテスト環境あるならそのverで使えない組み込み関数使えば
テストでエラー吐かれるんだしバージョン無視コードがわからない
OS無視コードも何を指してるのかわからない >>953
XAMPP使って仮想環境を用意しないということは
本番とはバージョンやOSが違う状態で開発してるという想定をして
ちゃんとコードをかけるかどうかっていう話だがそんな難しいことじゃねえだろ >>954
バージョン違うとは限らんだろ
OSにしてもOS依存のコードって意識的に書かないと無理でね? Windowsじゃ使えない機能はいくつか知ってるけども
あとは……なんかあったっけ? >>955
意識的にかけるならいいんだよ
書けない人が動かんって言ってるわけで
>>956
関数でOSやFSに依存したり制限をうけるものもそうだけど
(問題になるかは別として)CRLFをPHP_EOLで書いてみたりとか
(このスレにいるかは別として)C:\users\unko\manko.pngとかパス書いちゃうやつとか
ちょっとバイナリプログラミングに手を出してみてエンディアン考えない実装したりとか
ほとんどミラクルケースではあるがまあいろいろある >>957
とりあえずOSについてだけ、だけど、正直あんまり同意できない
ファイルシステム関係は・・・どんなんがあった?
意識してWindowsの特有のACLを操作するときとか?わからんけど
PHP_EOLはわざわざ意識的に「OS依存の改行コード」を指定してるんだから関係なくね
パスの問題は環境が異なるのに絶対パスで書くこと自体がNGなのであってOS関係ないはず
エンディアンが問題になるって、ファイル読んで$char[$n]だったら問題にならないし
pack/unpackだったらまず間違いなくOSによらず意識的にエンディアン指定するんでねーの
あと意識しないで改行コードが変わりうるfputcsvみたいなやつか
parse_ini_fileはどうだったっけ ミラクルケースに近いけど32bit/64bitの数値上限とか >PHP_EOLはわざわざ意識的に「OS依存の改行コード」を指定してる
$tmp_path = "/var/tmp";
$updir = $tmp . DIRECTORY_SEPARATOR . "upload";
とか明らかに無意識というか脳死してる人は割と多い。 今時PHPを含めスクリプトならどんな言語でも開発用には簡易サーバ使うと思ってる
PHPならビルトインサーバだしRubyならWebrick, PythonならDjangoのdevserverが主要どころだろう
多人数の開発でApacheの設定をさせるのって難しくない?
自分だけで開発してるならXAMPPも分かるけど, でもフレームワークの開発用サーバ起動コマンド使う方が楽じゃない?
手元では簡易サーバで動かしたりテスト走らせたりしつつ, リポジトリpushしたときにCIサーバ側でテスト用コンテナ立ててテスト走らせれば本番環境に近い環境でテスト出来るし 単一ページならともかく
リクエストまたぐときは論外 OS依存とかバージョン依存話してる奴らはまだいい
946ちゃんはアカン >>960
WinでもLinuxでもパス区切り記号は / 使っていいと思ってたわ
いや実際普通に使えるんだが。絶対パスやマルチバイト使わなきゃ大抵は平気なんだが
むしろなんでそんな定数使おうとするんだろう。一体何を考えて・・・ 964に同意でーす
DIRECTORY_SEPARATORなんて使ったことねーぞ
頭の中では死語になってる >>961
Apacheの設定って設定終わったら設定コピーするだけじゃん
多人数だとその設定はリポジトリを通して共有されるものだろう? pathに"C:"が入ってたらデバッグモード・・・
ってのを昔やってたな
色々めんどくなってサブドメイン管理にするようになったけど DIRECTORY_SEPARATORは確かCakeに入ってたな
今も入ってるかしらないけど
define("DS", DIRECTORY_SEPARATOR)
とかでDSだらけだった記憶が php.iniならまだギリわかるが(設定コピーすりゃいいけど)
apache httpdのhttpd.confでなんか開発に影響あってめんどいのってあるか?
httpdの設定も満足にできない、って相当だぞ >>969
逆
レンサバの保守をやる場合サーバー側で設定できない事がある
専サバなら本当に楽 >>970
これ手元のローカルの開発環境の話だろ
レンサバでphpのビルトインウェブサーバ使うのかお前は >>971
そりゃそうでしょ
レンサバでphpのビルトインウェブサーバは使えないだろう
・・・と思ったけど使えたらすまん 楽出来るなら楽した方がいいよねって話よ
何よりビルトインサーバの方が手間が少ないから
あとApacheとかnginxとかのフル機能Webサーバの設定ってコピペだけならいざ知らずちゃんとやるのはかなり勉強が必要だと思うけど
ましてトラブル発生時とか
上でも書いたけどPythonやRoRのプロジェクトでrunserverとかrails sとか開発時にはそっち使わない?
開発時からApache/nginx + Passenger/Unicorn/gunicorn/uWSGIとかでやるのが普通なのかな httpd.confの編集がおぼつかないというのは
socketってなんですかpathってなんですか正規表現ってなんですか、というレベルだろう
ふれーむわーくに頼ってて中身把握できてない人材と同じ系統
むしろ学ばせてレベル底上げする、あるいはふるいにかける良い機会では >>974
XAMPP入れるだけで動く環境が出来るんだからラクだろう
PHP入れる手間でApacheも付いてくるようなものだ
それとここPHPのスレなんだが
PythonやRoRの話したけりゃ別スレ行けよ >>976
xamppとかゴミ以下の存在。
開発環境としては、オートリロードもできないし(自分で仕込まない限り)、
本番環境としてはまったく使えないから、プロダクションの知識も役に立たない。
仮想環境とかDockerとか他にもーーっといいやり方がある。 まるで仮想環境やDockerなら
何もしなくてもオートリロードしてくれるみたいな言い方だな xamppアンチとか珍種すぎるわ
ただのテスト環境に噛み付くってほんっとうに暇なのか Docker Toolboxでphpファイルの入ってるWindowsのディレクトリをマウントして使うと遅い
rsyncやunison syncを使う手もあるが
ちょっと面倒くさい
それ使わないで速く出来ない? if文で文字列想定の変数を否定演算子でチェックするのはやめてって言われたんですが何故でしょうか 空文字""や"0"を想定しないといけないケースなんでは
まぁこれらを文字"列"というべきかどうか… function setAttribute($attr_name, $value) {
$this->attr_name = $val;
}
これっていわゆるsetterと考えていいんでしょうか? >>991
"0"がFALSEになるとかじゃないの
"0foo"でもなるかもしれない
俺もこんなケース覚えてないから文字列長0かどうかで判定している
絶対にやめておいたほうが良いぞ このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 473日 22時間 47分 4秒 5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php レス数が1000を超えています。これ以上書き込みはできません。