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 :: Как получить значение переменной/ресурса из другого файла?

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): [1] 2 »   

> Без описания
drdr
Отправлено: 14 Ноября, 2012 - 19:39:44
Post Id


Новичок


Покинул форум
Сообщений всего: 35
Дата рег-ции: Нояб. 2012  


Помог: 0 раз(а)




Есть файл index.php в котором присутствует выводится картинка:

PHP:
скопировать код в буфер обмена
  1. <img src="prv.php?t=<?PHP echo $chk1; ?>&s=<?PHP echo $sil1; ?> />


Сама картинка генерится в файле prv.php на основе параметров, полученных из index.php:

PHP:
скопировать код в буфер обмена
  1. //Тут идет код генерации
  2. ...
  3. // и далее вывод
  4. header ("Content-type: image/png");
  5. imagepng($im);
  6.  
  7. //Далее пытаюсь сделать так:
  8. // Сохраняем ресурс сгенерированной картинки, чтобы потом в index.php добавлять ее в массив и сохранять на диск с помощью imagepng($_SESSION['tim'], 'path/file.png')
  9. $_SESSION['tim'] = $im;
  10.  
  11. //Очищаем
  12.  


Но почему-то не работает Недовольство, огорчение
При попытке вывести в index.php



выдает 0, хотя, по идее должно было сказать, что это, типа ресурс картинки или в таком духе.

Что я делаю не так и как мне решить мою задачу?

Т.е. достучаться из index.php в prv.php и выдернуть оттуда переменную $im, чтобы потом в index.php добавлять ее в массив таких переменных?
Да, забыл сказать, генерация картинок происходит по нажатию одной кнопки, а получение $im и добавление ее в массив — по нажатию другой.
Обе кнопки находятся в одной форме, обработчиком которой указан index.php

Спасибо

(Отредактировано автором: 15 Ноября, 2012 - 02:05:21)

 
 Top
Мелкий Супермодератор
Отправлено: 14 Ноября, 2012 - 19:50:56
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Ресурсы не сериализуются, следовательно в сессии храниться не могут.

Чтобы подсказать, как решить задачу - хотелось бы знать задачу.


-----
PostgreSQL DBA
 
 Top
drdr
Отправлено: 14 Ноября, 2012 - 19:51:27
Post Id


Новичок


Покинул форум
Сообщений всего: 35
Дата рег-ции: Нояб. 2012  


Помог: 0 раз(а)




Мелкий пишет:
Ресурсы не сериализуются, следовательно в сессии храниться не могут.
Чтобы подсказать, как решить задачу - хотелось бы знать задачу.


Обновил первый пост

(Отредактировано автором: 14 Ноября, 2012 - 19:51:45)

 
 Top
Мелкий Супермодератор
Отправлено: 14 Ноября, 2012 - 20:27:18
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




drdr пишет:
Обновил первый пост

Видел, но описания задачи там нет.


-----
PostgreSQL DBA
 
 Top
drdr
Отправлено: 15 Ноября, 2012 - 01:42:22
Post Id


Новичок


Покинул форум
Сообщений всего: 35
Дата рег-ции: Нояб. 2012  


Помог: 0 раз(а)




Мелкий пишет:
Видел, но описания задачи там нет.

Ок, опишу чуть шире
Делаю небольшой онлайн-сервис http://ganjaworks[dot]ho[dot]ua/dogtags/ (это тестовая площадка). Там много мелких недопилов, но основные функции работают.

Выбираем подложку, набиваем текст, выбираем (или нет) окантовку и жмем кнопку "Обновить". Это все крутится в index.php. После нажатия кнопки "Обновить" данные передаются в prv.php где на их основе генерится картинка, которая выводится в index.php (см. первый пост).

Задача в том, что посетитель, возможно, захочет заказать более двух жетонов (мало ли), тогда он жмет кнопку "Добавить в корзину". По моей задумке обе сгенерированные картинки (точнее, переменные $im) надо занести на время в массив М (т.к. насколько я понимаю, они "висят" в памяти) и продолжить генерировать следующие 1,2,3... варианта жетонов.

После этого юзер переходит к оформлению заказа. Заполняет все данные и жмет кнопку "Заказать". По нажатии должно происходить следующее:
1. Создается папка с именем = session_id()
2. Из массива М по очереди извлекаются сгенерированные картинки и сохраняются в эту папку, типа
PHP:
скопировать код в буфер обмена
  1. imagepng(M[0], 'path/img0.png');
  2. imagepng(M[1], 'path/img1.png');
  3. ...
  4. imagepng(M[n], 'path/imgn.png');

3. На имейл менеджера отправляется письмо с данными юзера, session_id (он выступает тут как некий внутренний номер заказа) и прикрепленными всеми сгенерированными картинками.
Надеюсь понятно.

