php Allowed memory size of 268435456 bytes exhausted (tried to allocate 119 bytes)

P
На сайте с 06.01.2009
Offline
601
914

Привет, подскажите, пожалуйста.

php file выполняю считывание файла 70Мб.

Понятно лезет ошибка. А как с ней бороться?

Мне надо считать файл в массив и проверить строки на уникальность оставив только уникальные по первому разделителю.

Ну т.е. строка условно "текст1":" текст2 ":" текст3 ":" текст4 "

и вот мне надо уник по текст1 оставить.


ps а разбить файл на меньшие я же не могу, тогда проблема оставить только уник по всему файлу.

Dreammaker
На сайте с 20.04.2006
Offline
569
#1
postavkin :

php file выполняю считывание файла 70Мб.

Понятно лезет ошибка. А как с ней бороться?

Самый простой вариант - выставить большее количество памяти для php-процесса. Способ где это прописывать зависит от того, в каком виде у вас работает php. 

postavkin :

php file выполняю считывание файла 70Мб.

Понятно лезет ошибка. А как с ней бороться?

Ошибка на считывании или уже при разбиении?

J0
На сайте с 27.02.2019
Offline
32
#2

В php.ini меняй memory_limit на большее значение

На пример так 

memory_limit=512M

D
На сайте с 28.06.2008
Offline
1108
#3
postavkin :

Привет, подскажите, пожалуйста.

php file выполняю считывание файла 70Мб.

Понятно лезет ошибка. А как с ней бороться?

ini_set("memory_limit", "200M");

В начале скрипта или еще больше, если ошибка не пропадает и хостинг позволяет

LEOnidUKG
На сайте с 25.11.2006
Offline
1762
#4
Dram #:

В начале скрипта или еще больше, если ошибка не пропадает и хостинг позволяет

У ТС-а уже 256М выделено.

Мне надо считать файл в массив и проверить строки на уникальность оставив только уникальные по первому разделителю.

Это очень ресурсоёмкие задачи, поэтому попробуйте выделить 512М если позволяет хостинг на выполнение PHP

Но также надо смотреть код, может быть там какая-нибудь сортировка вставлена которая будет пожирать ресурсы.

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

Самый простой вариант - выставить большее количество памяти для php-процесса. Способ где это прописывать зависит от того, в каком виде у вас работает php. 

Ошибка на считывании или уже при разбиении?

Ну я не разбиваю. Только пытаюсь прочитать файл целиком.

P
На сайте с 06.01.2009
Offline
601
#6
LEOnidUKG #:

У ТС-а уже 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);

ругается на ресурсы


P
На сайте с 06.01.2009
Offline
601
#7
Dram #:

В начале скрипта или еще больше, если ошибка не пропадает и хостинг позволяет

1р 1Мб, 1р 1сек. Увеличить то могу, за денежку, но я же не знаю на сколько нужно))

Сейчас пробую залить этот файл в базу Mysql, ругается что файл большой, ну может в 5 итераций закину...

LEOnidUKG
На сайте с 25.11.2006
Offline
1762
#8

Делите файл или действительно через mysql пробуйте как-нибудь.

Вообще на локалке это провернуть бы, да и всё.

W1
На сайте с 22.01.2021
Offline
306
#9
postavkin :
php file выполняю считывание файла 70Мб.

Читайте через fgets():
https://www.php.net/manual/ru/function.fgets.php

Мой форум - https://webinfo.guru –Там я всегда на связи
P
На сайте с 06.01.2009
Offline
601
#10
LEOnidUKG #:

Делите файл или действительно через mysql пробуйте как-нибудь.

Вообще на локалке это провернуть бы, да и всё.

Разделив файл я не понимаю, как можно оставить уник для всего файла. Уник то можно будет оставить только для "кусков". Конечно можно их потом объеденить и ещё раз уникализировать....

А как на локалке, чем?

База ругается. Началось неплохо. По 500-700 тыс строк добавлялось. Сейчас уже 7я итерация. Ставлю пропустить sql запросов  2470042  и добавляет в базу всего 100 тыс срок...

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