dポイントプレゼントキャンペーン実施中!

PHPでの、PCアクセス制限です。

僕が運営しているサイトは、
PCでも閲覧が可能ですが、掲示板などの書込・閲覧は禁止しています。
<?php
$ua = $_SERVER["HTTP_USER_AGENT"];
if(ereg("UP\.Browser|KDDI|DoCoMo|J-PHONE|Vodafone|SoftBank|MOT-|L-mode|DDIPOCKET|WILLCOM|PDXGW|ASTEL", $ua)){
print "携帯";
exit;
} elseif(ereg("Opera|ibisBrowser",$ua) && !(ereg("(Win|Mac|Linux|FreeBSD|Solaris)", $ua))){
print "携帯";
exit;
} else{
print "PC";
exit;
}
?>
で、PCと携帯を振り分けて、同じURLで、
別々の画面を表示します。
ですが、「Sleipnir」等の、ソフトウェアを使用すると、
携帯画面が表示できてしまいます。
ソフトウェアを使用しても閲覧が出来ないよう、
PHPで、他にいい方法はありませんか?
「.htaccess」だと、全体を禁止する事になってしまうので…
PHPスクリプトで、お願いします。

A 回答 (4件)

IP アドレスで弾くのがベストではないでしょうか。



IPアドレスで携帯を振り分ける方法
http://d.hatena.ne.jp/toku-hiro/20080913

この回答への補足

DoCoMoに続いて、au、SoftBankのIPを追加しました。
<?php
if (isDoCoMoIP()) {
}
if (isAuIP()) {
}
if (isSoftBankIP()) {
}


function isDoCoMoIP()
{
require_once 'Net/IPv4.php';// PEAR Net_IPv4
//DoCoMo のIP帯域をセット
$ip_list = array(
'210.153.84.0/24',
'210.136.161.0/24',
'210.153.86.0/24',
'124.146.174.0/24',
'124.146.175.0/24'
);
foreach ($ip_list as $ip) {
if (Net_IPv4::ipInNetwork($_SERVER['REMOTE_ADDR'], $ip)) {
print "DoCoMo";
return true;
}
}
function iAuIP()
{
require_once 'Net/IPv4.php';// PEAR Net_IPv4
// au のIP帯域をセット
$ip_list = array(
'210.230.128.224/28',
'121.111.227.160/27',
'61.117.1.0/28',
'219.108.158.0/27',
'219.125.146.0/28',
'61.117.2.32/29',
'61.117.2.40/29',
'219.108.158.40/29',
'219.125.148.0/25',
'222.5.63.0/25',
'222.5.63.128/25',
'222.5.62.128/25',
'59.135.38.128/25',
'219.108.157.0/25',
'219.125.145.0/25',
'121.111.231.0/25',
'121.111.227.0/25',
'118.152.214.192/26',
'118.159.131.0/25',
'118.159.133.0/25'
);
foreach ($ip_list as $ip) {
if (Net_IPv4::ipInNetwork($_SERVER['REMOTE_ADDR'], $ip)) {
print "au";
return true;
}
}
function isSoftBankIP()
{
require_once 'Net/IPv4.php';// PEAR Net_IPv4
//SoftBank のIP帯域をセット
$ip_list = array(
'123.108.236.0/24',
'123.108.237.0/27',
'202.179.204.0/24',
'202.253.96.224/27',
'210.146.7.192/26',
'210.146.60.192/26',
'210.151.9.128/26',
'210.169.130.112/28',
'210.175.1.128/25',
'210.228.189.0/24',
'211.8.159.128/25'
);
foreach ($ip_list as $ip) {
if (Net_IPv4::ipInNetwork($_SERVER['REMOTE_ADDR'], $ip)) {
print "SoftBank";
return true;
}
}
return false;
}
print "PC";
?>
これでも、「85番目」が、エラーになってしまいます。

補足日時:2009/04/08 08:45
    • good
    • 0

function なにがし {


 foreach (なにがし) {
  if (なにがし) {
  }
 }
<< ここに functionの閉じる }がない

ということです。
計3箇所。

この回答への補足

ありがとうございます。
以下のような感じでOKなのでしょうか?
今度は、
Parse error: syntax error, unexpected $end in /index.php on line 89
「89」番目がエラーになっているようですが?
<?php
if (isDoCoMoIP()) {
}
if (isAuIP()) {
}
if (isSoftBankIP()) {
}


function isDoCoMoIP(){
{
require_once 'Net/IPv4.php';// PEAR Net_IPv4
//DoCoMo のIP帯域をセット
$ip_list = array(
'210.153.84.0/24',
'210.136.161.0/24',
'210.153.86.0/24',
'124.146.174.0/24',
'124.146.175.0/24'
);
foreach ($ip_list as $ip) {
if (Net_IPv4::ipInNetwork($_SERVER['REMOTE_ADDR'], $ip)) {
print "DoCoMo";
return true;
}
}
}
function isAuIP(){
{
require_once 'Net/IPv4.php';// PEAR Net_IPv4
// au のIP帯域をセット
$ip_list = array(
'210.230.128.224/28',
'121.111.227.160/27',
'61.117.1.0/28',
'219.108.158.0/27',
'219.125.146.0/28',
'61.117.2.32/29',
'61.117.2.40/29',
'219.108.158.40/29',
'219.125.148.0/25',
'222.5.63.0/25',
'222.5.63.128/25',
'222.5.62.128/25',
'59.135.38.128/25',
'219.108.157.0/25',
'219.125.145.0/25',
'121.111.231.0/25',
'121.111.227.0/25',
'118.152.214.192/26',
'118.159.131.0/25',
'118.159.133.0/25'
);
foreach ($ip_list as $ip) {
if (Net_IPv4::ipInNetwork($_SERVER['REMOTE_ADDR'], $ip)) {
print "au";
return true;
}
}
}
function isSoftBankIP(){
{
require_once 'Net/IPv4.php';// PEAR Net_IPv4
//SoftBank のIP帯域をセット
$ip_list = array(
'123.108.236.0/24',
'123.108.237.0/27',
'202.179.204.0/24',
'202.253.96.224/27',
'210.146.7.192/26',
'210.146.60.192/26',
'210.151.9.128/26',
'210.169.130.112/28',
'210.175.1.128/25',
'210.228.189.0/24',
'211.8.159.128/25'
);
foreach ($ip_list as $ip) {
if (Net_IPv4::ipInNetwork($_SERVER['REMOTE_ADDR'], $ip)) {
print "SoftBank";
return true;
}
}
}
return false;
}
print "PC";
?>

補足日時:2009/04/11 13:25
    • good
    • 0

各functionの { に対応する }がないようです。

この回答への補足

ありがとうございます。
「{ に対応する }がない」とは、何ですか?
すみません。PHP初心者(勉強不足)で、よく分かりません。
その為、どう修正していいのか分からず、困っています。

どなたか、お願いします!

補足日時:2009/04/09 20:40
    • good
    • 0

USER_AGENTは偽装できるならIPで確認するのが確実です。



そのスクリプトでエラーになるのは、処理名が間違っているからです。
あと、WILLCOMもチェックしたほうがいいです。

この回答への補足

ありがとうございます。
処理名が「function isAuIP()」のはずが、「function iAuIP()」に間違っていました。
それでも、エラーが出たままです。

Parse error: syntax error, unexpected $end in /index.php on line 85

WILLCOM(ウィルコム?)も後ほど追加します。
上記のエラーコードは、どんな処理の失敗(エラー)何ですか?

補足日時:2009/04/08 15:28
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!