За последние 24 часа нас посетили 17742 программиста и 1624 робота. Сейчас ищут 1799 программистов ...

Проблема с кодировкой экспорта БД в файл

Тема в разделе "PHP для новичков", создана пользователем Moxs, 17 май 2017.

  1. Moxs

    Moxs Новичок

    С нами с:
    15 апр 2017
    Сообщения:
    14
    Симпатии:
    0
    Здравствуйте.

    Мне понадобилась реализация экспорта БД в файл, для дальнейшего создания файла бэкапа.
    Нашел скрипт, вроде все работает, записывает в файл, но возникает проблема, записывает он в кодировке 1251, а мне требуется utf-8.
    На просторах интернета вычитал что скрипт должен быть в кодировке utf-8 и тогда запись будет в utf-8.
    Вообщем, поменял везде кодировку на utf-8 (все файлы с расширением php, таблицы базы данных, в htaccess прописал кодировку utf-8) и все равно не получается.

    Вот сам скрипт:
    PHP:
    1. <?php
    2.  
    3.  
    4.  
    5. function backup_tables($file){
    6.  
    7.     require 'include/db_settings.php';
    8.  
    9.     $host = $hostname;
    10.     $user = $username;
    11.     $pass = $password;
    12.     $name = $dbname;
    13.  
    14.  
    15.  
    16.     $link = mysql_connect($host, $user, $pass);
    17.     mysql_select_db($name, $link);
    18.     file_put_contents($file, '');
    19.    
    20.     //получение списка таблиц
    21.     $tables = array();
    22.     $result = mysql_query('SHOW TABLES;', $link);
    23.     while($row = mysql_fetch_row($result)){
    24.         $tables[] = $row[0];
    25.     }
    26.    
    27.     //обработка таблиц
    28.     if(count($tables)>0){
    29.         foreach($tables as $table){
    30.             backup_table_structure($file, $table, $link);
    31.             backup_table_data($file, $table, $link);
    32.         }
    33.     }
    34. }
    35.  
    36. function backup_table_structure($file, $table, $link){
    37.     //получение и сохранение структуры таблицы
    38.     $content = 'DROP TABLE IF EXISTS `'.$table."`;\n\n";
    39.     $result = mysql_fetch_row(mysql_query('SHOW CREATE TABLE `'.$table.'`;', $link));
    40.     $content .= $result[1].";\n\n";
    41.     file_put_contents($file, $content, FILE_APPEND);
    42. }
    43.  
    44. function backup_table_data($file, $table, $link){
    45.     //получение и сохранение данных таблицы
    46.     $result = mysql_fetch_row(mysql_query('SELECT COUNT(*) FROM `'.$table.'`;', $link));
    47.     $count = $result[0];
    48.     $delta = 500;
    49.    
    50.     //если данные существуют
    51.     if($count>0){
    52.         //определяем не числовые поля
    53.         $not_num = array();
    54.         $result = mysql_query('SHOW COLUMNS FROM `'.$table.'`;', $link);
    55.         $start = 0;
    56.         while($row = mysql_fetch_row($result)){
    57.             if (!preg_match("/^(tinyint|smallint|mediumint|bigint|int|float|double|real|decimal|numeric|year)/", $row[1])) {
    58.                 $not_num[$start] = 1;
    59.             }
    60.             $start++;
    61.         }
    62.         //начинаем производить выборки данных
    63.         $start = 0;
    64.         while($count>0){
    65.             $result = mysql_query('SELECT * FROM `'.$table.'` LIMIT '.$start.', '.$delta.';', $link);
    66.             $content = 'INSERT INTO `'.$table.'` VALUES ';
    67.             $first = true;
    68.             while($row = mysql_fetch_row($result)){
    69.                 $content .= $first ? "\n(" : ",\n(";
    70.                 $first2 = true;
    71.                 foreach($row as $index=>$field){
    72.                     if(isset($not_num[$index])){
    73.                         $field = addslashes($field);
    74.                         $field = ereg_replace("\n", "\\n", $field);
    75.                         $content .= !$first2 ? (',"'.$field.'"') : ('"'.$field.'"');
    76.                     }else{
    77.                         $content .= !$first2 ? (','.$field) : $field;
    78.                     }
    79.                     $first2 = false;
    80.                 }
    81.                 $content .= ')';
    82.                 $first = false;
    83.             }
    84.             //сохраняем результаты выборки
    85.             file_put_contents($file, $content.";\n\n", FILE_APPEND);
    86.             $count -= $delta;
    87.             $start += $delta;
    88.         }
    89.     }
    90. }
    91.  
    92. ?>
    Настройки сервера:
    2017-05-17 20_49_18-Настройки [Профиль_ Default].png
     
  2. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.797
    Симпатии:
    1.331
    Адрес:
    Лень
  3. Moxs

    Moxs Новичок

    С нами с:
    15 апр 2017
    Сообщения:
    14
    Симпатии:
    0