本文整理汇总了PHP中XSLTProcessor::setProfiling方法的典型用法代码示例。如果您正苦于以下问题:PHP XSLTProcessor::setProfiling方法的具体用法?PHP XSLTProcessor::setProfiling怎么用?PHP XSLTProcessor::setProfiling使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类XSLTProcessor
的用法示例。
在下文中一共展示了XSLTProcessor::setProfiling方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: render
/**
* Converts the given XML tree and the given XSL file to a (HTML) file, with respect to the given XSL parameters.
* The given XMLTree parameter may be of the SimpleXMLElement or the DOMDocument type, however, the latter is the fastest.
* The generated output may be considered to be formatted properly.
* @param mixed The XML Tree as a SimpleXMLElement or a DOMDocument
* @param mixed The fullpath to the XSL file, or an instanced \SimpleXMLElement XSL tree
* @param \System\Collection\Map The map with the parameters, or null for no parameters or default
*/
public final function render()
{
$args = func_get_args();
if (count($args) != 3) {
throw new \InvalidArgumentException('Invalid amount of arguments given.');
}
list($xmlTree, $xslFile, $parameters) = $args;
$processor = new \XSLTProcessor();
//register the php functions
if (count(self::$registeredPHPFunctions) > 0) {
$processor->registerPHPFunctions(self::$registeredPHPFunctions);
}
//load the xsl file intro a dom
$xsl = new \DOMDocument();
if ($xslFile instanceof \SimpleXMLElement) {
$xsl->loadXML($xslFile->asXML());
} else {
if (!file_exists($xslFile)) {
throw new \System\Error\Exception\FileNotFoundException('XSL File: ' . $xslFile . ' cannot be found');
}
$xsl->load($xslFile);
}
//attach the xsl dom to the processor
$processor->importStylesheet($xsl);
//when we run as a local debug system, we output the profiling information
if (defined('DEBUG')) {
$processor->setProfiling(PATH_LOGS . 'XSLTRenderProfiling.txt');
}
$dom = new \DOMDocument();
switch (true) {
case $xmlTree instanceof \SimpleXMLElement:
//we need to convert to a domdocument
$dom = \System\XML\XML::convertSimpleXMLElementToDOMDocument($xmlTree);
break;
case $xmlTree instanceof \DOMDocument:
//no conversion needed
break;
default:
throw new \InvalidArgumentException('Given XML tree is of non supported tree type: ' . get_class($xmlTree));
}
$this->preprocessParameters($parameters);
//we do not need any namespaces
$processor->setParameter('', $parameters->getArrayCopy());
$output = $processor->transformToXML($dom);
if (!$output) {
throw new \Exception('Could not transform the given XML and XSL to a valid HTML page');
}
if (MINIFY_ENABLE) {
$output = \System\Web\Minify\HTML\Minify::minify($output);
}
$this->addToBuffer($output);
}
示例2: render
/**
* The main function of this object which simply renders the accumulated data using PHP's XSLTProcessor
* @access public
*/
public function render()
{
try {
$xsltproc = new \XSLTProcessor();
$xsltproc->importStylesheet($this->_styleSheet);
if (isset($this->_profilerLogPath)) {
$xsltproc->setProfiling($this->_profilerLogPath);
}
return $xsltproc->transformToXML($this->_inputData);
} catch (Exception $e) {
echo "Could not process the Datafile with the given Stylesheet: " . $e->getMessage();
}
}
示例3: chr
<?php
$file = '/etc/passwd' . chr(0) . 'asdf';
$doc = new DOMDocument();
$proc = new XSLTProcessor();
var_dump($proc->setProfiling($file));
var_dump($proc->transformToURI($doc, $file));
示例4: CLIConfiguration
require 'library/class.cli-configuration.php';
require 'library/functions.sanity-checks.php';
$Configuration = new CLIConfiguration(array('help::' => null, 'u=url:' => '', 'v=verbose' => 0, 'version' => null, 't=xsl:' => '', 'x=param:' => array(), 'p=preset:' => null));
$Configuration->SetFlagTriggers(array('help' => 'CLIVersion', 'verbose' => 'CLIVerbosity', 'param' => 'XSLParam'));
$Configuration->AddPresetFlagTrigger();
$Collected = $Configuration->CollectArguments();
$Parameters = $Configuration->Param;
$Url = $Configuration->Url;
$Xsl = $Configuration->Xsl;
// Sanity Checks
SanityCheck(!empty($Url), 'No URL specified', 'CLIVersion');
SanityCheck(!empty($Xsl), 'No Transformation XSL file specified');
SanityCheck(file_exists($Xsl), '"' . $Xsl . '" does not exist');
libxml_use_internal_errors(true);
$XsltProcessor = new XSLTProcessor();
$XsltProcessor->setProfiling('_output/profiling.txt');
$XmlString = '';
$XmlData = new DOMDocument('1.0', 'utf-8');
$XslData = new DOMDocument('1.0', 'utf-8');
$DomErrors = new DOMDocument('1.0', 'utf-8');
$XsltProcessor->setParameter('', 'request-url', $Url);
if (is_array($Parameters)) {
foreach ($Parameters as $Key => $Value) {
$XsltProcessor->setParameter('', $Key, $Value);
}
}
// Grab the remote XML file
$C = curl_init($Url);
curl_setopt_array($C, array(CURLOPT_USERAGENT => 'XSL-Transformation/' . VERSION . ' (like Feedburner)', CURLOPT_FOLLOWLOCATION => true, CURLOPT_MAXREDIRS => 3, CURLOPT_HEADER => false, CURLOPT_RETURNTRANSFER => true));
$XmlString = curl_exec($C);
curl_close($C);
示例5: tryHTML
/**
* проверяет возможности клиента и выдает как есть или выполняет трансформации сам
* и выдает готовый html
* @param string $data выходные данные в xml
* @param boolean $html явное указание формата html
* @param string $documentURI так как xml-документ $data передан строкой иногда требуется указать путь до него чтобы нашлись схемы
* @param boolean $forceValidation NULL - валидация если в домашнем каталоге, TRUE: форсировать проверку по схеме/tidy всегда, FALSE - не проверять по схеме/tidy
* @param string $htmlContentType миме-тип для вывода html, по-умолчанию text/html, для вывода html+xul передать application/xml
*/
public static function tryHTML($data, $html = FALSE, $documentURI = NULL, $forceValidation = NULL, $htmlContentType = "text/html")
{
$outputDom = NULL;
$xsltResult = NULL;
$debug = FALSE;
$xsltProfiler = NULL;
if (self::$done == TRUE) {
trigger_error("Output::tryHTML() called twice?");
}
$xsltStart = $xsltStop = 0;
//минипрофайлер
if ($html == FALSE && isset($_SERVER["HTTP_ACCEPT"])) {
//тут пока неразбериха с text/xml по старому и application/xml по новому
//опера по-новому, ие по-старому, мозиллы и так и сяк
if (strpos($_SERVER["HTTP_ACCEPT"], "/xml") !== FALSE) {
//тем кто явно грит "понимаю xml" сбросим флаг html
$html = FALSE;
if ("application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5" == $_SERVER["HTTP_ACCEPT"]) {
//но некоторые говорят что понимают, но на самом деле не понимают, это андроиды 2.х их мы отлавливаем по кривому заголовку
//под раздачу также попадают ближайщие родственники, которые реально умеют, но их не отличить от больных - сафари 4 (айфон 4).
//остальные родственники успешно вылечились - сафари 5, хромы и хромиумы и другие вэбкитообразные.
//используем заголовок Accept а не Usera-gent потому что
//1. уже есть Vary: Accept - чтоб не плодить ветвление в прокси и кешах
//2. у больных особей есть переключатель "mobile view" который влияет на User-agent-а
// @seealso http://www.gethifi.com/blog/browser-rest-http-accept-headers
// @seealso https://developer.mozilla.org/en-US/docs/HTTP/Content_negotiation
$html = TRUE;
}
} elseif (strpos($_SERVER["HTTP_ACCEPT"], "text/html") !== FALSE) {
//тем кто не понимает xml но явно грит что умеет html
$html = TRUE;
}
} elseif (isset($_SERVER["HTTP_ACCEPT"])) {
//"обратная автоматика" - даже если форсирован HTML но клиент его "не хочет" или "не может", но обещает что поймет XML - спрыгиваем на XML
if (strpos($_SERVER["HTTP_ACCEPT"], "text/html") === FALSE && strpos($_SERVER["HTTP_ACCEPT"], "/xml") !== FALSE) {
//тем кто явно заявляет что понимает xml и не умеет html
$html = FALSE;
}
}
//$html=TRUE;
//подготовить стили для трансформации на php
if ($debug || $html) {
$outputDom = new \DOMDocument();
$outputDom->loadXML($data);
if ($documentURI) {
$outputDom->documentURI = $documentURI;
}
//валидация данных xml-схемой
if ($debug) {
$matches = NULL;
//добываем имя схемы и проверяем по ней (или xmlreader?)
if (preg_match("/schemaLocation=\".+\\s([a-zA-Z0-9_\\/\\.\\-]+)\"/", $data, $matches)) {
$outputDom->schemaValidate(($documentURI ? dirname($documentURI) . "/" : "") . $matches[1]);
// } else {
// throw new \Exception("cant find schemaLocation");
}
}
$matches = NULL;
//добываем имя стиля из хмл-а (или xmlreader?)
if ($outputDom->firstChild->nodeType == XML_PI_NODE && $outputDom->firstChild->target == "xml-stylesheet") {
if (preg_match("/href\\s*=\\s*\"(.+)\"/", $outputDom->firstChild->data, $matches)) {
$oldHeaders = headers_list();
//время трансформации считаем общее - вместе с загрузкой документов
$xsltStart = microtime(TRUE);
$xsl = new \DomDocument();
// надо взять таблицу стилей локально
$xsl_file = dirname($_SERVER["SCRIPT_FILENAME"]) . "/" . str_replace("http://" . $_SERVER["HTTP_HOST"] . dirname($_SERVER["PHP_SELF"]), "", $matches[1]);
//error_log(dirname($_SERVER["SCRIPT_FILENAME"]));
//error_log($_SERVER["PHP_SELF"]);
//$xsl->load($matches[1]);
$xsl->load("{$xsl_file}");
$proc = new \XSLTProcessor();
if ($xsltProfiler) {
$proc->setProfiling($xsltProfiler);
}
$proc->importStyleSheet($xsl);
//регистрируем на себя обращения к файлам
stream_wrapper_unregister("file") or die(__FILE__ . __LINE__);
stream_wrapper_register("file", static::CLASSNAME) or die(__FILE__ . __LINE__);
//вешаем на обработчик выхода ловушку - если вложенный скрипт попытается сделать exit или die
register_shutdown_function(array(static::CLASSNAME, "checkDone"));
//на время трансформации ставим свой специальный обработчик ошибок
set_error_handler(array(static::CLASSNAME, "xsltErrorHandler"));
$xsltResult = $proc->transformToXML($outputDom);
restore_error_handler();
if (self::$xsltErrors != NULL) {
//а сообщаем об ошибках как обычно
trigger_error("XSLTProcessor::transformToXml(): " . self::$xsltErrors);
}
//ставим маркер что управление нам вернули
self::$done = TRUE;
//.........这里部分代码省略.........