Обмен информацией между серверами на PHP

Задача: получить данные с сервера, без использования apache

Решение: воспользуемся сокетами на php, а точнее поднимем свой «веб сервер», единственной функцией которго, будет на любой запрос отвечать требуемыми нам данными

Код сервера:

Код клиента:

Запуск единственной копии скрипта на php

Задача: в кроне с некой периодичностью запускается скрипт на php. Однако он не всегда успевает завершится за минуту. Соответственно нужно добиться того, чтобы скрипт не запускался повторно, в том случае если предыдущий скрипт еще не завершился.

Решение: при каждом запуске скрипта будем при помощи fopen пробовать открыть некий файл (и создавать его в случае отсутствия). После чего будем проверять — а не открыт ли он уже еще кем-то. Если открыт — думаем что открыт другой копией скрипта, и благополучно завершаем свою работу.

В принципе можно и считать запущеные копии при помощи ps -ax | grep name_script | wc -l, но почему то у меня сиё работало не надежно..

Свичи Dlink. Получаем список портов на определенном VLAN.

Сделаем это на PHP:

 

Обмен данными между серверами..

Задача: на сервер А, периодически получить некие данные с сервера Б.

Хм. К сожаление не придумал ничего умнее кроме как:

На сервере Б регулярно выполнять скрипт, который собирает данные и при помощи

$handle=fopen("http://сервер/скрипт.php?данные", "r");

выплевывает их на сервер А, в качестве параметра GET. На сервере А, правда настроил доступы при помощи .htaccess для конкретного IP сервера..

Но решение не нравится.. Какие то должны быть механизмы попроще и понадежне..

Берем погоду у Яндекса в xml формате

Задача: получить погоду на сегодня и на завтра.

Решение: воспользуемся сервисом pogoda.yandex.ru
1. Найдем свой код города по справочнику https://pogoda.yandex.ru/static/cities.xml
2. По ссылке вида http://export.yandex.ru/weather-ng/forecasts/код_города.xml, мы имеем погоду в формате xml. Распарсим её например так:
<?php
 $wz = new SimpleXMLElement($xml);
 $cn=0;
 foreach ($wz->day as $value) {
  $cnt=0;
  foreach ($value->hour as $hr) {
  if (($cnt==2) or ($cnt==12) or ($cnt==18)) {
    $t=$hr->temperature;
    $weather_condition=$hr->weather_condition[«code»];
    echo «$t;$weather_condition</br>»;
   };
   $cnt++;
  };
  $cn++;
  if ($cn==2) {die();};
}
?>
1 12 13 14 15 16 22