Вывод картинок и текста из массива через PHP - проблемы.

Sharkon

Guest
Вывод картинок и текста из массива через PHP - проблемы.

Стоит задача - при нажатии на ссылку вывести в отдельном окне картинку и подпись. Через яваскрипт windows.open и т.д. вывожу файл "popup.php?pic=1".
В файле popup.php код выглядит так:

PHP:
$arr['1']="1.jpg";
$arr['2']="2.jpg";
$arr['3']="3.jpg";
$arr['4']="4.jpg";

	header ("Content-type: image/jpeg");
	$im = imagecreatefromjpeg ($arr[$pic]);
	imagejpeg ($im);
	imagedestroy($im);
В таком варианте картинка выводится без проблем. Если добавляю html код, даже самый простой вроде <div align=center> </div> вокруг php, то страница глючит и вылазят ошибки про невозможность загрузить headers, которые уже загружены, ошибки gd и корявый текст до конца видимости окна (окошко правда маленькое).

Каким образом можно добавить в такую конструкцию подписи к картинкам из массива? И как отцентровать картинку в открывающемся окне?

Если выводить просто текст, то по той же ссылке "popup.php?pic=1" работает такая конструкция:

PHP:
$txt['1']="Подпись 1";
$txt['2']="Подпись 2";
$txt['3']="Подпись 3";
$txt['4']="Подпись 4";

echo $txt[$pic];
Если соединяю это с кодом массива картинок, картинки есть, текста нет. Может текст под картинкой выводится и его просто не видно?

Подскажите пожалуйста, как грамотно совместить. Причем очень хотелось бы, чтобы один параметр "pic" из ссылки указывал и на номер картинки, и на номер текста для вывода.
Второй день сижу, картинки выводить кое-как научился, теперь с текстом проблема. =)

Спасибо!
 

ask

Новичок
насчет "страница глючит и вылазят ошибки про невозможность загрузить headers":
перед вызовом header нельзя ничего выводить.
в данном случае - html.
 

Varg

Guest
Если лень переделывать очерёдность - используй output buffering (функции ob_*)
 

SelenIT

IT-лунатик :)
однако же

Sharkon
Картинка - это отдельный документ со своим собственным URL. Единственное, что связывает ее со страницей - тег img, в src которого этот URL проставлен. Поэтому одним потоком и то, и другое никак не вывести. Подробности: http://phpfaq.ru/na_tanke#achtung

Varg
Как ob_* поможет вывести картинку одним потоком с HTMLем?
 

Фанат

oncle terrible
Команда форума
Хранителъ,ученичок ты наш, обличительный.
а ты не мог бы пояснить смысл всех этих телодвижений с imagecreatefromjpeg magejpeg и прочими функциями?
Если ты такой продвинутый и все понимаешь лучше нас, старичков-маразматиков, которые только ругаться умеют?
а заодно и смысл наличия второго пхп скрипта вообще?
Если учесть, что надписи НА картинках - это только твоя фантазия?
 

Sharkon

Guest
Спасибо всем ответившим, в итоге все решилось намного проще.
Полез я не в ту степь, и использовать "imagejpeg ($im);" мне вообще не надо было.
Так как картинки мне по большому счету генерировать не надо было, после изучения различных примеров решилось все так:

PHP:
Запрос "window.open (popup.php?pic=1)",

а файл popup.php выглядит так:

$arr['1']="im/1.gif";
$arr['2']="im/2.gif";
$arr['3']="im/3.gif";
...

$txt['1']="Текст 1";
$txt['2']="Текст 2";
$txt['3']="Текст 3";


$image=$arr[$pic];
$podp=$txt[$pic];

echo '
<html>
...
<td align=center><img src='.$image.'  border=0>
	</td></tr>
	<tr>
	<td align=center> '.$podp.'	</td>
А с "imagegif ($im);" геморрой нереальный, время потерял кучу, но ничего хорошего не сделал. ;)

Единственное - не могу понять, почему и '.$image.' и '.$podp.' в выданном хтмл нужно писать с точками? Без точек выдает ошибку, что ожидаюся кавычки или ";".

Подскажите плиз.
 

Wicked

Новичок
С точки зрения PHP это не столько html-код, сколько строки. Одиночные кавычки образуют такие пары:
1) echo ' ... '.$image
2) $image.' ... '.$podp
3) $podp.' ... почему-то не закрыта в твоем примере
а не вокруг переменных, как ты подумал.
Точка - оператор конкатенации (склеивания строк).
Кстати, по-хорошему надо бы писать так:
PHP:
echo '...<img src="'.htmlspecialchars($image).'" border=0>...<td align=center> '.htmlspecialchars($podp).'</td>';
 

Wicked

Новичок
блин... ты меня запутал :)
afaik, urlencode применяется к значениям параметров урла, а не к урлу целиком... или это не так?
 

SiMM

Новичок
Автор оригинала: Wicked
блин... ты меня запутал :)
afaik, urlencode применяется к значениям параметров урла, а не к урлу целиком... или это не так?
Ну... это вроде не страшно, если речь об относительных путях
PHP:
<?readfile('http://phpclub.ru/'.urlencode('talk/newreply.php?s=&action=newreply&postid=427749'))?>
- и потом, из контента не видно - абсолютный путь или относительный. В любом случае - не [m]htmlspecialchars[/m].
 

Wicked

Новичок
а тут следует использовать может не столько htmlspecialchars() сколько htmlentities(). хотя тоже хз :)
 

SiMM

Новичок
> а тут следует использовать может не столько htmlspecialchars() сколько htmlentities()
Неуместно. Создай файл типа 1'.txt (можешь ещё кириллицу приплести) и дальше эксперементируй.
 

Wicked

Новичок
а ты сам то смотрел, что твой код выдает в аутпут? :)
посмотри, плиз )

-~{}~ 27.01.05 15:49:

у меня оно выдало главную страницу с http://phpclub.ru/, а не страницу из глубин форума.

-~{}~ 27.01.05 16:01:

ты, кстати, вообще пример не очень удачный выбрал... тестировать нужно именно с <img src=...> или <a href=...>

попробуй сравнить вот это:
PHP:
<? $url = 'talk/newreply.php?s=&action=newreply&postid=427749'; ?>
<a href="<? print 'http://phpclub.ru/'.htmlspecialchars($url) ?>">1</a><br>
<a href="<? print 'http://phpclub.ru/'.urlencode($url) ?>">2</a><br>
 

SiMM

Новичок
PHP:
<? // file: DOCROOT/1'я.php, URI: http://localhost/1'%FF.php ?>
<a href="/<?=htmlspecialchars(basename(__FILE__),ENT_QUOTES)?>">htmlspecialchars</a><br>
<a href="/<?=urlencode(basename(__FILE__))?>">urlencode</a>
 
Сверху