сменить кодировку файла.

123
LEOnidUKG
На сайте с 25.11.2006
Offline
1774
#11

просто сам скрипт пхп поменять, чтобы он декодировал в utf это как раз incov при считывании файла.

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/ ✅ Настройка и оптимизация серверов https://getmanyspeed.ru/
G
На сайте с 24.10.2009
Offline
51
#12

Так php не имеет доступ к строкам. Если я сделаю считывание файла, сервер будет падать при каждой загрузке файла. Так как в файле очень сильно много записей.

LEOnidUKG
На сайте с 25.11.2006
Offline
1774
#13
Gaaarfild:
Так php не имеет доступ к строкам. Если я сделаю считывание файла, сервер будет падать при каждой загрузке файла. Так как в файле очень сильно много записей.

Ну а что Вы ждёте магии чтоли?

Сервер падает от 2 мегабайтного файла?

dvaes
На сайте с 03.09.2007
Offline
65
#14

почему нельзя читать файл построчно, менять у строки кодировку и записывать в новый файл?

G
На сайте с 24.10.2009
Offline
51
#15

Потому что если делаю fgetcsv() - коряво работают некоторые кодировки. Хотя я локаль указал правильно.

Потом делаю fgets();

Разбиваю каждую строку с помощью explode() и загоняю в базу.

Когда текстовый файл размером в 1-2 мегабайта, от количества обращений в бд сервер вешается.

Точнее Выдает Bad Gateway.

В общем, можно не обсуждая просто сказать, возможно сделать с теми условиями, которые есть? И если можно то как? Вот такой ответ будет максимально ценен.

MD
На сайте с 11.04.2010
Offline
22
#16

нет, никак

Robin_Bad
На сайте с 24.12.2007
Offline
85
#17

Gaaarfild, руками (fgets()) парсите файл, т.е. построчно его разбираете и при необходимости преобразовываете кодировку. затем либо группируете запросы к БД, чтобы сократить их количество, либо разносите их во времени, чтобы сервер не ложился.

P.S. Сервер обычно ложится не от количества обращений, а от их "качества".

rtyug
На сайте с 13.05.2009
Offline
263
#18

точно не подскажу (не спрогнозирую) на перед как тут сделать на 100% чтобы оно было рабочее, то как делал я не, много по другому:

написать perl скрипт (который на хостинге будет в CGI), отошли запрос через ajax на jquery ему данные не ожидаясь результат... он выполнится в любом случае!! НО веб-сервер выдаст просто шибку 500 - нам это все равно так как мы уже отослали ajax запрос и скрипт выполнится полностью все равно в любом слуачае... :)

Спалил тему: Pokerstars вывод WMZ, etc на VISA 0% или SWIFT + Конверт USD/GBP,etc (net profit $0,5 млрд) (https://minfin.com.ua/blogs/94589307/115366/) Monobank - 50₴ на счет при рег. тут (https://clck.ru/DLX4r) | Номер SIP АТС Москва 7(495) - 0Ꝑ, 8(800) - 800Ꝑ/0Ꝑ (http://goo.gl/XOrCSn)
G
На сайте с 24.10.2009
Offline
51
#19
Robin_Bad:
Gaaarfild, руками (fgets()) парсите файл, т.е. построчно его разбираете и при необходимости преобразовываете кодировку. затем либо группируете запросы к БД, чтобы сократить их количество, либо разносите их во времени, чтобы сервер не ложился.

P.S. Сервер обычно ложится не от количества обращений, а от их "качества".

А разносить по времени с помощью sleep()?

Просто я на каждую строчку делал INSERT. Ибо данные помещаются не только в одну таблицу, а еще и с FK в другие таблицы.

BR
На сайте с 09.02.2008
Offline
19
#20

Вероятнее всего можно, но "слегка" нетрадиционно. Попробуйте через proc_open, если шелла нет, но выполнение команд из PHP есть. Что-то вроде:

$spec = array(array("pipe", "r"), array("pipe", "w"), array("pipe", "w"));

$process = proc_open('iconv -f cp1251 -t utf8 filename.csv', $spec, $pipes, null, $_ENV);

if (is_resource($process)) {

$line = fgets($pipes[1]);

}

Да, извращение, я в курсе. Но делает то, что вы хотите - прозрачно перекодирует файл без полной его загрузки в память.

А еще если процессорного времени мало, а памяти много - используйте INSERT DELAYED. Ну, дабы избежать проблем с nginx Bad Gateway.

123

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий