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

P
На сайте с 06.01.2009
Offline
592
#11
webinfo #:

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

о, интересно.  Это похоже построчное чтение файла... или я не верно понял
P
На сайте с 06.01.2009
Offline
592
#12
webinfo #:

Читайте через 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);//закрываем файл
}
htexture
На сайте с 29.05.2017
Offline
194
#13

Вам необходимо, чтобы это на хостинге работало? Или это база, и ее надо залить на хостинг? Если нет, может поставить денвер, и на локальной машине провернуть операцию. Там нету лимитов, хоть ставьте всю память своей машины.

http://www.denwer.ru/

Денвер - локальный сервер. Скачать Денвер, установить WAMP сервер для localhost (PHP 5.3.13, MySQL 5.1, PostgreSQL 8.4 etc.) « Denwer
Денвер - локальный сервер. Скачать Денвер, установить WAMP сервер для localhost (PHP 5.3.13, MySQL 5.1, PostgreSQL 8.4 etc.) « Denwer
  • www.denwer.ru
Джентльменский набор Web-разработчика («Д.н.w.р», читается «Денвер») — проект , локальный сервер (Apache, PHP, MySQL, Perl и т.д.) и программная оболочка, используемые Web-разработчиками для разработки сайтов на «домашней» (локальной) Windows-машине без необходимости выхода в Интернет. Главная особенность Денвера — удобство при удаленной работе...
W1
На сайте с 22.01.2021
Offline
283
#14
postavkin #:

хватает на 10 тыс строк

И какую ошибку выдаёт? А если без этих строк?

$urlmass[] = $url;
$newmass[] = $stroka;

Эти строки нивелируют весь эффект от построчного чтения, Вы повторяете ту же ошибку, что и в начале. Держите в памяти два огромных массива.
Я когда советовал fgets, имел в виду решение проблемы чтения файла, что и отражено в цитировании фразы из стартпоста. А дальше - в БД.

Мой форум - https://webinfo.guru –Там я всегда на связи
W1
На сайте с 22.01.2021
Offline
283
#15
И так, к сведению: строка гораздо менее ресурсоёмка, чем массив. На большом объёме лучше дописывать ваш уникальный текст в строку через разделитель (например, |текст|текст|текст|текст|текст|текст|) и искать совпадение через strpos($str, '|текст|').
Но и строка имеет предел. У вас размер файла довольно большой.
P
На сайте с 06.01.2009
Offline
592
#16
htexture #:

Вам необходимо, чтобы это на хостинге работало? Или это база, и ее надо залить на хостинг? Если нет, может поставить денвер, и на локальной машине провернуть операцию. Там нету лимитов, хоть ставьте всю память своей машины.

http://www.denwer.ru/

мне надо переработать файл. разово.

денвер- поищу что такое.спасибо

P
На сайте с 06.01.2009
Offline
592
#17
webinfo #:

Я когда советовал fgets, имел в виду решение проблемы чтения файла, что и отражено в цитировании фразы из стартпоста. А дальше - в БД.

Ясно, спс. Я думал  чтобы fgets перерабатывать строки на лету (но без одного массива точно не обойтись).

А это оказывается чтобы построчно в базу перекинуть файл. Ок.

P
На сайте с 06.01.2009
Offline
592
#18

Думаю найду решение.

Всем большое спасибо, что дали советы и уделили время.👍

P
На сайте с 06.01.2009
Offline
592
#19
webinfo #:

Я когда советовал fgets, имел в виду решение проблемы чтения файла, что и отражено в цитировании фразы из стартпоста. А дальше - в БД.

Уперся в непонятную ошибку, подскажите, плз что делаю не так ?

        $handle = @fopen("file/test.csv", "r");
        if ($handle) {
                while (($buffer = fgets($handle, 4096)) !== false) {
                   // echo $buffer;
                        $cvcvcvcv++;
                        if ($cvcvcvcv == 1 ) {echo "<br>обработано $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);
// ТУТ ВРЕМЕННО ТАК ПОНЯТЬ В ЧЕ ОШИБКА, переменные поставлю потом
                       $result2 = mysql_query ("INSERT INTO `test` (`1`, `2`, `3`, `4`, `5`, `6`, `7`) VALUES ('sa2312dg', 's23432df', '', '', '', '', '')")  or die('<b>==ошибочка</b>');
                       mysql_free_result($result2);

                        
                        
    }

сразу лезет "==ошибочка"

jpg qikz0_m8988n4.jpg
P
На сайте с 06.01.2009
Offline
592
#20
htexture #:

поставить денвер, и на локальной машине провернуть операцию. Там нету лимитов, хоть ставьте всю память своей машины.

http://www.denwer.ru/

Попробовал скриптом локально обработать файл. Строка 29 дает ошибку. Это $file = file($fajl1);

Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 282370021 bytes) in D:\home\test1.ru\www\index.php on line 29

Как увеличить место под БД нашел, а вот как допустить это - не смог.

memory_limit = 256M ;

в php.ini сделал. не помогает


Также попробовал локально в базу залить файл - тоже ругается на размер файла.

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