Вам необходимо, чтобы это на хостинге работало? Или это база, и ее надо залить на хостинг? Если нет, может поставить денвер, и на локальной машине провернуть операцию. Там нету лимитов, хоть ставьте всю память своей машины.
http://www.denwer.ru/
мне надо переработать файл. разово.
денвер- поищу что такое.спасибо
Читайте через fgets():https://www.php.net/manual/ru/function.fgets.php
Спасибо. Попробовал. Не, хватает на 10 тыс строк
$cvcvcvcv=0; $filesotbor = fopen($fajl2,'w');//открываем файл в режиме записи данных // заодно УДАЛЯЕТ СОДЕРЖИМОЕ ФАЙЛА$handle = @fopen("file/iqcbhqelxh.csv", "r");if ($handle) { while (($buffer = fgets($handle, 4096)) !== false) { // echo $buffer; $cvcvcvcv++; if ($cvcvcvcv == 100 ) {echo "<br>обработано $cvcvcvcv";} if ($cvcvcvcv == 1000 ) {echo "<br>обработано $cvcvcvcv";} if ($cvcvcvcv == 10000 ) {echo "<br>обработано $cvcvcvcv";} if ($cvcvcvcv == 100000 ) {echo "<br>обработано $cvcvcvcv";} if ($cvcvcvcv == 300000 ) {echo "<br>обработано $cvcvcvcv";} $vbzx = array(); $stroka = $buffer; $vbzx = explode('"', $stroka); $url = $vbzx[1]; //echo "<br>$url"; if (in_array("$url", $urlmass)) { //echo "Нашёл $url<br>"; } else { //echo "Нету $url добавим<br>"; $urlmass[] = $url; $newmass[] = $stroka; $stroka = trim($stroka, "\n"); $e = "$stroka\n"; fwrite($filesotbor,$e); } } if (!feof($handle)) { echo "Ошибка: fgets() неожиданно потерпел неудачу\n"; } fclose($handle); fclose($filesotbor);//закрываем файл}
Делите файл или действительно через mysql пробуйте как-нибудь.
Вообще на локалке это провернуть бы, да и всё.
Разделив файл я не понимаю, как можно оставить уник для всего файла. Уник то можно будет оставить только для "кусков". Конечно можно их потом объеденить и ещё раз уникализировать....
А как на локалке, чем?
База ругается. Началось неплохо. По 500-700 тыс строк добавлялось. Сейчас уже 7я итерация. Ставлю пропустить sql запросов 2470042 и добавляет в базу всего 100 тыс срок...
В начале скрипта или еще больше, если ошибка не пропадает и хостинг позволяет
1р 1Мб, 1р 1сек. Увеличить то могу, за денежку, но я же не знаю на сколько нужно))
Сейчас пробую залить этот файл в базу Mysql, ругается что файл большой, ну может в 5 итераций закину...
У ТС-а уже 256М выделено.
Это очень ресурсоёмкие задачи, поэтому попробуйте выделить 512М если позволяет хостинг на выполнение PHP
Но также надо смотреть код, может быть там какая-нибудь сортировка вставлена которая будет пожирать ресурсы.
$fajl2='price-result.txt'; $naborprices = array('file/iqcbhqelxh.csv'); foreach ($naborprices as $value333) { $fajl1=''.$value333.''; $file1 = array(); $file1 = file($fajl1); $cvcvcvcv=0; foreach ($file1 as $value555) { $cvcvcvcv++; if ($cvcvcvcv == 100 ) {echo "<br>обработано $cvcvcvcv";} if ($cvcvcvcv == 1000 ) {echo "<br>обработано $cvcvcvcv";} if ($cvcvcvcv == 10000 ) {echo "<br>обработано $cvcvcvcv";} if ($cvcvcvcv == 100000 ) {echo "<br>обработано $cvcvcvcv";} if ($cvcvcvcv == 300000 ) {echo "<br>обработано $cvcvcvcv";} $vbzx = array(); $stroka = $value555; $vbzx = explode('"', $stroka); $url = $vbzx[1]; //echo "<br>$url"; if (in_array("$url", $urlmass)) { //echo "Нашёл $url<br>"; } else { //echo "Нету $url добавим<br>"; $urlmass[] = $url; $newmass[] = $stroka; } } echo "<br>обработано"; $filesotbor = fopen($fajl2,'w');//открываем файл в режиме записи данных // заодно УДАЛЯЕТ СОДЕРЖИМОЕ ФАЙЛА foreach ($newmass as $value) { $value = trim($value, "\n"); $e = "$value\n"; fwrite($filesotbor,$e); } fclose($filesotbor);//закрываем файл }
В файле iqcbhqelxh.csv 3700000 строк.
Каждая строка имеет условно такой вид
"alibaba":true:true:false:"2020-11-30 12:27:49":2819:portugal
ошибка вываливается в строке где $file1 = file($fajl1);
ругается на ресурсы
Самый простой вариант - выставить большее количество памяти для php-процесса. Способ где это прописывать зависит от того, в каком виде у вас работает php.
Ошибка на считывании или уже при разбиении?
Ну я не разбиваю. Только пытаюсь прочитать файл целиком.
Но как текстовые факторы ранжирования.
Поясните, пожалуйста...
А теперь вернёмся к вопросу про фильтр за ссылки.
Что за фильтр?
Расскажите пожалуйста.