- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Что делать, если ваша email-рассылка попала в спам
10 распространенных причин и решений
Екатерина Ткаченко
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
просто сам скрипт пхп поменять, чтобы он декодировал в utf это как раз incov при считывании файла.
Так php не имеет доступ к строкам. Если я сделаю считывание файла, сервер будет падать при каждой загрузке файла. Так как в файле очень сильно много записей.
Так php не имеет доступ к строкам. Если я сделаю считывание файла, сервер будет падать при каждой загрузке файла. Так как в файле очень сильно много записей.
Ну а что Вы ждёте магии чтоли?
Сервер падает от 2 мегабайтного файла?
почему нельзя читать файл построчно, менять у строки кодировку и записывать в новый файл?
Потому что если делаю fgetcsv() - коряво работают некоторые кодировки. Хотя я локаль указал правильно.
Потом делаю fgets();
Разбиваю каждую строку с помощью explode() и загоняю в базу.
Когда текстовый файл размером в 1-2 мегабайта, от количества обращений в бд сервер вешается.
Точнее Выдает Bad Gateway.
В общем, можно не обсуждая просто сказать, возможно сделать с теми условиями, которые есть? И если можно то как? Вот такой ответ будет максимально ценен.
нет, никак
Gaaarfild, руками (fgets()) парсите файл, т.е. построчно его разбираете и при необходимости преобразовываете кодировку. затем либо группируете запросы к БД, чтобы сократить их количество, либо разносите их во времени, чтобы сервер не ложился.
P.S. Сервер обычно ложится не от количества обращений, а от их "качества".
точно не подскажу (не спрогнозирую) на перед как тут сделать на 100% чтобы оно было рабочее, то как делал я не, много по другому:
написать perl скрипт (который на хостинге будет в CGI), отошли запрос через ajax на jquery ему данные не ожидаясь результат... он выполнится в любом случае!! НО веб-сервер выдаст просто шибку 500 - нам это все равно так как мы уже отослали ajax запрос и скрипт выполнится полностью все равно в любом слуачае... :)
Gaaarfild, руками (fgets()) парсите файл, т.е. построчно его разбираете и при необходимости преобразовываете кодировку. затем либо группируете запросы к БД, чтобы сократить их количество, либо разносите их во времени, чтобы сервер не ложился.
P.S. Сервер обычно ложится не от количества обращений, а от их "качества".
А разносить по времени с помощью sleep()?
Просто я на каждую строчку делал INSERT. Ибо данные помещаются не только в одну таблицу, а еще и с FK в другие таблицы.
Вероятнее всего можно, но "слегка" нетрадиционно. Попробуйте через 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.