Использование str_replace и включение вместе (php) - PullRequest
1 голос
/ 28 января 2010

У меня есть нижний колонтитул на веб-странице, нижний колонтитул называется footer.php. Я хотел бы, чтобы нижний колонтитул имел другое изображение в зависимости от других переменных. Я хочу сделать что-то вроде этого:

if (x=1) {include (str_replace('logo1.jpg','logo2.jpg','footer.php'));}
else
{include 'footer.php';}

Но это не работает, оно просто включает в себя. Есть ли способ заменить текст в файлах при их включении?

Ответы [ 3 ]

4 голосов
/ 28 января 2010

Используйте что-то вроде:

if (x==1) {
    $image='logo1.jpg';
} else {
    $image = 'logo2.jpg';
}

include('footer.php');

//// footer.php

echo "<img src='".$image."'/>";

По сути, то, что у вас было, будет пытаться сделать замену в строке 'footer.php', а не в самом файле. Подходящим подходом здесь будет использование переменной для вашего изображения, и нижний колонтитул будет использовать эту переменную при предоставлении изображения.

2 голосов
/ 28 января 2010

Есть ли способ заменить текст в файлах при их включении?

Да, но ваш включенный файл должен будет вернуть его содержимое.

footer.php

<?
return "<img src='#image'>";
?>

тогда можно сделать

echo str_replace("#image", "image.jpg", include("footer.php"));

В этом нет ничего плохого, но это немного странно.

Если бы я был вами, я бы включил include () просто для работы с предустановленной переменной, как предлагает Джонатан Фингланд, или для извлечения содержимого файла нижнего колонтитула, как предлагает Томас Маркаускас.

1 голос
/ 28 января 2010

Ваш пример не работает, потому что вы заменяете 'logo1.jpg' на 'logo2.jpg' в строке 'footer.php'. Результатом замены по-прежнему является «footer.php», и вы просто включаете файл с именем, совпадающим с вашей строкой.

Если вам действительно нужно заменить строку в php-файле и выполнить ее впоследствии, вы можете сделать что-то вроде этого:

$file = file_get_contents('footer.php');
$file = str_replace('logo1.jpg', 'logo2.jpg', $file);
eval($file);

Но есть лучшие способы добиться того, чего вы хотите (см., Например, ответ Джонатана Фингланда).

...