PHP - SQL Server: как перехватить печать на консоль в сохраненном протоколе и перенаправить в файл с помощью PHP

1

У меня есть PHP-код, который вызывает хранимую процедуру на SQL-сервере, а мой сохраненный proc содержит кучу инструкций PRINT, которые генерируют сообщения для консоли для большего количества протоколирования и отладки. Я вызываю proc с использованием функций сервера PHP/SQL, где выполняется proc, но хотел бы захватить все сообщения PRINT, сгенерированные на консоли, либо переменной, либо перенаправлением на файл с помощью PHP.

Я знаю, используя xp_cmdshell в proc, мы можем перенаправить, но доступ запрещен. Я хочу захватить эти отпечатки в PHP и записать в файл log_07DEC2015.log...

Цените свою поддержку и любые указатели.

Код PHP:

        $this->writeToFile ('executeRulesEngine() called');     

        $query = "{call dbo.usp_DQ_Rules_Engine(?, ?, ?, ?)} ";
        $rules_config_table = "DQ_RULES_CONFIGURATION";
        $result_set_table = "DQ_RESULT_SET";
        $trim_spaces = "N";
        $sample_count = "All";
        $ret_value = 0;

        $params = array( 
                        array($rules_config_table, SQLSRV_PARAM_IN),
                        array($result_set_table, SQLSRV_PARAM_IN),
                        array($trim_spaces, SQLSRV_PARAM_IN),
                        array($sample_count, SQLSRV_PARAM_IN)
                       );


        $ret = sqlsrv_query($this->dbConn, $query, $params);
        if(!$ret ) {
            $this->writeToFile ('ERROR : Could not execute stored proc :'. print_r(sqlsrv_errors(), true));
            die('Could not execute stored proc.. see logs ' );
        }
        else {
            $this->writeToFile ('Engine called : ' .$query);
        }
        sqlsrv_free_stmt($ret);
Теги:
logging
console

1 ответ

0

Может быть, я не понимаю вопрос, но не exec() или shell_exec() делать то, что вы хотите? Если хранимая процедура записывает в stdout (по умолчанию), то эти команды должны записывать свой вывод.

[Опубликовать в качестве ответа из-за отсутствия репутации]

  • 0
    Привет Альдо, я добавил код в описание, чтобы помочь понять, что я в основном делаю. Я вызываю proc, используя «exec», но proc, который печатает что-то на консоли, не записывается в файл. Как мне это сделать ?
  • 0
    Это не выглядит многообещающе. Очевидно, что сообщения PRINT предназначены для приема только выделенным клиентом MS-SQL. В старые времена вы могли использовать PHP mssql_get_last_message() из пакета MSSQL, но он больше не доступен в Windows с PHP> = 5.3 (см. Php.net/manual/en/intro.mssql.php ). Если вы работаете в Linux, вам может повезти, если вы используете старый пакет. Самая близкая вещь в SQLSRV, которую я вижу, это sqlsrv_errors() , но потребовалось бы некоторое экспериментирование, чтобы увидеть, действительно ли она получает вывод PRINTed. Извините, я не могу помочь.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню