Как создать и настроить свой веб-сервер на VDS (05 сен 2024)

Осенью самое время заняться установкой и тюнингом своего веб-сервера. Не правда ли?

Геолокация по ip на вашем web-сайте. Sypex Geo

Больше
10 года 9 мес. назад - 10 года 9 мес. назад #1 от Aleksej
На страницах блога уже рассматривались различные варианты определения геолокации посетителя сайта; и сегодня, в этом топике - еще один способ определить месторасположение вашего визитера и поприветствовать его соответствующим образом... Maxmind и HTML5 GeoLocation API мы c вами уже использовали, настал черед Sypex Geo.

Sypex Geo – продукт для определение местоположения по IP-адресу, от создателей Sypex Dumper. Получив IP-адрес, Sypex Geo выдает информацию о местоположении посетителя – страну, регион, город, географические координаты.
Sypex Geo - распространяется по лицензии BSD, т. е. является абсолютно бесплатным.


Все на редкость несложно.
Качаем Sypex Geo API и Sypex Geo City (после распаковки получаем файлы SxGeo.php и SxGeoCity.dat соответственно), далее создаем третий файл index.php, содержащий следующие строчки кода:

Code:
<?php $ip = $_SERVER['REMOTE_ADDR']; include("SxGeo.php"); $SxGeo = new SxGeo('SxGeoCity.dat'); $city = $SxGeo->get($ip); echo "Привет, {$city['city']}!<br/>";

Все три файла сохраняем в одной и той же директории на сервере; теперь, открыв в браузере index.php - вы получите приветствие для своего города... можно еще для пущей важности дописать простенькую конструкцию if/else, призванную известить посетителя, по прямой ли ссылке он к вам пришел, или откуда-то еще (с указанием странички-реферрала):

Code:
$a = $_SERVER['HTTP_REFERER']; if (isset ($a)) { echo "Вы пришли со страницы:" .$a; } else { echo "Вы попали на сайт напрямую."; }

Вот, в принципе, и все. Файл index.php вы можете вызвать на любой страничке сайта (либо в HTML-модуле) следующим образом, указав путь к нему:

Code:
<?php include('index.php'); ?>

Продолжение темы в блоге
Последнее редактирование: 10 года 9 мес. назад пользователем p.rishard.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Dev banner 2
Больше
10 года 6 мес. назад - 10 года 6 мес. назад #2 от Aleksej
Sypex Geo 2.2 (от 16.05.2014) требует внести некоторые (очень небольшие) корректировки в наш c вами код. Изменена структура массива, поэтому полная версия кода, о которой рассказывалось в статье Погода по ip. Умный информер выглядит теперь следующим образом:


Code:
<?php $ip = $_SERVER['REMOTE_ADDR']; include("SxGeo.php"); $SxGeo = new SxGeo('SxGeoCity.dat'); $city = $SxGeo->get($ip); echo ($city['city']['name_en']); echo "<br>"; echo ($city['country']['iso']); echo "<br>"; echo "<br>"; $loc_array = array($city['city']['lat'],$city['city']['lon']); $api_key="VASH_API_KEY"; $num_of_days=1; $loc_safe = array(); foreach($loc_array as $loc){ $loc_safe[] = urlencode($loc); } $loc_string=implode(',', $loc_safe); //To add more conditions to the query, just lengthen the url string $basicurl = sprintf('http://api.worldweatheronline.com/free/v1/weather.ashx?key=%s&q=%s&num_of_days=%s', $api_key, $loc_string, intval($num_of_days)); $xml_response = file_get_contents($basicurl); $xml = simplexml_load_string($xml_response); $ss = array(); foreach ($xml[0] as $name => $val) { foreach ($val as $name1 => $val1) { $ss[$name1] = $val1; } } echo '<img src="' . $xml->weather->weatherIconUrl . '"/>'; echo "<br>"; echo "<br>"; echo $ss["date"]; echo "<br>"; echo "Координаты {$ss["query"]}"; echo "<br>"; echo "Температура {$ss["temp_C"]} С"; echo "<br>"; echo "Мин. температура сегодня {$ss["tempMinC"]} С*"; echo "<br>"; echo "Макс. температура сегодня {$ss["tempMaxC"]} С*"; echo "<br>"; echo "Скорость ветра {$ss["windspeedKmph"]} м/сек"; echo "<br>"; echo "Направление ветра {$ss["winddirection"]}"; echo "<br>"; echo "Пасмурно {$ss["cloudcover"]}%"; echo "<br>"; echo "Давление {$ss["pressure"]} mb"; echo "<br>"; echo "Влажность {$ss["humidity"]}%"; echo "<br>"; echo "Видимость {$ss["visibility"]} км"; echo "<br>"; echo $ss["weatherDesc"]; echo "<br>";


Соответственно, код, подробно прокомментированный в статье Геолокация по ip. Sypex Geo - в актуальной ревизии принимает следующий, вполне рабочий, вид:


Code:
<!DOCTYPE html> <html> <head> <meta name="viewport" content="initial-scale=1.0, user-scalable=no" /> <?php $ip = $_SERVER['REMOTE_ADDR']; include("SxGeo.php"); $SxGeo = new SxGeo('SxGeoCity.dat'); $city = $SxGeo->get($ip); ?> <style type="text/css"> html { height: 100% } body { height: 100%; margin: 0; padding: 0 } #map_canvas { height: 100% } </style> <script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?key=VASH_API_KEY&sensor=false"> </script> <script type="text/javascript"> function initialize() { var mapOptions = { center: new google.maps.LatLng("<?= $city['city']['lat']?>", "<?= $city['city']['lon'] ?>"), zoom: 8, mapTypeId: google.maps.MapTypeId.ROADMAP }; var map = new google.maps.Map(document.getElementById("map_canvas"), mapOptions); } </script> </head> <body onload="initialize()"> <div id="map_canvas" style="width:640px; height:480px"></div> </body> </html>
Последнее редактирование: 10 года 6 мес. назад пользователем Aleksej.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
9 года 10 мес. назад #3 от Прохожий
Простите, но оно при ближнем рассмотрении не выглядит так, как в статье про умный погодный информер ! :unsure:

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
9 года 10 мес. назад #4 от Aleksej
Прохожий, последняя версия погодного информера (с приветствием в зависимости от времени суток) может выглядеть примерно так:

Code:
<?php $ip = $_SERVER['REMOTE_ADDR']; include("SxGeo.php"); $SxGeo = new SxGeo('SxGeoCity.dat'); $city = $SxGeo->get($ip); $loc_array = array($city['city']['lat'],$city['city']['lon']); $api_key="VASH_API_KEY"; $num_of_days=1; $loc_safe = array(); foreach($loc_array as $loc){ $loc_safe[] = urlencode($loc); } $loc_string=implode(',', $loc_safe); //To add more conditions to the query, just lengthen the url string $basicurl = sprintf('http://api.worldweatheronline.com/free/v1/weather.ashx?key=%s&q=%s&num_of_days=%s', $api_key, $loc_string, intval($num_of_days)); $xml_response = file_get_contents($basicurl); $xml = simplexml_load_string($xml_response); $ss = array(); foreach ($xml[0] as $name => $val) { foreach ($val as $name1 => $val1) { $ss[$name1] = $val1; } } ?> <style type="text/css"> .title_weather { color: #006699; } </style> <div class="title_weather"> <script language="JavaScript"> var h=(new Date()).getHours(); if (h > 23 || h <7) document.write("<? echo 'Доброй ночи, ' . $city['city']['name_ru']; ?>"); if (h > 6 && h < 12) document.write("<? echo 'Доброе утро, ' . $city['city']['name_ru']; ?>"); if (h > 11 && h < 19) document.write("<? echo 'Добрый день, ' . $city['city']['name_ru']; ?>"); if (h > 18 && h < 24) document. write("<? echo 'Добрый вечер, ' . $city['city']['name_ru']; ?>"); </script> </div> <? echo "<br>"; echo '<img src="' . $xml->weather->weatherIconUrl . '"/>'; echo "<br>"; echo "<br>"; echo $ss["date"]; echo "<br>"; echo "Координаты {$ss["query"]}"; echo "<br>"; echo ($city['city']['name_en']); echo "<br>"; echo ($city['country']['iso']); echo "<br>"; echo "<br>"; echo "<div style='color:#006699;'> У вас сегодня:</div>"; echo "Температура {$ss["temp_C"]} С"; echo "<br>"; echo "Мин. температура сегодня {$ss["tempMinC"]} С*"; echo "<br>"; echo "Макс. температура сегодня {$ss["tempMaxC"]} С*"; echo "<br>"; echo "Скорость ветра {$ss["windspeedKmph"]} м/сек"; echo "<br>"; echo "Направление ветра {$ss["winddirection"]}"; echo "<br>"; echo "Пасмурно {$ss["cloudcover"]}%"; echo "<br>"; echo "Давление {$ss["pressure"]} mb"; echo "<br>"; echo "Влажность {$ss["humidity"]}%"; echo "<br>"; echo "Видимость {$ss["visibility"]} км"; echo "<br>"; echo $ss["weatherDesc"]; echo "<br>"; ?>
Спасибо сказали: Прохожий

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
9 года 10 мес. назад #5 от Прохожий
Я попробовал внести некоторые изменения в ваш код . Если сделать так (как показано ниже) - отображатеся не только карта Google для вашего ip-адреса, но и погода, состояние облачности и температура. ;)

Code:
<!doctype html> <html> <head> <title>Weather Layer Google Maps JavaScript API v3</title> <?php $ip = $_SERVER['REMOTE_ADDR']; include("SxGeo.php"); $SxGeo = new SxGeo('SxGeoCity.dat'); $city = $SxGeo->get($ip); ?> <script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?sensor=false&amp;libraries=weather"></script> <style type="text/css"> body { font-family: Arial, sans-serif; font-size: 13px; } #map { width: 700px; height: 400px; } .options { overflow: hidden; margin: 10px 0 10px 0; } .option { float: left; width: 250px; } .heading { font-weight: bold; } </style> <script> var map, weatherLayer, cloudLayer; function initialize() { map = new google.maps.Map(document.getElementById('map'), { center: new google.maps.LatLng("<?= $city['city']['lat']?>", "<?= $city['city']['lon'] ?>"), zoom: 5, mapTypeId: google.maps.MapTypeId.SATELLITE }); weatherLayer = new google.maps.weather.WeatherLayer(); weatherLayer.setMap(map); cloudLayer = new google.maps.weather.CloudLayer(); cloudLayer.setMap(map); } google.maps.event.addDomListener(window, 'load', initialize); function toggleClouds() { cloudLayer.setMap(cloudLayer.getMap() ? null : map); } function toggleIcons() { weatherLayer.setMap(weatherLayer.getMap() ? null : map); } function setLabelColor(color) { weatherLayer.setOptions({'labelColor': color}); } function setTemperature(units) { weatherLayer.setOptions({'temperatureUnits': units}); } function setWindSpeed(units) { weatherLayer.setOptions({'windSpeedUnits': units}); } </script> </head> <body> <div id="map"></div> <div class="options"> <div class="option"> <div class="heading">Единицы температуры:</div> <input type="radio" name="temp" checked onclick="setTemperature(google.maps.weather.TemperatureUnit.CELSIUS)"></input>Цельсия <input type="radio" name="temp" onclick="setTemperature(google.maps.weather.TemperatureUnit.FAHRENHEIT)"></input>Фарингейта </div> <div class="option"> <div class="heading">Единицы скорости ветра:</div> <input type="radio" name="wind" onclick="setWindSpeed(google.maps.weather.WindSpeedUnit.MILES_PER_HOUR)"></input>mph <input type="radio" name="wind" onclick="setWindSpeed(google.maps.weather.WindSpeedUnit.KILOMETERS_PER_HOUR)"></input>km/h <input type="radio" name="wind" checked onclick="setWindSpeed(google.maps.weather.WindSpeedUnit.METERS_PER_SECOND)"></input>m/s </div> <div class="option"> <div class="heading">Цвет обозначений:</div> <input type="radio" name="color" onclick="setLabelColor(null)" checked></input>автоматически <input type="radio" name="color" onclick="setLabelColor(google.maps.weather.LabelColor.BLACK)"></input>черный <input type="radio" name="color" onclick="setLabelColor(google.maps.weather.LabelColor.WHITE)"></input>белый </div> </div> <div> <button onclick="toggleClouds()">Видимость слоя с облачностью</button> <button onclick="toggleIcons()">Видимость слоя с прогнозом погоды</button> </div> </body> </html>

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
9 года 10 мес. назад #6 от serge

Прохожий пишет: Если сделать так (как показано ниже)...



Если сделать так, то по всей видимости, какое-то время оно у вас проработает. Но недолго, взгляните документацию для разработчиков Google:

Weather layer
Note: The Weather library - which includes the Weather and Cloud layers - has been deprecated as of June 4, 2014. This library will continue to work until June 4, 2015. After that date, the library will no longer be available.


А я смогу! - А поглядим! - А я упрямый!

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
9 года 10 мес. назад #7 от Aleksej

serge пишет:

Прохожий пишет: Если сделать так (как показано ниже)...


Если сделать так, то по всей видимости, какое-то время оно у вас проработает.


Прохожий, вы можете потестить вот этот скрипт , описанный в статье Погода по ip на Яндекс-картах . То же самое, в принципе, вид сбоку. Но есть надежда, что проработает чуть дольше, нежели погодные слои Google Map.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
9 года 10 мес. назад - 9 года 10 мес. назад #8 от Aleksej
Вернемся к погодному информеру. Модуль Joomla jWeather_by_ip продолжает работать через старый API, но информер на сайте уже перешел на использование Free-Weather-API-V2. Изменена структура массива, добавлены кое-какие новые фичи. Судя по описанию, урезано количество "queries per day", во второй версии некоммерческого API это всего лишь 4,000 вместо 13,200 API первой версии. Но нам с вами, возможно, и хватит? - в самое ближайшее время постараюсь подчистить и подправить код информера, а пока что рабочий вариант примерно вот такой... подчеркиваю, на сегодняшний день работают обе версии API, вы свободны в выборе. Ничто не мешает вам использовать даже оба API.


Code:
<?php $ip = $_SERVER['REMOTE_ADDR']; include("SxGeo.php"); $SxGeo = new SxGeo('SxGeoCity.dat'); $city = $SxGeo->get($ip); $loc_array = array($city['city']['lat'],$city['city']['lon']); $api_key="VASH_API_KEY"; $num_of_days=1; $loc_safe = array(); foreach($loc_array as $loc){ $loc_safe[] = urlencode($loc); } $loc_string=implode(',', $loc_safe); //To add more conditions to the query, just lengthen the url string $basicurl = sprintf('http://api.worldweatheronline.com/free/v2/weather.ashx?key=%s&q=%s&num_of_days=%s', $api_key, $loc_string, intval($num_of_days)); $xml_response = file_get_contents($basicurl); $xml = simplexml_load_string($xml_response); $ss = array(); foreach ($xml[0] as $name => $val) { foreach ($val as $name1 => $val1) { $ss[$name1] = $val1; } } ?> <style type="text/css"> .title_weather { color: #006699; } </style> <div class="title_weather"> <script language="JavaScript"> var h=(new Date()).getHours(); if (h > 23 || h <7) document.write("<? echo 'Доброй ночи, ' . $city['city']['name_ru']; ?>"); if (h > 6 && h < 12) document.write("<? echo 'Доброе утро, ' . $city['city']['name_ru']; ?>"); if (h > 11 && h < 19) document.write("<? echo 'Добрый день, ' . $city['city']['name_ru']; ?>"); if (h > 18 && h < 24) document. write("<? echo 'Добрый вечер, ' . $city['city']['name_ru']; ?>"); </script> </div> <? echo "<br>"; echo '<img src="' . $xml->current_condition->weatherIconUrl . '"/>'; echo "<br>"; echo "<br>"; echo $ss["date"]; echo "<br>"; echo "Координаты {$ss["query"]}"; echo "<br>"; echo ($city['city']['name_en']); echo "<br>"; echo ($city['country']['iso']); echo "<br>"; echo "<br>"; echo "<div style='color:#006699;'> У вас сегодня:</div>"; echo "Температура {$ss["temp_C"]} С"; echo "<br>"; echo "Мин. температура сегодня {$ss["mintempC"]} С*"; echo "<br>"; echo "Макс. температура сегодня {$ss["maxtempC"]} С*"; echo "<br>"; echo "Скорость ветра {$ss["windspeedKmph"]} км/час"; echo "<br>"; echo "Направление ветра {$ss["winddir16Point"]}"; echo "<br>"; echo "Пасмурно {$ss["cloudcover"]}%"; echo "<br>"; echo "Давление {$ss["pressure"]} mb"; echo "<br>"; echo "Влажность {$ss["humidity"]}%"; echo "<br>"; echo "Видимость {$ss["visibility"]} км"; echo "<br>"; echo $ss["weatherDesc"]; echo "<br>"; echo "<br>"; echo "Восход солнца {$ss['astronomy']->sunrise}"; echo "<br>"; echo "Закат солнца {$ss['astronomy']->sunset}"; echo "<br>"; echo "Восход луны {$ss['astronomy']->moonrise}"; echo "<br>"; echo "Закат луны {$ss['astronomy']->moonset}"; ?>
Последнее редактирование: 9 года 10 мес. назад пользователем p.rishard.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
9 года 9 мес. назад - 9 года 9 мес. назад #9 от Aleksej

Aleksej пишет: в самое ближайшее время постараюсь подчистить и подправить код информера...


Убрал ненужный foreach и всякие-разные "<br>": Эта версия информера работает уже с Free-Weather-API-V2:


Code:
<?php $ip = $_SERVER['REMOTE_ADDR']; include("SxGeo.php"); $SxGeo = new SxGeo('SxGeoCity.dat'); $city = $SxGeo->get($ip); $loc_array = array($city['city']['lat'],$city['city']['lon']); $api_key="VASH_API_KEY"; $num_of_days=1; $loc_safe = array(); foreach($loc_array as $loc){ $loc_safe[] = urlencode($loc); } $loc_string=implode(',', $loc_safe); $basicurl = sprintf('http://api.worldweatheronline.com/free/v2/weather.ashx?key=%s&q=%s&num_of_days=%s', $api_key, $loc_string, intval($num_of_days)); $xml_response = file_get_contents($basicurl); $xml = simplexml_load_string($xml_response); ?> <style type="text/css"> .title_weather { color: #006699; } </style> <div class="title_weather"> <script language="JavaScript"> var h=(new Date()).getHours(); if (h > 23 || h <7) document.write("<? echo 'Доброй ночи, ' . $city['city']['name_ru']; ?>"); if (h > 6 && h < 12) document.write("<? echo 'Доброе утро, ' . $city['city']['name_ru']; ?>"); if (h > 11 && h < 19) document.write("<? echo 'Добрый день, ' . $city['city']['name_ru']; ?>"); if (h > 18 && h < 24) document. write("<? echo 'Добрый вечер, ' . $city['city']['name_ru']; ?>"); </script> </div> <p> </p> <div><?='<img src="' . $xml->current_condition->weatherIconUrl . '"/>';?></div> <p> </p> <div><?=($xml->weather->date);?></div> <div><?='Координаты '. ($xml->request->query);?></div> <div><?=($city['city']['name_en']);?></div> <div><?=($city['country']['iso']);?></div> <p> </p> <?="<div style='color:#006699;'> У вас сегодня:</div>";?> <div><?='Температура '. ($xml->current_condition->temp_C). ' °C';?></div> <div><?='Мин. температура сегодня '. ($xml->weather->mintempC). ' °C';?></div> <div><?='Макс. температура сегодня '. ($xml->weather->maxtempC). ' °C';?></div> <div><?='Скорость ветра '. ($xml->current_condition->windspeedKmph). ' км/час';?></div> <div><?='Направление ветра '. ($xml->current_condition->winddir16Point);?></div> <div><?='Пасмурно '. ($xml->current_condition->cloudcover). ' %';?></div> <div><?='Давление '. ($xml->current_condition->pressure). ' mb';?></div> <div><?='Влажность '. ($xml->current_condition->humidity). ' %';?></div> <div><?='Осадки '. ($xml->current_condition->precipMM). ' мм';?></div> <div><?='Видимость на дорогах '. ($xml->current_condition->visibility). ' км';?></div> <div><?=($xml->current_condition->weatherDesc);?></div> <p> </p> <div><?='Восход солнца '. ($xml->weather->astronomy->sunrise);?></div> <div><?='Закат солнца '. ($xml->weather->astronomy->sunset);?></div> <div><?='Восход луны '. ($xml->weather->astronomy->moonrise);?></div> <div><?='Закат луны '. ($xml->weather->astronomy->moonset);?></div>
Последнее редактирование: 9 года 9 мес. назад пользователем p.rishard.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
8 года 10 мес. назад - 8 года 10 мес. назад #10 от Aleksej
А теперь пробуем REST API Sypex Geo , подробности по ссылке. Здесь же, как обычно, опубликован код, работа которого проиллюстрирована демкой на странице блога:


Code:
<?php $ip = $_SERVER['REMOTE_ADDR']; $url = 'http://api.sypexgeo.net/xml/'. $ip .''; $xml1 = simplexml_load_string(file_get_contents($url)); $loc_array = array($xml1->ip->city->lat,$xml1->ip->city->lon); $api_key="*************************************"; $num_of_days=1; $loc_safe = array(); foreach($loc_array as $loc){ $loc_safe[] = urlencode($loc); } $loc_string=implode(',', $loc_safe); $basicurl = sprintf('http://api2.worldweatheronline.com/free/v2/weather.ashx?key=%s&q=%s&num_of_days=%s', $api_key, $loc_string, intval($num_of_days)); $xml = simplexml_load_file($basicurl); ?> <s-tyle type="text/css"> .informer { font-size: 13px; color: #000; } </style> <div class="informer"> <div><?='<img src="' . $xml->current_condition->weatherIconUrl . '"/>';?></div> <p> </p> <div><?=($xml->weather->date);?></div> <div><?='Координаты '. ($xml->request->query);?></div> <div><?=($xml1->ip->city->name_ru);?></div> <div><?=($xml1->ip->country->name_ru);?></div> <p> </p> <?="<div style='color:#006699;'> У вас сегодня:</div>";?> <div><?='Температура '. ($xml->current_condition->temp_C). ' °C';?></div> <div><?='Мин. температура сегодня '. ($xml->weather->mintempC). ' °C';?></div> <div><?='Макс. температура сегодня '. ($xml->weather->maxtempC). ' °C';?></div> <div><?='Скорость ветра '. ($xml->current_condition->windspeedKmph). ' км/час';?></div> <div><?='Направление ветра '. ($xml->current_condition->winddir16Point);?></div> <div><?='Пасмурно '. ($xml->current_condition->cloudcover). ' %';?></div> <div><?='Давление '. ($xml->current_condition->pressure). ' mb';?></div> <div><?='Влажность '. ($xml->current_condition->humidity). ' %';?></div> <div><?='Осадки '. ($xml->current_condition->precipMM). ' мм';?></div> <div><?='Видимость на дорогах '. ($xml->current_condition->visibility). ' км';?></div> <div><?=($xml->current_condition->weatherDesc);?></div> <p> </p> <div><?='Восход солнца '. ($xml->weather->astronomy->sunrise);?></div> <div><?='Закат солнца '. ($xml->weather->astronomy->sunset);?></div> <div><?='Восход луны '. ($xml->weather->astronomy->moonrise);?></div> <div><?='Закат луны '. ($xml->weather->astronomy->moonset);?></div> <p> </p> <?="<div style='color:#006699;'> В ближайший час:</div>";?> <div><?='Вероятность дождя '. ($xml->weather->hourly->chanceofrain). ' %';?></div> <div><?='Вероятность снега '. ($xml->weather->hourly->chanceofsnow). ' %';?></div> <div><?='Вероятность грозы '. ($xml->weather->hourly->chanceofthunder). ' %';?></div> </div>


P.S. Вполне вероятно, что цикл там совершенно и не нужен; попробуйте как-то так:

Code:
$basicurl = sprintf('http://api2.worldweatheronline.com/free/v2/weather.ashx?key=%s&q=%s&num_of_days=%s', $api_key, $xml->ip->city->lat . ',' + $xml->ip->city->lon, intval($num_of_days));

или вот так:

Code:
$basicurl = sprintf('http://api2.worldweatheronline.com/free/v2/weather.ashx?key=%s&q=%s&num_of_days=%s', $api_key, urlencode($xml->ip->city->lat . ',' + $xml->ip->city->lon), intval($num_of_days));
Последнее редактирование: 8 года 10 мес. назад пользователем Aleksej.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Работает на Kunena форум