Jump to content

Recommended Posts

 

Sorry, badly phrased.... I meant I need to actually code the hooks (c/c++) into the web server, and need to know how variables like superglobals are passed to php in both cgi and module modes. Stdin/stdout? Environment variables? Has any of you done similar?

 

there are no php hooks, as u say.

php is an executable.

u can make a module to export environment variables for php to access.

which u can get from <?php phpinfo();?>

 

now fastcgi with php is something altogether different, as it keeps a copy of php-cgi in memory. i dunno how the interface works, but u wud do good looking at this module from apache.

Thanks Thorpe and Laffin, thats a big help. So PHP source is publicly available - and Apache too I see, for calling semantics - I hadn't realised that either would be.

 

Ultimately I'll be writing to load php as a module (dll) rather than cgi as its quicker and cleaner. I'll be happy to share my experiences (and code) with anyone who may be interested.

 

Cheers

Kim

 

Actually i was looking for a way to do this as well, but from what i have researched, a few others have tried and there was no successful end result. It wud be great to have php as an embedded language like lua.

but ya may want to look at lua as an alternative if you will be embedding a scripting language into yer application.

anoter project u may look at is RoadSend PHP compiler although not complete it looks promising

 

  • 2 weeks later...

Report back: Ok I have php working as cgi from my server (written in c). I could find so little documentation on this that my solution is inevitably a hack. Here's how my server handles php requests, using test.php?argone=11111&argtwo=22222 as an example -

 

Set an environment variable "phpvars" with the name of the script you want to call, plus the arguments passed from the browser. For example the example string would create phpvars="php=test.php&argone=11111&argtwo=22222"

 

Create two pipes, hooking your server's stdout to the stdin end of the php binary you're going to spawn and your stdin to the stdout of the other's stdin. (see http://msdn2.microsoft.com/en-us/library/ms682499(VS.85).aspx for a surprisingly decent howto)

 

Call the php binary (CreateProcess) giving it the name of a preprocessor script (see below). This script creates superglobals from "phpvars" and then runs the script (test.php) you ultimately wanted to run.

 

All echos are fed back to the server's stdin, etc etc.

 

Like I said, a hack. I haven't bothered to set $_GET's from the environment var and I dont pass any $_POST's through stdin because right now I dont need em, but that would be trivial to add.

 

Here's a basic preprocessor script with no error checking....

 

 

<?php

// Set up the superglobals

$fileToLoad = '';

$envs = getenv('phpvars');

$env = explode("&", $envs);

for ($c = 0; $c < sizeof($env); $c++)

{

$envVar = explode("=", $env[$c]);

$_REQUEST[$envVar[0]] = $envVar[1];

if ($envVar[0] == 'php')

$fileToLoad = $envVar[1];

}

if ($fileToLoad != '')

include($fileToLoad);

?>

 

  • 3 weeks later...

Are you making sure that PHP is running as a CGI module?

I think if you do that then PHP will automatically parse the query string and delegate it to all of the superglobals.

However, I haven't dealt much with manually setting up my own server, and I'm not that familiar with the down 'n dirities of PHP.

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.