PHP中JSON响应混入DB类echo消息如何屏蔽?仅返回指定JSON
如何仅返回JSON响应,屏蔽DB类输出的调试消息?
我有如下PHP代码:
<?php header("Access-Control-Allow-Origin: *"); include_once('../includes/mysql_connect.php'); include_once('../db/tables/search.php'); // SAVE TO DB $search = new search($mysql); //$search->drop(); //$search->create(); $search->save(array("shop" => "test store", "searchterm" => $_POST['search'])); // LOG TO FILE $file = fopen('search-data.txt', 'a+'); $result = fwrite($file, " search query data: " . print_r($_POST['search'], true) ); // SEND RESPONSE $response = array('response' => 'received', 'data' => $_POST['search'] ); echo json_encode($response);
当我查看浏览器控制台时,看到如下内容:
<br>INSERT QUERY SUCCESSFUL: insert_id=69{"response":"received","data":"product"}
其中“INSERT QUERY SUCCESSFUL”来自执行INSERT操作的DB类,该类会echo各类消息。我希望保留DB类中的这些消息,但浏览器控制台仅显示最后两行代码生成的JSON响应,该怎么做?
解决方法
方法1:用输出缓冲捕获并丢弃DB类的输出
在调用DB类方法前开启输出缓冲,执行完后清空缓冲,再输出JSON:
<?php header("Access-Control-Allow-Origin: *"); include_once('../includes/mysql_connect.php'); include_once('../db/tables/search.php'); // 开启输出缓冲,捕获后续所有echo内容 ob_start(); // SAVE TO DB $search = new search($mysql); //$search->drop(); //$search->create(); $search->save(array("shop" => "test store", "searchterm" => $_POST['search'])); // 清空缓冲(不输出捕获的内容) ob_end_clean(); // LOG TO FILE $file = fopen('search-data.txt', 'a+'); $result = fwrite($file, " search query data: " . print_r($_POST['search'], true) ); // SEND RESPONSE $response = array('response' => 'received', 'data' => $_POST['search'] ); echo json_encode($response);
方法2:微调DB类的输出方式
如果可以对DB类做小改动,把echo调试消息改成写入日志文件,既保留信息又不干扰响应:
将DB类中类似这样的代码:
echo "<br>INSERT QUERY SUCCESSFUL: insert_id=" . $insert_id;
替换为:
file_put_contents('db-debug.log', "INSERT QUERY SUCCESSFUL: insert_id=" . $insert_id . PHP_EOL, FILE_APPEND);
方法3:重定向输出到日志文件
在调用DB类方法前,把PHP标准输出重定向到日志文件,执行完成后恢复输出:
<?php header("Access-Control-Allow-Origin: *"); include_once('../includes/mysql_connect.php'); include_once('../db/tables/search.php'); // 保存当前输出句柄 $original_stdout = fopen('php://stdout', 'w'); // 重定向输出到日志文件 $log_file = fopen('db-debug.log', 'a'); fclose(STDOUT); STDOUT = $log_file; // SAVE TO DB $search = new search($mysql); //$search->drop(); //$search->create(); $search->save(array("shop" => "test store", "searchterm" => $_POST['search'])); // 恢复原输出句柄 fclose(STDOUT); STDOUT = $original_stdout; // LOG TO FILE $file = fopen('search-data.txt', 'a+'); $result = fwrite($file, " search query data: " . print_r($_POST['search'], true) ); // SEND RESPONSE $response = array('response' => 'received', 'data' => $_POST['search'] ); echo json_encode($response);
内容的提问来源于stack exchange,提问作者user1532669
相关产品推荐
相关产品推荐

