Skip to content

Instantly share code, notes, and snippets.

@wellington1993
Last active April 22, 2024 02:32
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save wellington1993/052f4e5868f5d51956dea399209e7388 to your computer and use it in GitHub Desktop.
Save wellington1993/052f4e5868f5d51956dea399209e7388 to your computer and use it in GitHub Desktop.
Debug request PHP
<?php
// Criar uma função para imprimir os dados de uma variável
function print_data($var, $label = null) {
echo "\xA" . '---------' . "\xA";
if ($label) {
echo $label . "\xA";
}
var_dump($var); // Usar var_dump em vez de print_r para mostrar mais detalhes
}
// Criar uma função para obter os cabeçalhos HTTP
function get_http_headers() {
if (!function_exists('getallheaders')) {
$headers = array();
foreach ($_SERVER as $name => $value) {
if (substr($name, 0, 5) == 'HTTP_') {
$headers[str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5)))))] = $value;
}
}
return $headers;
} else {
return getallheaders();
}
}
// Obter a data e o tempo atual
$date = new DateTime();
$tempo = $date->getTimestamp();
// Criar o nome do arquivo de saída
$my_file = "/tmp/output-$tempo.html";
// Abrir o arquivo para escrita
$handle = fopen($my_file, 'w');
// Iniciar o buffer de saída
ob_start();
echo '<pre>';
// Imprimir os cabeçalhos HTTP
print_data(get_http_headers(), 'Cabeçalhos HTTP');
// Imprimir as variáveis globais
print_data($_SERVER, '$_SERVER');
print_data($_POST, '$_POST');
print_data($_GET, '$_GET');
print_data($_FILES, '$_FILES');
print_data($_REQUEST, '$_REQUEST');
// Imprimir o conteúdo do corpo da requisição
$postdata = file_get_contents("php://input");
print_data($postdata, '$postdata');
// Separar os dados por delimitador
$boundary = substr($postdata, 0, strpos($postdata, "\r\n"));
$boundary = empty ($boundary) ? " " : $boundary; // usar espaço como separador padrão se vazio
$parts = explode($boundary, $postdata);
// Criar um array para armazenar os campos e os arquivos
$fields = array();
$files = array();
// Iterar sobre as partes do corpo da requisição
foreach ($parts as $part) {
// Ignorar as partes vazias
if (trim($part) == '') {
continue;
}
// Obter o cabeçalho e o corpo da parte
list($header, $body) = explode("\r\n\r\n", $part, 2);
// Remover os caracteres finais da parte
$body = substr($body, 0, -2);
// Obter o nome e o valor do campo
preg_match('/name="([^"]+)"/', $header, $matches);
$name = $matches[1];
$value = $body;
// Verificar se a parte é um arquivo
if (strpos($header, 'filename') !== false) {
// Obter o nome e o tipo do arquivo
preg_match('/filename="([^"]+)"/', $header, $matches);
$filename = $matches[1];
preg_match('/Content-Type: ([^\r\n]+)/', $header, $matches);
$type = $matches[1];
// Armazenar o arquivo em um array associativo
$files[$name] = array(
'name' => $filename,
'type' => $type,
'content' => $body
);
} else {
// Armazenar o campo em um array associativo
$fields[$name] = $value;
}
}
// Gerar o comando do cURL
$curl_cmd = 'curl ';
// Adicionar o método da requisição com a opção -X
$curl_cmd .= "-X " . $_SERVER['REQUEST_METHOD'] . " ";
// Adicionar os campos do formulário com a opção -F
foreach ($fields as $name => $value) {
$curl_cmd .= "-F '$name=$value' ";
}
// Adicionar os arquivos do formulário com a opção -F e o símbolo @
foreach ($files as $name => $file) {
// Salvar o conteúdo do arquivo em um arquivo temporário
$tmp_file = tempnam(sys_get_temp_dir(), 'curl');
file_put_contents($tmp_file, $file['content']);
// Adicionar o nome, o tipo e o caminho do arquivo ao comando
$curl_cmd .= "-F '$name=@$tmp_file;type=$file[type];filename=$file[name]' ";
}
// Adicionar a URL da requisição ao comando
$curl_cmd .= "'" . $_SERVER['REQUEST_SCHEME'] . '://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] . "'";
// Imprimir o comando do cURL
echo "Comando do cURL:\n" . $curl_cmd . "\n";
echo '</pre>';
# Write
$htmlStr = ob_get_contents();
ob_end_clean();
fwrite($handle, $htmlStr);
rewind($handle);
fclose($handle);
# Print
echo file_get_contents($my_file);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment