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の改造
ファイル管理のみ便利で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"]."'"; >>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']; でよくないですか? ここのイケメン先輩達に質問しようと思って質問内容を整理して文を書いていたら、途中で答えがわかりました ありがとうございました ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる