Last active
April 22, 2024 02:32
-
-
Save wellington1993/052f4e5868f5d51956dea399209e7388 to your computer and use it in GitHub Desktop.
Debug request PHP
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?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); | |
echo file_get_contents($my_file); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment