Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Вставка в HTML результата PHP с изображением


Автор: miraz 26.5.2008, 17:22
Может кто сталкивался с этим.
Суть такова: HTML страница в которую с помощью include вставляются PHP файлы. Уже добавлено простенькое голосование, тоже includ - все встало и работает, но теперь надо добавить php  файл с простым котодом, который, в зависимости от текущего времени выдает определенный рисунок. Отдельно все работает, правда время еще не подключено, но картинки выдает правильно, а вот, когда все это вставлено в шаблон, то картинка показывается в виде абракадабры какой-то, я плохо в этом разбираюсь, но судя по всему, она выдается как текст :(. Что делать? Где здесь собака порылась в HTML  или в РНР? Все файлы с расширениями php.  

Автор: skyboy 26.5.2008, 17:40
Цитата(miraz @  26.5.2008,  16:22 Найти цитируемый пост)
а вот, когда все это вставлено в шаблон, то картинка показывается в виде абракадабры какой-то

а как оно вставляется в шаблон? надеюсь, в виде "<img src='путь_к_формирующему_РНР_скрипту' />"?

Автор: miraz 26.5.2008, 18:08
 smile Обалдеть! А слона то я и не заметила! Этот вариант был самым первым, но там что-то не срослось, и потом пошло все посложней. Спасибочки! Может подскажешь, какую функцию использовать чтоб картинки эти по времени выдавались? А то, я опять начну велосипед изобретать smile.

Автор: Feldmarschall 26.5.2008, 18:25
Девушка.
Настоятельно рекомендую прочесть вот это: http://phpfaq.ru/na_tanke, чтобы не путаться, где у вас рнр, где хтмл, а где яваскрипт.

функция, которая работает в РНР c временем, называется http://php.net/date

Автор: miraz 26.5.2008, 18:37
Обязательно прочту smile. Но сейчас нет времени, срочно надо работу сдать. Вставила я эту функцию и нифига не работает. Наверное, как обычно раком :(
Код

<?php
$time=date("H:i:s");
if(($time>=07:01:00)and($time<=08:00:00))
{
$file=fopen("svin.jpg", "rb");
    fpassthru($file);
    exit;
}
    elseif (($time>=8:01:00)and($time<=12:00:00))
    {
    $file=fopen("utro.jpg", "rb");
    fpassthru($file);
    exit;
    }
    elseif (($time>=12:01:00)and($time<=14:00:00))
    {
    $file=fopen("obed.jpg", "rb");
    fpassthru($file);
    exit;
    }
    elseif (($time>=14:01:00)and($time<=17:00:00))
    {
    $file=fopen("ovca.jpg", "rb");
    fpassthru($file);
    exit;
    }
    elseif (($time>=18:01:00)and($time<=24:00:00))
    {
    $file=fopen("svin.jpg", "rb");
    fpassthru($file);
    exit;
    }
?>
    Что не так?

Автор: skyboy 26.5.2008, 19:34
Цитата(miraz @  26.5.2008,  17:37 Найти цитируемый пост)
Наверное, как обычно раком :(

ещё бы. 
Цитата(miraz @  26.5.2008,  17:37 Найти цитируемый пост)
12:01:00

ошибка. нет формата записи такого. это и не число, и не строка...
это раз.
Цитата(miraz @  26.5.2008,  17:37 Найти цитируемый пост)
fpassthru

не отдает заголовки, специфические для графических форматов. может быть больно, обидно и не отображаться. чтоб отдавать медиа-контент есть вполне отдельные функции(http://php.net/imagejpeg, например).
это два.
у тебя с точностью до часа определяется, значит выбирать минуты и секунды тебе необязательно. достаточно определить час и сравнивать почасово. 
это три.
ты все-так почитай то, ссылку на что дал тебе Feldmarschall. Очень познавательно и дает массу информации.
это четыре smile

Автор: Feldmarschall 26.5.2008, 19:34
надо сначала отлаживать свои конструкции.
а потом уже в файл вставлять.


Автор: miraz 26.5.2008, 19:45
Ребят, у меня уровень, ниже плинтуса, с сожалению, и почти ничего из написаного я не поняла. А на сате этом я уже прописалась, как и везде, там примеры - просто никакие, а чуть сложней- и полная задница. О времени, секунды, конечно, нафиг не нужны, но минуты нужны. Ладно, пойду искать. Спасибо!

Автор: bobik02 26.5.2008, 19:52
Цитата(miraz @  26.5.2008,  19:45 Найти цитируемый пост)
Ребят, у меня уровень, ниже плинтуса, с сожалению, и почти ничего из написаного я не поняла.

Ниже плинтуса не упадете! 
И что мешать поднять свой уровень выше крыши ?   smile 

Автор: miraz 26.5.2008, 20:22
smile да ничего, по большому счету. Просто нужно время и желание. Желание есть, а со временем - проблемка (даже приблемище), к четвергу надо сдать сайт на проверку, иначе... плакали мои денежки smile). Хотя не в них дело.

Автор: skyboy 26.5.2008, 20:44
fopen + fpassthru заменяешь на http://php.net/imagecreatefromjpeg+ http://php.net/imagejpeg.
сравниваешь date("H") и целые значения часов, date("i") и значение минут.
в своих if'ах только выбираешь имя файла, а вывод выносишь за эти всякие if'ы. так у тебя код сокращается до 14 строк.

Автор: Feldmarschall 26.5.2008, 20:46
skyboy, а это ещё зачем - imagecreatefromjpeg + imagejpeg.???

Автор: skyboy 26.5.2008, 20:48
Цитата(miraz @  26.5.2008,  19:22 Найти цитируемый пост)
иначе... плакали мои денежки

надеюсь, ты этой фразой не рассчитываешь вызвать сочувствие? разве тебя заставляли браться за эту работу?

Добавлено через 4 минуты и 33 секунды
Feldmarschall, чтоб не объяснять, какие заголовки надо отправлять и почему.
впрочем, может я ошибаюсь, и fpassthru волшнебным образом определит mime-type и отправит content-type: image/jpeg?

Автор: miraz 26.5.2008, 20:59
Жизнь заставила, после смерти мужа осталось куча программ написанных на РНР, они мне нужны, но там иногда надо производить изменения, а я нифига не понимаю, вот и ввязалась в это дело. Хотя могла всё бросить, конечно. А сейчас, просто надо закончить курсы, доделать хоть как-то этот несчастный сайт, так что, об оптимизации кода пока речи не идет smile, хоть бы как-то работало smile. Спасибо за совет, попробую что-то изменить. smile Может получится...

Автор: skyboy 26.5.2008, 21:02


Добавлено через 7 минут и 9 секунд
Цитата(miraz @  26.5.2008,  19:59 Найти цитируемый пост)
после смерти мужа

довольно изобретательное оправдание лени  smile 

Автор: miraz 26.5.2008, 21:15
Думаешь это шутка? У меня начали дохнуть интернет-магазины, один за другим, и ничего сделать не могла. Занимаюсь я всем этим, всего месяц, и то не постоянно. Как ты думаешь, много можно узнать за такое время? smile а на форумах у всех- склероз, они не помнят себя через месяц после начала и выпендриваются. Ладно. Не по теме пошло общение.

Автор: Feldmarschall 26.5.2008, 22:25
skyboy, а imagecreatefromjpeg + imagejpeg - отправит?
а если б даже отправляло - это не слишком ли - создавать объект гд, вместо того, чтобы просто прочитать файл?

Автор: skyboy 26.5.2008, 22:57
Цитата(Feldmarschall @  26.5.2008,  21:25 Найти цитируемый пост)
skyboy, а imagecreatefromjpeg + imagejpeg - отправит?

нет, не отправляет.
прошу прощения за попытку ввода в заблуждение.
fopen + fpassthru в таком случае лучше дополнить заголовками, как показано в примере по использованию http://php.net/fpassthru(Content-Type и Content-Length)
Цитата(Feldmarschall @  26.5.2008,  21:25 Найти цитируемый пост)
это не слишком ли - создавать объект гд, вместо того, чтобы просто прочитать файл?

если бы отправляло, как я считал, я бы не стал придираться к нагрузке. да, бессмысленная работа выполняется. да, потенциально нагружает сервер. да, есть более адекватные решения. но если дело только в нагрузке и при этом избегается лекция на тему "что такое заголовки и с чем их есть" - лучше бы порекомендовал imagejpeg. все равно, рано или поздно поднялся бы вопрос о кешировании и Last-Modified, так что с заголовками разобрались бы. просто позже.

Автор: Fortop 27.5.2008, 00:34
Цитата(miraz @  26.5.2008,  21:15 Найти цитируемый пост)
Занимаюсь я всем этим, всего месяц, и то не постоянно.

Нанимай специалиста. Либо занимайся постоянно.

Автор: MoLeX 27.5.2008, 07:23


Автор: miraz 27.5.2008, 07:33
Спасибо! Это самый дельный совет, который я здесь получила  smile  

Автор: MoLeX 27.5.2008, 07:36
miraz, а можно еще раз вопрос. просто мельком пролестав топик увидел что главный решился (поравь если ошибся) а побочные нет, но из-за большого количества флейма и советов лень выискивать главное

Автор: miraz 27.5.2008, 07:40
Цитата

главный решился (поравь если ошибся) а побочные нет,

это совсем не поняла :(
Цитата

 из-за большого количества флейма

что ты имеешь в виду под "фреймом"?

Автор: MoLeX 27.5.2008, 07:45
ну вот опять флейм (это такое необузданное место, лучше туда не ходить, а то снег попадет в голову или еще что похуже случится).

ну как понял у тебя не получалось вставить картинку сгенерированную с помощью РНР в хтмл код, тебе skyboy (если не ошибаюсь) объяснил как это сделать. какие еще вопросы возникли дальше?

Автор: Feldmarschall 27.5.2008, 07:49
skyboy, зря упорствуешь.
GD - одна из вещей, которые действительно создают нагрузку на сервер. И кэширование здесь не при чем.

Девочке, между прочим, даже fpassthru не нужно.

Ей нужен динамически меняющийся тег img
то есть, вставка кода с date в основной скрипт

Автор: MoLeX 27.5.2008, 07:53
Цитата(Feldmarschall @  27.5.2008,  07:49 Найти цитируемый пост)
то есть, вставка кода с date в основной скрипт 

что то типо такого
Код

<img src="images.php?time=<?=time();?>"

Автор: Feldmarschall 27.5.2008, 08:00
о господи
    
<img src="<?=$time?>.jpg"

Автор: miraz 27.5.2008, 08:00
Картинка встала, благодаря skyboy smile, это я, конечно, суперски прозевала. А теперь надо, чтоб картинки выдавались по времени. Утром одна, в обед- другая и т.д. 

Автор: Feldmarschall 27.5.2008, 08:06
miraz, для этого надо писать код, который не картинки выдает, а слово - обед, ужин, утро.
и не вставлять этот код в рабочий сайт, а писать в отдельном файлике.
и только после того, как он перестанет тебе писать ошибки синтаксиса, а начнет выдавать, что нужно - только после этого его начинать использовать.
А у тебя сейчас - как в том анекдоте: "Я печатаю со скоростью 2000 знаков в минуту. Но такая фигня получается..."
толку-то с того, что ты написала такой большой и красивый код? Если в нем даже один элемент - сравнение даты не работает? 
код надо писать постепенно. 
напиши echo 18:00; и посмотри, что оно тебе выведет. Совсем не то, что ожидалось, правда? Ну так зачем городить сразу большой код, если в самом начале у него уже ошибка?


Автор: MoLeX 27.5.2008, 08:08
а, вот какая задача. 
а нельзя было хотя бы так сделать?
Код

if(date("H") >= "00" AND date("H") <= "12")
{
    echo "images 1";
}
elseif(date("H") >= "12" AND date("H") <= "18")
{
    echo "images 2";
}
elseif(date("H") >= "18" AND date("H") <= "23")
{
    echo "images 3";
}
else
{
    echo "images ";
}

Автор: miraz 27.5.2008, 08:36
Feldmarschall изначально что-то похожее и было (кроме времени)
Цитата

$laikas=8
if (($laikas>=7) and ($laikas<=11))
{
echo "rytas"
// ну и так далее

и код этот, который должен в картинки подставлять, в отдельном файле, даже в другом каталоге, а в форму передается уже результат. Я конечно, неумная, но не до такой степени, чтоб и форму и код в одном файле писать, тогда там сам черт ногу сломит :(. Когда все это было в том виде как выше написано- все работало, какую цифру поставишь, соответсвенно ту картинку и выдавал, а вот, когда дошло до выдачи по времени- началось. Согласна, следовало бы начать с этого самого времени, но решила посмотреть будет ли это хоть как-то работать, работать то оно работает, только теперь это к времени надо привязать. Говоришь, это называется сравнение даты? smile Счас поищем.

MoLeX- что-то не фурычет. Что должно стоять перед ифом кроме начального тега, естественно?

Автор: MoLeX 27.5.2008, 09:05
miraz, да я там малость напортачил. код сразу написал и опичатку допустил. щас работает, тебе только по принципу необходимо сделать когда выводить тот или иной рисунок

Автор: miraz 27.5.2008, 09:41
Ура! Работает! smile СПАСИБО!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)