Использование php внутри php

12
J
На сайте с 23.09.2010
Offline
87
824

Откопал вот этот топик, в котором приведен пример кода, для вывода случайной строки из списка, сохраненного в файле.

<?php
$xs = file("x.txt");
shuffle($xs);
$xs = array_slice($xs, 0, 1);
foreach ($xs as $x)
{
$x = trim($x);
echo $x;
}
?>

Все работает как часы. Но возник один дополнительный вопрос.

Как поступить, если строка, подгружаемая из файла x.txt, в свою очередь также содержит конструкцию вида <?php echo 12345 ?>

В смысле можно ли каким-то образом заставить ее обрабатываться, а не выводиться лишь в виде текста.

plattoo
На сайте с 12.05.2010
Offline
195
#1

можно

примерно так


<?php
$xs = file("x.txt");
shuffle($xs);
$xs = array_slice($xs, 0, 1);
foreach ($xs as $x)
{
if (preg_match('/\<\?php/i', $x)){
$x = str_ireplace('<?php echo \'', '', $x);
$x = str_ireplace('\'; ?>', '', $x);
$x = trim($x);
echo $x;
} else {
$x = trim($x);
echo $x;
}
}
?>

ps затупил, именно с обработкой, хз

Mik Foxi
На сайте с 02.03.2011
Offline
1076
#2

Eval вам поможет.

Антибот, антиспам, веб файрвол, защита от накрутки поведенческих: https://antibot.cloud/ + партнерка, до 40$ с продажи.
R
На сайте с 31.08.2010
Offline
78
#3

Да, почитайте про функцию eval она выполнит ваш код.

dkameleon
На сайте с 09.12.2005
Offline
386
#4

инклюд, ёпта :)

приправить по вкусу буферизацией

Дизайн интерьера (http://balabukha.com/)
M
На сайте с 04.12.2013
Offline
223
#5

Поддержу пред. оратора.

---------- Добавлено 28.08.2016 в 10:52 ----------

Хотя если построчно, то лучше eval.

Домены и скрипт для коротких ссылок: https://u75.ru/domains-for-shortcuts
J
На сайте с 23.09.2010
Offline
87
#6

Спасибо большое всем отписавшимся. Правда, все равно разобраться не могу.

1. Этим кодом выводим 3 случайных строки из файла:


<?php
$xs = file("random.txt");
shuffle($xs);
$xs = array_slice($xs, 0, 3);
foreach ($xs as $x)
{
$x = trim($x);
echo $x;
}
?>

2. В random.txt содержатся ссылки, у которых нужно сохранить get-параметр, поэтому к href добавляется необходимый код, и соответственно файл выглядит так:

<a href="/id1/<?php echo $sub; ?>"><img src="http://www.site.ru/images/id1.jpg"></a>
<a href="/id2/<?php echo $sub; ?>"><img src="http://www.site.ru/images/id2.jpg"></a>
<a href="/id3/<?php echo $sub; ?>"><img src="http://www.site.ru/images/id3.jpg"></a>

3. Необходимо, чтобы <a href="/id1/ и <img src="http://www.site.ru/images/id1.jpg"></a> подгрузились как html, а <?php echo $sub; ?> обработался как php.

Т.е. получается echo внутри echo. При этом линк и название картинки совпадают (id1-id1, id2-id2 и т.п.).

ps Проблема в том, что в программировании я нуб 🤣. Поэтому разобраться, где юзать eval или include немного сложновато.

LovelAss
На сайте с 05.06.2009
Offline
96
#7


<a href="/id1/{sub}"><img src="http://www.site.ru/images/id1.jpg"></a>


$x = str_replace('{sub}', $sub, trim($x));
echo $x;
M
На сайте с 04.12.2013
Offline
223
#8

Joober, если строк много, думаю, shuffle будет не слишком эффективна.

Если php-вставка реально во всех строках повторяется, можно подобрать более эффективное и менее ресурсоемкое решение. Если еще и в ссылках реально такое единообразие имеется, вам достаточно в файле только список id-шников хранить, например:


1
2
3
...
Alex Klo
На сайте с 15.06.2006
Offline
304
#9

какой eval?!

Joober:
строка, подгружаемая из файла x.txt, в свою очередь также содержит конструкцию вида <?php echo 12345 ?>

какой .txt с php кодом?!

php include only!

Проверка и мониторинг позиций сайта ( http://www.topvisor.ru/?inv=1520 ) Продвигаю сайты http://climat-nw.ru/conditioner-installation/ http://www.aircom-spb.ru/service/montaj/
M
На сайте с 04.12.2013
Offline
223
#10

Что касается исходного вопроса, то с помощью eval делается примерно так:


eval('ob_start(); ?>'.trim($x).'<?php $x=ob_get_clean();');
echo $x;


---------- Добавлено 28.08.2016 в 23:08 ----------

Alex Klo, вопрос ТС-а внимательно прочитайте.

---------- Добавлено 28.08.2016 в 23:12 ----------

P.S. Вместо ob_get_clean/echo можно использовать просто ob_end_flush.
12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий