mirror of
https://gh.wpcy.net/https://github.com/pawankhated/one-click-wordpress-installer.git
synced 2026-04-22 00:39:17 +08:00
213 lines
5.3 KiB
PHP
213 lines
5.3 KiB
PHP
<?php
|
|
|
|
class Debug_Bar_WP_Http extends Debug_Bar_Panel {
|
|
public $requests = [];
|
|
|
|
public $time_limit = 250; // milliseconds
|
|
public $total_time = 0;
|
|
public $num_errors = 0;
|
|
|
|
function early_init() {
|
|
add_filter( 'http_request_args', [ $this, 'before_http_request' ], 10, 3 );
|
|
add_filter( 'http_api_debug', [ $this, 'after_http_request' ], 10, 5 );
|
|
}
|
|
|
|
function before_http_request( $args, $url ) {
|
|
$args['time_start'] = microtime( true );
|
|
|
|
$this->requests["{$args['time_start']}"] = [
|
|
'url' => $url,
|
|
'args' => $args
|
|
];
|
|
|
|
return $args;
|
|
}
|
|
|
|
function after_http_request( $response, $type, $class, $args, $url ) {
|
|
if ( $type !== 'response' ) {
|
|
return;
|
|
}
|
|
|
|
$args['time_stop'] = microtime( true );
|
|
|
|
$args['duration'] = $args['time_stop'] - $args['time_start'];
|
|
$args['duration'] *= 1000;
|
|
|
|
$this->total_time += $args['duration'];
|
|
|
|
if ( $this->is_request_error( $response ) ) {
|
|
$this->num_errors++;
|
|
} else {
|
|
if ( ! isset( $_GET['fullbody'] ) ) {
|
|
$response['body'] = '[omitted]';
|
|
unset( $response['http_response'] );
|
|
}
|
|
}
|
|
|
|
$this->requests["{$args['time_start']}"] = array_merge(
|
|
$this->requests["{$args['time_start']}"],
|
|
[
|
|
'r' => $response,
|
|
'class' => $class,
|
|
'args' => $args,
|
|
'url' => $url,
|
|
'stack_trace' => wp_debug_backtrace_summary( null, 0, false ),
|
|
]
|
|
);
|
|
}
|
|
|
|
function is_request_error( $response ) {
|
|
if (
|
|
empty( $response )
|
|
|| is_wp_error( $response )
|
|
|| $response['response']['code'] >= 400
|
|
) {
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
function init() {
|
|
$this->title( __( 'WP_Http', 'debug-bar' ) );
|
|
}
|
|
|
|
function prerender() {
|
|
$this->set_visible( ! empty( $this->requests ) );
|
|
}
|
|
|
|
function debug_bar_classes( $classes ) {
|
|
if (
|
|
$this->num_errors > 0
|
|
|| $this->total_time > $this->time_limit
|
|
) {
|
|
$classes[] = 'debug-bar-php-warning-summary';
|
|
}
|
|
return $classes;
|
|
}
|
|
|
|
function render() {
|
|
$num_requests = number_format( count( $this->requests ) );
|
|
$elapsed = number_format( $this->total_time, 1 );
|
|
$num_errors = number_format( $this->num_errors );
|
|
|
|
if ( isset( $_GET['fullbody'] ) ) {
|
|
$fullbody = '<p style="clear:left">Request and response bodies are included. <a href="' . esc_attr( remove_query_arg( 'fullbody' ) ) . '">Reload with those omitted.</a>';
|
|
} else {
|
|
$fullbody = '<p style="clear:left">Request and response bodies are omitted. <a href="' . esc_attr( add_query_arg( 'fullbody', 'please' ) ) . '">Reload with those included.</a>';
|
|
}
|
|
|
|
$css_errors = '';
|
|
if (
|
|
$this->num_errors > 0
|
|
|| $this->total_time > $this->time_limit
|
|
) {
|
|
$css_errors = "#wp-admin-bar-debug-bar-Debug_Bar_WP_Http, #debug-menu-link-Debug_Bar_WP_Http { background-color: #d00 !important; background-image: -moz-linear-gradient(bottom,#f44,#d00) !important; background-image: -webkit-gradient(linear,left bottom,left top,from(#f44),to(#d00)) important; }\n";
|
|
}
|
|
|
|
$elapsed_class = '';
|
|
if ( $this->total_time > $this->time_limit ) {
|
|
$elapsed_class = 'debug_bar_http_error';
|
|
}
|
|
|
|
$errors_class = '';
|
|
if ( $this->num_errors > 0 ) {
|
|
$errors_class = 'debug_bar_http_error';
|
|
}
|
|
|
|
$out =<<<HTML
|
|
<style>
|
|
#debug_bar_http { clear: left; }
|
|
#debug_bar_http .err, .debug_bar_http_error { background-color: #ffebe8; border: 1px solid #c00 !important; }
|
|
#debug_bar_http th, #debug_bar_http td { padding: 8px; }
|
|
#debug_bar_http pre { font-family: monospace; }
|
|
{$css_errors}
|
|
</style>
|
|
|
|
<script>
|
|
function debug_bar_http_toggle( id ) {
|
|
var e = document.getElementById( id );
|
|
if ( e.style.display === "" ) {
|
|
e.style.display = "none";
|
|
} else {
|
|
e.style.display = "";
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<h2><span>HTTP Requests:</span> {$num_requests}</h2>
|
|
<h2 class="{$elapsed_class}"><span>Total Elapsed:</span> {$elapsed} ms</h2>
|
|
<h2 class="{$errors_class}"><span>Errors:</span> {$num_errors}</h2>
|
|
|
|
{$fullbody}
|
|
|
|
<table id="debug_bar_http">
|
|
<thead>
|
|
<tr>
|
|
<th>More</th>
|
|
<th>Start</th>
|
|
<th>Duration</th>
|
|
<th>Method</th>
|
|
<th>URL</th>
|
|
<th>Code</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
HTML;
|
|
|
|
foreach( $this->requests as $i => $r ) {
|
|
$class = '';
|
|
if (
|
|
( ! empty( $r['r'] ) && $this->is_request_error( $r['r'] ) )
|
|
|| ( ! empty( $r['args']['duration'] ) && $r['args']['duration'] > $this->time_limit )
|
|
) {
|
|
$class = 'err';
|
|
}
|
|
|
|
$start = $r['args']['time_start'] - $_SERVER['REQUEST_TIME_FLOAT'];
|
|
$start *= 1000;
|
|
$start = number_format( $start, 1 );
|
|
|
|
$duration = 'error getting request duration';
|
|
if ( ! empty( $r['args']['duration'] ) ) {
|
|
$duration = number_format( $r['args']['duration'], 1 ) . ' ms';
|
|
}
|
|
$method = esc_html( $r['args']['method'] );
|
|
$url = esc_html( $r['url'] );
|
|
|
|
if ( ! empty( $r['r'] ) && is_wp_error( $r['r'] ) ) {
|
|
$code = esc_html( $r['r']->get_error_code() );
|
|
} else {
|
|
$code = 'error getting response code, most likely a stopped request';
|
|
if ( ! empty( $r['r']['response']['code'] ) ) {
|
|
$code = esc_html( $r['r']['response']['code'] );
|
|
}
|
|
}
|
|
|
|
$details = esc_html( print_r( $r, true ) );
|
|
|
|
$record_id = 'debug_bar_http_record_' . md5( $i );
|
|
$out .=<<<HTML
|
|
<tr class="{$class}">
|
|
<td><a onclick="debug_bar_http_toggle( '{$record_id}' );">Toggle</a></td>
|
|
<td>{$start} ms</td>
|
|
<td>{$duration}</td>
|
|
<td>{$method}</td>
|
|
<td>{$url}</td>
|
|
<td>{$code}</td>
|
|
</tr>
|
|
|
|
<tr id="{$record_id}" style="display: none">
|
|
<td colspan="5"><pre>{$details}</pre></td>
|
|
</tr>
|
|
HTML;
|
|
}
|
|
|
|
$out .=<<<HTML
|
|
</tbody>
|
|
</table>
|
|
HTML;
|
|
|
|
echo $out;
|
|
}
|
|
}
|