Проблема с сериализацией и memory_limit как обойти?

dimitrius

Новичок
Делаю сериализацию обьекта и пишу его в adminIportObject.txt.
Потом пишу вот такой код
Код:
$adminImport = unserialize(file_get_contents('adminIportObject'));
выдает ошибку:
Код:
 Allowed memory size of 134217728 bytes exhausted (tried to allocate 36 bytes)
изменять memory_limit нельзя. Как можно обойти?
Еще наткнулся на вот эту статью http://habrahabr.ru/post/104069/
Как еще можно сериализировать?
 

Вложения

AmdY

Пью пиво
Команда форума
с ноликом ошибся
 
Последнее редактирование:

vasinsky

Новичок
хостер ниче не даст обойти, он сам указывает сколько клиентам под php скрипты выделять памяти. Он вам скажет - берите VDS - и влавствуйте.

Файл - тяжёлый - читайте его кусками, а не через file_get_contents()
вообщем fgets() + feof()
http://www.php.su/functions/?fgets
 

Фанат

oncle terrible
Команда форума
Судя по размеру файла, проблема не с десериализацией.
13 метров - это ж как надо говнокодить, чтобы в этот лимит не уложиться.
 

vasinsky

Новичок
странная запись
PHP:
file_get_contents('adminIportObject')
adminIportObject - wtf ? тут путь и имя файла должно быть
 

Absinthe

жожо
13 метров - это ж как надо говнокодить, чтобы в этот лимит не уложиться.
Говнокодить надо, чтобы уложиться. Только сам фреймворк столько памяти отожрет. Писать постоянно фреймворки самому - велосипедизм.

13 местров, где вы такой хостинг нашли.
ini_set('memory_limit','128M');
У него 128M и стоит.

Вариант решения: считывать сериализованные данные частями, соблюдая формат.
 

Фанат

oncle terrible
Команда форума
Как-то молодежь подраспустилась, я смотрю. Забываются славные традиции.

На этом форуме не принято смотреть автору в рот и верить каждому его слову.
И по этой причине не принято кидаться решать проблему "в лоб".

Надо выучить одно простое правило: проблемы у посетителей форумов бывают всегда только по одной причине: от собственной глупости.
Поэтому не надо говорить человеку про хостинг. Не надо советовать другой алгоритм сериализации. Не надо изобретать велоговнокод, который ничем не лучше его собственного.

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

Если он десериализует 20000 объектов - то надо ему сказать: "мальчик, ты что-то делаешь неправильно. Во-первых, тебе не надо сериализовывать свои объекты. Во-вторых, не надо читать их все. В-третьих, существует такая штучка, как база данных". А не помогать ему биться головой об стенку.

Это всё для случая, если проблема действительно вызвана сериализацией.
 
Последнее редактирование:

vasinsky

Новичок
Если он десериализует 20000 объектов - то надо ему сказать: "мальчик, ты что-то делаешь неправильно"
да всегда постоянный ответ - нужно именно так и никак по другому.
 

Фанат

oncle terrible
Команда форума
да всегда постоянный ответ - нужно именно так и никак по другому.
В таком случае пусть идет отсюда в свой детский сад общаться со сверстниками.
Всё очень просто.

Опускаться до его уровня в любом случае не надо
 

vasinsky

Новичок
лан, учту. подумал - может он уже убежал, а кусочек кода кому-нибудь поможет при подобной ошибке, но при более логичной ситуации
 

dimitrius

Новичок
Если он десериализует 20000 объектов - то надо ему сказать: "мальчик, ты что-то делаешь неправильно. Во-первых, тебе не надо сериализовывать свои объекты. Во-вторых, не надо читать их все. В-третьих, существует такая штучка, как база данных". А не помогать ему биться головой об стенку.

Это всё для случая, если проблема действительно вызвана сериализацией.
Спасибо за конструктив. Но я не сериализирую 2 000 обьектов, а это для обхода ограничения времени выполнения скрипта. В прощем модуле я сделал без сериализации. А тут слишком много переменных окружения надо передавать, список которых очень динамичный. Раньше с сериализацией не сталкивался, выбрал ее, так как показалось, что это то что надо, чтоб не писать много кода. Счас переделал - без базы - через json. Все работает нормально
 

hell0w0rd

Продвинутый новичок
А почему никому не интересно, что сериализовано?) Может можно не сериализовать?
 

dimitrius

Новичок
Это всё для случая, если проблема действительно вызвана сериализацией.
Вопрос от школьника (или младшей групы №3). Как такое может быть? Был изначально импорт работал до 100 единиц. Резать файл импорта не захотел сделал переадресацию на самого себя через header location и стало нехватать памяти? сам же сериализированный файл небольшой - не должен занимать много места в оперативке.
 
Последнее редактирование:

dimitrius

Новичок
А почему никому не интересно, что сериализовано?) Может можно не сериализовать?
сериализирован обьект отвечающий за обработку импорта со всеми входными и обработанными переменными от формы которая его вызвала. Сделал это для того, чтоб при переадресации можно было его восстановить и уже сразу вызвать нужный метод
 
Последнее редактирование:

dimitrius

Новичок
Мож кто подскажет, как его правильно делать, тоесть обходить лимит времени выполнения скрипта. А то я уже открывал похожую тему, там никто ничего другого не предложил, кроме как поменять хостера))) - это не подходит. Я решил циклической переадрисацией на самого себя. В первом случае достаточно было get, а здесь уже не достаточно.
Скипт как-бы(как-бы :D) работает, вроде все устраивает уже.
Но судя по насмешкам выраженным в этой теме я сделал не правильно - но как тогда правильно?
 

dimitrius

Новичок
хостер ниче не даст обойти, он сам указывает сколько клиентам под php скрипты выделять памяти. Он вам скажет - берите VDS - и влавствуйте.

Файл - тяжёлый - читайте его кусками, а не через file_get_contents()
вообщем fgets() + feof()
http://www.php.su/functions/?fgets
с чего вы решили что 5 кб - это тяжелый файл?
 

MiksIr

miksir@home:~$
dimitrius, проблемы скорее всего где-то в __wakeup()
Ну или память уже занята была до unserialize, а он стал лишь "последней каплей"
 
  • Like
Реакции: AmdY
Сверху