我有一个非常奇怪的问题,我正在做一个脚本,执行symfony命令。
在这里:
<?php
$checkname = 'symfony_checker';
$sensu_ip = '192.168.13.000';
$port = 3002;
function write_to_sensu($json)
{
echo('writing');
try
{
$fp = fsockopen($sensu_ip, $port, $errno, $errstr, 10);
if ($fp)
{
fwrite($fp, $json);
fclose($fp);
}
}
catch (Exception $E)
{
}
}
ini_set('max_execution_time', 0);
require_once dirname(__DIR__).'/app/bootstrap.php.cache';
require_once dirname(__DIR__).'/app/AppKernel.php';
use Symfony'Bundle'FrameworkBundle'Console'Application;
use Symfony'Component'Console'Input'ArrayInput;
use Symfony'Component'Console'Output'BufferedOutput;
$input = new ArrayInput(array(
'command' => 'security:check',
'--format' => 'json',
));
$output = new BufferedOutput();
$kernel = new AppKernel('dev', true);
$application = new Application($kernel);
$application->setAutoExit(false);
$application->run($input, $output);
$payload = array(
'name' => $checkname,
"status" => 0
);
$payload = json_encode($payload);
$arr = json_decode($output->fetch());
$vulnerabilites = array();
foreach ($arr as $key => $errors)
{
$var = 0;
foreach ($errors as $error)
{
if ($var == 1)
{
foreach ($error as $key => $one)
array_push($vulnerabilites, $key);
}
$var++;
}
}
$vulnerabilites = implode(' ', $vulnerabilites);
$payload['output'] = 'Vulnerabilities found : ' . $vulnerabilites;
dump($vulnerabilites);
write_to_sensu($payload);
问题是程序在这一行离开:
$payload['output'] = 'Vulnerabilities found : ' . $vulnerabilites;
如果我注释这一行,代码继续很好,并进入我的函数write to sense。如果我只是用一个随机字符串更新$payload['output'],它也不起作用。
每次我尝试更新有效载荷时,程序都会退出!
知道为什么吗?
您正在将$payload
转换为具有
$payload = json_encode($payload);
所以你不能再把它当作数组来使用了。要么将json_encode()
的结果赋值给另一个变量,要么在转换前更新数组
在尝试添加漏洞之前,您已经将数组编码为JSON。所以你把一个字符串当作一个关联数组。
你只需要移动你的行
$payload = json_encode($payload);
到行后:
$payload['output'] = 'Vulnerabilities found : ' . $vulnerabilites;