1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139
|
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- $Revision: 1.6 $ -->
<refentry xml:id="function.bcompiler-write-exe-footer" xmlns="http://docbook.org/ns/docbook">
<refnamediv>
<refname>bcompiler_write_exe_footer</refname>
<refpurpose>Writes the start pos, and sig to the end of a exe type file</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis>
<type>bool</type><methodname>bcompiler_write_exe_footer</methodname>
<methodparam><type>resource</type><parameter>filehandle</parameter></methodparam>
<methodparam><type>int</type><parameter>startpos</parameter></methodparam>
</methodsynopsis>
<para>
An EXE (or self executable) file consists of 3 parts:
<simplelist>
<member>
The stub (executable code, e.g. a compiled C program) that loads PHP
interpreter, bcompiler extension, stored Bytecodes and initiates a call
for the specified function (e.g. main) or class method (e.g. main::main)
</member>
<member>The Bytecodes (uncompressed only for the moment)</member>
<member>The bcompiler EXE footer</member>
</simplelist>
</para>
<para>
To obtain a suitable stub you can compile php_embed-based stub phpe.c
located in the examples/embed directory on bcompiler's CVS.
</para>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<para>
<variablelist>
<varlistentry>
<term><parameter>filehandle</parameter></term>
<listitem>
<para>
A file handle as returned by <function>fopen</function>.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>startpos</parameter></term>
<listitem>
<para>
The file position at which the Bytecodes start, and can be obtained
using <function>ftell</function>.
</para>
</listitem>
</varlistentry>
</variablelist>
</para>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
&return.success;
</para>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<para>
<example>
<title><function>bcompiler_write_footer</function> example</title>
<programlisting role="php">
<![CDATA[
<?php
/* creating the output file (example.exe) */
$fh = fopen("example.exe", "w");
/* 1) writing a stub (phpe.exe) */
$size = filesize("phpe.exe");
$fr = fopen("phpe.exe", "r");
fwrite($fh, fread($fr, $size), $size);
$startpos = ftell($fh);
/* 2) writing bytecodes */
bcompiler_write_header($fh);
bcompiler_write_class($fh, "myclass");
bcompiler_write_function($fh, "main");
bcompiler_write_footer($fh);
/* 3) writing EXE footer */
bcompiler_write_exe_footer($fh, $startpos);
/* closing the output file */
fclose($fh);
?>
]]>
</programlisting>
</example>
</para>
</refsect1>
<refsect1 role="notes">
&reftitle.notes;
&warn.experimental.func;
</refsect1>
<refsect1 role="seealso">
&reftitle.seealso;
<para>
<simplelist>
<member><function>bcompiler_write_header</function></member>
<member><function>bcompiler_write_class</function></member>
<member><function>bcompiler_write_footer</function></member>
</simplelist>
</para>
</refsect1>
</refentry>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->
|