sorry the word abuse pissed me off. I'm not abusing anything the protocols weren't designed to support (even if they don't know it, but then, they do know it). I can understand if nobody ever thought of this use of it before and is why there is no support for using fcgistdin with php, even tho any other programming language can use it if it properly and _fully_ supports the fast-cgi protocol.
The easiest way I can think of to make a fast-cgi client application would be to simple close socket 0, and socket 1 (stdin and stdout), then dup2ing to the end of a pipe, cout data would be grabbed from the end of one of the pipes, wrapped in a fast-cgi header, printed to the server, stdin data from the server would come in to a second thread (or a multiplexing select() core), using the request id it finds the proper stdin pipe and just sends the data there. That's not hard to do, that's not off from the fast-cgi protocol, that's not an abuse, and that would allow the very simple stdin/stdout protocols to work for the easiest, most extendable server scripting ever convieved. -------------- Original message -------------- From: "Wez Furlong" <[EMAIL PROTECTED]> > IMO, you're better off using stream_socket_server() and writing a > "real" daemon for that. Abusing fastcgi/cgi to work in that way is > only going to bite you in the ass. > > --Wez > > On 3/24/06, Matthew wrote: > > I'm sorry if this is the wrong place for this post, I just don't know where > > else to go. > > > > I need some help figuring out how to use FCGI_STDIN with a running php > > script. > > > > I have written a server in c++, which for a while been running php through > > it's plain old cgi interface. I have been using php for 2 things, the > > obvious one, web pages, and the not so obvious, safe command/server > > scripting. I have just implimented a fast-cgi interface to replace the cgi > > interface, however, the scripting stuff i had that worked over regular cgi > > just doesn't want to work with fast-cgi. > > > > Basically, the php script outputs a command and arguments, all commands > > start with a %, so: > > $var = "%print"; > > printf("%s hello world\n", $var); > > Can be used to print to the user calling the script. > > > > That part still works fine of course :). > > > > It doesn't stop there however, some of the %callbacks will return strings > > of > > data over stdin so they can be $var = trim(fgets($STDIN)) for a very simple > > and effective method of communicating with the server. > > > > I've tried doing the same with fast-cgi, but it seems > > fopen("php://stdin","r") is not the right place to be reading from. > > > > I'm sending: > > > > (C++) > > // loops over ever line of input, test it > > std::string response = processALineFromCGI-OrFastCGIScript(oneLine) > > if(response.compare("NOCMD") == 0) > > buffer_to_print_to_user_who_called_this_when_request_finishs(); > > else if(response.size() > 0) { > > std::string sendout = FCGI_Headerize(response, FCGI_STDIN, ..); > > non-blocking_send(sendout); > > } > > oneLine.erase(); > > I use the same function to build the headers for FCGI_BEGIN_REQUEST, > > FCGI_PARAMS, FCGI_STDIN on POST input, it works great there(now) > > > > > > Also, is it possible to keep the connection open to php-cgi to avoid > > connect/accept calls? Even if it's only fifo so only 1 request can go at a > > time? > > > > If I must I could create a special c++ fast-cgi server that binds a second > > port to pipe requests from php streams to the server, but would be a MAJOR > > hack for what I'm trying to do.. :-D > > > > Thanks in advance! > > > > -- > > PHP Internals - PHP Runtime Development Mailing List > > To unsubscribe, visit: http://www.php.net/unsub.php > > > >