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の改造 自宅鯖でWordPressを動かしてるんだが、ログイン状態でPCかブラウザがクラッシュして再起動すると、必ずログアウトされてる
PHPってブラウザ再起動したらセッション無効にするみたいな設定あったっけ?
どういう仕組みでこうなるのか調べたけど案外情報が無くてわからんかった
ブラウザの設定なんでないの? それも考えたけど別のサイトではそうならないんだよな >>210
>自宅鯖+PC再起動
セッションはメモリ上に保存されてるからね、ログアウトも仕方ないね
ブラウザの場合はわからんが、ブラウザじゃなくて鯖が再起動になってるんじゃないの 更に調べたらやはりブラウザのせいぽい
Operaでだけ発生しChromeではならない、が、何故なのかはまだわからない
>>213
鯖は再起動になってない operaが再起動でクッキー消失する設定になってるかなんかじゃないか
あと今のoperaは使わんほうがいいと思うぞ
せめてvivaldyのほうがいい >>215
同じOperaでもサイトによって挙動が違って謎
どこかにドメイン別の設定でもあるのだろうか… operaは中国企業が買収したし何がどうなってるかわからん
使うの怖いわ
原因も調べるだけ時間の無駄
ってかそもそも、今どの層が使ってるんだ? うーんVivaldyでも起きた…Operaの問題というわけでもないようだ
PHPのセッションに、ブラウザ閉じたら終わるみたいな機能ないよね?そもそも検知できないと思うし クッキーの有効期限がブラウザ閉じるまでになってるんだろ >>213
>セッションはメモリ上に保存されてるから
こいつ、何言ってんの? >セッションはメモリ上に保存されてる
でしょ
>>221は何言ってるの? 実装次第だが少なくともPHPのセッションはデフォルトでファイルなはず
自分が使用してるバージョンではそうなってる
ブラウザは終了時にセッション(クッキー)を削除するのでそこでセッションは切れる
ただ異常終了した場合は前回のセッション復帰を試みるブラウザもある(ブラウザ次第)
PHPがセッションを削除するタイミングは
たしかアクセスがあった時にランダムで有効期限が切れたものを削除してた気がする
なのでサーバ再起動した場合でもまだ有効期限内なら確立されるはず(ブラウザ側で残ってれば)
サーバ再起動時にPHPのセッションを削除するようにしてる場合はこの限りではない >>218
phpのセッションは、ブラウザのcookieに保存されたセッションIDと
サーバ側のセッションファイル(メモリキャッシュを使ってる場合はメモリ)の
突き合わせで行われる。
だからブラウザのcookieとサーバのセッションファイルを調べればだいたい原因が分かるよ。
たぶんcookieがないかセッションIDが変わってるだけだと思う。
君らのレス見てると、案外phpのセッションを理解してる人は少ないみたいだな。
まあたしかに分かりにくいけど。 どちらかというとcookieの仕組みを理解してないだけだろう
俺も昔勉強したきりでもう覚えてないが
expiresが設定されてないとブラウザ終了時に消されるんだっけか >>225
そう。
最近はフレームワークが面倒な作業を全部やってくれるから、
新人(でなくてもか)がphpのセッションを学ぶ機会がないんだよね。
session_start()さえ自分で書かないんだもん。
そりゃ何やってんだか分からんって。
できればこの辺のことは学校でやってきて欲しいんだがな。 ブラウザ終了時にクッキー消される場合があるのはわかるが、異常終了時はどうなるんだろう?
再起動時に前回異常終了したことを検知して、正しく処理をするのかな?その結果クッキーは消えると 異常終了時はブラウザがCookieを消すという動作が出来てない可能性があり、
この場合ブラウザには残ってるということになる。
これらのCookieをどう次回の起動時にどう扱うかはブラウザ次第。
勝手に復元したり、復元するか聞いてきたり、リセットして通常起動をしたり。 中途半端に勉強してフレームワークを変にカスタマイズして
セキュリティホールができるよりかは何も出来ない方がいいという昨今 そうやってできたセキュリティホールなんてそう簡単に検知出来ない
ソースがオープンであることが一番怖いのだよ
逆にオープンであるといろんな視点から修正も可能になるから
堅牢なものに仕上がるわけだけど Googleがemojiのユニコード化に乗り出したときにperlだとemojiをutf8にする決定版モジュールがすぐに出たし
PHPだと暫定的にHTML_Emojiを使ってたけど5.4以降の関数を使った新しいモジュールが見つからない
何かおすすめの携帯emoji自動変換ないでしょうか PHPerはないものを生み出すのが得意になるように
言語が誘導してくれてるんだから自分で作るんだ!!!!!! 車輪の再発明が大好きだからな
趣味でやる分の傾向としては別に悪くはない 誰でも簡単にネットで稼げる方法など
参考までに、
⇒ 『半藤のブブイウイウレレ』 というサイトで見ることができます。
グーグル検索⇒『半藤のブブイウイウレレ』
MHWTZ79CQR PHPから大量のデータを送る方法を教えてください
思いついたのが、
1、一旦ファイルに保存してファイルの一覧をクライアントに送る
2、クライアントから順次ファイルの送信を要求する
です Socket.ioなどを使えということでしょうか?
勉強してみます npmがエラーはきまくりで進まなくなった。。。
なにこれ
Error: Cannot find module ....\npm-cli.js
socketは。。。portとかまためんどくさい話がありそうで。。。 >>239は同期が必要なゲームデータのやり取りを想定してると思っての答えなんだろうけど。
1や2見るとそういう用途とは思えないな。
1がいまいち意味わからないけど。 スレチとか低レベ質問だったらすまん
headerを使用したリダイレクトとApacheのリバースプロキシを利用したリダイレクトはどう違うんでしょうか?
レスのヘッダーの中身が違うんですか? headerはブラウザがページ遷移を処理する
リバースプロキシはサーバが接続処理する
前者はリダイレクト前後でURLが変わるが後者は見かけ上変化しない >>246
ありがとうございます
今朝検証したらその通りになりました
ちょっとハマってたので助かりました 良くできてるプラグインとかに感動しなくなってしまった phpのf/wってルートネームスペースにエイリアス置きたがるけどさ
use句があった方が圧倒的にわかりやすいと思うんだが、なんか理由ってあるのん? 同一サーバでドメインごとにphpのバージョンを切り替えたいんですが
どうしたらいいですか? KubernetesでドメインごとにPods分ける phpexcelを使って、読み込んだエクセルのマクロを実行する方法はないでしょうか PHPExcelを使って, では不可能(VBAは誰が実行するんだ?)
何らかの形でVBAの実行環境を構築出来ればやれるはやれるだろう
VBSならWindows Script HostがあるがVBAじゃあExcelのCOMを使うしかなかろうが
http://php.net/manual/ja/book.com.php PHP5時代ではコンストラクタはクラス名ではなく__constructを使う
public修飾子はつけるというルールがSHOULDだったと思うのですが
PHP7時代でもそうなのでしょうか? >>257
http://php.net/manual/language.oop5.decon.php
> Old style constructors are DEPRECATED in PHP 7.0.
https://www.php-fig.org/psr/psr-2/#43-methods
> Visibility MUST be declared on all methods. >>258
ありがとうございます
両方MUSTなんですね 質問させてください
https://public.bitbank.cc/btc_jpy/ticker
これをfile_get_contentsしてjson_decodeしてもNULLになります。
file_get_contentsの時点ですでにNULLが帰ってきます。
curlでやっても同じでした。
ブラウザでの表示は問題なく表示を確認していますが何が原因でしょうか?
PHPのバージョンは5.3です。
allow_url_fopenはonになってます。
ちなみに上記URLはビットバンクのAPIですが他の仮想通貨関係のAPIのデータは問題なく取得できます。
原因だけでもわかるとありがたいです。
お願いします。 >>261
ですよねー、取れるのが普通ですもんね
何故か自分の環境では取れないんですよ
特にfile_getにこだわってるわけではないんでcurlでもどちらでも良いんですが何故かbitbank.ccのデータだけNULLになっちゃう とりあえず環境かな, OS分からんし
可能ならPHPのバージョン上げるとか(5.3はもう死んだ, どころか5.5まで死んでる)
因みに手元ではcURLだけじゃなくfile_get_contentsも問題なし ありがとうございます。
PHPのバージョンを上げてから再度検証してみます。 変えられるならもういっそ7.2まで上げてしまうといい
どうせ早いか遅いかだ HTTPS周りならOpenSSL関連かもしれんし
なんかヘッダが必要かもしれんからcontext作って渡すとか
基本的なことをやってから >>266
それやってもわかんなかったから質問したのよね お前もかよ
ビットコインブームにあやかりやがって! PHP経由で画像を出力する手法があるかと思いますが、この場合スクリプトで
いろいろと制限をかけることができ、セキュリティ上よろしいようですが
Apacheが即座に画像を返すのに対し、一度スクリプトを走らせて画像を出力するのは
パフォーマンス的に厳しい気がするのですが、どうなんでしょうか 計測すればいいんじゃないか
一枚ぐらいなら楽勝だけど、アクセスごとに100枚も200枚も出してたら重くなると思う
とりあえずパフォーマンスなんて考えずに作ればいいよ
どうせ誰も使わないサイトだからwww PHPの開発環境のシェアは
Eclipseが8割り位占めてる? >>269
セキュリティ上別によろしくはない
何が目的かは知らないけどはっきりいって無駄だと思うぞ
>>271
いいえ Eclipseなんて1割もおらんだろ PHPStormの人気すごいな
使った人みんな同じこと言ってる >>72
それまじか?
>>274
おつ!使った事がない!試してみる!
因みに俺はサーバ直結でEclipseで開発してるんだよね。
ローカルに開発環境作るのメンドクサイから。
PHP Stormもサーバ直結で開発出来ますか? 有料 PhpStorm(業界標準)>SublimeText>VS
無料 IDE組(NetBeans,Eclipse)>古参エディタ組(Emacs,Vim)>新参エディタ組(VSCode,Atom)>触り組(メモ帳に準ずる物)
こんな感じだと思う
ちなみに俺はVS
PhpStorm以外は分散してて1割以上シェアないと思う ファイル管理のみ便利でDreamweaver使ってるわ Visual Studio Communityで開発しようと思いインストールしたところ、
PHP Toolsのインストール過程で、デバッグ用に勝手にPHP入れたんですけど、
それが元々入れてたPHPより新しいせいか(7.13→7.17)、Pathの順番を変えてみましたが、
php -vをした限り、cliからphpを呼び出す場合最優先になってしまってるようです。
インストールされたPHPは%ProgramFiles(x86)%\IIS Express\PHPに配置されてますが、
困ったことにphp.iniが編集禁止になっていて編集できません。
display_errorsがOffになってるのでエラー箇所の特定に難儀します。
スクリプト側でerror_reporting設定してみましたが、何も表示されずでした。
ならばと元々入ってた7.13のphp.exeをphp7.exeにリネームして、
cliからphp7で呼び出したら呼び出せるのですが、
こんな単純なexeだけのリネームで問題ないのでしょうか? Visual Studioのアップデートがきてたので適用したら、
非互換とかになってPHP Toolsでの開発が出来なくなりましたw
1日で使えなくなってしまった。 ☆ 日本の、改憲を行いましょう。現在、衆議員と参議院の
両院で、改憲議員が3分の2を超えております。
『憲法改正国民投票法』、でググってみてください。国会の発議は
すでに可能です。平和は勝ち取るものです。お願い致します。☆☆ DateTime::createFromFormatの第一引数に'Y-m-d'、第二引数に日付の文字列を指定して使うと
時刻は0時0分ではなく、現在の時刻が勝手に設定されます
一方、DateTimeのコンストラクタの方(日付の文字列だけを指定する)は時刻は0時0分になります
何でですか?意味が分かりません
DateTime createFromFormat without time - Freek Lijten http://www.freeklijten.nl/2015/08/12/DateTime-createFromFormat-without-time 1人でphpで作っているプロジェクト(と言ってもDBでユーザ管理するぐらいのもの)の
進捗状況(編集履歴)を外部に見てもらうためにはBitbucketとか使えば良い?
1日の終わりにプロジェクトのルートディレクトリごと放り込めば
webで差分とかがわかるとかできたらいいんだけどどうでしょう? createFromFormatの場合、!が無いと現在のシステム時刻で初期化されるとは確かに書いてありますが
直感的でなくて分かりにくい挙動だと思います。
http://php.net/manual/ja/datetime.createfromformat.php こんばんは。PHPで作ったページのInternal Server Errorについて質問です。
FC2のレンタルサーバーを借りて、WEBサイトを作っているところです。
PerlのCGIでページを作ると、エラーになると500 Internal Server Errorが表示されます。
ところが、PHPでページを作ると、エラーになると真っ白なページが表示されるだけで、
500 Internal Server Errorが表示されません。
これは一体なぜでしょうか?
現象
PerlのCGIでエラーが出ると →
ApacheデフォルトのInternal Server Errorのページが表示される。
PHPのページでエラーが出ると →
FireFoxとIEなら、真っ白なページになるだけ(エラー表示が出ない)
Chromeなら、ブラウザが出すHTTP ERROR 500の表示
(Apachデフォルトのエラーページではない)
上記のことから、PHPでエラーが出ると500が返ってきているのは
間違いないと思うんですが、なぜ、エラーが表示されず
真っ白なページになってしまうんでしょうか?
よろしくお願いします。
PHPになんらかのエラーがあった場合、通常はレスポンスコードは200で返ってきて、
エラー個所を表示するようになってる。
どの種別のエラーを表示させるかというのはサーバ側(PHP)の設定次第だし、
エラーには時に重要な情報も含まれる可能性があるので、
第三者に見られないよう、エラー表示自体をしないことも可能。
また、レスポンスコードをどう返すかというのもサーバ次第で、
通常200のところを、500にすることも可能だし、
同じ500でも、PerlCGIとPHPでは返すドキュメント(body)を別にすることも可能だし、
もちろんbodyを含まない、ヘッダ情報のみを返すことも可能。
早い話、全てはサーバの設定次第なので、FC2側で単にそうなっているだけなのだろうという事。
Chromeのやってることは、レスポンスにbodyがないので(=真っ白になる)、
ユーザに何が起きてるかわかるように、おせっかいにも補完表示してるだけと考えられる。 >>294-295
ありがとうございます。
>>295によると、
・PHPではエラーがあっても200が返ってくる。
・ただし、ちゃんと実行できてないから、中身は真っ白になる
・PHPのエラー表示は設定で可能(←これはできました)
・サーバーの設定次第では500を返すことも可能
(レンタルサーバーでは、設定を変えられるかどうかはサーバー次第)
ということですね?
何となく分かってきました。
ありがとうございます。 開発用環境を考慮してデフォルトではエラー表示はOnだけど
エラー表示関連はPHP_INI_ALLで一般ユーザが設定できるようになってるので
本番用環境のphp.iniは管理者側でデフォルトではエラー表示をOffにして
必要があればOnにするよう利用者に委ねるというのが行儀のいいレンサバ管理者
今は知らないけど昔xrea使ってた時はOnのままだったけどあれはよくない
http://php.net/manual/ja/errorfunc.configuration.php#ini.display-errors
> ・PHPではエラーがあっても200が返ってくる。
> ・サーバーの設定次第では500を返すことも可能
デフォルトのエラー表示Onのままであれば200だけど
上記の通り本番環境ではOffにすべきであり
Offにしたらサーバ管理者がhttpdに細工をしない限り500が返るはず
fc2でエラーに500が返ってくるというのは正しい状態と見なしていい
> ・ただし、ちゃんと実行できてないから、中身は真っ白になる
fc2ではそういうことになるのだろう ちなみに500ページを表示させたいというなら
htaccessが使えるなら設定してみては?
apacheは詳しくないんで答えれないけどできそう >>297
> デフォルトのエラー表示Onのままであれば200だけど
> 上記の通り本番環境ではOffにすべきであり
> Offにしたらサーバ管理者がhttpdに細工をしない限り500が返るはず
> fc2でエラーに500が返ってくるというのは正しい状態と見なしていい
FC2でPHPのエラーになると、IEとFireFoxは真っ白画面。
Chromeではブラウザーが出した500エラー画面。
なので、PHPエラーでちゃんと500エラーが返ってきてるって判断した。
不思議なのは、普通は404でも500でも、Apacheがデフォルトの
エラーページを送ってくるのに、なんで500エラーだけ
真っ白画面になるんだろう?ってことなんです。
実際、404エラーではちゃんとApacheのエラー画面が返ってくる。 >>298
自作500ページを表示しようとして表示できないからおかしいなって思って、
いろいろ試して、Apacheデフォルトの500も表示されないって気付いた。
404とかは、自作にしたら自作が表示されて、
自作じゃなくしたらApacheのデフォルトが表示される。 phpがエラー検出したあとapacheに対してこれを返してくれと
500レスポンスコードにContent-Length:0の空のHTMLを送ってるイメージ if (responceStatus == 500 && responceBody.length == 0) {
responceBody = readFile("/errors/500.html");
}
疑似コードだけど
こんな感じのをhtaccessで設定できるならいけるんじゃないのってことね PHPでどうこうするっていうソリューションはあんまりよくないよねえ
httpdでどうにかしたいところ
ところでresponceじゃなくてresponseだった恥ずかしい >>301-302
真っ白になるイメージはまさに>>301だし、
やりたいことはまさに>>302の通りです。
>>303
それを読んで、挙動としてはやっぱりそうだったんだな、と分かりました。
そして、普通に500エラーを出すのは相当無理筋なんだな、と。
ってことで、みなさんいろいろとありがとうございました。
500エラーではなく、PHPの中でエラーを処理して
普通のHTMLでエラーメッセージを出す、ということにしました。
ありがとうございました。 >>293
大方PHPがmod_phpで動いてる
phpinfo()でSAPI APIを確認してみ ■ このスレッドは過去ログ倉庫に格納されています