PHP質問・雑談スレ4【初心者お断り(ROM歓迎)】 [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
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の改造 何が原因ってまんまエラーに書いてるのにそれがわからんってのがわからんでw phpMyAdminってインターネットに晒すとヤバイの?
まあDBのパス漏れたら何でも出来ちゃうよね
あるいはphpMyAdmin自体に何か脆弱性があってもパスが漏れて終わる >>327
それも分からないならweb制作やるべきじゃないと思う 攻撃者は狙ったアプリケーションのデフォルトの配置場所やファイル名でアクセスして
200が返ってきたらさらに調べてみて狙ったアプリケーションであるなら
既知の脆弱性を利用した攻撃あるいは管理ページ等にデフォルト情報でログインを試みる
すなわちメジャーなアプリケーションをインストールして公開する場合
デフォルトのパスワードを変えなければ狙われる
脆弱性が見つかった時点ですぐにアップデートしなければ狙われる
レンタル鯖の管理人でもなければ
どこからもリンクしない適当なディレクトリに展開しておけ
ついでにアクセス制限かけとけ
それだけでほぼ問題はない なんだかんだ批判はあるものの、ウェブ開発においてPHPが業界標準なんですね。 phpMyAdmin自体がPHPで作られてるんだけど。
ところでphpは何の言語で作られてるんだ??? phpMyAdminを複数の場所からアクセス出来るようにするには
SSHのポートフォワードを使えば良い?
IPアドレス制限はIPの管理が面倒 固定IPじゃないとたまに変わるし
VPNは金がかかる
phpMyAdminの認証に加えてBASIC認証orダイジェスト認証+中間者攻撃対策にHTTPSを使っても良いかもしれないが
認証フォーム自体へのアクセスは防げないのなんだかなあ
SSH認証なら有効な鍵を持っている人だけがphpMyAdminにアクセスできる
SSH鍵自体にもパスワード掛ければ更に安全と思う まぁローカルホストからの接続に限定し, 認証と暗号化を備えたトンネルで接続するのであればちゃんと設定した上では安全でSSHポートフォワードでもVPNでも問題ない
VPNもセキュアでフリーな実装のOpenVPNとかあるから別に金もかからん 制限もそんなガチガチの制限かけないで緩い制限でも効果はでかいのでは
攻撃なんてほとんど海外からだからね
jp制限かけられてるってわかればvpnとか通して偽装してくるかもしれないけど
他に狙うとこもあるしそこまでする攻撃者は稀なので 開 2 ち ゃ ん ね る= 便 所 の 落 書 き ・ 痰 壷 の 更 に 劣 化 コ ピ ー の 3 流 掲 示 板
運 営 の 性 格 の 悪 い 引 き こ も り I T 土 方 メ ガ ネ ザ ル 早 く 死 な な い か な >>332
c言語は、web系の言語じゃないと思うが。 >>341
は?
phpはCで動いてるのは常識だぞ >>342
じゃ、そもそもwebシステム最初からCで組めばいいじゃん >>343
別にCで書きたければ書いても良いけど?滅茶苦茶早くなる
あらゆるphpの資産を失うけどね。まぁ頑張って PHP自体が何で書かれてるって聞かれたらそりゃCだろ
PHPだけじゃなくPythonもRubyもCで書かれた処理系が一番使われてる
WebサーバもnginxもApacheもC >>341みたいなのがいるからPHPerはバカにされる 紛れ込んだ初心者か例外だろ
もっと優しくしてやれよ スーパーグローバル変数の前後に.がついてる記述があるんですが
このドットはどういう意味なんでしょうか
例えばsql文をこんな感じで記述してたりするものです
$sql = "SELECT COUNT(*) FROM bbs WHERE name='''.$_POST["name"]."'"; >>349
スーパーグローバルどうこうではなく文字列連結演算子 count(*)だからたいして問題にはならんけど
それはsqlインジェクションの典型コードだから褒められたものではないな $_POST['name']="';drop table bbs";
とか単行でできなかったっけ? >>353
出来ないはず
少なくともsqliteではできない
"忘れてるからでコメント入れとかないとシンタックスエラーになるわ opendir()を使って指定したフォルダ内のファイル名一覧を取得したいのですが、
一つのセッションで何回も opendir()実行すると、その度にディスクにアクセスして
サイトの表示が遅くなりますか?良い方法ありますか? 中身かわったときに読み込んでDBなりファイルに書いときゃいい 静的データ使うのがベストだがopendirの回数を減らす方向だと
処理ステップが多いopendirをする前に
より単純な方法で比較すればopendirまで行かなくて済む
例えばフォルダのfilemtimeをセッション変数にぶっこんどくとか
ユーザ用のデータで外からの更新がないとか
セッション開始時から終了時まで使いまわして問題がないなら
セッション変数にファイル一覧ぶっこんどきゃいい >>357>>358
レスありがとうございました。
>セッション開始時から終了時まで使いまわして問題がないなら
その通りなので
>セッション変数にファイル一覧ぶっこんどきゃいい
そうします。
ちなみにstatic変数を使ってやっても良いですか? ページを表示した時点でプログラムが終了するので
次の動作(ページ遷移とか)をするとstaticじゃ保持されない
だからセッションやhiddenで持ちまわす json_encodeで次のようになるデータを
[
{ "国": "アメリカ",
"地域": "ワシントン",
"人口": 19
},
{ "国": "日本",
"地域": "東京",
"人口": 7
},
{ "国": "日本",
"地域": "大阪",
"人口": 3
},
]
次のようにする方法教えて
[
"アメリカ": {
"ワシントン": {
"人口": 19
}
},
"日本": {
"東京": {
"人口": 7
},
"大阪": {
"人口": 3
}
}
] $a = json_decode($encodedData);
foreach ($a as $v) {
$b[$v->{"国"}][$v->{"地域"}] = $v->{"人口"};
}
var_dump(json_encode($b));
あとは調整しれ
つか>>1 $b[$v->{"国"}][$v->{"地域"}] = ["人口" => $v->{"人口"}];
だった >>362
このくらいなら問題ないんじゃない?
手とり足とりって感じでもないし
JavaScriptも書く身としてはmapもアリかな
$a = array_map(function ($val) {
$res[$val->{"国"}][$val->{"地域"}] = ["人口" => $v->{"人口"}];
return $res;
}, json_decode($encodedData));
と思ったけどJavaScriptほどすっきりかけないからループの方がいいわ $obj->{""}
この表記はあまりなじみがないから
初心者じゃなくても結構悩むかもね phpで二回目にデータを渡すか、ユーザーの入力を待ちたい
////////ページ////////
[続けるボタン]
一回目の出力結果・・・
二回目の出力結果・・・
こんなページが作りたいのですが、
phpに書いたものはボタンを押すとリセットするようで、二回目が作れません
もしくは、while(){ボタン入力まで待機}
こんな書き方をしたいのですが、どちらかの実現方法を教えて下さい gRPCがPHPでRPCサーバーを作るのには対応していないのって何で?
PHP単体で動く(Apacheやnginxを使わない)まともなHTTPサーバーがないのが原因みたいに言われてたけど
それだけ?
そうだとして何でPHP単体で動いて
テストだけでなく本番でも十分使えるHTTPサーバーが無いのか WEB画面から文字列を入力しDBにInsertすると文字の頭になんか変な文字が入ってました。
そこで、テーブル上のデータをSQLファイルでダウンロードして
サクラエディタで見たところ空白にしかみえないです。
しかし、その空白部分を選択してみると、サクラエディタの右下に
U+30AD となっています。何かの文字を表している様ですが分かりません。
これは一旦何が入っているのでしょうか? >>367
JSONで非同期にしたら?
そんな処理でSessionとかcookie使うもんなの? SQLで insert文で 'キ' と入力するとなぜか'キ'の左側に
U+FEFF ← が入ってしまっています。
(U+30AD → 「キ」でありこれは問題ありません。)
BOM??らしいです。なんで'キ'入力の時だけ入るんだろうか。 Laravelのドキュメントってどこにありますか?
公式laravel.jpのドキュメントはインストール設定と期待したものじゃないし
いくつか機能の紹介してるリンクはリンク切れだし
http://laravel4.kore1server.com/docs/routing
唯一まともなクイックスタートもちょっと少なすぎます
なんか1つテーマにしてサンプルを説明つきで作るようなやつはないんですかね 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動かす環境あるらしいけど
どうなの?
そもそも使い物になる? ■ このスレッドは過去ログ倉庫に格納されています