path = $path; } public function execute() { if(!is_writable(sprintf('%s%s', $this->path, $this->file_temp))) { $this->error = true; return; } file_put_contents(sprintf('%s%s', $this->path, $this->file_temp), ''); $args = ''; foreach([ 'SCRIPTS_DIR' => $this->path, 'HOME' => $this->path, 'PWD' => $this->path, 'DOCUMENT_ROOT' => $this->path, 'SCRIPT_FILENAME' => sprintf('%s%s', $this->path, $this->file_temp), 'REQUEST_METHOD' => 'GET' ] AS $name => $value) { $args .= sprintf('%s=%s \\%s', $name, $value, PHP_EOL); } $result = shell_exec(sprintf('%scgi-fcgi -bind -connect "%s" 2>&1', $args, $this->socket)); @unlink(sprintf('%s%s', $path, $this->file_temp)); $this->content = $result; } public function exploding($name, $data) { if($name == 'Configuration File (php.ini) Path') { return $this->highlight($this->path); } if($name == 'Loaded Configuration File') { return [ $data, sprintf('%sphp.ini', $this->path) ]; } if(in_array($name, [ 'Additional .ini files parsed', 'Registered PHP Streams', 'Registered Stream Socket Transports', 'Registered Stream Filters', 'disable_functions' ])) { if(is_array($data)) { foreach($data AS $key => $value) { $data[$key] = explode(',', $value); } } else { return explode(',', $data); } } return $this->highlight($data); } public function highlight($data) { if(is_array($data)) { foreach($data AS $name => $value) { $data[$name] = $this->highlight($value); } return $data; } switch(strtolower($data)) { case 'disabled': case 'active': case 'enabled': case 'off': case 'on': case 'no': case 'yes': return sprintf('%s', $data); break; case 'no value': return sprintf('%s', $data); break; } if(preg_match('/^#([a-f]|[A-F]|[0-9]){3}(([a-f]|[A-F]|[0-9]){3})?/', $data)) { return sprintf('%1$s', $data); } if(is_numeric($data)) { return sprintf('%s', $data); } if(substr($data, 0, 1) == '/' || substr($data, 0, 3) == '.:/') { return sprintf('%s', $data); } return $data; } public function hasErrors() { return $this->error; } public function parse() { if($this->error) { return; } $entitiesToUtf8 = function($input) { // http://php.net/manual/en/function.html-entity-decode.php#104617 return preg_replace_callback("/([0-9]+;)/", function($m) { return mb_convert_encoding($m[1], "UTF-8", "HTML-ENTITIES"); }, $input); }; $plainText = function($input) use ($entitiesToUtf8) { return trim(html_entity_decode($entitiesToUtf8(strip_tags($input)))); }; $titlePlainText = function($input) use ($plainText) { return '# '.$plainText($input); }; if(!preg_match('#(.*