PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи

Страниц (4): [1] 2 3 4 »

> Найдено сообщений: 54
Vdomah Отправлено: 14 Января, 2014 - 23:58:16 • Тема: ODBC кодировка при импорте • Форум: Работа с СУБД

Ответов: 4
Просмотров: 8118
Последовательность телодвижений обнаружена!

Во-первых, файлу .php даем кодировку ANSI.
Во-вторых, делаем следующую странную вещь с проблемной строкой $row['TEX_TEXT']:
PHP:
скопировать код в буфер обмена
  1. $enc = mb_detect_encoding($row['TEX_TEXT']);
  2. $row['TEX_TEXT'] = mb_convert_encoding($row['TEX_TEXT'],$enc,'windows-1251');

И все чудесно импортируется.

Получается, вытягиваем строку, про которую mb_detect_encoding говорит, что она в ASCII, то есть практически в utf-8. Просто так без обработки она имеет кракозябровый вид. Теперь, после попадания строки к нам в скрипт с кодировкой ANSI, она получает кодировку windows-1251. Далее нужно с помощью mb_convert_encoding перекодировать ее из windows-1251 обратно в ее оригинальную кодировку. И все.

Было бы интересно узнать почему именно этот вариант заработал, очень буду рад если кто-то объяснит.
Vdomah Отправлено: 14 Января, 2014 - 16:56:49 • Тема: ODBC кодировка при импорте • Форум: Работа с СУБД

Ответов: 4
Просмотров: 8118
Продолжаем исследоавния:
Сниппет с установкой всех переменных на деле не особо влияет на результат. Главное, что влияет, - mb_convert_encoding. Если применить
PHP:
скопировать код в буфер обмена
  1. $row['TEX_TEXT'] = mb_convert_encoding($row['TEX_TEXT'],'utf-8',$enc);

т.е. указать исходную кодировку, то получаю кракозябры.
Если так:
PHP:
скопировать код в буфер обмена
  1. $row['TEX_TEXT'] = mb_convert_encoding($row['TEX_TEXT'],'utf-8');

т.е. не указывая исходной кодировки - тоже кракозябры.

И даже так:

т.е. перекодируя из исходной в нее же - опять кракозябры.

Если его не применить вообще, то получаю пустые строки в базе.
Vdomah Отправлено: 14 Января, 2014 - 14:34:16 • Тема: ODBC кодировка при импорте • Форум: Работа с СУБД

Ответов: 4
Просмотров: 8118
peters пишет:
А попробуй перед вставкой во вторую базу сделать iconv русским полям ?

Попробовал - iconv отдает false как ни крути. В комментах к iconv на php.net прочитал вот так попробовать:
PHP:
скопировать код в буфер обмена
  1. $enc = mb_detect_encoding($row['TEX_TEXT']);
  2. $row['TEX_TEXT'] = mb_convert_encoding($row['TEX_TEXT'],'utf-8',$enc);
  3.  

Ура, теперь в мою базу вставляются не пустые поля, а кракозябры)) Хоть что-то.
(Добавление)
Опять же на php.net нашел такой сниппет:
PHP:
скопировать код в буфер обмена
  1.  
  2. mysql_query("SET character_set_results = 'utf8', character_set_client = 'utf8', character_set_connection = 'utf8', character_set_database = 'utf8', character_set_server = 'utf8'", $conn);
  3.  

Применил его к базе, в которую вставляю. Результат: теперь вместо кракозябров вопросы!
Vdomah Отправлено: 14 Января, 2014 - 12:59:49 • Тема: ODBC кодировка при импорте • Форум: Работа с СУБД

Ответов: 4
Просмотров: 8118
Здравствуйте, уважаемые!

Работаю с базой в Transbase (текдок), откуда надо вытянуть таблицу с русскими строками. Но все кириллические строки вытягиваются пустыми. Ладно бы кракозябры, а так вообще ничего.

Подключаюсь таким образом:
PHP:
скопировать код в буфер обмена
  1. function odbcConnect()
  2.     {
  3.         $constr = "Driver={" . $this->odbc_driver . "};Database=" . $this->odbc_db . "@" . $this->odbc_serv . "; CharacterSet = UTF-8";
  4.         $this->odbc_id = odbc_connect($constr, $this->odbc_login, $this->odbc_pass);
  5.         //odbc_exec($this->odbc_id, "SET NAMES 'UTF8'");
  6.         //odbc_exec($this->odbc_id, "SET client_encoding='UTF-8'");
  7.         odbc_autocommit($this->odbc_id, TRUE);
  8.         $this->odbc_id ? print 'odbc success!' : 'odbc fail!';
  9.     }

С такими параметрами:
PHP:
скопировать код в буфер обмена
  1.  
  2.     public $odbc_serv = "localhost";
  3.     public $odbc_login = "tecdoc";
  4.     public $odbc_pass = "tcd_error_0";
  5.     public $odbc_db = "TECDOC_CD_3_2013";
  6.     public $odbc_driver = "Transbase ODBC TECDOC CD 3_2013";
  7.     public $odbc_id = "";
  8.  

Т.е. строка подключения выглядит так:
PHP:
скопировать код в буфер обмена
  1. "Driver={Transbase ODBC TECDOC CD 3_2013};Database=TECDOC_CD_3_2013@localhost; CharacterSet = UTF-8"

CharacterSet = UTF-8 добавил уже во время поиска причины этой проблемы.
Также нагуглил варианты: SET NAMES 'UTF8' и SET client_encoding='UTF-8' (указаны в odbcConnect()), которые ничего не дали.
Кодировка строк в базе - ASCII

Случалась раньше подобная проблема с mysql, где также нужно было спарсить базу в ASCII, но тогда указание кодировки в строке подключения помогло: 'mysql:dbname=wh;host=localhost;charset=utf8';

Буду очень рад всякой помощи!

UPD: сразу появилась мысль - может строка теряется не при вытяжке из базы, а при вставке ее во вторую базу? Потому что консоль выдает все таки не пустые строки, а кракозябры перед вставкой.
Vdomah Отправлено: 23 Декабря, 2013 - 17:34:56 • Тема: Безопасность при авторизации в попапе • Форум: HTTP и PHP

Ответов: 9
Просмотров: 4797
IllusionMH пишет:
Vdomah, разлогиньтесь и зайдите на главную страницу этого форума с открытой консолью ;)

Хахаха))) От жеж файрбаг, паникует зря и меня заставил задуматься!
Vdomah Отправлено: 23 Декабря, 2013 - 16:51:28 • Тема: Безопасность при авторизации в попапе • Форум: HTTP и PHP

Ответов: 9
Просмотров: 4797
IllusionMH пишет:
Зависит от приложения. Если это банк и работа с деньгами, сертификат нужен, либо если утечка может стоить денег, которые в несколько раз больше. чем необходимые для сертификатов.

Не банк, так что, я понял, такая ситуация нормальна. Спасибо.
Vdomah Отправлено: 23 Декабря, 2013 - 15:28:14 • Тема: Безопасность при авторизации в попапе • Форум: HTTP и PHP

Ответов: 9
Просмотров: 4797
Мелкий
Цитата:
И что?
Это совершенно логично, что клиент может получить доступ к своему паролю до его инкапсуляции в HTTPS.

Вы хотите сказать, что так, как у меня сейчас, можно оставлять?

IllusionMH
Цитата:
Единственный способ - получение/установка SSL сертификата и настройка сервера.

Полистал ссылки по этому поводу - везде длинные сложные инструкции. Мне не лень, но хочу уточнить: необходимо ли это применять в данном случае? И чего можно опасаться, если не сделать?
Vdomah Отправлено: 23 Декабря, 2013 - 12:10:11 • Тема: Безопасность при авторизации в попапе • Форум: HTTP и PHP

Ответов: 9
Просмотров: 4797
Цитата:
Vdomah, https.

Апдейтил свой первый пост. Это понятно, а конкретно что как сделать?
Vdomah Отправлено: 23 Декабря, 2013 - 11:57:57 • Тема: Безопасность при авторизации в попапе • Форум: HTTP и PHP

Ответов: 9
Просмотров: 4797
Здравствуйте!

Нужно сделать авторизацию в попапе. Хочу понять как это сделать наиболее правильным путем. Основной момент - как передать строку пароля на сервер.

Допустим, два поля: логин, пароль. Создаем массив, пихаем их туда и аяксом шлем на сервер, где сверяем с базой, после чего редиректим или отдаем строку с ошибкой. Но получается некрасиво - открыв консольку можно свободно прочитать строку пароля в описании ПОСТ-запроса.

Кроме того, Файрбаг толсто намекает:
Форма с незащищённым (http://) действием содержит поля для ввода пароля. Это представляет собой угрозу безопасности, которая позволяет украсть учетные данные для входа пользователя.

Незащищённая (http://) страница содержит поля для ввода пароля. Это представляет собой угрозу безопасности, которая позволяет украсть учетные данные для входа пользователя.

Подскажите, как наиболее канонично решаются такие задачи? Вряд ли хватит сделать мд5 на пароль. Как-то наверно надо из http сделать https?
Vdomah Отправлено: 28 Ноября, 2013 - 19:23:03 • Тема: Импорт в базу большого колличества строк через ssh • Форум: Работа с СУБД

Ответов: 5
Просмотров: 1329
Цитата:
if($i==30000) exit;

Проверочных конечно)))
Цитата:
Решение простое - объединить запросы в транзакцию.

Черт, таблица кроме всего в MyISAM. Лдано, попробую транзакции.
Vdomah Отправлено: 28 Ноября, 2013 - 17:25:38 • Тема: Импорт в базу большого колличества строк через ssh • Форум: Работа с СУБД

Ответов: 5
Просмотров: 1329
IllusionMH пишет:
Vdomah, он там по памяти или по таймауту не отваливается?
А почему бы не использовать обычный csv файл?

Говорят про большую нагрузку в техподдержке. Но на всякий случай уточню еще раз, вдруг не так их понял.

А чем csv тут поможет? Быстрее будет сам пхп вытягивать данные, а запросы в БД не поменяются ведь, или о чем вы?
Vdomah Отправлено: 28 Ноября, 2013 - 16:57:49 • Тема: Импорт в базу большого колличества строк через ssh • Форум: Работа с СУБД

Ответов: 5
Просмотров: 1329
Здравствуйте!!

Задача в следующем: нужно наладить импорт данных из .xlsx в базу.

В файле .xlsx около 130 000 строк. Скрипт написан и импорт на локалке через командную строку успешно происходит. В цикле вытягивается поочередно каждая строка из екселя и апдейтится строка в базе. Но когда запускаю тот же скрипт на хостинге через ssh, импорт валит сервер где-то на 30 000 строке.

Добавлено:
Возможно проблема в запросе. Может оптимизировать как-нибудь множественный UPDATE?

Подскажите чем можно в этой ситуации помочь. Также привожу скрипт на всякий случай:
PHP:
скопировать код в буфер обмена
  1. $strings = simplexml_load_file('import/xl/sharedStrings.xml');
  2.         $sheet = simplexml_load_file('import/xl/worksheets/sheet1.xml');
  3.         $xlrows = $sheet->sheetData->row;
  4.         $i=0;
  5.         foreach ($xlrows as $xlrow) {
  6.             $arr = array();
  7.            
  8.             // In each row, grab it's value
  9.             foreach ($xlrow->c as $cell) {
  10.                 $v = (string) $cell->v;
  11.                
  12.                 // If it has a "t" (type?) of "s" (string?), use the value to look up string value
  13.                 if (isset($cell['t']) && $cell['t'] == 's') {
  14.                     $s  = array();
  15.                     $si = $strings->si[(int) $v];
  16.                    
  17.                     // Register & alias the default namespace or you'll get empty results in the xpath query
  18.                     $si->registerXPathNamespace('n', 'http://schemas.openxmlformats.org/spreadsheetml/2006/main');
  19.        
  20.                     // Cat together all of the 't' (text?) node values
  21.                     foreach($si->xpath('.//n:t') as $t) {
  22.                         $s[] = (string) $t;
  23.                     }
  24.        
  25.                     $v = implode($s);
  26.                 }
  27.                
  28.                 $arr[] = $v;
  29.             }
  30.            
  31.             // Assuming the first row are headers, stick them in the headers array
  32.             if (count($headers) == 0) {
  33.                 $headers = $arr;
  34.             } else {
  35.                 // Combine the row with the headers - make sure we have the same column count
  36.                 $values = array_pad($arr, count($headers), 0);
  37.                 $row    = array_combine($headers, $values);
  38.  
  39.                 $name = explode('=',$row['NAME']);
  40.                 $article = preg_replace( '/[^0-9]/', '', $name[0] );
  41.                
  42.                 if($row['KOL1'] > 0)
  43.                     $status = 1;
  44.                 else
  45.                 if($row['KOL2'] > 0 || $row['KOL3'] > 0 || $row['KOL4'] > 0)
  46.                     $status = 2;
  47.                 else
  48.                     $status = 0;
  49.  
  50.                     $mysql_query = "UPDATE `ARTICLES` JOIN `ART_LOOKUP` ON `ART_ID` = `ARL_ART_ID` SET `price` = " . $row['CENA'] .", `status` = " . $status . ", `article` = ARL_DISPLAY_NR WHERE `ARL_SEARCH_NUMBER` = '" . $article . "'";
  51.  
  52.                 if(!mysql_query($mysql_query)){
  53.                     echo "Invalid query: " . mysql_error(); exit;
  54.                 }else{
  55.                   echo 'inserted' . $i . ' '; if($i==30000) exit;
  56.                 }
  57.                 $i++;
  58.             }
  59.         }
Vdomah Отправлено: 18 Июня, 2013 - 23:05:05 • Тема: Из-за добавления параметров $_GET не работает AJAX • Форум: Работа с сетью

Ответов: 1
Просмотров: 1248
Заметил, что картинки, которые выводятся не через фон, тегом img не отображаются. Т.е. по прописанным путям они не находятся. Значит и Аякс скорее всего не срабатывает, потому что не находит файл-обработчик.
Почему это происходит по прежнему не пойму.

Заменил на абсолютные пути и, конечно, работает, но что происходит хз))
Vdomah Отправлено: 18 Июня, 2013 - 14:42:28 • Тема: Из-за добавления параметров $_GET не работает AJAX • Форум: Работа с сетью

Ответов: 1
Просмотров: 1248
Здравствуйте!

Есть каталог товаров с фильтрацией на AJAX. Изначально делалось рассчитывая на два GET-параметра:
CODE (htmlphp):
скопировать код в буфер обмена
  1. Array ( [content] => catalog [id] => 10 )
По id выбирается страница с соответствующей страной.

В .htaccess прописано следующее
CODE (htmlphp):
скопировать код в буфер обмена
  1. RewriteRule ^([^/\.]+)-c([0-9]+)$ index.php?content=catalog&id=$2 [L,QSA]

т.е. по /goods_page-c9 получаем нужную страницу с работающими фильтрами.

Теперь надо к этому приделать поиск, т.е. передавать на страницу через гет еще несколько параметров чтобы они, попав в фильтр, вывели нужные товары сразу при переходе на страницу.

Для начала добавил один параметр в ГЕТ:
CODE (htmlphp):
скопировать код в буфер обмена
  1. Array ( [content] => catalog [id] => 9 [country] => 12 )

Как только это сделано фильтр перестает работать. Еррор-лог выводит следующее несколько раз:
File does not exist: /root_dir/goods_page-c9

В .htaccess для адреса с новым параметром прописал следующее:

CODE (htmlphp):
скопировать код в буфер обмена
  1. RewriteRule ^([^/\.]+)-c([0-9]+)/country/([0-9]+)?$ index.php?content=catalog&id=$2&country=$3 [L,QSA]

Т.е. добавил всего один параметр. И почему-то фильтра умирают... Ошибка вроде php, но что значит File does not exist: /root_dir/goods_page-c9? Почему он ищет в корневой папке файл с именем запрашиваемой страницы, которой, естественно, нет?
Vdomah Отправлено: 14 Мая, 2013 - 16:28:50 • Тема: Smarty текст через объект и переменную • Форум: Вопросы новичков

Ответов: 6
Просмотров: 255
Цитата:
так спроси у того кто сказал в чем смысл сказаного.

Чел был недоступен. Спросил. Это для возможности редактирования из админки.

Страниц (4): [1] 2 3 4 »
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB