![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
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スクリプトで、お願いします。
No.1ベストアンサー
- 回答日時:
この回答への補足
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番目」が、エラーになってしまいます。
No.4
- 回答日時:
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";
?>
No.2
- 回答日時:
USER_AGENTは偽装できるならIPで確認するのが確実です。
そのスクリプトでエラーになるのは、処理名が間違っているからです。
あと、WILLCOMもチェックしたほうがいいです。
この回答への補足
ありがとうございます。
処理名が「function isAuIP()」のはずが、「function iAuIP()」に間違っていました。
それでも、エラーが出たままです。
Parse error: syntax error, unexpected $end in /index.php on line 85
WILLCOM(ウィルコム?)も後ほど追加します。
上記のエラーコードは、どんな処理の失敗(エラー)何ですか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- PHP PostgreSQLからCSV形式でエクスポートする際にカラム内の改行をとる方法 1 2023/02/22 10:05
- PHP 共通の処理をまとめる方法がわからないのでアドバイスお願いします。 1 2022/12/19 20:20
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- PHP PHP ページング データベース 1 2022/06/16 10:30
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- PHP ランキングを表示する際の画像の大きさを固定することは可能でしょうか? <?php if ( has_ 1 2022/07/21 14:55
- その他(ブラウザ) IE・edgeで日増しに観られるサイトが減ってくる。 1 2022/10/04 22:40
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- 画像編集・動画編集・音楽編集 pixel7proで撮った動画をPCで再生すると色が悪い 2 2023/02/28 18:32
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
3つ以上の論理積は利用可能なの...
-
簡単な心理テストを作りたい
-
phpと<?xml version="1.0" enco...
-
円グラフ描画について
-
PHPの吐くデバッグ行番号の見方...
-
HTMLで入力されたデータをPOST...
-
PHP PCアクセス制限
-
会議室予約のPHPスクリプト
-
MacブラウザのSafariで文字化け...
-
オブジェクト指向の勘違い?
-
画像掲示板用のPHPかCGIスクリ...
-
onedrive にexcelファイルをア...
-
CFileDialogの最初のディレクト...
-
透過PNGが透過されない!!
-
フォームで戻った際に入力済み...
-
別ファイルの変数を呼び出した...
-
PHPのif文でその処理を途中で抜...
-
phpの中でphpを書けないか
-
さくらサーバーにて、phpからメ...
-
リンク先を隠す方法はないでし...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
3つ以上の論理積は利用可能なの...
-
ステップカウンタ(PHP)
-
phpと<?xml version="1.0" enco...
-
HTMLで入力されたデータをPOST...
-
phpにて、ipアドレスによる処理...
-
簡単な心理テストを作りたい
-
FC2ブログへの投稿 カテゴリー...
-
円グラフ描画について
-
スクリプト終了時に呼び出す関...
-
textareaで入力できる文字数を...
-
会議室予約のPHPスクリプト
-
PHPスクリプトにプロキシを弾か...
-
FPDFについて
-
動的にラジオボタンを増やす方法
-
外注PHPソースからWorm.Avron検...
-
フォントの色を変えるには?
-
onedrive にexcelファイルをア...
-
PHPのif文でその処理を途中で抜...
-
こちらはただの直列処理ですか?
-
別ファイルの変数を呼び出した...
おすすめ情報