2014-12-30 3 views
2

Я пишу код для программирования на языке санскрита. Раньше машина находилась в тестовом режиме, поэтому я тестировал и редактировал из внешнего интерфейса HTML свой код PHP, отправляя переменные с помощью метода GET.Можно ли манипулировать эхом для записи в файл в PHP

Теперь код более или менее стабилизировался.

Теперь я хочу записать вывод в предопределенный txt/HTML-файл, а не эхо его на экран браузера.

Мой типичный код строка выглядит следующим образом:

if ($a === 1) // if a condition is satisfied. 
{ 
    //Do something here 
    echo "<p class = sa >X rule has applied. </p>\n"; 
} 

есть какой-то метод, с помощью которого я могу манипулировать эхо-функции и использовать его как - fputs ($ выходной_файл, $ б); где $ b - строка, которая отражается. В данном случае:

fputs($outfile,"<p class = sa >X rule has applied. </p>\n"); 

Код по-прежнему в немного стадии разработки. Итак, я не думаю, что это хороший способ заменить это эхо с помощью fputs с некоторым регулярным выражением. В противном случае для одного изменения - мне придется внести изменения в обе версии кода - fputs и echo one.

Что заставило меня думать, что это - в Python я могу переопределить функции python, например. Я могу определить пользовательскую функцию max (a, b), даже если она является встроенной функцией. Я не знаю, как сделать свое «эхо» для работы «fputs» в PHP. В PHP-языке я хочу сделать это в командной строке. , например.

if (isset($argv[0])){ 
// Some function to replace echo with fputs for the whole program 
} 

Любые указатели на это приветствуются.

+0

Google нашел это довольно быстро. http://codeutopia.net/blog/2007/10/03/how-to-easily-redirect-php-output-to-a-file/ – ElefantPhace

+0

Кстати, вместо проверки '$ argv' вы можете проверить' php_sapi_name() 'или константа' PHP_SAPI': http://php.net/manual/en/function.php-sapi-name.php – IMSoP

ответ

4

Для этого вы можете использовать output buffering, так как он позволяет указать функцию обратного вызова, которая может использоваться для преобразования буферизованных данных. Определите функцию обратного вызова, которая улавливает буферизованный выход и записывает его в файл, а возвращая пустую строку в браузере:

$outfile = fopen('log.txt', 'wb'); 
ob_start(function($x) use($outfile) { 
    fwrite($outfile, $x); 
    return ''; 
}); 

Если вы хотите, чтобы отключить его во время сценария, так что вы можете направить вывод в браузер снова просто позвоните ob_end_flush();.

+0

Аккуратно. Я не видел «ob_start» с обратным вызовом раньше; Я немного расширил описание, поэтому его легче понять, не указав ссылку. – IMSoP

+0

Ты сделал свой день. Это служит моей цели. Хорошо изучить выходной буфер. –

Смежные вопросы