Как заменить функцию в php? - PullRequest
0 голосов
/ 16 ноября 2011

У меня есть файл PHP с таким содержанием ниже: abc.php

echo 'echo echo echo';
echo $x.'echo echo echo'.str_replace($x, 'abc', $y);
echo number_format(1234567); echo "echo echo echo";

Я хочу заменить функцию "echo" в abc.php на "$ b. =", И результат после замены будетбыть:

$b .= 'echo echo echo';
$b .= $x.'echo echo echo'.str_replace($x, 'abc', $y);
$b .= number_format(1234567); echo "echo echo echo";

Как я могу это сделать?Пожалуйста, помогите мне, большое спасибо!

Примечание: я прочитал abc.php по file_get_contents (результат - строка).После этого я заменяю «echo» на «b. =», А затем использую «eval» для выполнения.

Ответы [ 4 ]

8 голосов
/ 16 ноября 2011

Если вы не можете изменить код, вы можете запустить буферизацию вывода и сохранить вывод в переменной:

ob_start();
include('abc.php');
$b = ob_get_clean();
3 голосов
/ 16 ноября 2011

Если abc.php выполняется как PHP

Вы можете использовать для этого буферизацию вывода, если этот файл (abc.php) доступен через include или require.См. Справочную страницу для ob_start().

$file_path = '/my/file/path/abc.php';
ob_start();
require $file_path;
$b .= ob_get_clean();

Для получения дополнительной информации о ob_get_clean() см. справочную страницу .

Если abc.php извлекается как простой текст для предварительной обработки

Или вы можете использовать простую замену строки, если вы используете file_get_contents() вместо require или include для доступа к abc.php:

$file_path = '/my/file/path/abc.php';
$file_contents_string = file_get_contents($file_path);
$replaced_string = str_replace('echo ', '$b .= ', $file_contents_string);
file_put_contents($file_path);

Эта замена заменит все экземпляры echo, поэтому она довольно жадная, что может закончиться заменой больше, чем вы изначально ожидали.Это можно уменьшить, используя preg_replace() или комбинацию substr() и strpos().

1 голос
/ 16 ноября 2011

Обратите внимание, что echo() is not actually a function - http://php.net/manual/en/function.echo.php;Что касается динамической замены одной функции на другую, это обычно невозможно в PHP (вы получите ошибку Cannot redeclare function).

Что касается вероятного вопроса, который вы не задавали- «как мне передать это в переменную, чтобы она не отражалась напрямую» (и нет, мышление не считается):

см. функции буферизации вывода - например, ob_get_clean() - http://php.net/manual/en/function.ob-get-clean.php

0 голосов
/ 16 ноября 2011

Почему это происходит? У людей возникает проблема A, и они предлагают решение B, которое излишне трудное или странное или не соответствует какой-либо стандартной практике, что поднимает проблему C. Тогда они просят только решение проблемы C.

Решить задачу A, используя выходную буферизацию .

...