• DONATE to NULLED!
    Форуму и его команде можно помочь, мотивировать модераторов разделов.
    Помогите модератору этого раздела killoff лично.

Помощь модуль погоды

Аналогичная проблема.

Перенёс сайт на другой хостинг и появились проблемы с кодировкой.

Код:
if(!defined('DATALIFEENGINE'))
{
  die("Hacking attempt!");
}

if (!$pogoda) {
$city_name = 'Дзержинске';
$url = 'http://pogoda.mail.ru/prognoz/dzerzhinsk/extended/'; //тянем погоду для Москвы
if(!is_dir("uploads/pogoda/")){mkdir("uploads/pogoda/"); chmod("uploads/pogoda/", 0777);}
$cache_file=$_SERVER['DOCUMENT_ROOT']."/engine/cache/week.txt";
if (file_exists( $cache_file ) &&
    date('Y-m-d',filemtime($cache_file))==
    date("Y-m-d", mktime(0, 0, 0, date("m") , date("d"), date("Y")))){
  $f=fopen($cache_file,"rb");
  $pogoda=fread($f,filesize($cache_file));
}else{
function get_web_page( $url,$proxy=null )
{
  $uagent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.8) Gecko/2009032609 Firefox/3.0.8";
  $cookie = $_SERVER['DOCUMENT_ROOT']."/cookie.txt";
  $ch = curl_init( $url );

  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);  // возвращает веб-страницу
  curl_setopt($ch, CURLOPT_REFERER,"http://google.ru/");
  curl_setopt($ch, CURLOPT_HEADER, 0);          // не возвращает заголовки
  curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 10);  // переходит по редиректам
  curl_setopt($ch, CURLOPT_ENCODING, "");        // обрабатывает все кодировки
  curl_setopt($ch, CURLOPT_USERAGENT, $uagent);  // useragent
  curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 20); // таймаут соединения
  curl_setopt($ch, CURLOPT_TIMEOUT, 20);        // таймаут ответа
  curl_setopt($ch, CURLOPT_MAXREDIRS, 10);      // останавливаться после 10-ого редиректа
  curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie);
  curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie);
  curl_setopt($ch, CURLOPT_PROXY, $proxy);

  $content = curl_exec( $ch );
  $err    = curl_errno( $ch );
  $errmsg  = curl_error( $ch );
  $header  = curl_getinfo( $ch );
  curl_close( $ch );
  $header['errno']  = $err;
  $header['errmsg']  = $errmsg;
  $header['content'] = $content;
  return $header;
}
function pogoda($week){
$pogoda = '<table width=98% cellspacing=0 cellpadding=0 class="forecast-ext forecast-ext_'.date('m').'"><tr><td><div class="forecast-ext__inner forecast-ext__inner_byhours">'.$week.'</td></tr></table>';
return $pogoda;
}
$result = get_web_page( $url );
$html = $result['content'];
preg_match('/<div class=\"forecast-ext__inner forecast-ext__inner_byhours\">(.*?)<\/section>/is',$html,$match);
$pogoda = pogoda($match[1]);
preg_match_all('/(\/img.*?)\"/',$pogoda,$img);
//print_r($img);
$count_img=count($img[0]);
for ($i=0;$i<$count_img;$i++){
$url_img=$img[1][$i];
$url_image=str_replace('/img/','http://pogoda.mail.ru/img/',$url_img);
if(preg_match('/img\/new/',$url_image)){
$url_img = $_SERVER['DOCUMENT_ROOT'].str_replace('/img/new/','/uploads/pogoda/',$url_img);}else{
$url_img = $_SERVER['DOCUMENT_ROOT'].str_replace('/img/status/png/weather/med35/onlight/','/uploads/pogoda/',$url_img);}
if (!file_exists($url_img)) {
  $image=file_get_contents($url_image);
  $fp=fopen($url_img,"w+");
  fwrite($fp,$image);
  fclose($fp); }
}

$imageurl = "http://".$_SERVER['HTTP_HOST']."/uploads/pogoda/";
$pogoda=str_replace('/img/new/',$imageurl,$pogoda);
$pogoda=str_replace('/img/status/png/weather/med35/onlight/',$imageurl,$pogoda);
@file_put_contents($cache_file,$pogoda);
}
$title = '<strong>Погода в '.$city_name.' Нижегородской области</strong><br> Прогноз погоды на неделю</strong>';


$tpl->load_template('pogoda.tpl');
$tpl->set('{description}',$title);
$tpl->set('{static}',$pogoda);
$tpl->compile('content');
$tpl->clear();
          }
?>

В чём проблема может быть?

UPD: Начал разбираться. Скрипт создаёт файл /engine/cache/week.txt
Подскажите как добавить, чтобы он создавал этот файл в нужной кодировке 1251 или ANSI
 
Последнее редактирование:
Интересный модуль, можешь выложить файл pogoda.tpl?
 
В общем я разобрался.
Данный скрипт пишет данные в файл week.txt UTF-8 (без BOM) а нужно ANSI.

Гуру PHP. ПОдскажите что тут поправить нужно?

На всякий случай ещё раз код запощу

Код:
<?php
/*
установка в engine.php после switch ( $do ) {
вставляем
# Модуль погода ########################################
case "pogoda" :
        include ENGINE_DIR.'/modules/pogoda.php';
        break;
########################################################
в .htaccess
ниже RewriteEngine On вставляем
# Погода на неделю ##############################
RewriteRule ^pogoda(/?)+$ index.php?do=pogoda [L]
##################################################
*/
if(!defined('DATALIFEENGINE'))
{
  die("Hacking attempt!");
}

if (!$pogoda) {
$city_name = 'Дзержинске';
$url = 'http://pogoda.mail.ru/prognoz/dzerzhinsk/extended/'; //тянем погоду для Москвы
if(!is_dir("uploads/pogoda/")){mkdir("uploads/pogoda/"); chmod("uploads/pogoda/", 0777);}
$cache_file=$_SERVER['DOCUMENT_ROOT']."/engine/cache/week.txt";
if (file_exists( $cache_file ) &&
    date('Y-m-d',filemtime($cache_file))==
    date("Y-m-d", mktime(0, 0, 0, date("m") , date("d"), date("Y")))){
  $f=fopen($cache_file,"rb"); 
  $pogoda=fread($f,filesize($cache_file));
}else{
function get_web_page( $url,$proxy=null )
{
  $uagent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.8) Gecko/2009032609 Firefox/3.0.8";
  $cookie = $_SERVER['DOCUMENT_ROOT']."/cookie.txt";
  $ch = curl_init( $url );

  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);  // возвращает веб-страницу
  curl_setopt($ch, CURLOPT_REFERER,"http://google.ru/");
  curl_setopt($ch, CURLOPT_HEADER, 0);          // не возвращает заголовки
  curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 10);  // переходит по редиректам
  curl_setopt($ch, CURLOPT_ENCODING, "");        // обрабатывает все кодировки
  curl_setopt($ch, CURLOPT_USERAGENT, $uagent);  // useragent
  curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 20); // таймаут соединения
  curl_setopt($ch, CURLOPT_TIMEOUT, 20);        // таймаут ответа
  curl_setopt($ch, CURLOPT_MAXREDIRS, 10);      // останавливаться после 10-ого редиректа
  curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie);
  curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie);
  curl_setopt($ch, CURLOPT_PROXY, $proxy);
 
  $content = curl_exec( $ch );
  $err    = curl_errno( $ch );
  $errmsg  = curl_error( $ch );
  $header  = curl_getinfo( $ch );
  curl_close( $ch );
  $header['errno']  = $err;
  $header['errmsg']  = $errmsg;
  $header['content'] = $content;
  return $header;
}
function pogoda($week){
$pogoda = '<table width=98% cellspacing=0 cellpadding=0 class="forecast-ext forecast-ext_'.date('m').'"><tr><td><div class="forecast-ext__inner forecast-ext__inner_byhours">'.$week.'</td></tr></table>';
return $pogoda;
} 
$result = get_web_page( $url );
$html = $result['content'];
preg_match('/<div class=\"forecast-ext__inner forecast-ext__inner_byhours\">(.*?)<\/section>/is',$html,$match);
$pogoda = pogoda($match[1]);
preg_match_all('/(\/img.*?)\"/',$pogoda,$img);
//print_r($img);
$count_img=count($img[0]);
for ($i=0;$i<$count_img;$i++){
$url_img=$img[1][$i];
$url_image=str_replace('/img/','http://pogoda.mail.ru/img/',$url_img);
if(preg_match('/img\/new/',$url_image)){
$url_img = $_SERVER['DOCUMENT_ROOT'].str_replace('/img/new/','/uploads/pogoda/',$url_img);}else{
$url_img = $_SERVER['DOCUMENT_ROOT'].str_replace('/img/status/png/weather/med35/onlight/','/uploads/pogoda/',$url_img);}
if (!file_exists($url_img)) {
  $image=file_get_contents($url_image);
  $fp=fopen($url_img,"w+");
  fwrite($fp,$image);
  fclose($fp); }
}

$imageurl = "http://".$_SERVER['HTTP_HOST']."/uploads/pogoda/";
$pogoda=str_replace('/img/new/',$imageurl,$pogoda);
$pogoda=str_replace('/img/status/png/weather/med35/onlight/',$imageurl,$pogoda);
@file_put_contents($cache_file,$pogoda);
}
$title = '<strong>Погода в '.$city_name.' Нижегородской области.<br>Прогноз погоды на неделю</strong>';


$tpl->load_template('pogoda.tpl');
$tpl->set('{description}',$title);
$tpl->set('{static}',$pogoda);
$tpl->compile('content');
$tpl->clear();
          }
?>

Проблему свою решил. Спасибо zzallexx с PHP раздела.

PHP:
$html = iconv('utf-8','windows-1251',$result['content']);

Нужно было просто добавить.
 
Последнее редактирование модератором:
В общем я разобрался.
Данный скрипт пишет данные в файл week.txt UTF-8 (без BOM) а нужно ANSI.

Гуру PHP. ПОдскажите что тут поправить нужно?

На всякий случай ещё раз код запощу

Код:
<?php
/*
установка в engine.php после switch ( $do ) {
вставляем
# Модуль погода ########################################
case "pogoda" :
        include ENGINE_DIR.'/modules/pogoda.php';
        break;
########################################################
в .htaccess
ниже RewriteEngine On вставляем
# Погода на неделю ##############################
RewriteRule ^pogoda(/?)+$ index.php?do=pogoda [L]
##################################################
*/
if(!defined('DATALIFEENGINE'))
{
  die("Hacking attempt!");
}

if (!$pogoda) {
$city_name = 'Дзержинске';
$url = 'http://pogoda.mail.ru/prognoz/dzerzhinsk/extended/'; //тянем погоду для Москвы
if(!is_dir("uploads/pogoda/")){mkdir("uploads/pogoda/"); chmod("uploads/pogoda/", 0777);}
$cache_file=$_SERVER['DOCUMENT_ROOT']."/engine/cache/week.txt";
if (file_exists( $cache_file ) &&
    date('Y-m-d',filemtime($cache_file))==
    date("Y-m-d", mktime(0, 0, 0, date("m") , date("d"), date("Y")))){
  $f=fopen($cache_file,"rb");
  $pogoda=fread($f,filesize($cache_file));
}else{
function get_web_page( $url,$proxy=null )
{
  $uagent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.8) Gecko/2009032609 Firefox/3.0.8";
  $cookie = $_SERVER['DOCUMENT_ROOT']."/cookie.txt";
  $ch = curl_init( $url );

  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);  // возвращает веб-страницу
  curl_setopt($ch, CURLOPT_REFERER,"http://google.ru/");
  curl_setopt($ch, CURLOPT_HEADER, 0);          // не возвращает заголовки
  curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 10);  // переходит по редиректам
  curl_setopt($ch, CURLOPT_ENCODING, "");        // обрабатывает все кодировки
  curl_setopt($ch, CURLOPT_USERAGENT, $uagent);  // useragent
  curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 20); // таймаут соединения
  curl_setopt($ch, CURLOPT_TIMEOUT, 20);        // таймаут ответа
  curl_setopt($ch, CURLOPT_MAXREDIRS, 10);      // останавливаться после 10-ого редиректа
  curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie);
  curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie);
  curl_setopt($ch, CURLOPT_PROXY, $proxy);

  $content = curl_exec( $ch );
  $err    = curl_errno( $ch );
  $errmsg  = curl_error( $ch );
  $header  = curl_getinfo( $ch );
  curl_close( $ch );
  $header['errno']  = $err;
  $header['errmsg']  = $errmsg;
  $header['content'] = $content;
  return $header;
}
function pogoda($week){
$pogoda = '<table width=98% cellspacing=0 cellpadding=0 class="forecast-ext forecast-ext_'.date('m').'"><tr><td><div class="forecast-ext__inner forecast-ext__inner_byhours">'.$week.'</td></tr></table>';
return $pogoda;
}
$result = get_web_page( $url );
$html = $result['content'];
preg_match('/<div class=\"forecast-ext__inner forecast-ext__inner_byhours\">(.*?)<\/section>/is',$html,$match);
$pogoda = pogoda($match[1]);
preg_match_all('/(\/img.*?)\"/',$pogoda,$img);
//print_r($img);
$count_img=count($img[0]);
for ($i=0;$i<$count_img;$i++){
$url_img=$img[1][$i];
$url_image=str_replace('/img/','http://pogoda.mail.ru/img/',$url_img);
if(preg_match('/img\/new/',$url_image)){
$url_img = $_SERVER['DOCUMENT_ROOT'].str_replace('/img/new/','/uploads/pogoda/',$url_img);}else{
$url_img = $_SERVER['DOCUMENT_ROOT'].str_replace('/img/status/png/weather/med35/onlight/','/uploads/pogoda/',$url_img);}
if (!file_exists($url_img)) {
  $image=file_get_contents($url_image);
  $fp=fopen($url_img,"w+");
  fwrite($fp,$image);
  fclose($fp); }
}

$imageurl = "http://".$_SERVER['HTTP_HOST']."/uploads/pogoda/";
$pogoda=str_replace('/img/new/',$imageurl,$pogoda);
$pogoda=str_replace('/img/status/png/weather/med35/onlight/',$imageurl,$pogoda);
@file_put_contents($cache_file,$pogoda);
}
$title = '<strong>Погода в '.$city_name.' Нижегородской области.<br>Прогноз погоды на неделю</strong>';


$tpl->load_template('pogoda.tpl');
$tpl->set('{description}',$title);
$tpl->set('{static}',$pogoda);
$tpl->compile('content');
$tpl->clear();
          }
?>

Проблему свою решил. Спасибо zzallexx с PHP раздела.

PHP:
$html = iconv('utf-8','windows-1251',$result['content']);

Нужно было просто добавить.

А куда нужно добавить?
 
Заменить эту строчку:
Код:
$html = $result['content'];
 
Спасибо помогло. И еще один вопросик. В данном модуле в title выводиться title главной страницы. Как сделать чтобы для страницы погоды был свой тайтл а то одинаковые тайтлы это не есть хорошо?
 
Править engine.php или init.php - title генерируется там автоматом. Надо дописывать условие на работу этого модуля и отмену стандартного кода.
При начальных знаниях пхп это делается очень легко. Кода под рукой нет - не подскажу точнее
 
Назад
Сверху