$short"; } else { return "$escaped"; } } else { if ($short) { return $short; } else { return $resource; } } } /** Return pretty-print view of a literal * * This method is mainly intended for internal use and is used by * EasyRdf_Graph and EasyRdf_Sparql_Result to format a literal * for display. * * @param mixed $literal An EasyRdf_Literal object or an associative array * @param string $format Either 'html' or 'text' * @param string $color The colour of the text * @return string */ public static function dumpLiteralValue($literal, $format = 'html', $color = 'black') { if (!preg_match('/^#?[-\w]+$/', $color)) { throw new InvalidArgumentException( "\$color must be a legal color code or name" ); } if (is_object($literal)) { $literal = $literal->toRdfPhp(); } elseif (!is_array($literal)) { $literal = array('value' => $literal); } $text = '"'.$literal['value'].'"'; if (isset($literal['lang'])) { $text .= '@' . $literal['lang']; } if (isset($literal['datatype'])) { $short = EasyRdf_Namespace::shorten($literal['datatype']); if ($short) { $text .= "^^$short"; } else { $text .= "^^<".$literal['datatype'].">"; } } if ($format == 'html') { return "". htmlentities($text, ENT_COMPAT, "UTF-8"). ""; } else { return $text; } } /** Clean up and split a mime-type up into its parts * * @param string $mimeType A MIME Type, optionally with parameters * @return array $type, $parameters */ public static function parseMimeType($mimeType) { $parts = explode(';', strtolower($mimeType)); $type = trim(array_shift($parts)); $params = array(); foreach ($parts as $part) { if (preg_match('/^\s*(\w+)\s*=\s*(.+?)\s*$/', $part, $matches)) { $params[$matches[1]] = $matches[2]; } } return array($type, $params); } /** Execute a command as a pipe * * The proc_open() function is used to open a pipe to a * a command line process, writing $input to STDIN, returning STDOUT * and throwing an exception if anything is written to STDERR or the * process returns non-zero. * * @param string $command The command to execute * @param array $args Optional list of arguments to pass to the command * @param string $input Optional buffer to send to the command * @param string $dir Path to directory to run command in (defaults to /tmp) * @return string The result of the command, printed to STDOUT */ public static function execCommandPipe($command, $args = null, $input = null, $dir = null) { $descriptorspec = array( 0 => array('pipe', 'r'), 1 => array('pipe', 'w'), 2 => array('pipe', 'w') ); // Use the system tmp directory by default if (!$dir) { $dir = sys_get_temp_dir(); } if (is_array($args)) { $fullCommand = implode( ' ', array_map('escapeshellcmd', array_merge(array($command), $args)) ); } else { $fullCommand = escapeshellcmd($command); if ($args) { $fullCommand .= ' '.escapeshellcmd($args); } } $process = proc_open($fullCommand, $descriptorspec, $pipes, $dir); if (is_resource($process)) { // $pipes now looks like this: // 0 => writeable handle connected to child stdin // 1 => readable handle connected to child stdout // 2 => readable handle connected to child stderr if ($input) { fwrite($pipes[0], $input); } fclose($pipes[0]); $output = stream_get_contents($pipes[1]); fclose($pipes[1]); $error = stream_get_contents($pipes[2]); fclose($pipes[2]); // It is important that you close any pipes before calling // proc_close in order to avoid a deadlock $returnValue = proc_close($process); if ($returnValue) { throw new EasyRdf_Exception( "Error while executing command $command: ".$error ); } } else { throw new EasyRdf_Exception( "Failed to execute command $command" ); } return $output; } }