トップページ⇒php
1002コメント311KB

PHP質問・雑談スレ 2【初心者お断り(ROM歓迎)】©5ch.io

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん 転載ダメ©2ch.net2016/10/17(月) 21:44:12.59ID:???
PHP関する質問や雑談をするスレです。
初心者お断り(ROM歓迎)と書いてますが、初心者用のスレが用意されているからで、
難しい質問や話題をしなければいけないわけではありません。
PHPマニュアルの読み方を概ね理解していて、関数リファレンスが正しく読める方用のスレです。

PHP未導入の方や、手取り足取りが必要な初心者の方はム板のくだスレへどうぞ。
http://echo.2ch.net/tech/ (【PHP】で板内を検索)

前スレ
http://tamae.2ch.net/test/read.cgi/php/1461283091/

その他リンク
・PHPマニュアル
 https://secure.php.net/manual/ja/index.php
・コードテスト・貼り付け用
 http://ideone.com/
・プログラミングのお題スレ Part8 (求PHPer参戦)
 http://echo.2ch.net/test/read.cgi/tech/1444216746/

このスレで扱う話題
・PHPのコード,設定や設定値に関する質問
・常識的範囲内でのコードレビュー依頼・改良相談
・PECL,PEARに関する質問
・PHP新機能やPHP関連トレンドの話題
 (FWや非公式ライブラリの話題や特徴比較は良いが使い方から先の話題は専スレへ)
・PHPのバグ発見報告・公式に報告する前の検証依頼

このスレで扱わない話題
・直接関係ない○○特有の質問(専スレへ)
 (HH,エディタ,IDE,サーバ,OS,DB,SQL,FW,テンプレート,非公式ライブラリ・アプリケーション等)
・PHPの改造
0755nobodyさん2017/01/17(火) 21:32:55.35ID:???
PHPのビルトインサーバで物足りなくなったらXAMPPでもApacheでもnginxでも入れれば宜しいと思うの
0756nobodyさん2017/01/17(火) 21:37:26.37ID:???
>>754
あーあれか。いつもすぐに消してたな。

>>751
別に誰か触るわけじゃないからユーザーパスなんて無くて良くないか
それよりもmysqlのユーザーとパスを本番環境に合わせておくといいぞ
rootでテストすると思わぬところでひっかかる、というかひかかった
0757nobodyさん2017/01/17(火) 22:09:14.22ID:LeG/+lw1
>>754
そうです。調べた所、なくなったみたいですね。

>>756
私も昔やっちまいました。

みなさんありがとうございます。
0758nobodyさん2017/01/18(水) 10:03:47.04ID:p0EF6Ec+
https://youtu.be/quIHgwuF6r4
0759nobodyさん2017/01/18(水) 23:47:21.59ID:wplrfJOQ
なんでphpは文字列を ' シングルクォーテーションで囲むの?

普通は、 " ダブルクォーテーションでしょ?
0760nobodyさん2017/01/19(木) 00:07:37.89ID:???
>>759
Perlに訊くべきだな
0761nobodyさん2017/01/19(木) 00:14:32.60ID:???
>>759
それ言い出すとどの言語にも変なところの一つや二つつある
0762nobodyさん2017/01/19(木) 00:20:28.47ID:???
シングルであることはmustではない
シングルでも書けるが正解
普通はダブルだと思うならダブルを使えばいい
0763nobodyさん2017/01/19(木) 00:22:12.50ID:???
キーボード「7」の位置にあるからシングルコーテーション嫌い
0764nobodyさん2017/01/19(木) 00:24:08.99ID:HOa0/Opm
>>760
Perl は嫌い

>>761 >>762
もともとC#から入ってる俺からすると生粋のPHPerが ' で文字列を括るのに
本当に嫌悪感を感じる。

また
if ( true ){
}

じゃなくて普通は
if( true )
{

}
じゃないか?
0765nobodyさん2017/01/19(木) 00:28:38.25ID:???
ブロックはこう
if ( true ){
}
functionはこう
function()
{
//foo
}
0766nobodyさん2017/01/19(木) 00:30:46.07ID:???
>>764
PHPはPerlからの影響もかなり強い
C#と違ってな

あとコーディング規約でしかないことを必要以上に押し付けるのは宗教の押し売りと変わらんぞ
0767nobodyさん2017/01/19(木) 00:42:20.14ID:???
>>764
コーディング規約なんてどうでもいいだろ
Javaの影響が強いEclipse使ってれば上になるし
C系の影響が強いVS使ってれば下になる
PHPもPEARコーディング規約は上でZendコーディング規約が下と分かれてるし
PHPerに人気のPhpStormも下だから下の書き方のやつは多い
0768nobodyさん2017/01/19(木) 00:46:22.49ID:???
>>767
流石に現代ではZendコーディング規約は兎も角, PEARよりPSR-2を挙げるべきだと思うの
0769nobodyさん2017/01/19(木) 08:11:03.40ID:???
>>759
変数展開するかしないかの違いがあるよね。
0770nobodyさん2017/01/19(木) 11:55:42.84ID:???
コードを最適化するコンパイラをもつC#と比べるのがそもそもナンセンスなんだがな
0771nobodyさん2017/01/19(木) 11:56:43.28ID:???
それちょっと地学ない
0772nobodyさん2017/01/19(木) 12:27:11.30ID:HOa0/Opm
phpでフレームワークは使わずに
DBからデータを検索しようとしています。

例えば社員IDが 3,5,7
の3つを検索しようとした場合
PHPで文字列編集を行ってSQLを

EMPLOYEE_ID IN ( 3 , 5, 7)

と組み立てて実行してますが、もっとスムーズにやる方法はありませんか?
0773nobodyさん2017/01/19(木) 12:36:39.34ID:???
>>772
お前さんがどうやってるのか分からないのにもっと効率的とは是如何に
0774nobodyさん2017/01/19(木) 14:50:03.82ID:???
文字列編集?これ脆弱性作るやつだ・・・
0775nobodyさん2017/01/19(木) 15:27:39.67ID:HOa0/Opm
>>773

あー、cakePHP使ってる時には確か検索した対象データを
配列に詰めて渡せば、内部的にINに組み込んでくれるっていう便利な機能があったはずなんだけど・・・・

プレーンなphpじゃないか。やっぱりFW使っておいた方が良かったかな。
0776nobodyさん2017/01/19(木) 16:30:05.73ID:???
>>775
> あー、cakePHP使ってる時には確か検索した対象データを
> 配列に詰めて渡せば、内部的にINに組み込んでくれるっていう便利な機能があったはずなんだけど・・・・
その程度、自分で実装しろよ
0777nobodyさん2017/01/19(木) 18:29:18.38ID:???
プレーンなC#にもないよね
0778nobodyさん2017/01/19(木) 19:46:23.77ID:???
C#erとか強そうなのがやってきたと思ったら、ただの雑魚だったっていう・・・
0779nobodyさん2017/01/19(木) 20:17:56.32ID:???
C#は完全にjavaに食われたな
もっと伸びると思ってたんだけどなぁ
0780nobodyさん2017/01/19(木) 20:39:55.91ID:???
PHPスレは、>>775この程度のやつがいっちょまえな感じで書き込みするから嫌なんだよ
0781nobodyさん2017/01/20(金) 02:52:58.31ID:???
普通は
if( true )
{

}
じゃないか?

この時点で強そうじゃないのはわかるでしょう。どこの畑で育つとこうなるのか
0782nobodyさん2017/01/20(金) 03:30:32.80ID:???
発芽してないから
0783nobodyさん2017/01/20(金) 11:13:42.22ID:???
>>781
phpマニュアルは
if () {
0784nobodyさん2017/01/20(金) 11:14:45.43ID:???
>>781
http://php.net/manual/ja/functions.user-defined.php
phpマニュアルは以下のようになっている
if() {
}
function()
{
}
phpマニュアルに合わせているよ
functionはエディタで見やすくなるって聞いたけど、ifブロックがなぜこうなっているかはよくわからない
0785nobodyさん2017/01/20(金) 13:07:11.97ID:???
phpマニュアルは以下のようになっている
if() {
}

なってないでしょ
0786nobodyさん2017/01/20(金) 14:15:57.82ID:???
一体なんのために>>785みたいなレスするのか不思議だ
0787nobodyさん2017/01/20(金) 14:25:18.33ID:???
>>785
確認しやすいようにURLまで漬けてんだから見てくれよwwww

あとなってない場所を教えてくれ。修正しとくわ
0788nobodyさん2017/01/20(金) 14:50:46.62ID:???
相手しちゃダメよー
0789nobodyさん2017/01/20(金) 15:51:26.02ID:???
curl関数のcurl_setopt()のそれぞれのオプションの初期値を確認する方法ってあります?
http://php.net/manual/ja/function.curl-setopt.php
ここにデフォルトはあれあれ通常はこれこれと書いてあるものもあるけど
大半は記述がないのでどうしてくれようかと
0790nobodyさん2017/01/20(金) 16:02:55.09ID:???
>>787
コーディングスタイルはカーリーブレースの位置を決めるだけじゃないよ
>>783に対しては安価をつけてないでしょ。
同じ意味で、>>781を書いた。(これはもちろん >>764 の引用。)
0791nobodyさん2017/01/20(金) 16:21:48.17ID:???
さわるな危険
0792nobodyさん2017/01/20(金) 16:44:19.89ID:???
初心者向けの話題は初心者スレで
0793nobodyさん2017/01/20(金) 16:49:03.04ID:???
>>789
なんでコード読まないの?
0794nobodyさん2017/01/20(金) 16:58:41.09ID:???
コードを読まないで生きていけるのならば、皆そうすべきである
0795nobodyさん2017/01/20(金) 17:19:57.45ID:???
・マニュアルには網羅的な説明がない
・ちょっとググったけど情報が見当たらない
・コードは見られる

なら、コード見るのが最速だよな
0796nobodyさん2017/01/20(金) 22:02:41.88ID:???
・網羅的に設定コードを書く

が最速
0797nobodyさん2017/01/21(土) 02:15:46.19ID:???
>>789
https://github.com/php/php-src/blob/master/ext/curl/interface.c
これ読んでから
https://curl.haxx.se/libcurl/c/curl_easy_setopt.html
この辺を見る
0798nobodyさん2017/01/21(土) 15:57:48.07ID:3TMSiFF1
if (true){
}
→と書く奴の低能率の高さは異常

if (true)
{
}
→と書く奴には有能な奴が多い。
0799nobodyさん2017/01/21(土) 16:55:26.91ID:7J/ZXd+H
PHPマニュアルのユーザーCSS作ったので
フラットデザインのほうが見やすいと思う方で
Opeta、Firefox、Chromeで拡張機能のStylish入れてる方は
気が向いたら使ってみてください

https://userstyles.org/styles/137945/flat-php-manuals-php

ソースが汚いので、他の方がカスタマイズしやすいように整理する予定です
0800nobodyさん2017/01/21(土) 18:55:42.15ID:???
>>798
スレタイ
ROMは歓迎しますのでちょっと黙っててね
0801nobodyさん2017/01/21(土) 19:01:39.43ID:???
if (true){}
オレはワンライナーだな。
0802nobodyさん2017/01/21(土) 19:12:06.25ID:???
phpマニュアルってなんか暗いよな
読んでて陰鬱な気分になる
0803nobodyさん2017/01/21(土) 19:14:14.44ID:???
>>801
そのパターンの場合{}をつけるのはちょっと
0804nobodyさん2017/01/21(土) 19:15:48.83ID:???
>>803
if (true)
これでいいな。
0805nobodyさん2017/01/21(土) 21:42:16.74ID:???
なんでifと(の間にスペース入れるの
0806nobodyさん2017/01/21(土) 22:35:26.24ID:???
if(true)
これでいいな。

ただ、一言いわせてほしい。

適当でも動く。それがこの言語の唯一の世界最高の部分を忘れないでほしい。
0807nobodyさん2017/01/21(土) 22:43:09.24ID:???
よほど厳しい言語でない限りそこは空白あってもたいていは動くでしょ
PHPで特筆すべきところはelseifのところじゃないか
elseifでもelse ifでもいい
0808nobodyさん2017/01/21(土) 22:51:48.20ID:???
そういうことだ!
0809nobodyさん2017/01/21(土) 23:34:06.55ID:???
if 〜〜〜 else ifは if 〜〜〜 elseif とは違い
if 〜〜〜 else
  if 〜〜〜 ということだったような

結果生成されるアセンブラ的にジャンプ回数が後者のほうが多い=重いとか
0810nobodyさん2017/01/22(日) 00:17:50.98ID:???
自分が空白あける理由がわかったわ。
}else{
この書き方でelseが窮屈なのと、
if()だと制御構造じゃなくて関数呼び出しみたいに感じるからだわ。
echo ""
print("");
の違いにも言えることだけど。
0811nobodyさん2017/01/22(日) 00:18:49.55ID:???
if x==y {
}
こう書けるのが一番なんだけどね。
0812nobodyさん2017/01/22(日) 00:22:15.82ID:???
if x==y {}
ワンライナーにしよう
0813nobodyさん2017/01/22(日) 08:01:35.50ID:???
psrに従う
0814nobodyさん2017/01/22(日) 08:24:32.05ID:???
$a = if x==y {10} else {20};
とか出来る日は来るのだろうか
0815nobodyさん2017/01/22(日) 08:49:06.15ID:???
>>807
それいいよね
あとtrueでもTRUEでも
boolean true扱いなのが良い

Cか何かは大文字だけだったはずで、
define TRUE true
かなにかを毎回入れてたな。めんどくさかった
0816nobodyさん2017/01/22(日) 12:05:06.34ID:Bh2I+8hl
>>801 真正バカ
0817nobodyさん2017/01/22(日) 12:07:04.02ID:Bh2I+8hl
if ( true )
{

}


という風な書き方をする奴はいけてる。自己紹介してみた。
0818nobodyさん2017/01/22(日) 12:38:10.01ID:???
>>817
理由は?
0819nobodyさん2017/01/22(日) 12:52:14.70ID:Bh2I+8hl
↑
可読性が高い
0820nobodyさん2017/01/22(日) 13:02:10.82ID:???
ペチパーの鏡だな
0821nobodyさん2017/01/22(日) 13:06:06.11ID:???
>>819
もう少し明確な理由ない?
あればそっち使おうかと思うんだけどな
無ければマニュアルに従う
0822nobodyさん2017/01/22(日) 13:08:26.34ID:???
アロー書くのめんどくせえ・・・
>>>とか>>だとEOFとの兼ね合いやビット演算の関係でダメなんだろうけど
:>これじゃダメなの =>や->よりは絶対書きやすいんだが
0823nobodyさん2017/01/22(日) 13:14:23.08ID:???
$php="適当でも動く!"
0824nobodyさん2017/01/22(日) 15:10:18.11ID:???
セキュリティについてひととり勉強したけど
「POSTやGETのパラーメーターは必ずサニタイズしろ」
「改行、特殊文字のエスケープ、ヌル文字や/../排除」
「ホワイトリスト作って、適切なリクエスト以外ははじけ」
「アクセスできる場所に重要なものを置くな。置くなら.httpdや.htaccessではじけ」
「フォームを作るならワンタイムトークン」
これが原則よな
最低限これだけやってりゃだいたい大丈夫っぽいじゃん
0825nobodyさん2017/01/22(日) 15:17:46.81ID:???
>>824
ログイン機能が無ければ楽勝
極論ユーザーからの送信は
「ホワイトリスト作って、適切なリクエスト以外ははじけ」
これだけで何とかなる

でもログイン機能を作ると途端にセキュリティホールだらけになるゾ
楽しいゾ〜^^b
0826nobodyさん2017/01/22(日) 15:59:59.37ID:???
穴掘って埋めるだけのブラック労働;;
0827nobodyさん2017/01/22(日) 18:51:35.53ID:???
コマンドラインって使いますか?
0828nobodyさん2017/01/22(日) 19:09:37.33ID:???
>>818
そいつ初心者だから相手すんな
0829nobodyさん2017/01/22(日) 19:18:37.65ID:???
今ちょっと試せないんだけど

$array = [
MyClass::class => '...'
];

みたいなkeyの指定って大丈夫ですか?
0830nobodyさん2017/01/22(日) 19:20:35.19ID:???
だいじょうぶです!
0831nobodyさん2017/01/22(日) 19:53:38.91ID:???
ty!!!!!!
0832nobodyさん2017/01/22(日) 20:00:57.23ID:???
>>829
これどうなってるの?
連想配列は分かるけど、staticなプロパティで$外してもエラー起こらないの?
Myclass::classで何でクラス名が返ってるの?
0833nobodyさん2017/01/22(日) 20:24:38.89ID:???
>>832
http://php.net/manual/ja/language.oop5.basic.php
0834nobodyさん2017/01/22(日) 21:03:16.72ID:???
>>833
ありがとう!
しかもこれclass定義しなくても使えたのね。ビックリ

::class
PHP 5.5 以降では、class キーワードでクラス名の解決ができるようになりました。 ClassName クラスの完全修飾名を文字列で取得するには、 ClassName::class とします。 これは、 名前空間つきのクラスと組み合わせると特に便利です。
0835nobodyさん2017/01/22(日) 23:46:19.23ID:???
ちゃんとテスト書いてね
0836nobodyさん2017/01/23(月) 01:10:26.38ID:???
いやよ
0837nobodyさん2017/01/23(月) 01:58:05.38ID:YCqPaICU
アナルPHPでついて
0838nobodyさん2017/01/23(月) 22:57:06.46ID:???
マニュアルに翻訳ミスがあったけど、報告の仕方がさっぱりわかんないからここに書きますね
だれか修正してちょ


http://php.net/manual/ja/regexp.reference.assertions.php
ここ

> (?<=\d{3}...(?<!999))foo

>は、999 でない 3 桁の数字とさらに 3 文字の後に続く "foo" にマッチするパターンです。

これおかしいなあと思って原文見たけど、やっぱり誤訳だった。

「3桁の数字と、999ではない3文字の後に続く"foo"」が正解ですね。


よろしくお願いしますー
0839nobodyさん2017/01/23(月) 22:59:20.26ID:???
ああ、具体例追記しておきますね

マッチしない例
123999foo
abc123foo

マッチする例
123abcfoo
999abcfoo


こういうことです
よろしくおねがいしますー
0840nobodyさん2017/01/23(月) 23:01:06.80ID:???
あとマニュアル向けのstylishのCSSを修正して
メイン記事のフォントを太くしました
そのほうが見やすいと思ったので。

メイン記事のフォントの種類とトップのヘッダの色も変えられるようになりました
0841nobodyさん2017/01/23(月) 23:44:22.72ID:???
>>838
右上の edit
anonymous login
修正
保存

これぐらいは出来るようになっておいたほうが良いぞ
0842nobodyさん2017/01/24(火) 11:49:49.33ID:???
>>841
ログインはできるんだよ
その先がよくわかんない
0843nobodyさん2017/01/24(火) 11:57:54.39ID:???
ああ、わかった
「すべてのファイル」ってのクリックすりゃいいのね
0844nobodyさん2017/01/24(火) 12:19:47.00ID:???
なんか知らんけど修正不可になってる(他のファイルは修正できる)からやめとく
0845nobodyさん2017/01/24(火) 14:07:46.91ID:???
昔バグ報告したのに英語がめちゃくちゃで理解してもらえなくて今もスルーされている
今そのバグが再現可能かどうかはわからないけど
0846nobodyさん2017/01/24(火) 20:37:54.16ID:???
再現コードが書ければどんだけ英語がおかしくても理解してもらえるはずだけどなぁ
0847nobodyさん2017/01/24(火) 21:50:49.60ID:KZ0F5F3W
何もしていない普通の一般人の自宅に隠しカメラを取り付け
それをネットでリアルタイム配信

仲間という人間に対する盗聴盗撮生ネット配信の会

しかけたカメラの映像
乗っ取っているPCの画像をリアルタイムで生配信中
集団で仲間の私生活を覗いて楽しんでいる

そんなことが今この国では行われています

仄めかしの隠語は
猫 穴 水 仲間 
0848nobodyさん2017/01/25(水) 13:25:36.75ID:???
$array = array(
  array(1,2,3), array(4,5,6), null, array(7,8,9), null,
  array(10,11,12), array(13,14), array(15,16,17), array(18,19,29,2000)
);

これをnullを境にぶった切って始点・終点の目印をつけて
次レスのように変えたい
どうやるのが良いか、先生お願いします

泥臭いけどループごとに1つ前の要素を見て判断させるのが一番なんでしょうか
0849nobodyさん2017/01/25(水) 13:27:52.99ID:???
$result = array(
  array(
    'start'=>true, 'end'=>false,
    'data'=>array(
      array(1,2,3),
      array(4,5,6)
    )
  ),
  array(
    'start'=>false, 'end'=>false,
    'data'=>array(
      array(7,8,9)
    )
  ),
  array(
    'start'=>false, 'end'=>true,
    'data'=>array(
      array(10,11,12),
      array(13,14),
      array(15,16,17),
      array(18,19,29,2000)
    )
  ),
);

わざわざ配列に組み直してるのは、互いに統合できない2つ以上の別々のところで
分割したものをもとに処理したいからです
0850nobodyさん2017/01/25(水) 13:48:15.96ID:???
>>848
>>849が目的じゃなくて手段なら、SplDoublyLinkedListを使うのがいい。
$list = new SplDoublyLinkedList();
$list->push(['abc', 'def']);
$list->push(['ghi']);
$list->push(['jkl', 'mno', 'pqr']);
print_r($list);
0851nobodyさん2017/01/25(水) 13:57:58.30ID:TQsts9Pu
つか、これでいいんじゃねーの?
$result = array(
  array(
    array(1,2,3),
    array(4,5,6)
  ),
  array(
    array(7,8,9)
  ),
  array(
    array(10,11,12),
    array(13,14),
    array(15,16,17),
    array(18,19,29,2000)
  )
);
0852nobodyさん2017/01/25(水) 14:02:31.89ID:???
>>850-851
自分でもアレだとは思うんだけど、元の配列の最初([0])ではじまってる塊か、最後で終わる塊か、
に意味があるので手段じゃなく目的になるます
0853nobodyさん2017/01/25(水) 15:03:00.65ID:???
>>852
ちょっと意味がわからないんだが。

> 自分でもアレだとは思うんだけど、元の配列の最初([0])ではじまってる塊か、最後で終わる塊か、
> に意味があるので手段じゃなく目的になるます

目的=元の配列の最初の塊か最後で終わる塊かを知りたい

じゃないのか?
それを実現する手段が>>849のコードじゃないの?
0854nobodyさん2017/01/25(水) 15:05:21.62ID:???
Aという目的に対してBという手段を考えたのだが、Bに関してCという疑問がある。
Cはどうすればいい?

というようなことだったら、Bじゃなくて別手段がいいんじゃなないのというお話。
0855nobodyさん2017/01/25(水) 15:30:59.78ID:???
>>853
目的は最初に書いたように「nullを境にぶった切って始点・終点の目印をつけ」ることです

852で元の〜〜は手段じゃなく目的だと書いたのは、
始点・終点の目印を省く提案をされた>>850-851の方々に対して、いや必要なんですよ、と返す意図です

始端・終端の把握のためとはいえ、いかにもって感じのフラグ設定はどうかとも思ったのですが、
わかりやすさを優先してフラグ設定として書いてあります
アレだと思う、と書いた意図はこのようなことだったのですが今読み直すと意味不明ですね、すみません
854は申し訳ないけど意味がわかりません
■ このスレッドは過去ログ倉庫に格納されています