@midarovrk

Как передать информацию в head через php?

Всем привет, помогите пожалуйста решить проблему.
Сейчас всё подробно опишу и в конце предоставлю полный код целиком.

Есть первый php код который находится в body:

<?php
$text0 = file_get_contents("https://домен.ru/archivexml/{news-id}.xml");

$data = array();

preg_match_all('/<option value="(\d*)".*?>.*?<\/option>/m', $text0, $out1);
preg_match('/img src="(.*?)"/m', $text0, $out3);
preg_match('/img src="(.*?)"/m', $text0, $out4);
$out3 = preg_replace("#http://(www\.)?(.*?)/#is", '', $out3);
$out3 = preg_replace("#([^/]*)$#", '', $out3);
$out4 = preg_replace("/\?.*/", '', $out4);
$out4 = preg_replace("/.*?\./", '', $out4);
?>

Данный код берёт из файла xml ссылку на нужное мне изображение, пилит её на части как мне нужно, и выдаёт их с помощью print_r

Вот так:
<img src="<?php print_r ($out3[1]);?>1.<?php print_r ($out4[1]);?>">

print_r $out3[1] выводит 1/amazing/029/
print_r $out4[1] выводит png
В итоге получается ссылка на картинку 1/amazing/029/1.png

Далее я ещё много где использую print_r но всё это после основного php скрипта.
А сейчас мне необходимо эту же ссылку передать в head сайта в мета теги.

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

<?php echo outimgformeta();?> //данную часть я размещаю в head сайта в мета теги

<?php
function outimgformeta()
{
 global $testphpcode;
 $testphpcode = '<?php print_r ($out3[1]);?>1.<?php print_r ($out4[1]);?>';
 return $testphpcode;
}
?>

Это работает, но проблема в том, что передаётся не 1/amazing/029/1.png а само <?php print_r ($out3[1]);?>1.<?php print_r ($out4[1]);?> в текстовом виде.

Вот так выглядит полный код:

<head>

<meta property="og:image" content="<?php echo outimgformeta();?>">
<meta itemprop="image" content="<?php echo outimgformeta();?>">
<link rel="image_src" href="<?php echo outimgformeta();?>">

</head>

<body>

// Данный php код трогать и менять нельзя, слишком поздно его менять.
<?php
$text0 = file_get_contents("https://домен.ru/archivexml/{news-id}.xml");

$data = array();

preg_match_all('/<option value="(\d*)".*?>.*?<\/option>/m', $text0, $out1);
preg_match('/img src="(.*?)"/m', $text0, $out3);
preg_match('/img src="(.*?)"/m', $text0, $out4);
$out3 = preg_replace("#http://(www\.)?(.*?)/#is", '', $out3);
$out3 = preg_replace("#([^/]*)$#", '', $out3);
$out4 = preg_replace("/\?.*/", '', $out4);
$out4 = preg_replace("/.*?\./", '', $out4);
?>

// Этот php код менять можно.
<?php
function outimgformeta()
{
 global $testphpcode;
 $testphpcode = '<?php print_r ($out3[1]);?>1.<?php print_r ($out4[1]);?>';
 return $testphpcode;
}
?>

</body>

Помогите изменить второй скрипт так, чтобы передавалось это 1/amazing/029/1.png
Сразу говорю, первый php код переместить в head сайта не представляется возможным.
  • Вопрос задан
  • 637 просмотров
Пригласить эксперта
Ответы на вопрос 2
@AaAAxzz
?

$testphpcode = $out3[1] . '1.' . $out4[1];

и "// Данный php код трогать и менять нельзя, слишком поздно его менять." вы должны переместить выше, перед выводом `$testphpcode`
Ответ написан
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
Пару вопросов, а то как то у вас не вяжется логика:
// Данный php код трогать и менять нельзя, слишком поздно его менять.
У вас тут ВООБЩЕ ничего не выводится и не читается, все параметры внешние, НИЧЕГО не мешает вам его вынести выше по коду, это не отразится на коде никак вообще. Есть нюанс с {news-id} - его скорее всего подставляет какой-то внутренний шаблонизатор, но проще просто заменить его на $news-id и не париться, можно вообще все вынести в функцию и возвращать массив или строку готовую, уровень говнокода уже все равно не вырастет.

Если это "невозможно" - ну сдублируйте код выше, оставьте этот кусок где есть и еще раз выполните его выше.
$testphpcode = '<?php print_r ($out3[1]);?>1.<?php print_r ($out4[1]);?>';
Это строка вообще шедевр, ну да ладно... вместо этого конечно достаточно просто сконкатенировать строки:$link = $out3[1].$out4[1]; и получить готовую строку.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы