Задать вопрос
  • Как создать регистрацию поддомена на домене с проверкой на занятость?

    @9StarRu Автор вопроса
    Может проще dle cms установить и пользователей делать поддоменами, но как в таком случае пользователю загрузить cms на файлах... чтобы вместо личного кабинета открывалась cms
  • Как создать регистрацию поддомена на домене с проверкой на занятость?

    @9StarRu Автор вопроса
    У меня есть простенькая cms на файлах, вот ее я хочу размещать на поддоменах но не самостоятельно, а чтобы пользователи сами создавали поддомен и далее работали с ним.
    Самое сложное это функция проверки и создания поддомена, не могу сообразить как реализовать.
  • Как исправить кодировку сайта в ответ на cURL запрос?

    @9StarRu Автор вопроса
    Вчера на фрилансе заказал скрипт, сделали, у фрилансера на обычном хостинге все сайты работают, у меня иероглифы либо пустая страница 1fastmoney.ru/1.txt у меня centos6 vps
  • Как исправить кодировку сайта в ответ на cURL запрос?

    @9StarRu Автор вопроса
    PrAw: я вам на почту позже напишу с примерами.
  • Как исправить кодировку сайта в ответ на cURL запрос?

    @9StarRu Автор вопроса
    PrAw: сегодня кеш прикручивал, все эти страницы с иероглифами сохраняются в кеш в ANSI Windows-1251 кодировке, файл на сервере читаемый а при выводе на сайт иероглифы, при этом мета в файле я заменяю на utf-8.
    Я таким образом хотел решить проблему отображения иероглифов на сайте, думал сперва в кеш сохраню а потом выведу на сайт :)
    Может нужно как-то кодировку обозначить во время сохранения в кеш?

    <?php
    /* Установка кодироок в UTF-8 */
    mb_internal_encoding("UTF-8");  // установим внутреннюю кодировку скрипта
    mb_http_output( "UTF-8" );  // устанавливаем кодировку для http-вывода
    
    //settings
    $cache_ext  = '.html'; //file extension
    $cache_time     = 1800;  //Cache file expires after these seconds (1 hour = 3600 sec) (8 hour = 28800 sec) (12 hour = 43200 sec)
    $cache_folder   = 'cache/'; //folder to store Cache files
    $ignore_pages   = array('', '');
    
    $dynamic_url    = 'http://'.$_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] . $_SERVER['QUERY_STRING']; // requested dynamic page (full url)
    $cache_file     = $cache_folder.md5($dynamic_url).$cache_ext; // construct a cache file
    $ignore = (in_array($dynamic_url,$ignore_pages))?true:false; //check if url is in ignore list
    
    if (!$ignore && file_exists($cache_file) && time() - $cache_time < filemtime($cache_file)) { //check Cache exist and it's not expired.
    ob_start('ob_gzhandler'); //Turn on output buffering, "ob_gzhandler" for the compressed page with gzip.
    readfile($cache_file); //read Cache file
    echo '<!-- cached page - '.date('l jS \of F Y h:i:s A', filemtime($cache_file)).', Page : '.$dynamic_url.' -->';
    ob_end_flush(); //Flush and turn off output buffering
    exit(); //no need to proceed further, exit the flow.
    }
    //Turn on output buffering with gzip compression.
    ob_start('ob_gzhandler');
    
    
    $_SERVER['post_cache'] = $post;
    
    if (!is_dir($cache_folder)) { //create a new folder if we need to
    mkdir($cache_folder);
    }
    if(!$ignore){
    $fp = fopen($cache_file, 'w');  //open file for writing
    fwrite($fp, ob_get_contents()); //write contents of the output buffer in Cache file
    fclose($fp); //Close file pointer
    }
    ob_end_flush(); //Flush and turn off output buffering
    
    ?>
  • Как вывести из базы заданное кол-во новостей?

    @9StarRu Автор вопроса
    Вот класс базы, это нужно было?

    <?php 
    
    class DataBase {
    	private $file;
    	private $data = [];
    
    	function __construct($file)
    	{
    		$this->file = $file;
    		$this->data = (array) @json_decode(file_get_contents($file), true);
    	}
    
    	public function add($id, $item)
    	{
    		if(isset($this->data[$id])) {
    			return false;
    		}
    
    		$this->data = [$id => $item] + $this->data;
    
    		return true;
    	}
    
    	public function find($id)
    	{
    		if(!isset($this->data[$id])) {
    			return false;
    		}
    
    		return $this->data[$id];
    	}
    
    	public function remove($id)
    	{
    		if(!isset($this->data[$id])) {
    			return false;
    		}
    
    		unset($this->data[$id]);
    
    		return true;
    	}
    
    	public function replace($id, $item) 
    	{
    		if(!isset($this->data[$id])) {
    			return false;
    		}
    
    		$this->data[$id] = $item;
    
    		return true;
    	}
    
    	public function save()
    	{
    		return file_put_contents($this->file, json_encode($this->data));
    	}
    
    	public function all()
    	{
    		return $this->data;
    	}
    }
  • Как исправить кодировку сайта в ответ на cURL запрос?

    @9StarRu Автор вопроса
    Странно но удаление мета вообще и изменение мета на utf-8 проблему не решило :(
  • Как исправить кодировку сайта в ответ на cURL запрос?

    @9StarRu Автор вопроса
    PrAw: То есть проще и правильнее удалить мета тег чем заменять его на нужный, так?

    Еще хотел спросить, бывает, что в ответ страница не приходит или приходит страница 404 ошибки но в браузере ответ 200 ок.
    Сейчас я в конце php добавил
    ?><?php 
    header('HTTP/1.0 404 Not Found');
    ?>

    Если страница есть то ответ 200, нет страницы получаю 404, но у меня не правильно реализовано и появляются ошибки о двух headers, как это прописать в мой код, чтобы было верно?

    Спасибо!
  • Как исправить кодировку сайта в ответ на cURL запрос?

    @9StarRu Автор вопроса
    Сейчас я загружаю сайт (html) на своем домене,
    т.е. полностью код стороннего сайта получаю и вывожу у себя,
    на этом шаге и получаю ошибку кодировки. Дальше пока не двигался.
    Сейчас ищу регулярку, чтобы на лету изменять windows-1251 на utf-8, хочу попробовать, может поможет.
  • Как исправить кодировку сайта в ответ на cURL запрос?

    @9StarRu Автор вопроса
    Перефразирую :)
    Как исправить кодировку если в meta получаемого сайта установлено windows-1251 и не испортить кодировку utf-8 сайтов?

    P.S. код ниже не подойдет

    //$isWinCharset = mb_check_encoding($postResult, "windows-1251");
    //if ($isWinCharset) {
    //    $postResult = iconv("windows-1251", "UTF-8", $postResult);
    //}
  • Как исправить кодировку сайта в ответ на cURL запрос?

    @9StarRu Автор вопроса
    Может проще отлавливать в коде строку
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1251" >
    и менять ее на ?

    Ведь если закомментировать код:
    //$isWinCharset = mb_check_encoding($postResult, "windows-1251");
    //if ($isWinCharset) {
    //    $postResult = iconv("windows-1251", "UTF-8", $postResult);
    //}

    то проблема остается только с сайтами, где в meta установлена кодировка windows-1251, остальные сайты работают корректно.
  • Как исправить кодировку сайта в ответ на cURL запрос?

    @9StarRu Автор вопроса
    Только сейчас смог проверить, в результате без изменений.
    Выяснилось, что все сайты отдают Content-Type: text/html; charset=UTF-8 независимо от того, что написано в meta.
    Вот, что у меня получилось, код:
    <?php 
        $ch = curl_init();
    
        $user_agent = $_SERVER["HTTP_USER_AGENT"];
        curl_setopt($ch, CURLOPT_USERAGENT, $user_agent);
        curl_setopt($ch, CURLOPT_URL, $engine_url );
    
        //"identity", "deflate" , "gzip"
        //curl_setopt($ch, CURLOPT_ENCODING, 'gzip,deflate');
    
        curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    
    	curl_setopt($ch, CURLOPT_HEADER, 1);
    	
        $tmpResult = curl_exec($ch);
    
        $header_size = curl_getinfo($ch,CURLINFO_HEADER_SIZE);
    
        curl_close($ch);
    
        $tmpHeaders = substr($tmpResult, 0, $header_size);
        $postResult = substr($tmpResult, $header_size);
    
        $headers = array();
    
        foreach(explode("\n",$tmpHeaders) as $header)
        {
          $tmp = explode(":",trim($header),2);
          if (count($tmp)>1)
          {
        $headers[strtolower($tmp[0])] = trim(strtolower($tmp[1]));
          }
        }
    
        $encoding="utf-8"; //default
    
        if (isset($headers['content-type']))
        {
          $tmp = explode("=", $headers['content-type']);
          if (count($tmp)>1) $encoding = $tmp[1];
        }
        if ($encoding != "utf-8") $postResult = iconv($encoding, "UTF-8", $postResult);
    
    //$isWinCharset = mb_check_encoding($postResult, "windows-1251");
    //if ($isWinCharset) {
    //    $postResult = iconv("windows-1251", "UTF-8", $postResult);
    //}
        echo $postResult;
    
    ?><?php 
    header('HTTP/1.0 404 Not Found');
    ?>


    У этого сайта кодировка в норме e-qa.ru/autoprodazha а те у которых в meta - windows-1251 все слетели в иероглифы, пример такого сайта goro.tibetastromed.ru

    Т.е. получается, что получилось то, что было изначально, до применения этого кода:
    $isWinCharset = mb_check_encoding($postResult, "windows-1251");
    if ($isWinCharset) {
        $postResult = iconv("windows-1251", "UTF-8", $postResult);
    }


    Жесть. Как решить не понятно, в самом деле недели две-три над этим бьюсь :(
  • Как исправить кодировку сайта в ответ на cURL запрос?

    @9StarRu Автор вопроса
    $header_size = curl_getinfo($h,CURLINFO_HEADER_SIZE);
    $result['header'] = substr($response, 0, $header_size);
    вставил в свой код, а
    encoding='utf-8' # кодировка по умолчанию
    tmp = r.headers.get('Content-Type').split('=') #режем по =, что справа - кодировка
    if len(tmp)>1: #если кодировка в заголовке есть - будет 2 элемента
        encoding=tmp[-1] # тогда берём последний
    page = r.content.decode(encoding)

    не получилось.
  • Как исправить кодировку сайта в ответ на cURL запрос?

    @9StarRu Автор вопроса
    Глупый вопрос, ваш фрагмент для python в php работать будет?

    Вот мой код:
    $ch = curl_init();
        $user_agent = $_SERVER["HTTP_USER_AGENT"];
        curl_setopt($ch, CURLOPT_USERAGENT, $user_agent);
        curl_setopt($ch, CURLOPT_URL, $engine_url );
        //"identity", "deflate" , "gzip"
        //curl_setopt($ch, CURLOPT_ENCODING, 'gzip,deflate');
        curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    
        $postResult = curl_exec($ch);
    
        curl_close($ch);
    
    $isWinCharset = mb_check_encoding($postResult, "windows-1251");
    if ($isWinCharset) {
        $postResult = iconv("windows-1251", "UTF-8", $postResult);
    }
        echo $postResult;
  • CURL как перекодировать ответ?

    @9StarRu Автор вопроса
    9StarRu: мне подсказали, что кодировка у таких сайтов в самом деле UTF-8, так это или нет не могу сказать точно.
  • CURL как перекодировать ответ?

    @9StarRu Автор вопроса
    GTRxShock: пока я выдергиваю полностью весь html код, уже на этом этапе у меня пробелы с кодировкой.
    Убираю ваш код - все ок, но слетают сотня других сайтов.
    Ваше решение самое лучшее! Только вот действительно видимо mb_check_encoding перекодирует нормальные символы.
    Т.е. проблема в самом начале строки, а не где-то в строке, mb_check_encoding сразу портит кодировку у некоторых сайтов.