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

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

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

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

Сохранение конфигурации свичей Dlink на tftp сервер

Задача: в Lanbilling 2.xx забиты узловые свичи. Необходимо время от времени «снимать» с них текущую конфигурацию.

Решение: поднимаем tftp сервер, и при помощи snmp , даем команду свичам сбросить свою конфигурацию на него. Скрипт делаем на PHP.

» Читать далее

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

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

 

PHP Fatal error: Call-time pass-by-reference has been removed in

После обновления PHP до 5.6, стала выводится сия строчка.

$var1 = similar_text(str_replace(«,»,»»,$address),str_replace(«,»,»»,$oldad), &$tmp);

Т.е. передача переменной по ссылке стала невозможна. Пришлось убрать &..

Берем погоду у Яндекса в 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 22 23 24 25 26 28