ホームページ php教程 php手册 thinkphp に基づいて、ユーザーの IP に基づいて地理的位置を特定し、対応する気象情報を提供するアプリケーションが実装されています。

thinkphp に基づいて、ユーザーの IP に基づいて地理的位置を特定し、対応する気象情報を提供するアプリケーションが実装されています。

Jun 21, 2016 am 08:46 AM
gt info

多くの Web サイトがユーザーに天気予報を提供する機能を提供していることは誰もが知っていますが、ユーザーが自分に関連する地理的位置情報を入力しなくても、同じ Web サイトが地理的位置を決定して表示できることがあります。気象情報については、地理的な位置を特定するために IP を使用することが考えられます。ただし、これを自分で開発する場合は確かに少し面倒なので、ここでそのビジネス ロジックについて簡単に説明します。このアプリケーション (ユーザーが最初にページを開いたときに開始点として基づく):

1: IP の取得: 私の意見によれば、IP には 2 つのタイプがあり、1 つは実際に存在する独立した IP、もう 1 つはルーターによって割り当てられる IP です。もちろん、これら 2 つはすべての種類の IP を考慮する必要があります。1 つ目は $_SERVER の要素値を取得するだけで簡単です。しかし、問題は 192.168.1.1 のように判断することはできません。 , そのため、ユーザーの位置情報は元々カール拡張機能を使用して取得されていましたが、この拡張機能は使用できないため、この状況はいったん脇に置かれ、ユーザーが独自の IP を使用してアクセスする状況のみが発生します。考慮された。

ここで、サーバーのパラメータは、server_addr ではなく、REMOTE_ADDR であることを付け加えておきます。この方法でのみ、ユーザーの実際のアドレスを取得する必要はありません。別途

2: IP を取得したら、IP アドレス データベースに基づいてユーザーの IP の場所を見つける必要があります。1: IP アドレス データベースは utf-8 でエンコードされている必要があります。情報は完全な住所情報ですが、都市名局は後で必要になるため、文字列をインターセプトするか、都市の住所を簡略化する必要があります。

3: ユーザーの住所を取得することは明らかに不可能です。考えてみてください。データを取得するために最終的に天気インターフェースに接続されるのは都市コードです。ここでは、まだ変換する必要があります。市外局番ライブラリを横断したり、市外局番を取得したりする暴力的な方法です。

4: 都市コードを取得した後、データ インターフェイスに接続してデータを取得する必要があります。このデータは json データであり、ここで取得するものはオブジェクトである可能性があります。具体的には、状況を詳細に分析した結果、これらのデータを実際に割り当てることが重要であることが判明しました。コードの移植に役立ちます。

5: ビュー内でテンプレートで割り当てたデータを呼び出す、これで済むと思います。

6: 実際、上記の手順で、初めてページを開くビジネス ロジック全体がすでに処理されています。もう 1 つは、都市の天気をクエリするための都市名を入力する機能をユーザーに提供していることです。ユーザーが取得する通常の入力情報は都市名

です。

7: 都市名はすでに取得されているか、都市コードを取得するためのトラバースに直接参加できます。ここには、これら 2 つの関数を適切に組み合わせる順序と判断方法という非常に重要な論理的問題があります。一つ、それは次のとおりです:

まず、システムが都市名を自動的に取得するかどうかを判断し、それが空でない場合は、都市名のみが取得されます。そうでない場合は、IP アドレスが対応するアドレス情報を見つけられなかったことを示すメッセージが表示されます。次に、ユーザーの入力が空であるかどうかを決定する連続した構造であることに注意してください。つまり、ユーザーの入力権限は次のとおりです。システムによって自動的に取得される権限よりも大きいため、2 つのコードを完全に組み合わせることができます。さらに、IP を取得して都市名を抽出する 2 つの方法を作成しました。

上記の記述は少し面倒です。ここでは、セキュリティと著作権上の理由により、データ インターフェイスを処理したため、メソッドの参照のみを提供します。貼り付けても無駄ですので、独自に調べてみます。

weather_test.html を表示:

ログイン後にコピー

即时天气信息
城市 {$all_info->forecast->city}
基本天气 {$all_info->realtime->weather}
温度 {$all_info->realtime->temp}
风向 {$all_info->realtime->WD}
更新时间 {$all_info->realtime->time}
生活建议
城市 {$all_info->forecast->city}
防嗮建议 {$all_info->index[0]->details}
穿衣建议 {$all_info->index[1]->details}
运动建议 {$all_info->index[2]->details}
洗车建议 {$all_info->index[3]->details}
晾晒建议 {$all_info->index[4]->details}
更新时间 {$all_info->realtime->time}
未来四天天气信息  城市: {$all_info->forecast->city}
项目/日期 今天 明天 后天 大后天
概况 {$all_info->forecast->weather1} {$all_info->forecast->weather2} {$all_info->forecast->weather3} {$all_info->forecast->weather4}
温度 {$all_info->forecast->temp1} {$all_info->forecast->temp2} {$all_info->forecast->temp3} {$all_info->forecast->temp4}
风向 {$all_info->forecast->wind1} {$all_info->forecast->wind2} {$all_info->forecast->wind3} {$all_info->forecast->wind4}
风力 {$all_info->forecast->fl1} {$all_info->forecast->fl2} {$all_info->forecast->fl3} {$all_info->forecast->fl4}
今日空气质量状况
城市 {$all_info->forecast->city}
PM2.5 {$all_info->aqi->pm25}
PM10 {$all_info->aqi->pm10}
SO2 {$all_info->aqi->so2}
NO2 {$all_info->aqi->no2}
更新时间 {$all_info->aqi->pub_time}
类方法:
public function weather_test(){
		require_once './Component/Citycode.php';
		//////这里是根据客户端的ip判断地理位置
		//定义两个标志变量
		$count=0;
		$city_id='101120301';//默认大淄博
		$city_name_cin=$_POST['cityname'];
		$city_sim_name=R('Test/get_user_cityname');
		//这是系统根据ip自动判断的位置
		echo $city_sim_name;
		if($city_sim_name!=null){
			$city_name_cin=$city_sim_name;
		}
		//这是用户输入的位置
		if(!empty($_POST['cityname'])){
			//放置信息覆盖
			$city_name_cin=$_POST['cityname'];
		}
		////////不管是ip定位还是用户输入最终需要遍历获取城市代码的变量只要$city_name_cin
		foreach ($citycode as $key => $value){
			if($key==$city_name_cin){
				$city_id=$citycode[$city_name_cin];
				$count++;
			}
		}
		if($count==0){
			echo 对不起,您输入的地址没有找到!默认淄博哦;
		}else{
			echo $city_name_cin.的天气信息如下;
		}
		//接口已经处理,请勿使用,仅供学习
		$weather_interface_url=http://weatherai.markt.xiaomi.com/wtr-v2/weather?cityId=.$city_id.&mei=e32c88633283737f5d9f381d47&device=HM2013023&miuiVersion=JHBCNBD16.0&modDevice=ce=miuiWeatherAp;
		$all_weather_info = json_decode(file_get_contents($weather_interface_url));
		//分配数据
		$this->assign(all_info,$all_weather_info);
		$this->display();
	}
	///////////////////////////////////////////////////
	/*
	 * 下面两个分别是获取主机ip和ip所在地的两个
	 * 方法,最后的结果数值通过R方法,返回获取
	 */
	//方法1:获取用户ip
	public function get_user_ip(){
		//先通过这种简单的方法获取主机的ip,通过R方法获取
		$host_ip=$_SERVER['SERVER_ADDR'];
ログイン後にコピー
 		return $host_ip;
	}
	//方法2:获取地名
	public function get_user_cityname(){
		//得到用户的ip
		$host_ip=R('Test/get_user_ip');
		//这里ip地址库必须这样实例化
		$Ip = new OrgNetIpLocation('UTFWry.dat'); // 实例化类 参数表示IP地址库文件
		//可以同时放ip和域名
		$area = $Ip->getlocation($host_ip); // 获取域名服务器所在的位置
		$city_allname=$area['country'];
		$sim_cityname=explode(市,explode(省, $city_allname)[1])[0];
		return $sim_cityname;
	}
ログイン後にコピー


 



このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Huawei GT3 ProとGT4の違いは何ですか? Huawei GT3 ProとGT4の違いは何ですか? Dec 29, 2023 pm 02:27 PM

多くのユーザーはスマートウォッチを選ぶときにファーウェイブランドを選択しますが、その中でもファーウェイ GT3pro と GT4 は非常に人気のある選択肢であり、多くのユーザーはファーウェイ GT3pro と GT4 の違いに興味を持っています。 Huawei GT3pro と GT4 の違いは何ですか? 1. 外観 GT4: 46mm と 41mm、材質はガラスミラー + ステンレススチールボディ + 高解像度ファイバーバックシェルです。 GT3pro: 46.6mm および 42.9mm、材質はサファイアガラス + チタンボディ/セラミックボディ + セラミックバックシェルです。 2. 健全な GT4: 最新の Huawei Truseen5.5+ アルゴリズムを使用すると、結果はより正確になります。 GT3pro: ECG 心電図と血管と安全性を追加

修正: Windows 11 で Snipping ツールが機能しない 修正: Windows 11 で Snipping ツールが機能しない Aug 24, 2023 am 09:48 AM

Windows 11 で Snipping Tool が機能しない理由 問題の根本原因を理解すると、適切な解決策を見つけるのに役立ちます。 Snipping Tool が正しく動作しない主な理由は次のとおりです。 フォーカス アシスタントがオンになっている: これにより、Snipping Tool が開かなくなります。破損したアプリケーション: 起動時にスニッピング ツールがクラッシュする場合は、破損している可能性があります。古いグラフィック ドライバー: 互換性のないドライバーは、スニッピング ツールに干渉する可能性があります。他のアプリケーションからの干渉: 実行中の他のアプリケーションが Snipping Tool と競合する可能性があります。証明書の有効期限が切れています: アップグレード プロセス中のエラーにより、この問題が発生する可能性があります。これらの簡単な解決策は、ほとんどのユーザーに適しており、特別な技術知識は必要ありません。 1. Windows および Microsoft Store アプリを更新する

iPhoneでApp Storeに接続できないエラーを修正する方法 iPhoneでApp Storeに接続できないエラーを修正する方法 Jul 29, 2023 am 08:22 AM

パート 1: 最初のトラブルシューティング手順 Apple のシステムステータスを確認する: 複雑な解決策を掘り下げる前に、基本から始めましょう。問題はデバイスにあるのではなく、Apple のサーバーがダウンしている可能性があります。 Apple のシステム ステータス ページにアクセスして、AppStore が適切に動作しているかどうかを確認してください。問題があれば、Apple が修正してくれるのを待つしかありません。インターネット接続を確認します。「AppStore に接続できません」問題は接続不良が原因である場合があるため、安定したインターネット接続があることを確認してください。 Wi-Fi とモバイル データを切り替えるか、ネットワーク設定をリセットしてみてください ([一般] > [リセット] > [ネットワーク設定のリセット] > [設定])。 iOS バージョンを更新します。

php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决 php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决 Jun 13, 2016 am 10:23 AM

php提交表单通过后,弹出的对话框怎样在当前页弹出php提交表单通过后,弹出的对话框怎样在当前页弹出而不是在空白页弹出?想实现这样的效果:而不是空白页弹出:------解决方案--------------------如果你的验证用PHP在后端,那么就用Ajax;仅供参考:HTML code

watch4proとGTのどちらが優れていますか? watch4proとGTのどちらが優れていますか? Sep 26, 2023 pm 02:45 PM

Watch4proとgtはそれぞれ特徴や適用シーンが異なりますが、総合的な機能、高性能、スタイリッシュな外観を重視し、価格は高くてもいいという方にはWatch 4 Proの方が適しているかもしれません。高度な機能要件はなく、バッテリー寿命と手頃な価格を重視する場合は、GT シリーズの方が適しているかもしれません。最終的な選択は、個人のニーズ、予算、好みに基づいて決定する必要がありますが、購入する前に自分のニーズを慎重に検討し、さまざまな製品のレビューや比較を参照して、より情報に基づいた選択を行うことをお勧めします。

iPadOS 17.4 で iPad のバッテリー寿命を最適化する方法 iPadOS 17.4 で iPad のバッテリー寿命を最適化する方法 Mar 21, 2024 pm 10:31 PM

iPadOS 17.4 で iPad のバッテリー寿命を最適化する方法 バッテリー寿命の延長はモバイル デバイス エクスペリエンスの鍵であり、iPad がその良い例です。 iPad のバッテリーの消耗が早すぎると感じても、心配しないでください。iPadOS 17.4 には、デバイスの実行時間を大幅に延長できるトリックや微調整が多数あります。この詳細なガイドの目的は、情報を提供するだけではなく、iPad の使用方法を変え、全体的なバッテリー管理を強化し、充電せずにデバイスをより長く使用できるようにすることです。ここで概説したプラクティスを採用することで、個人のニーズや使用パターンに合わせてテクノロジーをより効率的かつ意識的に使用するための一歩を踏み出すことができます。主要なエネルギー消費者を特定する

请教怎么修改url某一参数的参数值呢?是要拆开了再拼回去吗 请教怎么修改url某一参数的参数值呢?是要拆开了再拼回去吗 Jun 13, 2016 am 10:24 AM

请问如何修改url某一参数的参数值呢?是要拆开了再拼回去吗?那么请问如何修改url某一参数的参数值呢?是要拆开了再拼回去吗?http://127.0.0.1/myo/newuser.php?mod=search&type=fastone比如现在我要修改mod=new要怎么做呢?------解决方案--------------------发送了请求

Guan Zeyuanjiang Shuying が Huawei MateBook GT 14 を体験: テクノロジーとアートの完璧な組み合わせ Guan Zeyuanjiang Shuying が Huawei MateBook GT 14 を体験: テクノロジーとアートの完璧な組み合わせ Aug 10, 2024 pm 09:51 PM

8月8日、Huawei端末はHuawei MateBook GT14「Super Starlight Show」を正式に発売しました。有名な俳優の江淑英とリーグ・オブ・レジェンドプロフェッショナルリーグの公式解説者グアン・ゼユアンがライブブロードキャストルームのゲストとして登場し、ファーウェイの最新ノートブックであるHuawei MateBook GT14を個人的に体験しました。生放送中、Jiang ShuyingとGuan ZeyuanはHuawei MateBook GT14を大いに賞賛しました。 CNMOは、生放送中に江秀英氏、関澤源氏、ファーウェイのPC製品ライン社長がファーウェイMateBook GT14の分解を目撃したことに気づいた。 Huawei MateBook GT14の内部設計は非常に整っていて、高密度マザーボード設計を採用していることがわかります。マザーボードもキーボードから遠ざけるために部分的に沈んでいます。これです

See all articles