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

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

set_time_limit(сколько надо секунд);

Если через браузер, то ещё это:
ignore_user_abort();

set_time_limit   300

сообщение  Fatal error: Maximum execution time of 300 seconds exceeded in  было и при 60 и при 120.


Вообщем. Я разбил файл на 6. По 500Мб. Заливаю на хост в базу. Думаю это решение. Denwer прикольная вещь, но у меня с ней что то не срослось.

W1
На сайте с 22.01.2021
Offline
286
#32
postavkin #:
set_time_limit   300

Так поставьте больше:  set_time_limit(2000) например. Кто мешает? Настройки сервера запрещают?

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

Так поставьте больше:  set_time_limit(2000) например. Кто мешает? Настройки сервера запрещают?

нет, это же локально )

я не понимаю, ну не хватает ему 300сек, почему после прерываться в базе только 6тыс строк )) при том что на хосте 600тыс за это время добавляется


кстати, у меня не set_time_limit,  а max_execution_time... поставил 2000. сейчас ради эксперимента посмотрим.
P
На сайте с 06.01.2009
Offline
592
#34
webinfo #:

ignore_user_abort();

вкорячил в php.ini такую строку - он ругается. не перезапускает денвера

там такая  ignore_user_abort = on

её раскомментил

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

Резюмирую. ТО что мне нужно сделать получилось, на хост в базу закинул 6 файлов (разбил основной) и запросом оставил уникальные строки.

С Denwer не срослось. Вываливается...

D
На сайте с 28.06.2008
Offline
1101
#36
postavkin #:

Резюмирую. ТО что мне нужно сделать получилось, на хост в базу закинул 6 файлов (разбил основной) и запросом оставил уникальные строки.

С Denwer не срослось. Вываливается...

Вы что огромную базу пытаетесь импортировать в МайАдмин через вебинтерфейс?

Большие же базы только по ssh импортировать надо.

P.S. попробуйте для локалки опен сервер https://ospanel.io/  (более юзер флендли чем денвер)

T7
На сайте с 19.09.2018
Offline
63
#37
postavkin #:
Вообщем. Я разбил файл на 6. По 500Мб. Заливаю на хост в базу. Думаю это решение.

Как знать. Может - решение сделать все более-менее правильно. 2 минуты контрол-с/контрол-в, + несколько строк:

<?php
header('Content-Type:text/plain');

set_error_handler(function($code, $string, $file, $line){
throw new ErrorException($string, null, $code, $file, $line);
});

register_shutdown_function(function(){
$error = error_get_last();
if(null !== $error)
{
echo 'Last error: ';
print_r($error);
}
});

class tm {

private $tm = 0, $start = 0;

public function __construct( )
{
$this->start = microtime(1);
$this->tm = $this->start;
}

public function _($msg){
echo "\n----\nTrace: ", $msg, ":\n";
$t = microtime(1);
echo
" Mem,mb (usage/peak_usage): ",
sprintf('%01.2f / %01.2f', (memory_get_usage()/1048576), (memory_get_peak_usage()/1048576)),

"\n Time,ms (before start/before previous): ",
sprintf('%01.8f / %01.8f', ($t - $this->start)*1000, ($t - $this->tm)*1000 ), "\n--\n";
$this->tm = $t;
}
}

$tm = new tm();
$tm->_('start by phpversion ' . phpversion());

$fn = __DIR__ . '/5';
echo "\n",
sprintf("File to read: %s, size: %dMb", $fn, filesize($fn)/1048576);
$fn1 = __DIR__ . '/51';
$h = fopen($fn,'r');
$h1 = fopen($fn1,'w');
$i = 0;
while (($b = fgets($h)) !== false) {
#Имитация манипуляций со строкой
$b = explode(' ', $b);
$b = implode(' ', $b);
#Пишем.
fwrite($h1, $b);
$i++;
}

echo "\nLine in file: $i\n";
$tm->_(sprintf ('Newfilesize = %dMb; end ', filesize($fn1)/1048576));

fclose($h);
fclose($h1);

Результат:


Нетрудно заметить, то чтение 8гиг файла в 5000000  строк

Trace: Newfilesize = 8305Mb; end :
  Mem,mb (usage/peak_usage): 0.35 / 0.47
  Time,ms (before start/before previous): 86891.42990112 / 86891.41702652
На памяти практически не отражается и занимает примерно 86 сек.
W1
На сайте с 22.01.2021
Offline
286
#38
postavkin #:
вкорячил в php.ini такую строку

Естественно. Это функции пхп, их в начало скрипта прописывают.
Но это на будущее, раз уж всё сделали окольными путями.

postavkin #:
я не понимаю, ну не хватает ему 300сек, почему после прерываться

Потому что отведённое время закончилось. Что тут непонятно? Время ограничивают, чтобы скрипты не молотили до скончания века.

W1
На сайте с 22.01.2021
Offline
286
#39
Dram #:
Большие же базы только по ssh импортировать надо.

По-всякому можно, в зависимости от обстоятельств. 

P
На сайте с 06.01.2009
Offline
592
#40
timo-71 #:

Как знать. Может - решение сделать все более-менее правильно. 2 минуты контрол-с/контрол-в, + несколько строк:

Результат:


Нетрудно заметить, то чтение 8гиг файла в 5000000  строк

На памяти практически не отражается и занимает примерно 86 сек.

Гениально! Но у меня ошибка 500. Руки корявые по ходу

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