У меня есть 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);
Может быть, я не понимаю вопрос, но не exec()
или shell_exec()
делать то, что вы хотите? Если хранимая процедура записывает в stdout (по умолчанию), то эти команды должны записывать свой вывод.
[Опубликовать в качестве ответа из-за отсутствия репутации]
mssql_get_last_message()
из пакета MSSQL, но он больше не доступен в Windows с PHP> = 5.3 (см. Php.net/manual/en/intro.mssql.php ). Если вы работаете в Linux, вам может повезти, если вы используете старый пакет. Самая близкая вещь в SQLSRV, которую я вижу, этоsqlsrv_errors()
, но потребовалось бы некоторое экспериментирование, чтобы увидеть, действительно ли она получает вывод PRINTed. Извините, я не могу помочь.