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の改造 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を確認してみ Composerのautoload.phpって、全然autoloadじゃねぇんだよな。 https://github.com/sebastianbergmann/phpunit/issues/2499 Q: but when I run phpuint --log-json I get unrecognized option --log-json. Was this feature intentionally removed from version 6? A: Yes, this was removed. 「Yes,」じゃねぇよ、おっさん! Any solutions for --log-json in netbeans8.2 I have same problem with this version. Someowne has any idea how to fixed it? ここで終わってやがる… セマンティックバージョニング的にもメジャーバージョンアップは後方互換性破壊があり得る変更なわけだし Logging Options: --log-junit <file> Log test execution in JUnit XML format to file. --log-tap <file> Log test execution in TAP format to file. --log-json <file> Log test execution in JSON format. --testdox-html <file> Write agile documentation in HTML format to file. --testdox-text <file> Write agile documentation in Text format to file. > 後方互換性破壊があり得る変更なわけだし(キリッ はぁ? FacebookがおもらししたのはPHPで構築されてたから? techempowerでPHP系フレームワークの順位がかなり下なのは 単にPHPが遅いから? http://www.techempower.com/benchmarks/ Shared-Nothingな事による初期化にかかるオーバーヘッドやらブロッキングI/Oを無くすことを狙った phppmとかReactPHPとかもあるらしいけど Shared-NothingとかブロッキングI/Oを前提に作った今までのコードは動かないよね そんなの使い物になんの? そこまでするんだったら別言語に移ったほうが良くね? https://github.com/reactphp/react/wiki/FAQ https://github.com/php-pm/php-pm/blob/master/README.md 遅いのはどうにもならないって事で PHPをアクセス数多いサイトで使う時は 静的キャッシュを行ってサーバーに負荷掛からないようにするのがデフォらしい 後はcssとjs、ファイルを分けずにhtmlの中に書いてしまう 要は読み込むファイルはhtmlファイル一枚だけにする 画像もsvg そうすれば超早い 早い遅いいうけど人間の認識できる速度じゃないから 別に実用上はなんら問題ないんだよ そんなにI/Oにご不満ならメモリに全部展開しときゃいいよ ユーザーの誰が気にするのかしらんけど >>319 少し違う phpやdb構築の際、速度を気にせずに重い処理を平気で書くことが出来るようになる 「これ重くなるだろうなぁ・・・かいてまえ!」→やり直し が無くなる http://hoge.com/test.php にアクセスしようとしたところ writeable by group という初めてみるエラーに遭遇しています。 何が原因なのでしょうか? Internal Server Error Directory "/home/XXX" is writeable by group suPHP 0.7.1 test.php自体には、 echo"testやで"; しか記述していません。 >>323 https://www.google.co.jp/search?q=+is+writeable+by+group& ;ie=utf-8&oe=utf-8&client=firefox-b-ab&gfe_rd=cr&dcr=0&ei=0tPWWqv6GKuuX53HnfAL 何が原因ってまんまエラーに書いてるのにそれがわからんってのがわからんで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"]."'"; ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる