PHP  
downloads | documentation | faq | getting help | mailing lists | reporting bugs | php.net sites | links | my php.net 
search for in the  
<xmlrpc_set_typexslt_create>
view the version of this page
Last updated: Thu, 21 Aug 2003

CXI. XSLT functions

Introduction

This PHP extension provides a processor independent API to XSLT transformations. Currently this extension only supports the Sablotron library from the Ginger Alliance. Support is planned for other libraries, such as the Xalan library or the libxslt library.

XSLT (Extensible Stylesheet Language (XSL) Transformations) is a language for transforming XML documents into other XML documents. It is a standard defined by The World Wide Web Consortium (W3C). Information about XSLT and related technologies can be found at http://www.w3.org/TR/xslt.

Note: This extension is different than the sablotron extension distributed with versions of PHP prior to PHP 4.1, currently only the new XSLT extension in PHP 4.1 is supported. If you need support for the old extension, please ask your questions on the PHP mailing lists.

Requirements

This extension uses Sablotron and expat, which can both be found at http://www.gingerall.com/. Binaries are provided as well as source.

Installation

On UNIX, run configure with the --enable-xslt --with-xslt-sablot options. The Sablotron library should be installed somewhere your compiler can find it.

Make sure you have the same libraries linked to the Sablotron library as those, which are linked with PHP. The configuration options: --with-expat-dir=DIR --with-iconv-dir=DIR are there to help you specify them. When asking for support, always mention these directives, and whether there are other versions of those libraries installed on your system somewhere. Naturally, provide all the version numbers.

JavaScript E-XSLT support: If you compiled Sablotron with JavaScript support, you must specify the option: --with-sablot-js=DIR.

Note to Win32 Users: In order to enable this module on a Windows environment, you must copy several files from the DLL folder of the PHP/Win32 binary package to the SYSTEM32 folder of your windows machine. (Ex: C:\WINNT\SYSTEM32 or C:\WINDOWS\SYSTEM32). For PHP <= 4.2.0 copy sablot.dll and expat.dll to your SYSTEM32 folder. For PHP >= 4.2.1 copy sablot.dll, expat.dll and iconv.dll to your SYSTEM32 folder.

Runtime Configuration

This extension has no configuration directives defined in php.ini.

Resource Types

This extension has no resource types defined.

Predefined Constants

The constants below are defined by this extension, and will only be available when the extension has either been compiled into PHP or dynamically loaded at runtime.

XSLT_OPT_SILENT (integer)

Drop all logging and error reporting. This is a generic option for all backends that may be added in the future.

XSLT_SABOPT_PARSE_PUBLIC_ENTITIES (integer)

Tell Sablotron to parse public entities. By default this has been turned off.

XSLT_SABOPT_DISABLE_ADDING_META (integer)

Do not add the meta tag "Content-Type" for HTML output. The default is set during compilation of Sablotron.

XSLT_SABOPT_DISABLE_STRIPPING (integer)

Suppress the whitespace stripping (on data files only).

XSLT_SABOPT_IGNORE_DOC_NOT_FOUND (integer)

Consider unresolved documents (the document() function) non-lethal.

XSLT_ERR_UNSUPPORTED_SCHEME (integer)

Error return code, for scheme handlers.

Table of Contents
xslt_create -- Create a new XSLT processor
xslt_errno -- Returns an error number
xslt_error -- Returns an error string
xslt_free -- Free XSLT processor
xslt_process -- Perform an XSLT transformation
xslt_set_base -- Set the base URI for all XSLT transformations
xslt_set_encoding -- Set the encoding for the parsing of XML documents
xslt_set_error_handler -- Set an error handler for a XSLT processor
xslt_set_log -- Set the log file to write log messages to
xslt_set_sax_handler -- Set SAX handlers for a XSLT processor
xslt_set_sax_handlers --  Set the SAX handlers to be called when the XML document gets processed
xslt_set_scheme_handler -- Set Scheme handlers for a XSLT processor
xslt_set_scheme_handlers --  Set the scheme handlers for the XSLT processor


add a note add a note User Contributed Notes
XSLT functions
phpdocs at pointbeing dot net
22-Oct-2003 07:43
Note that the XSLT_SABOPT_DISABLE_ADDING_META - if not true will automatically add:

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

to your output if the processor detects that you are trying to generate HTML. Bug or not, this line is unfortunately not valid XML, so you may prefer to disable this, and add a valid meta line to your output by hand.
maximo AT migliari DOT com
20-Oct-2003 10:14
If you are getting undefined references errors with regards to Sablotron while compiling PHP, make sure you export LDFLAGS in your environment to contain -lstdc++

As someone suggested earlier, this must be done, however, for me, it did not work declaring it before the configure statement, or editing the Makefile after configuring and inserting it there.

The only way it worked for me was exporting the variable to the environment.

If you use the Bash shell, then you do this as follows:
export LDFLAGS=-lstdc++

If you use the Csh shell, then you do this as follows:
setenv LDFLAGS=-lstdc++

you can then verify if it went through using the env command.

What this does is tell the configure script to specify the Makefile not to use libtool as the linker, but use lstdc++ as a substitute.  Apparently libtool is in a not-so-great version at the moment, and until they come up with version 1.5, we will have to compile PHP with Sablotron this way (on some systems)
crtn at users dot sourceforge dot net
23-Jun-2003 07:03
If you are using Debian packages for PHP and Apache and XSLT, you will probably need to upgrade to the UNSTABLE package for PHP. The stable and testing versions of php are too far behind and using them with sablotron will cause apache to segfault.
crtn at users dot sourceforge dot net
08-Jun-2003 11:41
Another way to get around the EXPAT-SABLOTRON problems (seg faults) is supposedly to recompile apache with:
--disable-rule=EXPAT
d dot brotherstone at pobox dot com
27-May-2003 11:14
If you get problems with undefined references to gxx_s type stuff, UPDATE LIBTOOL!  I found 1.4.1 worked for some configurations, 1.4.3 worked for almost none, but 1.5 worked for every combination of Sablotron/gettext/sybase/zlib/postgres --with options I tried. 

Make sure you follow the advice of adding -lstdc++ to EXTRA_LD_FLAGS in Makefile after you've run ./configure, and BEFORE you've run make (if you issue make, you'll need to do a make clean before you make again, after changing the Makefile, or it still won't work reliably).

Cheers, Dave.
shanx at REMOVEME dot shanx dot com
19-May-2003 02:18
For recent versions of PHP, XSLT install instructions for Windows and Apache are here:

http://sniptools.com/php_xslt_on_windows

Cheers.
DrTebi at NOSPAM dot yahoo dot NOSPAM dot com
13-May-2003 11:37
I would like to add that there is no problem to install PHP with Sablotron on a Gentoo Linux system (http://www.gentoo.org).

Just make sure you emerged the expat and sablotron packages like so:

emerge expat
emerge sablotron

After this, there should be no linking problem or whatsoever:

./configure --with-xslt --with-sablotron
make

and you should be set ;-)
thomas at xciteit dot com
26-Apr-2003 01:13
I got into serious troubles using xslt transforming, while using PHP Build Version 4.2.2. It didn't find the module all the time, as well as it occured at several people, as I read above.

Just upgrade to PHP 4.3.1. All the required libraries are included with the distribution (you better use the manual setup, not the php installer). Follow the setup instructions, which are partly a bit chaotic, but should get you done within about five minutes.

Note: If you use your old php.ini, make sure, you quote out the php_ctype.dll, since it seems, to be built in since 4.3 (had several errors "redefinition of <function-name>" occuring when [re]starting apache).

If any libraries can not be found again, make sure the php4ts.dll resides in the same directory as php.exe or the php4<yourserver>.dll. Alse be sure to use php4apache2.dll, if you are running Apache Version 2.x. Also (lib)expat.dll and the rest of the above mentioned files should be able to be found (reside in a directory, that can be accessed through the path). I just checked and tested removing all files I moved to the system32 directory. You just need the files "expat.dll" and "sablot.dll" there. I removed "xmltok.dll", "xmlparse.dll" and "iconv.dll" again, and it still works fine.
You can find everything at http://www.xciteit.com/stuff/xml/.

Regards Thomas Karl
www.xciteit.com
ohlesbeauxjours at yahoo dot fr
21-Mar-2003 04:18
In reply to Jaron, who needed to evaluate PHP code inside the stylesheet, look at a post I sent about xslt_set_scheme_handlers().
Scheme handlers are very useful, since they allow the XSLT engine and PHP to fully interact (they will communicate through XML strings).

With xslt_set_scheme_handlers(), you can give the XSLT engine an advanced access to the file system (or even to the other I/O interfaces), and perform various tasks (checking the existence of a file, creating new files "on the fly", deleting, etc...)
... all that in only one stylesheet :)

baptiste
nemilya at mail dot ru
20-Feb-2003 02:59
If you want to experiment with xslt-technology, try php-based application xmlSiteMaker for site generation: http://xml-sm.phplab.net/en/
girishn at eidosnet dot co dot uk
16-Feb-2003 05:39
I've got past the 'failed to load php_xslt.dll' problem on IIS/PHP 4.3.0 as CGI by copying expat.dll, sablot.dll and iconv.dll into the /winnt/system32/ directory.

I've left the extension_dir option in php.ini set as ./extensions which is the default value.
victorious at quicknet dot nl
10-Feb-2003 04:31
Hi

I've installed Apache 1.3.24 and PHP 4.3.0.0 on Windows XP multiple times, and every time it took me quite a while to get the XSLT functions (eg. the Sablotron extension) up and running.
I still haven't found a clear way of fixing it the way I should, but what I've done this last time fixed it pretty fast:
I took every DLL I could find in my PHP folder and subfolders and copied them to every PHP folder and subfolders and my WINDOWS and my WINDOWS\SYSTEM32 folders.
So if you don't have a clue what you've done wrong and you're willing to waste some harddisk space, try this as a last resort :)
ben*_onshop co'uk
10-Feb-2003 12:11
For Win32 problems with XSLT processing error: cannot open file '<apache dir>/apache/<xsl file>' errors:

In the documentation for xslt_set_base it states:

'for As of 4.3, the default base URI is the directory of the executing script'

However using 4.3, if I execute:

$xsltHandle = xslt_create();
$html = xslt_process($xsltHandle, 'test.xml', 'test.xsl');

XSLT processing error: cannot open file 'c:/phpdev/apache/test.xsl'

My XSL file is actually in the same directory as the php file which is 'c:\web\sites\xsltest'

So PHP is not looking for the script in the same directory of the executing script but rather in the apache directory!

I had to write a work around to fix this. Place the following after the xslt_create() statement to get it to work:

$path = $_SERVER['SCRIPT_FILENAME'];
$path = substr($path,0,strrpos($path, '/')+1);
xslt_set_base($xsltHandle, "file://".$path);
aargh at 44rgh dot net
14-Oct-2002 05:47
Compilation on RedHat 7.0 PHP-4.1.2-7.0.4.
Compilation failed when providing --enable-xslt --with-xslt-sablot --with-sablot-js.
Problem was that an additonal flag needed to be specified or the build would fail complaining that js-libs ... could not be found.

LIBS="-lttf -lpng -ljpeg -lz -lnsl -ljs"; export LIBS

The additional flag "-ljs" needed to be set.
jw at shapers dot nl
27-Sep-2002 10:09
In addition to "tk dot lists at fastmail dot fm"'s comment on Windows dependencies: You'll also need iconv.dll in your SYSTEM32 folder. At least, that's what I needed to get it working on my PHP4.2.3-Win install.
gbarattoKILLSPAMMERS at superb dot net
19-Sep-2002 12:55
Regarding the `__gxx_personality_v0' problem described by dennisNOSPAM@infoleak.com, you have to use LDFLAGS=-lstdc++  as well before configuring php (and not apache) when compiling php as a shared object.

Thank you Dennis
matthias-at-mlienau.de
30-Aug-2002 07:52
For those guys who mess up with compiling the current Sablotron 0.95 sources from gingerall.com:

Here is a patch which corrects a typo.
Or - go to src/engine/domprovider.cpp and change "voiD" to "void" in line 558 and compile again...

*** domprovider.cpp.diff        Thu Aug 29 23:32:59 2002
--- domprovider.cpp     Thu Aug 29 23:32:14 2002
***************
*** 555,561 ****
    if (external) cdelete(external);
  }
 
! void DOMProviderUniversal::setExtProvider(DOMHandler *domh, voiD *data)
  {
    if (external) cdelete(external);
    if (domh)
--- 555,561 ----
    if (external) cdelete(external);
  }
 
! void DOMProviderUniversal::setExtProvider(DOMHandler *domh, void *data)
  {
    if (external) cdelete(external);
    if (domh)
tk dot lists at fastmail dot fm
26-Aug-2002 03:35
INSTALLING PHP XSLT ON WINDOWS

Thanks to a wonderful program http://www.dependencywalker.com/ which lists dependecy heirachies for windows executables (and .dll files), I was able to track down the problem. What the PHP manual neglects to tell you (it only has instructions for Unix) is that you need to find sablot.dll, I suspect that php_xslt.dll is just a stub which calls this program. Now sablot also needs libexpat.dll (which I discovered thanks to dependency walker).

so anyone who wants to do PHP XSLT under windows, not only do you need to uncomment php_xslt.dll in the php.ini file, you need to find sablot.dll and libexpat.dll and stick em in your system32 diectory.
gherson at DatainFormation com
22-Aug-2002 10:56
Compiling xslt into cgi version of PHP4.2.2 on linux 2.4.7:
Lots of work was needed.  I had to download  Mozilla's js-1.5rc4-2.i386.rpm and js-devel-1.5rc4-2.i386.rpm and the Sablotron library tarball, all from http://www.gingerall.com/charlie/ga/xml/d_related.xml.   Applying patch http://download-2.gingerall.cz/download/sablot/Sablot-0.95-PHP.patch was nec (found by searching google with "SXPF_DISPOSE_VALUES", which make blamed for failing, claiming it had a duplicate value). Export CPLUS_INCLUDE_PATH="/usr/include/js/" was nec to get past a Sablotron make or configure error "required file jsapi.h not found".  Then ./configure --enable-javascript; make; make install worked w/o errors.  Then, for PHP 4.2.2 compilation:
$ ./configure  --with-pgsql=/usr/local/pgsql --enable-force-cgi-redirect --enable-xslt  --with-xslt-sablot --with-sablot-js
followed by $ make and # make install.  No errors. /usr/local/bin/php is the new cgi executable.  $ php -v confirmed the version, and function phpinfo() confirmed xslt enabled.  (Along the way I had tried the rpm version of Sablotron and compiling the CVS version of PHP when i got stuck, to no avail.)
sac at cheesecake dot org
03-Aug-2002 02:49
There's no need to rebuild Apache to link it against libstdc++.  Just edit the PHP Makefile and add -lstdc++ to LTLIBRARY_LDFLAGS.
mogmios at mlug dot missouri dot edu
30-Jun-2002 07:49
I had quite a bit of trouble working out the steps to compiling xslt with the newest versions of Apache, Sablotron, and PHP. For the benefit of others here is the general process: compile expat 1.95.2-2, install expat, compile iconv 2.0.4, install iconv, patch sablotron,
compile sablotron 0.95, install sablotron, compile apache 1.3.26,
install apache, patch php, compile php, 4.2.1, install php, configure apache.

Sablotron and PHP won't work unless you download and apply the two source patches from Sablotron's download page. PHP will make Apache throw an error unless you compile PHP with iconv support, even though it compiles without error.

I hope this helps. :)
dennisNOSPAM at infoleak dot com
23-May-2002 11:23
Building Sablotron on Solaris with.
gcc 3.0.3 and native linker
libtool (sunfreeware)
apache 1.3.24
php-4.2.1
sablotron-0.90
expat-1.95.2

When configuring Apache you might experience this error..

libsablot.so: undefined reference to `operator new[](unsigned)'
libsablot.so: undefined reference to `__cxa_call_unexpected'
libsablot.so: undefined reference to `vtable for __cxxabiv1::__si_class_type_info'
libsablot.so: undefined reference to `operator delete(void*)'
libsablot.so: undefined reference to `__gxx_personality_v0'
libsablot.so: undefined reference to `vtable for __cxxabiv1::__class_type_info'
libsablot.so: undefined reference to `operator delete[](void*)'
libsablot.so: undefined reference to `vtable for __cxxabiv1::__vmi_class_type_info'
libsablot.so: undefined reference to `operator new(unsigned)'

To cure it make sure that during the configure stage you feed configure LDFLAGS variable like so.

LDFLAGS=' -lstdc++' ./configure

Otherwise Apache's compiler sanity check will balk.
never at nevermind dot kiev dot ua dot spam dot must dot d dot ie
13-Feb-2002 10:34
As far as I can see xslt extension is being prepared to use with any other backend like libxslt. Be aware :)
jon dot sprague at itgco dot com
07-Feb-2002 04:59
For those of you who are having problems installing php with Sablotron (I was one), here's what I did.

What I'm running:
-Apache 1.3.19
-PHP 4.1.1
-Linux

This is what I did:
1. Go to the web site previosly mentioned by darren@php4hosting.com,
http://phpfaq.info
2. Click the FAQ: "How do I install Sablotron with PHP??

The only thing that needs to be done differently for PHP 4.1 and it's sub versions (ex. 4.1.1) is the options on the configure line.
Use --enable-xslt --with-xslt-sablot instead.
peter_kreuzerREMOVE_THIS at gmx dot de
01-Feb-2002 09:43
There is a german tutorial regarding the new xslt functions as of version 4.1.0.

There is a class that handles xslt functions (Version 4.1 and before)!

http://www.fase4.com/de/tutorials/page,1,xslt.xml
erik_i at NOSPAMtelia dot com
22-Jan-2002 06:53
The extension dll in Windows is no longer php_sablot.dll, it's php_xslt.dll
ken1138 at altavista dot com
11-Jan-2002 06:15
The XSLT functions may experience conflicts with Apache in some configurations, causing random segfaults in httpd.  Apache has included a 'lite' version of expat in their recent distributions, which can cause conflicts with expat.  Apache1.3.22 solves the problem by configuring itself to use the expat you have installed, instead of the built-in. If you compiled Apache before you installed expat, make sure you upgrade and/or recompile your Apache server with the same version of expat that PHP and Sablotron are using.
Jaron dot Schaeffer at jayweb dot de
10-Jan-2002 05:25
I extended the example of Daniel Unterberger even more. I had the problem to evaluate PHP code within my xml data files (e.g. to output database results) and after that apply a xsl stylesheet to the generated data.

When I tried Daniel's solution I found it quite useful but noticed that you can't "print out" from your PHP Code. You're bound to annoying return()-Statements, wich makes it impossible to loop outputs or concatenate strings and then return them. If you try to do so, you will notice that a statement like
...
<php:eval>
  for($i=0; $i<10; $i++)
    echo "This is number ".$i;
</php:eval>
...

will result in PHP to do the output right in the moment when the eval()-Statement is run.

Things do, at least, work fine if you keep it simple:

...
<php:eval>
  return("Hello World!");
</php:eval>
...

I tried to fix that and came to a solution. The following code is just a snippet from my XSLT-class. The uppercase letters are constants defined in a header file. (e.g. define('PHP_EVAL_START_TAG', '<php:eval>');

...
 function xmlString() {

    $fd = fopen($this->xmlFileLocation, 'r');
    $xmlString = fread($fd, filesize($this->xmlFileLocation));
    fclose($fd);

    if($this->contentType == DYNAMIC_CONTENT) {

      while(!(strpos($xmlString, PHP_EVAL_START_TAG) === false)) {

    $startPos = strpos($xmlString, PHP_EVAL_START_TAG);
    $endPos   = strpos($xmlString, PHP_EVAL_END_TAG);

    ob_start();
    eval(substr($xmlString, $startPos + strlen(PHP_EVAL_START_TAG), $endPos - $startPos - strlen(PHP_EVAL_START_TAG)));
    $evaluatedString = ob_get_contents();
    ob_end_clean();

    $xmlString =
       substr($xmlString, 0, $startPos).$evaluatedString.substr($xmlString, $endPos + 11);
      }
    }
   
    return($xmlString);
  }
...

Jaron.Schaeffer@jayweb.de
sandro_zic at web dot de
28-Aug-2001 08:57
[Editor's note: moved this note here where it belongs - jmcastagnetto@php.net]

This shows how you can use the XSLT functions to add dynamic content to the result tree, i.e. how to hand over parameters to the XSL stylesheet and write to Sablotron's document buffer.

First we assign the value of the parameter to an array in PHP:
-----------------------------------------
$xslt_params["test"] = "Run-time parameter.";
-----------------------------------------

The parameter is envoced in XSL by
-----------------------------------------
<h1>Value of run-time parameter:</h1>
<b><xsl:value-of select="$test" /></b>
<hr/>
-----------------------------------------

Don't forget to define the parameter at the beginning of your stylesheet:
-----------------------------------------
<xsl:param name="test"/>
-----------------------------------------


How can we add dynamic content from a database to the XSLT output? In Sablotron, this is done using the document buffer function.

Retrieve a table's content, store it in a XML structure assigned to an array in PHP:
-----------------------------------------
$xslt_args["buffer1"] =
"
<TestBuffer>
    <Message>
        <Content>
        This is message 1 of buffer 1.
        </Content>
    </Message>
    <Message>
        <Content>
        This is message 2 of buffer 1.
        </Content>
    </Message>
</TestBuffer>
";
-----------------------------------------

This is how you add the buffer to the result tree in your XSL document:
-----------------------------------------
<h1>Dynamic content from document buffer 1:</h1>
<xsl:for-each select="document('arg:/buffer1')/TestBuffer/Message">
    <b><xsl:value-of select="Content" /></b><br/>
</xsl:for-each>
<hr/>   
-----------------------------------------


To get the whole thing running, following functions have to be executed:
-----------------------------------------
$processor = xslt_create();
xslt_run ($processor, "file://".$DOCUMENT_ROOT.$xsl_file, "file://".$DOCUMENT_ROOT.$xml_file, "arg:/_result", $xslt_params, $xslt_args);
$result = xslt_fetch_result ($processor);
echo $result;
-----------------------------------------


The complete XSL file looks like this:
-----------------------------------------
<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="html" version="1.0" standalone="yes" indent="yes" />

<!-- define parameter -->
<xsl:param name="test"/>

<xsl:template match="/">           

<!-- run-time parameter -->
<h1>Value of run-time parameter:</h1>
<b><xsl:value-of select="$test" /></b>
<hr/>

<!-- dynamic content -->
<h1>Dynamic content from document buffer 1:</h1>
<xsl:for-each select="document('arg:/buffer1')/TestBuffer/Message">
    <b><xsl:value-of select="Content" /></b><br/>
</xsl:for-each>
<hr/>   

</xsl:template>

</xsl:stylesheet>
-----------------------------------------
nexus at mail dot ru
20-Aug-2001 09:26
XSLT + SQL = BEST !!!

I've found good way to use xslt with MySQL.
Remember ! This code would not work as is, it's to illustrate technology.

1)you do : "select * from mytable"
2)then
---------------------------------------
$fld1=$result->fields[0];  // you can do "for" here :)
$fld_name1=$result->fieldname[0];// certainly fieldname function must return field name
$myxml.="<$fld_name1>$fld1</fld_name1>"
---------------------------------------
3) write your xsl stylesheet to apply selected data.
4) Apply xsl to $myxml :)

Work perfectly !!!
A lot of time saved :)
d dot u at mail dot com
14-Jun-2001 02:19
... addition to last message

sorry shanx (miss-spelled).
having a full example you must call it like in the shanx-example. Hint dont use echo inside of <php:eval> but return, because it is only string concatenation.

<code>
<?php
##  require "xslt.inc.php";

$xslt = new xsltTransform("life.xsl""life.xml");
print (
$xslt->applyTransformation());

?>
</code>
d dot u at mail dot com
14-Jun-2001 01:43
I extended the example of shanks (very helpful for me tnx), so you can call php inside your xslt file, I had the problem to pass url-parameters and did not understand how to solve it, so I use php.

<code>
<?php

/**
 *
 * A class to transform XML through XSLT using PHP4 Sablotron extension
 *
 */

 #######################################################################
 ## file extended by Daniel Unterberger (d.u@mail.com)
 ## changes: some  php:eval's added

class xsltTransform
{

    var 
$xsl_file;
    var 
$xml_file;
    var 
$fileName;

   
/**
     * Constructor to the xsl_transform ticket
     *
     * @param $xsl_file The XSLT file containing the transformation info
     * @param $xml_file The XML file containing the actual data
     * @see readFile()
     */
   
function xsltTransform($xsl_file ''$xml_file '')
    {
       
$this->xsl_string $this->readFile($xsl_file,'php:eval');
       
$this->xml_string $this->readFile($xml_file);
    }

   
/**
     * Function to read through the file
     *
     * @param $fileName Which file to read?
     *
     */
   
function readFile($fileName,$php_eval="")
    {
       
// get contents of a file into a string
       
$fd fopen$fileName"r" );
       
$content fread$fdfilesize$fileName ) );
       
fclose$fd );

       
##################################################
        ## extension by Daniel Unterberger (d.u@mail.com)

       
while ( $php_eval and ( $pos_start=strpos($content,'<php:eval>') ))
        {
         
$pos_end=strpos($content,'</php:eval>');
         
$content=substr($content,0,$pos_start).
                   eval( 
substr($content,$pos_start+10,$pos_end-$pos_start-10) ).
                   
substr($content,$pos_end+11);
        }

        if (
$GLOBALS["debug"]=="ON") print "<xmp>$content</xmp>";
           
## see xslt-file for debuggin if you call page.php?debug=ON (remove on life-server)

        ###################################################
        ## end extension

       
return $content;


    }

   
/**
     * Function to apply the actual transformation
     *
     */
   
function applyTransformation()
    {
       
$this->result '';
       
$this->msg xslt_process($this->xsl_string$this->xml_string$this->result);
        if(!
$this->msg) print ("Transformation failed.");
        return 
$this->result;
    }


// End of class, do not remove
}



?>
</code>

in the xslt you can call it now with

...
<tag><php:eval> return $GLOBALS["filter"]; /* all php allowed */ </php:eval></tag>
...

-------------------------------
hope this gives new inspiration
(d.u)
maximo at migliari dot com
27-Apr-2001 11:31
COMPILING AND INSTALLING SABLOTRON AND EXPAT FOR PHP ON A FREEBSD iServer

0) Prepare your virtual server environment.  Telnet to your iserver and type:
    mkdir -p ~/usr/local/apache/1.3/bin
    ln /usr/bin/make ~/usr/bin/make
    ln /usr/local/apache/1.3/bin/apxs ~/usr/local/apache/1.3/bin/apxs
    ln /usr/local/apache/1.3/bin/httpd ~/usr/local/apache/1.3/bin/httpd

1) download the following files:
    expat-1.95.tar.gz - http://expat.sourceforge.com
    Sablot-0.52.tar.gz - http://www.gingerall.com
    php4-latest.tar.gz - http://snaps.php.net

2) copy these files to ~/usr/local

3) expand all these files uing tar -xvzf

4) go into expat directory and type:
    ./configure --prefix=/usr/home/your_iserver_login_name/usr/local
    make
    make install
   
   the files will be installed under ~/usr/local/lib and ~/usr/local/include

5) set the following environment variables:
    setenv LD_LIBRARY_PATH /usr/home/your_iserver_login_name/usr/local/lib
    setenv LD_RUN_PATH /usr/home/your_iserver_login_name/usr/local/
    setenv CPLUS_INCLUDE_PATH /usr/home/your_iserver_login_name/usr/local/include
    setenv LIBRARY_PATH /usr/home/your_iserver_login_name/usr/local/lib

6) go into the Sablotron directory and type:
    ./configure --prefix=/usr/home/your_iserver_login_name/usr/local
    make
    make install

7) go into the php directory and type:
    ./configure --with-apxs=/usr/local/apache/1.3/bin/apxs \
    --disable-debug \
    --enable-trans-sid \
    --enable-versioning \
    --enable-ftp \
    --with-mysql=/usr/home/your_iserver_login_name/usr/local/mysql \
    --with-xml \
    --enable-magic-quotes \
    --enable-track-vars \
    --enable-sablot-errors-descriptive \
    --with-sablot=/usr/home/your_iserver_login_name/usr/local \
    --with-expat=/usr/home/your_iserver_login_name/usr/local

    then

    make
    and
    make install

the final command - make install - should give an error about not being able to install pear.
This is normal, as pear tries to copy itself outside of your virtual server space.  Since pear
is not an essential part of PHP - you can ignore this. (maybe there is a command for ./configure
in php that allows us to specify the directory in which pear will be installed?

8) final steps:
   go to ~/usr/local/etc/httpd/conf
   edit httpd.conf
   comment out the LoadModule directive for the previous php .so module.
   not that you should see the new module you just compile already inserted in the httpd.conf as
   the last line of all LoadModule directives. (it should be called libphp4.so

   now just go back to the command prompt after you have edited httpd.conf and type:
   restart_apache

   now go to your httpd document root (usually htdocs), and create a php file with the following
   code in it:

   <?php
     phpinfo
();
   
?>

   load the file in your browser, and you should see that everything has been installed properly :)
07-Apr-2001 11:14
bm at turtle-entertainment dot de
30-Mar-2001 04:05
forgot to add: you could have to change it in:

Zend/Makefile
Zend/libZend.la
libphp4.la

too, depending on what you are building (module or interpreter).
bm at turtle-entertainment dot de
30-Mar-2001 03:55
After having installed Sablot 0.51, expat 1.95.1 and libxml2-2.3.5 (in non standard locations), I had to manually edit config_vars.mk in topsrcdir and change -lxml to -lxml2 under EXTRA_LIBS.

Now it works perfectly. (System is Debian 2.2 without libxml1 or libxml-dev installed)

Did configure with:

--with-dom=/usr/local/libxml \
--with-sablot=/usr/local/sablotron \
--with-expat=/usr/local/expat
terence at highway80 dot net dot au
16-Feb-2001 10:25
I did that and I still had problems. I had to manually make the xmltok shared object cose expat wouldn't build it normally.

About the phpbuilder article, the function calls are now different from the ones in the article (see above for latest).

<xmlrpc_set_typexslt_create>
 Last updated: Thu, 21 Aug 2003
show source | credits | sitemap | mirror sites 
Copyright © 2001-2003 The PHP Group
All rights reserved.
This mirror generously provided by: http://php.mirrors.ilisys.com.au/
Last updated: Sat 01 Nov 2003 04:13:36 EST EST