Вернуться   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
 
Сообщений: 734
FR (активность): 17,522

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

@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
 
Сообщений: 734
FR (активность): 17,522

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

@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
 
Сообщений: 734
FR (активность): 17,522

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

@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
 
Сообщений: 734
FR (активность): 17,522

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

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

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

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

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

@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

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

Сообщение:
Опции
Внимание!
Этой теме более 2393 дней. Вы можете оставить сообщение здесь. Но, обращаем внимание. Возможно, рациональней создать новую тему (найти свежее обсуждение)?


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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
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

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