Проблема в том, что все движения происходят в index.php, кроме непосредственно генерации картинок, которая осуществляется в prv.php
Собсно, еще раз вопрос: как в index.php после нажатия кнопки "Добавить в корзину" получить переменную $im из файла prv.php?
Или, может, предложите альтернативное решение. Ибо, я не совсем программер, нуп скорее Улыбка
Спасибо, извините за много букав

(Добавление)
А по поводу
Мелкий пишет:
Ресурсы не сериализуются, следовательно в сессии храниться не могут.


нашел в нете — у человека схожий вопрос — и вот что ему ответили
http://forum.php.su/topic.php?forum=1&topic=4297#
Что скажете?

зы что-то какя-то лажа со вставкой ссылок Недовольство, огорчение

(Отредактировано автором: 15 Ноября, 2012 - 02:34:05)

 
 Top
Мелкий Супермодератор
Отправлено: 15 Ноября, 2012 - 08:41:43
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




drdr пишет:
и вот что ему ответили

Предложили сохранить бинарник в сессию (но не ресурс gd). Тоже можно, но при использовании suhosin получится приличный оверхед, при том - бессмысленный.
И рост затрат памяти, тоже бессмысленный.

У вас должна быть функция, которая по входным данным строит изображение. На одни входные данные всегда должен быть один и тот же результат (иначе, вам и сохранять ничего не надо). Следовательно, входные данные и сохраняйте (+ по желанию, кэш изображений).
Или сохраняйте изображение на диск, в сессию - ссылки на них. Устаревшие файлы чистить по крону.


-----
PostgreSQL DBA
 
 Top
drdr
Отправлено: 17 Ноября, 2012 - 11:28:15
Post Id


Новичок


Покинул форум
Сообщений всего: 35
Дата рег-ции: Нояб. 2012  


Помог: 0 раз(а)




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

С этим и понятно и нет. В каком файле должна объявляться функция и откуда вызываться? В чем отличие использования функции от использования отдельного файла генерации prv.php? И про кеш изображений можно чуть подробнее?

Мелкий пишет:
Или сохраняйте изображение на диск, в сессию - ссылки на них. Устаревшие файлы чистить по крону.

Была такая мысль. Но, допустим, ситуация - юзер че-то генерил-генерил, а потом обломался, ну передумал, мало ли. Решил закрыть окно. Если все его результаты просто висели в памяти, то они удалятся. А так надо каким-то образом прибирать за ним с диска, получается. Как? С кроном пока не знаком. Разве что, сохранять промежуточные результаты во временную папку и чистить потом ее?

(Отредактировано автором: 17 Ноября, 2012 - 11:31:34)

 
 Top
sKaa
Отправлено: 17 Ноября, 2012 - 11:42:28
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 979
Дата рег-ции: Окт. 2011  
Откуда: Россия г. Нижний Новгород


Помог: 25 раз(а)

[+]


Крон это обычная программа которая будет запускать нужный php скрипт в нужное время..

Циклом пробегай по папке..
filemtime
если больше N часов, удаляй...
 
 Top
Мелкий Супермодератор
Отправлено: 17 Ноября, 2012 - 11:46:54
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




drdr пишет:
В каком файле должна объявляться функция и откуда вызываться?

Как удобно.

drdr пишет:
В чем отличие использования функции от использования отдельного файла генерации prv.php?

Удобство. Функция скрывает свои локальные переменные и не привязывается к вашим именам переменных.

drdr пишет:
И про кеш изображений можно чуть подробнее?

Т.е. при необходимости, перед рисованием изображения проверяете, а не нарисовали ли мы его уже - зачем тогда рисовать ещё раз?

drdr пишет:
Разве что, сохранять промежуточные результаты во временную папку и чистить потом ее?

Именно так, это крон и будет, в общем-то.


-----
PostgreSQL DBA
 
 Top
drdr
Отправлено: 17 Ноября, 2012 - 12:34:20
Post Id


Новичок


Покинул форум
Сообщений всего: 35
Дата рег-ции: Нояб. 2012  


Помог: 0 раз(а)




Мелкий пишет:
drdr пишет:
В чем отличие использования функции от использования отдельного файла генерации prv.php?

Удобство. Функция скрывает свои локальные переменные и не привязывается к вашим именам переменных.

Что и от кого скрывать? Цель? Смысл? У нее одна задача - сгенерить картинку по 3-5 входным параметрам и все.

Мелкий пишет:
drdr пишет:
И про кеш изображений можно чуть подробнее?

Т.е. при необходимости, перед рисованием изображения проверяете, а не нарисовали ли мы его уже - зачем тогда рисовать ещё раз?

