teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

6

修正

2016/08/24 09:00

投稿

FKM
FKM

スコア3662

answer CHANGED
@@ -3,11 +3,11 @@
3
3
  phpを使ったデバイス判別は、以下のようなプログラムが有名ですが、けっこう勘違いを起こしやすい部分があります。
4
4
  ```php
5
5
  $phone = $_SERVER['HTTP_USER_AGENT'];
6
- $flg = strpos('iPhone',$phone);
6
+ $pos = strpos('iPhone',$phone);
7
7
  ```
8
- いきなり$phoneにiPhoneやAndroidといった値が代入されるわけではありません。それらのデバイス情報を含んだユーザーエージェント情報(つまり、iPhoneならiPhoneという文字を含んだ長ったらしい文字列)が代入されます。そこで、必要なデバイス情報を判別するために、その文字が含んでいるかどうかをstrpos関数で判定します。そして$flgには見つかった最初の文字(5文字目なら5という風に),falseといった結果が入ります。この判定を元に
8
+ いきなり$phoneにiPhoneやAndroidといった値が代入されるわけではありません。それらのデバイス情報を含んだユーザーエージェント情報(つまり、iPhoneならiPhoneという文字を含んだ長ったらしい文字列)が代入されます。そこで、必要なデバイス情報を判別するために、その文字が含んでいるかどうかをstrpos関数で判定します。そして$posには見つかった最初の文字の場所(5文字目なら5という風に),そして見つからなかった場合はfalseといった結果が入ります。この判定を元に
9
9
  ```php
10
- if($flg !== false){
10
+ if($pos !== false){
11
11
   $device = "iPhone";
12
12
  }
13
13
  ```

5

strposの説明修正

2016/08/24 09:00

投稿

FKM
FKM

スコア3662

answer CHANGED
@@ -5,7 +5,7 @@
5
5
  $phone = $_SERVER['HTTP_USER_AGENT'];
6
6
  $flg = strpos('iPhone',$phone);
7
7
  ```
8
- いきなり$phoneにiPhoneやAndroidといった値が代入されるわけではありません。それらのデバイス情報を含んだユーザーエージェント情報(つまり、iPhoneならiPhoneという文字を含んだ長ったらしい文字列)が代入されます。そこで、必要なデバイス情報を判別するために、その文字が含んでいるかどうかをstrpos関数で判定します。そして$flgにはtrue,falseといった判定結果が入ります。この判定を元に
8
+ いきなり$phoneにiPhoneやAndroidといった値が代入されるわけではありません。それらのデバイス情報を含んだユーザーエージェント情報(つまり、iPhoneならiPhoneという文字を含んだ長ったらしい文字列)が代入されます。そこで、必要なデバイス情報を判別するために、その文字が含んでいるかどうかをstrpos関数で判定します。そして$flgには見つかった最初の文字数(5文字目なら5という風に),falseといった結果が入ります。この判定を元に
9
9
  ```php
10
10
  if($flg !== false){
11
11
   $device = "iPhone";

4

説明の修正

2016/08/24 08:58

投稿

FKM
FKM

スコア3662

answer CHANGED
@@ -7,7 +7,7 @@
7
7
  ```
8
8
  いきなり$phoneにiPhoneやAndroidといった値が代入されるわけではありません。それらのデバイス情報を含んだユーザーエージェント情報(つまり、iPhoneならiPhoneという文字を含んだ長ったらしい文字列)が代入されます。そこで、必要なデバイス情報を判別するために、その文字が含んでいるかどうかをstrpos関数で判定します。そして$flgにはtrue,falseといった判定結果が入ります。この判定を元に
9
9
  ```php
10
- if($flg !== "iPhone"){
10
+ if($flg !== false){
11
11
   $device = "iPhone";
12
12
  }
13
13
  ```

3

文章の大幅な修正

2016/08/24 08:54

投稿

FKM
FKM

スコア3662

answer CHANGED
@@ -1,8 +1,14 @@
1
1
  プログラム的な問題の可能性が高いと思います。$phonesという値はどこからどうやって取得していますか?
2
2
 
3
- よくあるphpを使ったデバイス判別は、以下のようなプログラムですが
3
+ phpを使ったデバイス判別は、以下のようなプログラムが有名ですが、けっこう勘違いを起こしやすい部分があります。
4
4
  ```php
5
5
  $phone = $_SERVER['HTTP_USER_AGENT'];
6
6
  $flg = strpos('iPhone',$phone);
7
7
  ```
8
- strpos関数が抜けてるということはいですよね?これが抜ける、長ったらしいエージェント情報をてきています。strpos関数はの中で、必要なデバイスの名前るかどうかを判ているのです。そして$flgに入る値TRUE OR FALSEといった判定結果となります。
8
+ り$phoneにiPhoneやAndroidった値が代入されるわけではありません。それのデバイス情報を含んだユーザーエージェント情報(つまり、iPhoneならiPhoneという文字含んだ長たらしい文字列)が代入されます。そで、必要なデバイス情報を判別するために、そ文字含んでいるかどうかをstrpos関数です。そして$flgにはtrue,falseといった判定結果が入ります。この判定を元に
9
+ ```php
10
+ if($flg !== "iPhone"){
11
+  $device = "iPhone";
12
+ }
13
+ ```
14
+ このように値を代入して、初めてiPhoneという値が入るわけですが、何か引っかかる部分があるなら、参考にしてみてください。

2

説明の補助

2016/08/24 06:28

投稿

FKM
FKM

スコア3662

answer CHANGED
@@ -5,4 +5,4 @@
5
5
  $phone = $_SERVER['HTTP_USER_AGENT'];
6
6
  $flg = strpos('iPhone',$phone);
7
7
  ```
8
- strpos関数が抜けているということはないですよね?これが抜けると、長ったらしいエージェント情報を拾ってきてしまいます。strpos関数はその中で、必要なデバイスの名前があるかどうかを判別しているのです。
8
+ strpos関数が抜けているということはないですよね?これが抜けると、長ったらしいエージェント情報を拾ってきてしまいます。strpos関数はその中で、必要なデバイスの名前があるかどうかを判別しているのです。そして$flgに入る値はTRUE OR FALSEといった判定結果となります。

1

説明の補助

2016/08/24 06:11

投稿

FKM
FKM

スコア3662

answer CHANGED
@@ -5,4 +5,4 @@
5
5
  $phone = $_SERVER['HTTP_USER_AGENT'];
6
6
  $flg = strpos('iPhone',$phone);
7
7
  ```
8
- strpos関数が抜けているということはないですよね?これが抜けると、長ったらしいエージェント情報を拾ってきてしまいます
8
+ strpos関数が抜けているということはないですよね?これが抜けると、長ったらしいエージェント情報を拾ってきてしまいます。strpos関数はその中で、必要なデバイスの名前があるかどうかを判別しているのです。