PHP質問・雑談スレ5【初心者お断り(ROM歓迎)】
■ このスレッドは過去ログ倉庫に格納されています
PHPに関する質問や雑談をするスレです。
初心者お断り(ROM歓迎)と書いてますが、初心者用のスレが用意されているからで、
難しい質問や話題をしなければいけないわけではありません。
PHPマニュアルの読み方を概ね理解していて、関数リファレンスが正しく読める方用のスレです。
PHP未導入の方や、手取り足取りが必要な初心者の方はム板のくだスレへどうぞ。
https://mevius.5ch.net/tech/ (【PHP】で板内を検索)
前スレ
https://medaka.5ch.net/test/read.cgi/php/1498653249/
その他リンク
・PHPマニュアル
https://secure.php.net/manual/ja/index.php
・コードテスト・貼り付け用
https://ideone.com/
・プログラミングのお題スレ (求PHPer参戦)
https://mevius.5ch.net/test/read.cgi/tech/1538096947/
このスレで扱う話題
・PHPのコード,設定や設定値に関する質問
・常識的範囲内でのコードレビュー依頼・改良相談
・PECL,PEARに関する質問
・PHP新機能やPHP関連トレンドの話題
(FWや非公式ライブラリの話題や特徴比較は良いが使い方から先の話題は専スレへ)
・PHPのバグ発見報告・公式に報告する前の検証依頼
このスレで扱わない話題
・直接関係ない○○特有の質問(専スレへ)
(HH,エディタ,IDE,サーバ,OS,DB,SQL,FW,テンプレート,非公式ライブラリ・アプリケーション等)
・PHPの改造 >>615
アロー演算子はphpだけじゃないだろう
最初に自走したのはjavaか? ->はCの構造体のポインタからメンバーにアクセスするときの演算子だろ?
Cではポインタじゃなかったら.でいいんだが、
Perlでは.は文字列結合演算子だからな
いや、お前らが話しているのはラムダ式のことなのか? PHPはタイプ量多いが明示的でわかりやすい気がするな
今の言語はfunctionがfnだもんな 今更変えられないのかな
function使用頻度非常に高いから何とかして欲しい 通常は補完でするっと入力するから
多少の長さは気にならないかな ていうかなんでfunctionなんて必要なんだっけ? 定義かどうか分からないからだっけな
functionがないと何かと混同するからだったはず mysqlにコネクションプールが無いのは何故なんだぜ?
PHPは全リソースをリクエスト終了時に解放するからって言うけど
遅いでしょ?
パーシステント・コネクションは
コネクションプールとは無関係な別機能だった 単にphpのプロセスが死ぬまで接続を維持し続ける機能らしい
異なるphpプロセスでコネクションを共有する機能ではない
PDOには最大数の設定はない
また、phpがエラーになるとテーブルがロックされたままになったりする
mysqliはPersistentでもクリーンアップを行おうとする
ただし性能と引き換え ソースファイルのBOMのせいでクッキーが使えないバグが出て原因究明に苦労したぞ
BOMを付けるエディタが悪いんだがPHPの側もどうにかしろ
というのは頭悪い主張ですかね・・・ >>629
BOMのせいでクッキーが使えないなんてことあるの!? >>629
それ具体的にいつの話?
7.2環境で今確認したら、UTF8のBOM付きとBOM無しが混在しててるんだが普通に動いてる
モジュール部分の大半はBOM無しだっだが、デザインとか外観の部分はBOM付きで動いてた >>630
BOMがphpタグの外のテキストと見なされるから、
あらゆるテキスト出力より前に呼び出す必要があるsetcookieが動作しないのよ。
>>631
未だ現役だが古い5系のサーバーの話。
7系はBOMがあっても平気なのか?
ちなみに5系でもWindows版は平気らしく、
XAMPP環境で開発していたソースファイルが
なぜかサーバーに上げると動かなくなるから、
しばらくさっぱり意味がわからなかった。 lambdaとかcloud functionにphpがない理由って需要ですか?
それとも用途が少ない? PHPはいずれ導入されるが導入時期は他のよりあとにされるってのは
この手のクラウドではよくある話
需要がないといったらそのとおりなのだろう
PHPの用途は小規模向けであるのでスケールアップの必要がない
VPSなんかでもっぱら使われるのでは PHPって組み込み関数とか標準ライブラリ多過ぎない?
仕様も完全に固まったとは言えず、破壊的変更がちょこちょこあった
ライブラリ毎にバージョン上げる事も出来ないので毎回リスキーなビッグバン的アップデートになる
Goとは全く逆だよね
Goへの誤解について
http://golang.rdy.jp/2017/12/20/go-fact/
Goは機能追加の優先順位が
「ライブラリ>>外部ツール>>言語仕様」
というのを徹底しています。 課題を解決する方法にいくつかの方法があれば より優先度の高い方を選びます。
おかげで、Goを気に入ってから5年目だけど その間、変化した言語仕様はごく小さな変更数点しかありません。 どこらへんがphpは小規模向けで、pythonやgo、node.jsと違うんですか? >>636
かなり多い
要はwebでぱーっとなんでも出来る言語て立ち位置
実際本当に便利
pythonも2→3で凶悪な変更があったから、あまり他言語を強く言えない
Goはバージョンアップについてはよく知らない
phpはバージョン5の利用者が多いが、サポートが切れた
Xデーがそのうち訪れるかな
>>637 >>637
ぱーっと作れるのでとにかく利用者が多い。業者も多い
とにかくwebに特化していて、FWも非常に多い マルチスレッドにもろくに対応してないのがPHPの現状
pthreadっていうモジュールがあるにはあるが不便 これ見るとPHPでは不便以前に使えないのも同然では?
https://www.webprofessional.jp/parallel-programming-pthreads-php-fundamentals/
Shared-Nothingアーキテクチャを採用しているPHPでは
スレッドが使えたとしてもリクエストの度に生成する必要がある
スレッドは生成も切り替えも重いから却って速度が遅くなる
使えてもなんの意味も無い >>640
マルチスレッドが必要に思えないけど、
使い所あるんけ 延々と応答しないリソースをどうやって待つかって問題にぶつかる人はいるかも
待っている間は他のリソースの応答を処理したいとか >>643
それ非同期I/Oで良くね?
スレッドを使う必要がない
同じくスレッドの無いJavaScriptもそうしてる
Node.jsはPHPのようなシェアード・ナッシングではないが >>644
非同期I/Oは応答があったときに、手が空いていたら処理するだけでしょ?
別の処理が走っていたらそれが終わるまでは待つことになる 別プロセスでスクリプト起動してリソースの要求から応答待ちまでやればいいじゃん そもそもそんな応答がめちゃくちゃ遅いリソースを扱うことってあるか? DBの事なにもしらない時に作ったプログラムがそうだったな
インデックスなしでDB構築しって、検索するだけで30秒ぐらいかかってたw
ついでにセキュリティホールの塊
・・・はいいとして、少しでもまたせたくないってことじゃね
webは2,3秒待たせるだけでも人がどんどん減る スレッドやプロセスは重量級リソースだから
そんな大量にそもそも生成できないだろ?
1秒で1000スレッド生成+切り替えとか無謀
非同期I/O基本にして
足りなければサーバー増やした方が
利用効率が高い
その証拠にPHPのようなプロセスを大量に生成するスタイルを
他言語のフレームワークは使ってないw 外部サイトのリソースとかならあるんじゃね?
ウェブスクレイピングしてるとかなら応答にも時間が掛かるだろう
それも複数ページ、もしくはページの画像などのリソースも取得するとなれば複数スレッド立ち上げたくなる気持ちもわかる。
DBの検索時に別スレッドで何かするってことはないだろ
まぁ複数人で使うプログラムに一人当たり何スレッドも使うとサーバーが死ぬけど
管理者一人だけが使うようなプログラムなら100スレッドだろうと使っても良いだろう 人間という応答が遅いくせに即反応してやらないとすぐにイライラしちゃうリソースがあってだな
UIとバックグラウンドはスレッド分けたい時もある
javascriptもそれができるようになったし Webサーバーではpthreads使えないよな
CLI専用
手動でコマンド実行された時か
定期的にコマンドを実行するバッチ処理内でなら使える
時間の掛かる処理を予めやっておいて
DBに結果を入れる
WebではDBから取得して表示するだけ ちょっとマジで聞きたいことがあるんだが、cgiからブラウザに対してCP932でHTMLが出力されている。
もちろんヘッダも正しく指定されている。
んで、そのHTMLの中に、
<IMG SRC="あいうえお.jpg"> などと言う日本語のファイルが指定されているわけだ。
その日本語のファイル名も、CP932だ。
んで、ご丁寧にブラウザが自動でURLエンコードしてくれるようなのだが、
%E3%81%82%E3%81%84%E3%81%86%E3%81%88%E3%81%8A.jpg
となるのだ。これは "あいうえお.jpg" をUTF-8として解釈した時の文字コードだ。
俺としては %82%A0%82%A2%82%A4%82%A6%82%A8,jpg (CP932の文字コード)となってもらわなくては困る。
聞きたいことは2つで、これを解決するにはどうしたら良いか?
もう一つは、ブラウザごとの仕様によりこの挙動は違うのか?
の二点だ
よろしく頼む >>653
あっちこっちに同じ質問するなカス野郎!
なにがよろしく頼むだ
テメーは一緒悩んでろ PHPのソースからコメント取り除きたいんだけど、何かお手軽な方法ないかな
php -wだと改行もなくなっちゃうので、エラーを追いづらくなるから改行は残したい 正規表現で置換とか?
コメントを捨てる理由は良く分からんけど 皆さんはどうやってアクセスログなどを作成してるんですか? >>659
俺はアクセスログは作成しない
たぶんしないと思う
しないんじゃないかな
apacheやnginxにしかできないこともあるから アクセスログはサーバーが自動で作ってくれるからそれに任せてる >>660
>>661
参考になります。
ありがとうございました。 掲示板やチャットに書いた人のIPとプロバイダは保存してある >>663
当たり前だろう
保存してない完全な匿名掲示板なんて無いよ >>665
?
2chは最初からip全部記録してるよ
大昔から普通に逮捕者でてるでしょ 最初はしてなかったから運営者が責任とらされたんじゃなかったっけ ネオ麦茶思い出した
あれ以前の事件はもう覚えてないな 永久保存なんてしてんの?
投稿内容と一緒に保存してるだけで、いらなくなったら消してくでしょ 永久保存なんて現実的には無理だから求められないはずだが
何年間保存しろみたいな義務ってあるんだっけ?
うちのアクセスログ半年ぐらいで古いのから消えてるぞ見てないから知らんけど多分 GDPR的には永久保存はNG
アクセスログのIPも個人情報だかららしい GDPR「消せ」
日本の警察「出せ」
ってなったらどうすればいいの? GDPRはよく分からない
なんか具体的なことは書いてないらしいし
ログを永久保存しててもセキュリティのためだって言えば大丈夫? GDPRなんて無視一択だろ どこの誰だよって感じ
ここは秘境の地ジャップランドやぞ 治外法権やぞ error_log() とか fopen() とかあった気がする https://github.com/symfony/symfony/issues/8703#issuecomment-323608103
https://stackoverflow.com/questions/12378644/how-can-i-retrieve-the-current-error-handler
PHPのset_error_handlerってワケワカメな仕様だよね
・set_error_handlerはハンドラを一つしか設定出来ない。複数使うためには自分で元のエラーハンドラを呼ぶなど工夫が必要。上手くやらないと元のエラーハンドラは動かなくなる。
・現在のエラーハンドラを変更せずに取得する方法は無い。set_error_handlerが元のエラーハンドラを返すので、何か適当なエラーハンドラを設定後にrestore_error_handlerを呼ぶ必要がある。
エラーハンドラのネストはややこしくて
SentryがSymfonyのエラーハンドラを上書きしてしまい、動かない原因になった エラークラスに手をつけるとあっという間にぐちゃぐちゃになる
特に7.0で仕様が大幅に変わってからは何もしてない。全部FWに丸投げ error_get_lastとerror_clear_last何回も呼ぶほうが賢そう Apacheの減少が続く - 2019年2月Webサーバシェア
https://news.mynavi.jp/article/20190301-779845/
Apacheのオワコン化が止まらない >>682
otherが伸びてるグラフあるがなんなんだ? nginxのシェアをまるごととってるとなると
nginxのフォークかなんかと考えるのが妥当
というわけで調べたらNGINX Unitなるものがあるらしい nginxって静的コンテンツならいいだろうけど、
phpを使うならNginxの下にApache入れて処理してやる必要があるだろ
nginxはwebサーバーの元締めみたいなヤツだからシェアがあがるだけじゃね? すまんけどPHPについておしえてくれない?
PHPってどこで動くの?
ちなみにCGIは知っていて、
クライアントからサーバーにリクエスト(アクセス)があった場合、HTTPDが特定のプログラムを起動して、そのプログラムから出力を受け取る。
HTTPDは受け取った出力を必要なら整形してクライアント(ブラウザに返す)。
PHPの場合、どこで動いていて、どういうふうに呼び出されて、どういう風に出力を返すの? PHPマニュアルにSAPIについてちゃんと書いてある項が見当たらないんだけど, そもそもそういう項はないのか単にマニュアルの調べ方が悪いだけなのか
とりあえず ttps://www.slideshare.net/do_aki/php-sapi-zendengine3 この辺読んでみるのがええんちゃう lzma形式の圧縮ファイルを展開できるスクリプトって無いかな ajaxで複数のオブジェクトを同時に送ることって出来るの?
jsonデータとFormDataを同時に送りたいんだけど 掲示板等の機能を持った半登録制のウェブサイト作ってるんだが
ROMは誰でも出来て
書き込んだり新規トピックを立てようとするには垢登録が必要な仕様にしてるんよね
書き込んだ人のIPアドレスやプロバイダはどの様に記録したらいいかね?
ipぐらいなら平文でもええのかな?
キーワード使ってワードを暗号化出来る関数とかなんかある? >>692
application/jsonとmultipart/form-dataを一つのリクエストで送りたいのか?
contentTypeはリクエストにつき一つしか指定できないのにどうしろと
別々のリクエストにして両方のPromiseを待つなら出来るが >>692
↓な感じでまとめて送り、受信先でパースすれば?
[
{contentType:"application/json", content:"送りたいjson"},
{contentType:"multipart/form-data", content:"送りたいFormData"}
]
>>693
書き込みに垢登録が必要なシステムならログイン時にアクセスログの記録をしといて
書き込んだ時点では、アカウントのIDを記録しておけばいいだろう さして重要な個人情報でないIPやプロバイダをわざわざ暗号化する必要もないだろ
可逆じゃないと警察から照会があったときとかも意味もないし
そもそも暗号化のためにさくリソースが無駄
というか普通はhttpdのログにも記録される情報だろうそれ httpdはリクエストに対する記録しか残さないのでサイトの中で何をやっていたかは不明です IPや逆引きホスト名に関しては二重取りになり
しかもそっちのログは暗号化もなにもされてないってことを指摘してるだけで
さすがに投稿日時ぐらいは記録するのは想定してるよ phpやったことないんだけど、cgiとはどう違うの?
httpfとphpの関係ってどんな感じなの? アクセスしたURL見りゃ大体何やってたかわかるじゃん URLにhttpdの仕様なんて書いてなくね・・・? >>700
CGIはオワコン
リクエストの度にコマンドを実行する方式なので、遅すぎる
ApacheはWebサーバー自体にPHPモジュールを含んでいる
CGIと比べたらスクリプトの実行は速いものの
Apache自体のWebサーバーとしての速度はnginxなどに劣る
また、Webサーバーの中で動くので分離度が低く、セキュリティ上不安がある
FastCGIは両者のいいとこ取りみたいな感じ
一度立ち上げたプロセスとソケットで通信するようにして、プロセスを再利用可能にしてCGIの分離性を保ちつつ
それなりの高速さを実現した
この方式だとApacheだけでなく、nginxも使える 何で初心者お断りのスレで、phpやったことない初心者がいるんだよ
スレタイも読めねーのか? WSGIはWebサーバーとアプリケーションサーバーを繋ぐという点はFastCGIに似ているが、FastCGIは言語を問わないのに対し
WSGIはPython専用
FastCGIより上位の層にあり、抽象度が高いらしい
FastCGIが通信の仕様だけなのに対して
WSGIはワーカープロセスの制御も仕様に含むとか
そのため、FastCGIを利用したWSGI実装もある >ApacheはWebサーバー自体にPHPモジュールを含んでいる
Apacheがサーバーなんじゃないの?
Apache自体にPHPモジュールを含んでいるってこと?
モジュールを含むってどういう意味?
んでそれがなんで速いことになるの?結局インタプリタと同類だからcgiと同じじゃないの?
もしかしてプロセスが常駐してるの? >>705
前から思ってるけどphpくだスレがないからここに来るしかない
初心者お断りって書いても意味ないぞ >>709
あぁ板が違うのか
気づくわけねーだろハゲ PHPは設定が多過ぎて本番環境で動かす時の設定をどうすれば良いか分からない
セキュリティはともかく性能的にはどうチューニングする?
その設定で本当に速くなってる事はどう確かめる?
Webサーバーはnginxにしている ■ このスレッドは過去ログ倉庫に格納されています