Для этого есть стандартные средства или просто самому проверять - изменился ли набор параметров генерации?

Мелкий пишет:
drdr пишет:
Разве что, сохранять промежуточные результаты во временную папку и чистить потом ее?

Именно так, это крон и будет, в общем-то.

Видимо, все к этому и идет Улыбка Хотя, имхо, было бы проще получать ид ресурса сгенеренной каринки.
Вдогонку: а с чем связано, что ресурсы нельзя хранить в сессии? Ведь, если я правильно понимаю, ИД ресурса - это некая ссылка на область памяти, заполненную данными сгенеренной картинки? Так почему же нельзя?

(Отредактировано автором: 17 Ноября, 2012 - 12:53:28)

 
 Top
Мелкий Супермодератор
Отправлено: 17 Ноября, 2012 - 13:00:24
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




drdr пишет:
Что и от кого скрывать? Цель? Смысл?

От себя. Именно потому что у всего этого фрагмента кода одна цель и только несколько аргументов.
Инкапсуляция, управление сложностью программного кода.

drdr пишет:
Для этого есть стандартные средства или просто самому проверять - изменился ли набор параметров генерации?

Тут достаточно будет сделать md5 от параметров (или их сериализованного вида), это же значение использовать в качестве имени файла. И простым file_exists проверять, нужно ли рисовать картинку, или она уже нарисована.

drdr пишет:
ИД ресурса - это некая ссылка на область памяти, заполненную данными сгенеренной картинки?

Да, это так. А кто вам сказал, что при следующем запуске скрипта эта область памяти мало того что существует, так и находится на той же самой машине?
PHP разработан для изолированного окружения и в этом его сильная сторона.


-----
PostgreSQL DBA
 
 Top
drdr
Отправлено: 17 Ноября, 2012 - 14:36:58
Post Id


Новичок


Покинул форум
Сообщений всего: 35
Дата рег-ции: Нояб. 2012  


Помог: 0 раз(а)




Мелкий пишет:
drdr пишет:
ИД ресурса - это некая ссылка на область памяти, заполненную данными сгенеренной картинки?

Да, это так. А кто вам сказал, что при следующем запуске скрипта эта область памяти мало того что существует, так и находится на той же самой машине?
PHP разработан для изолированного окружения и в этом его сильная сторона.

А при следующем запуске она мне уже и нафиг не нужна будет по идее. Одна сессия - один заказ. Сгенерировал я, скажем, 3 картинки, запихивая по одной в массив. Передумал - закрыл сессию, они и удалились бесследно. Если нет - достал по одной из массива, сохранил на диск, прикрепил к письму и отправил. Без шума и пыли. Как-то так.

Кстати, совсем забыл. По поводу сохранения параметров вместо ид ресурса картинки. Получается, какая-то двойная работа. Первый раз генерируем нужную картинку и выводим на экран. Подошла - сохраняем параметры в массив или еще куда и генерим следующую. Теперь, когда нагенерили сколько нужно, начинается повторная работа? Т.е. достаем по очереди наборы параметров из массива, генерим еще раз картинку и сохраняем на диск?
 
 Top
sKaa
Отправлено: 17 Ноября, 2012 - 15:20:15
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 979
Дата рег-ции: Окт. 2011  
Откуда: Россия г. Нижний Новгород


Помог: 25 раз(а)

[+]


Сохраняйте md5 входных параметров.
Цвет, форму, текст итд - всё это имя файла..
 
 Top
drdr
Отправлено: 17 Ноября, 2012 - 15:23:45
Post Id


Новичок


Покинул форум
Сообщений всего: 35
Дата рег-ции: Нояб. 2012  


Помог: 0 раз(а)




sKaa пишет:
Сохраняйте md5 входных параметров.
Цвет, форму, текст итд - всё это имя файла..


Это не решает проблему двойной генерации, описанную в предыдущем посте.
Или можно применить операцию мд5 к ресурсу?
 
 Top
Мелкий Супермодератор
Отправлено: 17 Ноября, 2012 - 15:59:21
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




drdr пишет:
А при следующем запуске она мне уже и нафиг не нужна будет по идее.

Ага, и почему вы тогда её хотите запихать в сессию? Значит нужна.
Не путаете запуск скрипта с сессией пользователя? Скрипт запустился, отработал, умер. Никаких данных после себя не оставил, кроме того, что вы указали сделать явно.

drdr пишет:
Т.е. достаем по очереди наборы параметров из массива, генерим еще раз картинку и сохраняем на диск?

Для того и кэш сгенерированных изображений.

drdr пишет:
Или можно применить операцию мд5 к ресурсу?

Применить-то можно (из-за работы приведения типов), но толку очень мало и в целом лишено смысла.


-----
PostgreSQL DBA
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB