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

01/07/2019

7

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
Responder
×
+1 DevUP
Acesso diário, +1 DevUP
Parabéns, você está investindo na sua carreira