[PHP]Ajuda com função json_decode utilizando if

01/07/2019

0

Bom dia!

Gostaria de pedir uma ajuda num problema que estou enfrentado ao trabalhar com JSON.
Eu estou conseguindo com sucesso utilizar a função json_decode e acessar os dados normalmente. A questão é que, quando utilizo algum valor do objeto PHP gerado pela função dentro de um if, consigo acessar apenas o valor daquela variável utilizada na condição para execução dos comandos.
Abaixo segue uma pequena ilustração do que está acontecendo:

<?php

$json = file_get_contents("php://input");

$data = json_decode($json);

$group = $data->owner_name;
$event = $data->event_name;
$url = $data->project->http_url;

$host = "http://enderecodogit";
$substituir = "http://oauth2:privatekey@enderecodogit";
$url_aut = str_replace($host, $substituir, $url);

//Função para gerar os logs de eventos.
function log_append($message, $time = null)
{
    global $log;
    $time = $time === null ? time() : $time;
    $date = date('Y-m-d H:i:s');
    $pre  = $date . ' (' . $_SERVER['REMOTE_ADDR'] . '): ';
    file_put_contents($log, $pre . $message . "\\\\n", FILE_APPEND);
}

//Função que executa os comandos dentro do script.
function exec_command($command)
{      
    $output = array();
    exec($command, $output);
    log_append('EXEC: ' . $command);
    foreach ($output as $line) {
        log_append('SHELL: ' . $line);
    }
}


if($event == "project_create"){
  if($group == "Contratos"){
 $local_repo = "/local/do/repositorio/remoto";

 log_append('Launching PHP hook script...');
/*Aqui é ponto em questão. Não consigo acessar a variável global $url_aut.*/
 exec_command("cd $local_repo && git clone $url_aut");
 log_append('PHP hook script finished');

  }
 }


O código que eu informei representa a principal funcionalidade do projeto em questão. O que iria diferenciar, caso fosse o projeto completo, seria o número de If's que aumentaria.
O problema em questão é que, ao tentar acessar uma variável global originalmente gerada pela função json_decode, não consigo recuperar o valor dentro do if. Apenas as variáveis da mesma origem que, ao serem utilizadas na condicional, são possíveis de ser acessadas dentro do if.

O que está acontecendo é que o JSON recebido pela variável $json, enviado pelo Gitlab através do Systemhook, na verdade são dois e por isso ao tentar acessar um ou outro está havendo um conflito. Segundo a documentação do Gitlab e os dados informados na Admin Area->Request details, os JSON's enviados ao criar um novo projeto são:

Project updated:
{
"created_at": "2012-07-21T07:30:54Z",
"updated_at": "2012-07-21T07:38:22Z",
"event_name": "project_update",
"name": "StoreCloud",
"owner_email": "johnsmith@gmail.com",
"owner_name": "John Smith",
"path": "storecloud",
"path_with_namespace": "jsmith/storecloud",
"project_id": 74,
"project_visibility": "private"
}

Project created:
{
"created_at": "2012-07-21T07:30:54Z",
"updated_at": "2012-07-21T07:38:22Z",
"event_name": "project_create",
"name": "StoreCloud",
"owner_email": "johnsmith@gmail.com",
"owner_name": "John Smith",
"path": "storecloud",
"path_with_namespace": "jsmith/storecloud",
"project_id": 74,
"project_visibility": "private"
}

Os dois são enviados ao mesmo tempo e, ao utilizar a função json_decode, só consigo acessar somente um deles. Queria saber se há alguma forma de unir os dois ou filtrar quando for recebido para que somente um seja utilizado ou talvez armazena-los de forma separada.

Grande abraço!

Essa dúvida foi gerada a partir de um comentário no artigo Trabalhando com JSON em PHP
Leonardo Silva

Leonardo Silva

Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar