Menu

Tree [r2] /
 History

HTTPS access


File Date Author Commit
 README.txt 2008-10-19 FunkyRider [r1] Initial working version, with two sample web ap...
 myirc.html 2008-10-19 FunkyRider [r1] Initial working version, with two sample web ap...
 myirc.php 2008-10-19 FunkyRider [r1] Initial working version, with two sample web ap...
 myirc.sql 2008-10-19 FunkyRider [r1] Initial working version, with two sample web ap...
 pxc.java 2008-10-19 FunkyRider [r2] Added async (callback) mode functions (/*PHP_CA...
 simple.html 2008-10-19 FunkyRider [r2] Added async (callback) mode functions (/*PHP_CA...
 simple.php 2008-10-19 FunkyRider [r2] Added async (callback) mode functions (/*PHP_CA...

Read Me

Project name: PHP Export Compiler for AJAX (pxc)
Author: Bo Z
License: GNU GPL v3

Introduction:
	A meta-function compiler for PHP/JavaScript, to create clean
	implementations of AJAX web applications. The code for set up
	and invoke a XMLHTTP request, as well as the code for marshaling
	data pass are generated from the source php script automatically.
	
	Only need to invoke when PHP export function declaration changes.
	Low overhead XMLHTTP requests in transparent implementation.
	
	In PHP server side script create a function:

	function /*PHP_EXPORT*/ say_hello($name)
	{
		return "Hello, {$name}!";
	}
	
	Compile using pxc will generate the inc and js files.
	Include inc file in server side, include js file in client side.
	In client side DHTML script invoke the call by:
	
	function do_say_hello()
	{
		var result = say_hello("Name");
	}
	
	All data marshaling and communication are done transparently.

Design details:
	In first scan stage, the pxc reads through a php script file, look
	for any function with "/*PHP_EXPORT*/" comment inserted between
	"function" keyword and its name, and register this function for export.

	In the export stage, each of the functions marked as for export, will
	be encapsulated in a .inc file and a .js file. The inc file is being
	included in the source php file, the js file is included in client
	side script which is going to call server side functions.

	Inside the js file, each function is being declared as a proxy. When
	called, it encodes the parameters and function name as POST data,
	then invoke the XMLHTTP request. After the server processed the
	XMLHTTP and returned the result, it passes the result to client
	side caller in form of return value.

	Inside the inc file there is a switch-case block, with the extracted
	function name as case statements. It looks for matching function
	name, extract all its parameters from the POST data and invoke it.
	Up on finishing executing the server side function, it echos its
	return value to client too. This way the server side function can
	either send its result via echo function, or via the return value.

Project source list:
	pxc.java

Project example list:
	simple.php
	simple.html
	
	myirc.php
	myirc.html
	myirc.sql

Compile:
	> javac pxc.java

Run example "simple":
	required packages: apache2, php5 for apache
	> java pxc simple
	copy simple.php, simple.inc, simple.html, simple.js to /var/www
	invoke in the web brower: http://localhost/simple.html

Run example "myirc":
	required packages: apache2, php5 for apache, php5 for mysql, mysql server
	> java pxc myirc
	copy myirc.php, myirc.inc, myirc.html, myirc.js to /var/www
	mysql use name "root", password "1234"
	mysql import script myirc.sql
	invoke in the web browser: http://localhost/myirc.html