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の改造 $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動かす環境あるらしいけど
どうなの?
そもそも使い物になる? >>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から拡張を読み込むことができるようになると
セキュリティホールが量産されそうな気がするが
その辺、大丈夫なのか? ■ このスレッドは過去ログ倉庫に格納されています