Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Как получить значение переменной/ресурса из другого файла?
// Сохраняем ресурс сгенерированной картинки, чтобы потом в index.php добавлять ее в массив и сохранять на диск с помощью imagepng($_SESSION['tim'], 'path/file.png')
выдает 0, хотя, по идее должно было сказать, что это, типа ресурс картинки или в таком духе.
Что я делаю не так и как мне решить мою задачу?
Т.е. достучаться из index.php в prv.php и выдернуть оттуда переменную $im, чтобы потом в index.php добавлять ее в массив таких переменных?
Да, забыл сказать, генерация картинок происходит по нажатию одной кнопки, а получение $im и добавление ее в массив — по нажатию другой.
Обе кнопки находятся в одной форме, обработчиком которой указан index.php
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
drdr пишет:
Обновил первый пост
Видел, но описания задачи там нет.
----- PostgreSQL DBA
drdr
Отправлено: 15 Ноября, 2012 - 01:42:22
Новичок
Покинул форум
Сообщений всего: 35
Дата рег-ции: Нояб. 2012
Помог: 0 раз(а)
Мелкий пишет:
Видел, но описания задачи там нет.
Ок, опишу чуть шире
Делаю небольшой онлайн-сервис http://ganjaworks[dot]ho[dot]ua/dogtags/ (это тестовая площадка). Там много мелких недопилов, но основные функции работают.
Выбираем подложку, набиваем текст, выбираем (или нет) окантовку и жмем кнопку "Обновить". Это все крутится в index.php. После нажатия кнопки "Обновить" данные передаются в prv.php где на их основе генерится картинка, которая выводится в index.php (см. первый пост).
Задача в том, что посетитель, возможно, захочет заказать более двух жетонов (мало ли), тогда он жмет кнопку "Добавить в корзину". По моей задумке обе сгенерированные картинки (точнее, переменные $im) надо занести на время в массив М (т.к. насколько я понимаю, они "висят" в памяти) и продолжить генерировать следующие 1,2,3... варианта жетонов.
После этого юзер переходит к оформлению заказа. Заполняет все данные и жмет кнопку "Заказать". По нажатии должно происходить следующее:
1. Создается папка с именем = session_id()
2. Из массива М по очереди извлекаются сгенерированные картинки и сохраняются в эту папку, типа
3. На имейл менеджера отправляется письмо с данными юзера, session_id (он выступает тут как некий внутренний номер заказа) и прикрепленными всеми сгенерированными картинками.
Надеюсь понятно.
Проблема в том, что все движения происходят в index.php, кроме непосредственно генерации картинок, которая осуществляется в prv.php
Собсно, еще раз вопрос: как в index.php после нажатия кнопки "Добавить в корзину" получить переменную $im из файла prv.php?
Или, может, предложите альтернативное решение. Ибо, я не совсем программер, нуп скорее
Спасибо, извините за много букав
(Добавление)
А по поводу
Мелкий пишет:
Ресурсы не сериализуются, следовательно в сессии храниться не могут.
нашел в нете — у человека схожий вопрос — и вот что ему ответили
http://forum.php.su/topic.php?forum=1&topic=4297#
Что скажете?
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
drdr пишет:
и вот что ему ответили
Предложили сохранить бинарник в сессию (но не ресурс gd). Тоже можно, но при использовании suhosin получится приличный оверхед, при том - бессмысленный.
И рост затрат памяти, тоже бессмысленный.
У вас должна быть функция, которая по входным данным строит изображение. На одни входные данные всегда должен быть один и тот же результат (иначе, вам и сохранять ничего не надо). Следовательно, входные данные и сохраняйте (+ по желанию, кэш изображений).
Или сохраняйте изображение на диск, в сессию - ссылки на них. Устаревшие файлы чистить по крону.
----- PostgreSQL DBA
drdr
Отправлено: 17 Ноября, 2012 - 11:28:15
Новичок
Покинул форум
Сообщений всего: 35
Дата рег-ции: Нояб. 2012
Помог: 0 раз(а)
Мелкий пишет:
У вас должна быть функция, которая по входным данным строит изображение. На одни входные данные всегда должен быть один и тот же результат (иначе, вам и сохранять ничего не надо). Следовательно, входные данные и сохраняйте (+ по желанию, кэш изображений).
С этим и понятно и нет. В каком файле должна объявляться функция и откуда вызываться? В чем отличие использования функции от использования отдельного файла генерации prv.php? И про кеш изображений можно чуть подробнее?
Мелкий пишет:
Или сохраняйте изображение на диск, в сессию - ссылки на них. Устаревшие файлы чистить по крону.
Была такая мысль. Но, допустим, ситуация - юзер че-то генерил-генерил, а потом обломался, ну передумал, мало ли. Решил закрыть окно. Если все его результаты просто висели в памяти, то они удалятся. А так надо каким-то образом прибирать за ним с диска, получается. Как? С кроном пока не знаком. Разве что, сохранять промежуточные результаты во временную папку и чистить потом ее?
Покинул форум
Сообщений всего: 979
Дата рег-ции: Окт. 2011 Откуда: Россия г. Нижний Новгород
Помог: 25 раз(а)
[+]
Крон это обычная программа которая будет запускать нужный php скрипт в нужное время..
Циклом пробегай по папке..
filemtime
если больше N часов, удаляй...
Мелкий
Отправлено: 17 Ноября, 2012 - 11:46:54
Активный участник
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
drdr пишет:
В каком файле должна объявляться функция и откуда вызываться?
Как удобно.
drdr пишет:
В чем отличие использования функции от использования отдельного файла генерации prv.php?
Удобство. Функция скрывает свои локальные переменные и не привязывается к вашим именам переменных.
drdr пишет:
И про кеш изображений можно чуть подробнее?
Т.е. при необходимости, перед рисованием изображения проверяете, а не нарисовали ли мы его уже - зачем тогда рисовать ещё раз?
drdr пишет:
Разве что, сохранять промежуточные результаты во временную папку и чистить потом ее?
Именно так, это крон и будет, в общем-то.
----- PostgreSQL DBA
drdr
Отправлено: 17 Ноября, 2012 - 12:34:20
Новичок
Покинул форум
Сообщений всего: 35
Дата рег-ции: Нояб. 2012
Помог: 0 раз(а)
Мелкий пишет:
drdr пишет:
В чем отличие использования функции от использования отдельного файла генерации prv.php?
Удобство. Функция скрывает свои локальные переменные и не привязывается к вашим именам переменных.
Что и от кого скрывать? Цель? Смысл? У нее одна задача - сгенерить картинку по 3-5 входным параметрам и все.
Мелкий пишет:
drdr пишет:
И про кеш изображений можно чуть подробнее?
Т.е. при необходимости, перед рисованием изображения проверяете, а не нарисовали ли мы его уже - зачем тогда рисовать ещё раз?
Для этого есть стандартные средства или просто самому проверять - изменился ли набор параметров генерации?
Мелкий пишет:
drdr пишет:
Разве что, сохранять промежуточные результаты во временную папку и чистить потом ее?
Именно так, это крон и будет, в общем-то.
Видимо, все к этому и идет Хотя, имхо, было бы проще получать ид ресурса сгенеренной каринки.
Вдогонку: а с чем связано, что ресурсы нельзя хранить в сессии? Ведь, если я правильно понимаю, ИД ресурса - это некая ссылка на область памяти, заполненную данными сгенеренной картинки? Так почему же нельзя?
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
drdr пишет:
Что и от кого скрывать? Цель? Смысл?
От себя. Именно потому что у всего этого фрагмента кода одна цель и только несколько аргументов.
Инкапсуляция, управление сложностью программного кода.
drdr пишет:
Для этого есть стандартные средства или просто самому проверять - изменился ли набор параметров генерации?
Тут достаточно будет сделать md5 от параметров (или их сериализованного вида), это же значение использовать в качестве имени файла. И простым file_exists проверять, нужно ли рисовать картинку, или она уже нарисована.
drdr пишет:
ИД ресурса - это некая ссылка на область памяти, заполненную данными сгенеренной картинки?
Да, это так. А кто вам сказал, что при следующем запуске скрипта эта область памяти мало того что существует, так и находится на той же самой машине?
PHP разработан для изолированного окружения и в этом его сильная сторона.
----- PostgreSQL DBA
drdr
Отправлено: 17 Ноября, 2012 - 14:36:58
Новичок
Покинул форум
Сообщений всего: 35
Дата рег-ции: Нояб. 2012
Помог: 0 раз(а)
Мелкий пишет:
drdr пишет:
ИД ресурса - это некая ссылка на область памяти, заполненную данными сгенеренной картинки?
Да, это так. А кто вам сказал, что при следующем запуске скрипта эта область памяти мало того что существует, так и находится на той же самой машине?
PHP разработан для изолированного окружения и в этом его сильная сторона.
А при следующем запуске она мне уже и нафиг не нужна будет по идее. Одна сессия - один заказ. Сгенерировал я, скажем, 3 картинки, запихивая по одной в массив. Передумал - закрыл сессию, они и удалились бесследно. Если нет - достал по одной из массива, сохранил на диск, прикрепил к письму и отправил. Без шума и пыли. Как-то так.
Кстати, совсем забыл. По поводу сохранения параметров вместо ид ресурса картинки. Получается, какая-то двойная работа. Первый раз генерируем нужную картинку и выводим на экран. Подошла - сохраняем параметры в массив или еще куда и генерим следующую. Теперь, когда нагенерили сколько нужно, начинается повторная работа? Т.е. достаем по очереди наборы параметров из массива, генерим еще раз картинку и сохраняем на диск?
sKaa
Отправлено: 17 Ноября, 2012 - 15:20:15
Частый посетитель
Покинул форум
Сообщений всего: 979
Дата рег-ции: Окт. 2011 Откуда: Россия г. Нижний Новгород
Помог: 25 раз(а)
[+]
Сохраняйте md5 входных параметров.
Цвет, форму, текст итд - всё это имя файла..
drdr
Отправлено: 17 Ноября, 2012 - 15:23:45
Новичок
Покинул форум
Сообщений всего: 35
Дата рег-ции: Нояб. 2012
Помог: 0 раз(а)
sKaa пишет:
Сохраняйте md5 входных параметров.
Цвет, форму, текст итд - всё это имя файла..
Это не решает проблему двойной генерации, описанную в предыдущем посте.
Или можно применить операцию мд5 к ресурсу?
Мелкий
Отправлено: 17 Ноября, 2012 - 15:59:21
Активный участник
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
drdr пишет:
А при следующем запуске она мне уже и нафиг не нужна будет по идее.
Ага, и почему вы тогда её хотите запихать в сессию? Значит нужна.
Не путаете запуск скрипта с сессией пользователя? Скрипт запустился, отработал, умер. Никаких данных после себя не оставил, кроме того, что вы указали сделать явно.
drdr пишет:
Т.е. достаем по очереди наборы параметров из массива, генерим еще раз картинку и сохраняем на диск?
Для того и кэш сгенерированных изображений.
drdr пишет:
Или можно применить операцию мд5 к ресурсу?
Применить-то можно (из-за работы приведения типов), но толку очень мало и в целом лишено смысла.
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.