2010-04-17 4 views
1

Есть ли способ перенаправить вывод исполняемого PHP-скрипта?Как перенаправить вывод PHP-скрипта ВО ВРЕМЯ выполнения?

Конечно, это тривиально при запуске скрипта через командную строку. Но как это достигается после сценарий запущен?

Примечание: мне нужно, чтобы захватить синтаксические ошибки и такие , а.

+0

перенаправить вывод где? в файл? – Samuel

+1

Возможно. Anywhere было бы хорошо :) –

+0

См. ... У меня есть сценарий, в котором есть данные, в которые поступает информация, и выход отбрасывается. Я хочу как-то захватить его. –

ответ

1

Если вы хотите, чтобы захватить ошибки синтаксического анализа, вам необходимо:

  1. Убедитесь display_errors является On

  2. Установить error_prepend_string и a error_append_string

  3. Звоните ob_start с человека auto_prepend файл, который выполняется перед каждым файлом PHP, который вы могли бы выполнить.

  4. Используйте set_error_handler как обычно, и сделайте свой обратный вызов пронумерованным именованным выходным буфером, ищите свои собственные ошибки error_prepend_string и error_append_string. Если вы его найдете, тогда шунтируйте свой выход там, где вы хотите. Если вы этого не сделаете, тогда отпустите его, где бы оно ни было.

Большая часть этого может быть достигнуто за счет ini_set вызовов, но файл auto_prepend нужно будет указать в вашем php.ini.

+0

Можно ли увидеть крошечный пример? :) –

+1

Единственный пример, который у меня есть, - 422 строки. –

-2

У PHP есть функции ввода/вывода файлов для записи в файл.

http://www.php.net/manual/en/function.fopen.php
http://www.php.net/manual/en/function.fwrite.php

+0

Но это не приведет к ошибкам компилятора! Очень важно! –

+0

Ошибки «компилятора»? –

+0

Как «Ошибка анализа: ошибка синтаксиса, неожиданный конец $ в C: \ XAMPP \ htdocs \ test.php (5): eval() 'd код в строке 10' –

1

Вы можете использовать output control даже в сценарии командной строки в PHP: ошибки

echo "123\n"; 
ob_start(); 
echo "456\n"; 
$s = ob_get_contents(); 
ob_end_clean(); 
echo "*$s"; 
+0

Будет ли это работать на синтаксические ошибки? Они будут отображаться? _ [Лучше добавить это к вопросу ...] _ –

+1

Нет. Это не сработало бы для какой-либо фатальной ошибки. –

0

Синтаксис будет выводиться на STDERR, а не STDOUT. Убедитесь, что вы также перенаправить STDERR в вашем pipline ...

./myscript | myfile.php &> out.txt 
+0

Но я не думаю, что могу управлять запуском скрипта ... –

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