Вернуться   SEO форум - оптимизация и продвижение сайтов > Web разработки > Программирование

Важная информация
Программирование - PHP, MySQL, JavaScript, CSS, HTML верстка и т.д.

Ответ
 
Опции темы Оценить тему Опции просмотра
Старый 11.03.2016, 19:28   #1
 
Аватар для 1495sanek1495
 
Сообщений: 10
FR (активность): 183

Доп. информация
По умолчанию Автор темы Перестает работать php скрипт

Помогите пожалуйста с php скриптом. На сайте есть php скрипт погоды который лежит в корне сайта. Скрипт постоянно перестает работать, а через какое то время опять начинает работать. То есть когда он работает отображается погода, когда перестает открывается просто белый экран, скрипт берет информацию у яндекса. Сначала думал что связано тем что в момент обновления погоды серверы яндекса были не доступны, после чего настроил скрипт так чтобы он обновлял погоду один раз в два часа, но это не помогло, скрипт все равно то работает, то не работает причем в течении нескольких минут он может то включиться то выключиться. скажите в чем может быть проблема?
1495sanek1495 вне форума  
Ответить с цитированием Сказать Плохо за это бесполезное сообщение Быстрый ответ на это сообщение
Старый 11.03.2016, 19:51   #2
 
Аватар для Hodge
 
Сообщений: 685
FR (активность): 14,957

Доп. информация
По умолчанию

@1495sanek1495, а можно сам скрипт посмотреть? Ванга да-а-авно умерла.
Hodge вне форума  
Ответить с цитированием Сказать Плохо за это бесполезное сообщение Быстрый ответ на это сообщение
Старый 11.03.2016, 19:52   #3
 
Аватар для 1495sanek1495
 
Сообщений: 10
FR (активность): 183

Доп. информация
По умолчанию Автор темы

скрипт не я писал, нашел его на каком то сайте, изменения вносил только во внешность

Оффтоп:
Цитата:
<?php
$city_id = 27612; //id города, вписать свой, можно узнать тут https://pogoda.yandex.ru/static/cities.xml - параметр city id=
$cache_lifetime = 7200; //время кэша файла в секундах, 3600=1 час
$cache_file = 'weather_'.$city_id.'.xml'; // временный файл-кэш

function loadxmlyansex($city_id)
{
$url = 'http://export.yandex.ru/weather-ng/forecasts/'.$city_id.'.xml';
$userAgent = 'Googlebot/2.1 (+http://www.google.com/bot.html)';
$xml = 'weather_'.$city_id.'.xml';
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);
curl_setopt($ch, CURLOPT_USERAGENT, $userAgent);
$output = curl_exec($ch);
$fh = fopen($xml, 'w');
fwrite($fh, $output);
fclose($fh);
}

if ( file_exists($cache_file) ) {
$cache_modified = time() - @filemtime($cache_file);
if ( $cache_modified > $cache_lifetime )

{
//обновляем файл погоды, если время файла кэша устарело
loadxmlyansex($city_id);
}
}
else {
//если нет файла погоды вообще, закачиваем его
loadxmlyansex($city_id);
}
?>
<?php
if(file_exists($cache_file)):
$data = simplexml_load_file($cache_file); ?>
<style type="text/css">
.weather .date{font-size:13px;font-weight:700;padding-bottom:5px;text-transform:uppercase;border-bottom:1px solid #d5d5d5;margin-top:10px; margin-right: -6px;}
.weather .item{background-color:#fff;padding:15px;font-family:Georgia;margin-bottom:20px; height: 291px;}
.weather .item table{border:0;width:72%;}
.weather .item table td{padding-bottom:15px;width:20%;vertical-align:baseline;padding-right:5px;}
.weather .item .day-part td{font-size:18px;}
.weather .item .day-temp td{font-size:30px;}
.weather .item .day-temp td img{margin-left:5px;}
.weather .item .day-param td{font-size:12px;}
.weather .item .day-param td p{ padding-bottom: 3px; padding-right: 55px; width: 99px;}
.weather .days{margin-top:35px;border:0;width:100%;}
.weather .days td{width:50%;padding-bottom:35px;}
.weather .days a{font-family:Georgia;font-size:18px;text-decoration:underline;font-weight:700;}
.tabs input[type=radio] {
position: fixed;
top: -9999px;
left: -9999px;
}
.tabs {
width: 1000px;
float: none;
list-style: none;
position: relative;
padding: 0;
margin: 75px auto;
font-family: "Georgia";
}
.tabs li{
float: left;
}
.tabs label {
display: block;
padding: 10px 8px;
border-radius: 2px 2px 0 0;
color: #000;
margin-top: -13px;
font-size: 18px;
font-weight: normal;
font-family: 'Lily Script One', helveti;
background: rgba(255,255,255,0.2);
cursor: pointer;
position: relative;
top: 3px;
-webkit-transition: all 0.2s ease-in-out;
-moz-transition: all 0.2s ease-in-out;
-o-transition: all 0.2s ease-in-out;
transition: all 0.2s ease-in-out;
}

.tabs label:hover {
background: rgba(255,255,255,0.5);
top: 0;
}
[id^=tab]:checked + label {
background: #00b9eb;
color: white;
margin-top:-13px;
}
[id^=tab]:checked ~ [id^=tab-content] {
display: block;
}
.tab-content{
z-index: 2;
display: none;
text-align: left;
width: 690px;
font-size: 20px;
line-height: 140%;
padding-top: 10px;
margin-top:49px;
background: linear-gradient(to top, #36b, #00b9eb);
padding: 15px;
color: white;
position: fixed;
top: 65px;
left: 0;
box-sizing: border-box;
-webkit-animation-duration: 0.5s;
-o-animation-duration: 0.5s;
-moz-animation-duration: 0.5s;
animation-duration: 0.5s;
}</style><div class="weather"><ul class="tabs"><?php
foreach($data->day as $day):?>
<li><?php $s6=$s6+1;?><input type="radio"
<?php if($s6==1) echo "checked";
else
echo "";?> name="tabs" id="tab<?php echo $s1=$s1+1;?>">
<label for="tab<?php echo $s2=$s2+1;?>"><div class="date"><?php echo getDayDate($day['date']);?></div></label>
<div id="tab-content<?php echo $s3=$s3+1;?>" class="tab-content animated fadeIn">
<div class="item"><table><tr class="day-part"><td>Утром</td><td>Днем</td><td>Вечером</td><td>Ночью</td>
</tr><tr class="day-temp"><?php for($i = 0;$i < 4;$i++): // т.к. нам не нужны данные day_short и night_short, мы останавливаем проход на 4
$img = $day->day_part[$i]->{'image-v3'};?><td><?php echo getTempSign($day->day_part[$i]->{'temperature-data'}->avg);?> °C <img src="pogoda/<?php echo $img;?>.png" width="48" height="48" /></td><?php endfor;?>
</tr><tr class="day-param"><?php for($i = 0;$i < 4;$i++): // т.к. нам не нужны данные day_short и night_short, мы останавливаем проход на 4?>
<td><p><strong><?php echo $day->day_part[$i]->weather_type;?></strong></p><p>ветер: <?php echo getWindDirection($day->day_part[$i]->wind_direction).' '.$day->day_part[$i]->wind_speed;?> м/с</p>
<p>влажность: <?php echo $day->day_part[$i]->humidity;?>%</p><p>давление: <?php echo $day->day_part[$i]->pressure;?> мм рт. ст.</p>
</td><?php endfor;?></tr></table></div></div></li><?php
endforeach;?>
</ul></div>
<?php
endif;
// получаем локализованную дату
function getDayDate($date)
{
$date = strtotime($date);
$months = array('','/01','/02','/03','/04','/05','/06','/07','/08','/09','/10','/11','/12');
$days = array('ВС','ПН', 'ВТ', 'СР', 'ЧТ', 'ПТ', 'СБ');
return $days[date('w', $date)].', '.(int)date('d',$date).' '.$months[date('n', $date)];
}
// получаем знак температуры
function getTempSign($temp)
{
$temp = (int)$temp;
return $temp > 0 ? '+'.$temp : $temp;
}
// получаем направления ветра
function getWindDirection($wind)
{
$wind = (string)$wind;
$wind_direction = array('s'=>'? ю','n'=>'? с','w'=>'? з','e'=>'? в','sw'=>'? юз','se'=>'? юв','nw'=>'? сз','ne'=>'? св');
return $wind_direction[$wind];
}
?>
1495sanek1495 вне форума  
Ответить с цитированием Сказать Плохо за это бесполезное сообщение Быстрый ответ на это сообщение
Старый 12.03.2016, 10:45   #4
 
Аватар для Hodge
 
Сообщений: 685
FR (активность): 14,957

Доп. информация
По умолчанию

@1495sanek1495, яндекс не всегда с первого раза отдает xml. Проверяйте, когда ни чего не выводится файл должен быть на сервере пустым.

Проверки на ответ сервера яндекса у вас нет, повторной попытки запроса, если сервер ничего не отдал - тоже. Когда файл пустой - сыпятся ошибки с функции парсинга файла, поскольку проверок там так-же нет. Вы их можете не видеть, если сервер не показывает ошибки, но можете видеть пустоту. Или же проблема в чем-то другом, не в этом коде.

Я бы посоветовал использовать другой источник данных и обновлять файл c помощью крона, а не при запросах пользователей.
Hodge вне форума  
Ответить с цитированием Сказать Плохо за это бесполезное сообщение Быстрый ответ на это сообщение
Старый 12.03.2016, 13:42   #5
 
Аватар для 1495sanek1495
 
Сообщений: 10
FR (активность): 183

Доп. информация
По умолчанию Автор темы

а не могли бы вы объяснить что такое крон и как через него обновлять данные?) а так вообще информация должна обновляться как указано в скрипте раз в два часа, не по запросу пользователя.

Сообщение добавлено 12.03.2016 в 13:43

Цитата:
Сообщение от Hodge Посмотреть сообщение
@1495sanek1495, яндекс не всегда с первого раза отдает xml. Проверяйте, когда ни чего не выводится файл должен быть на сервере пустым.

Проверки на ответ сервера яндекса у вас нет, повторной попытки запроса, если сервер ничего не отдал - тоже. Когда файл пустой - сыпятся ошибки с функции парсинга файла, поскольку проверок там так-же нет. Вы их можете не видеть, если сервер не показывает ошибки, но можете видеть пустоту. Или же проблема в чем-то другом, не в этом коде.

Я бы посоветовал использовать другой источник данных и обновлять файл c помощью крона, а не при запросах пользователей.
а не могли бы вы объяснить что такое крон и как через него обновлять данные?) а так вообще информация должна обновляться как указано в скрипте раз в два часа, не по запросу пользователя.
1495sanek1495 вне форума  
Ответить с цитированием Сказать Плохо за это бесполезное сообщение Быстрый ответ на это сообщение
Старый 12.03.2016, 13:56   #6
 
Аватар для Hodge
 
Сообщений: 685
FR (активность): 14,957

Доп. информация
По умолчанию

@1495sanek1495, крон - это "Планировщик задач". Т.е. он позволяет автоматически запускать PHP-скрипты в определенное время. PHP-скрипты же выполняются только при запросах клиента. В роли клиента выступаете Вы, когда обновляете страницу своего сайта или посетители Вашего сайта. На хостинге такие операции с парсингом данных вообще не желательны.

пы.сы. про настройку крона и т.д. и т.п. можно спрашивать Вашего хостера.
Hodge вне форума  
Ответить с цитированием Сказать Плохо за это бесполезное сообщение Быстрый ответ на это сообщение
Старый 12.03.2016, 14:13   #7
 
Аватар для 1495sanek1495
 
Сообщений: 10
FR (активность): 183

Доп. информация
По умолчанию Автор темы

Цитата:
Сообщение от Hodge Посмотреть сообщение
@1495sanek1495, крон - это "Планировщик задач". Т.е. он позволяет автоматически запускать PHP-скрипты в определенное время. PHP-скрипты же выполняются только при запросах клиента. В роли клиента выступаете Вы, когда обновляете страницу своего сайта или посетители Вашего сайта. На хостинге такие операции с парсингом данных вообще не желательны.

пы.сы. про настройку крона и т.д. и т.п. можно спрашивать Вашего хостера.
Получается если использовать планировщик задач, то скрипт будет включаться и происходить обновление данных только в то время которое указано в планировщике, а время обновления указанное в самом скрипте не будет играть роли?
1495sanek1495 вне форума  
Ответить с цитированием Сказать Плохо за это бесполезное сообщение Быстрый ответ на это сообщение
Старый 12.03.2016, 14:17   #8
 
Аватар для Hodge
 
Сообщений: 685
FR (активность): 14,957

Доп. информация
По умолчанию

@1495sanek1495, да, именно так.
Hodge вне форума  
Ответить с цитированием Сказать Плохо за это бесполезное сообщение Быстрый ответ на это сообщение
Старый 12.03.2016, 15:42   #9
 
Аватар для 1495sanek1495
 
Сообщений: 10
FR (активность): 183

Доп. информация
По умолчанию Автор темы

Цитата:
Сообщение от Hodge Посмотреть сообщение
@1495sanek1495, да, именно так.
сделал через крон, но скрипт почему то все равно запускается так как настроен сам скрипт, не знаете в чем может быть дело?
1495sanek1495 вне форума  
Ответить с цитированием Сказать Плохо за это бесполезное сообщение Быстрый ответ на это сообщение
Старый 12.03.2016, 15:51   #10
 
Аватар для Hodge
 
Сообщений: 685
FR (активность): 14,957

Доп. информация
По умолчанию

@1495sanek1495, хеширование файла и вывод уберите из скрипта. Т.е. к примеру, крон запускает скрипт в 8, 16, 24 часа. Ваш файл будет обновляться в это время сам.

А на страницах сайта оставьте в скрипте только парсинг файла вывод посетителям.

И не забудьте сделать проверку, чтобы файл обновлялся данными и не был пустым.
Hodge вне форума  
Ответить с цитированием Сказать Плохо за это бесполезное сообщение Быстрый ответ на это сообщение
Старый 12.03.2016, 16:06   #11
 
Аватар для 1495sanek1495
 
Сообщений: 10
FR (активность): 183

Доп. информация
По умолчанию Автор темы

Цитата:
Сообщение от Hodge Посмотреть сообщение
@1495sanek1495, хеширование файла и вывод уберите из скрипта. Т.е. к примеру, крон запускает скрипт в 8, 16, 24 часа. Ваш файл будет обновляться в это время сам.

А на страницах сайта оставьте в скрипте только парсинг файла вывод посетителям.

И не забудьте сделать проверку, чтобы файл обновлялся данными и не был пустым.
Извините за наглость но вы не могли бы посмотреть как из этого кода убрать хеширование и вывод?

<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
?>
<?php
$city_id = 27612; //id города, вписать свой, можно узнать тут https://pogoda.yandex.ru/static/cities.xml - параметр city id=
$cache_lifetime = 120; //время кэша файла в секундах, 3600=1 час
$cache_file = 'weather_'.$city_id.'.xml'; // временный файл-кэш

function loadxmlyansex($city_id)
{
$url = 'http://export.yandex.ru/weather-ng/forecasts/'.$city_id.'.xml';
$userAgent = 'Googlebot/2.1 (+http://www.google.com/bot.html)';
$xml = 'weather_'.$city_id.'.xml';
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);
curl_setopt($ch, CURLOPT_USERAGENT, $userAgent);
$output = curl_exec($ch);
$fh = fopen($xml, 'w');
fwrite($fh, $output);
fclose($fh);
}

if ( file_exists($cache_file) ) {
$cache_modified = time() - @filemtime($cache_file);
if ( $cache_modified > $cache_lifetime )

{
//обновляем файл погоды, если время файла кэша устарело
loadxmlyansex($city_id);
}
}
else {
//если нет файла погоды вообще, закачиваем его
loadxmlyansex($city_id);
}
?>
<?php
if(file_exists($cache_file)):
$data = simplexml_load_file($cache_file); ?>
<style type="text/css">
.weather .date{font-size:13px;font-weight:700;padding-bottom:5px;text-transform:uppercase;border-bottom:1px solid #d5d5d5;margin-top:10px; margin-right: -6px;}
.weather .item{background-color:#fff;padding:15px;font-family:Georgia;margin-bottom:20px; height: 291px;}
.weather .item table{border:0;width:72%;}
.weather .item table td{padding-bottom:15px;width:20%;vertical-align:baseline;padding-right:5px;}
.weather .item .day-part td{font-size:18px;}
.weather .item .day-temp td{font-size:30px;}
.weather .item .day-temp td img{margin-left:5px;}
.weather .item .day-param td{font-size:12px;}
.weather .item .day-param td p{ padding-bottom: 3px; padding-right: 55px; width: 99px;}
.weather .days{margin-top:35px;border:0;width:100%;}
.weather .days td{width:50%;padding-bottom:35px;}
.weather .days a{font-family:Georgia;font-size:18px;text-decoration:underline;font-weight:700;}
.tabs input[type=radio] {
position: fixed;
top: -9999px;
left: -9999px;
}
.tabs {
width: 1000px;
float: none;
list-style: none;
position: relative;
padding: 0;
margin: 75px auto;
font-family: "Georgia";
}
.tabs li{
float: left;
}
.tabs label {
display: block;
padding: 10px 8px;
border-radius: 2px 2px 0 0;
color: #000;
margin-top: -13px;
font-size: 18px;
font-weight: normal;
font-family: 'Lily Script One', helveti;
background: rgba(255,255,255,0.2);
cursor: pointer;
position: relative;
top: 3px;
-webkit-transition: all 0.2s ease-in-out;
-moz-transition: all 0.2s ease-in-out;
-o-transition: all 0.2s ease-in-out;
transition: all 0.2s ease-in-out;
}

.tabs label:hover {
background: rgba(255,255,255,0.5);
top: 0;
}
[id^=tab]:checked + label {
background: #00b9eb;
color: white;
margin-top:-13px;
}
[id^=tab]:checked ~ [id^=tab-content] {
display: block;
}
.tab-content{
z-index: 2;
display: none;
text-align: left;
width: 690px;
font-size: 20px;
line-height: 140%;
padding-top: 10px;
margin-top:49px;
background: linear-gradient(to top, #36b, #00b9eb);
padding: 15px;
color: white;
position: fixed;
top: 65px;
left: 0;
box-sizing: border-box;
-webkit-animation-duration: 0.5s;
-o-animation-duration: 0.5s;
-moz-animation-duration: 0.5s;
animation-duration: 0.5s;
}</style><div class="weather"><ul class="tabs"><?php
foreach($data->day as $day):?>
<li><?php $s6=$s6+1;?><input type="radio"
<?php if($s6==1) echo "checked";
else
echo "";?> name="tabs" id="tab<?php echo $s1=$s1+1;?>">
<label for="tab<?php echo $s2=$s2+1;?>"><div class="date"><?php echo getDayDate($day['date']);?></div></label>
<div id="tab-content<?php echo $s3=$s3+1;?>" class="tab-content animated fadeIn">
<div class="item"><table><tr class="day-part"><td>Утром</td><td>Днем</td><td>Вечером</td><td>Ночью</td>
</tr><tr class="day-temp"><?php for($i = 0;$i < 4;$i++): // т.к. нам не нужны данные day_short и night_short, мы останавливаем проход на 4
$img = $day->day_part[$i]->{'image-v3'};?><td><?php echo getTempSign($day->day_part[$i]->{'temperature-data'}->avg);?> °C <img src="pogoda/<?php echo $img;?>.png" width="48" height="48" /></td><?php endfor;?>
</tr><tr class="day-param"><?php for($i = 0;$i < 4;$i++): // т.к. нам не нужны данные day_short и night_short, мы останавливаем проход на 4?>
<td><p><strong><?php echo $day->day_part[$i]->weather_type;?></strong></p><p>ветер: <?php echo getWindDirection($day->day_part[$i]->wind_direction).' '.$day->day_part[$i]->wind_speed;?> м/с</p>
<p>влажность: <?php echo $day->day_part[$i]->humidity;?>%</p><p>давление: <?php echo $day->day_part[$i]->pressure;?> мм рт. ст.</p>
</td><?php endfor;?></tr></table></div></div></li><?php
endforeach;?>
</ul></div>
<?php
endif;
// получаем локализованную дату
function getDayDate($date)
{
$date = strtotime($date);
$months = array('','/01','/02','/03','/04','/05','/06','/07','/08','/09','/10','/11','/12');
$days = array('ВС','ПН', 'ВТ', 'СР', 'ЧТ', 'ПТ', 'СБ');
return $days[date('w', $date)].', '.(int)date('d',$date).' '.$months[date('n', $date)];
}
// получаем знак температуры
function getTempSign($temp)
{
$temp = (int)$temp;
return $temp > 0 ? '+'.$temp : $temp;
}
// получаем направления ветра
function getWindDirection($wind)
{
$wind = (string)$wind;
$wind_direction = array('s'=>'↑ ю','n'=>'↓ с','w'=>'→ з','e'=>'← в','sw'=>'↗ юз','se'=>'↖ юв','nw'=>'↘ сз','ne'=>'↙ св');
return $wind_direction[$wind];
}
?>
1495sanek1495 вне форума  
Ответить с цитированием Сказать Плохо за это бесполезное сообщение Быстрый ответ на это сообщение
Ответ

Метки
скрипт php

Быстрый ответ
Ваше имя пользователя: Регистрация. Для входа нажмите здесь
Случайный вопрос

Сообщение:
Опции


Опции темы
Опции просмотра Оценка этой теме
Оценка этой теме:

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
RDFa. Как с ним работать? artemhp Общие вопросы 1 12.05.2012 21:52
Не дают работать! lipatoff Юмор 5 27.02.2012 11:35
Подскажите как работать с TDS El_Di Прогон сайтов и т д 0 23.12.2011 03:52
Подскажите, как работать через чужой скрипт uncledent Программирование 10 24.10.2011 10:52
Как работать с клиентами? Reider Почетные пользователи - скрытый раздел 3 25.08.2011 11:15

Текущее время: 05:04. Часовой пояс GMT +3.