From: Nicolas B. <nic...@ma...> - 2004-08-02 07:01:30
|
Hi, The stuff below let's us play php as cgi... I only wonder if there's not a better hook to set and unset env(REDIRECT_STATUS)? Maybe grab the file extension and set/unset only then..? ###Nikos: Hack to add php cgi capabilities into tclhttpd... #Edit cgi.tcl in the lib directory.., specifically CgiSpawn and CgiClose, essentially setting/unsetting env(REDIRECT_STATUS). #This is needed so PHP does not complain about security breach and stop execution. set REDIRECT_STATUS in CgiSpawn... proc CgiSpawn {sock script} { upvar #0 Httpd$sock data global env Cgi ##Nikos:This env var is needed to run php cgi securely, in directories under docroot set env(REDIRECT_STATUS) 1 if {$Cgi(cgi) >= $Cgi(maxcgi)} { Httpd_Error $sock 504 "Too many CGI's" blah...blah....... .... and unset in CgiClose ..... proc CgiClose {fd sock {bytes {}} {error {}}} { global Cgi upvar #0 Httpd$sock data catch {after cancel $data(cancel)} incr Cgi(cgi) -1 if {![info exists data(header)]} { ##Nikos:This env var was needed to run php cgi securely, now we unset it.. catch {unset env(REDIRECT_STATUS)} Httpd_Error $sock 204 } else { Httpd_SockClose $sock 1 ##Nikos:This env var was needed to run php cgi securely, now we unset it.. catch {unset env(REDIRECT_STATUS)} } if {[string length $error] > 0} { Log $sock CgiClose $error ##Nikos:This env var was needed to run php cgi securely, now we unset it.. catch {unset env(REDIRECT_STATUS)} } } ###php.tcl in custom directory.... ##Add the mime types Mtype_Add application/x-php .php Mtype_Add application/x-php .php3 Mtype_Add application/x-php .phtml ###Edit this your path, Win used to need full path; now it seems not to #set Cgi(php) "c:/php/php.exe" ;# For .php set Cgi(php) "php" ;# For .php proc Doc_application/x-php {path suffix sock} { upvar #0 Httpd$sock data Url_Handle [list CgiHandle $data(url) {} $path] $sock } proc Doc_application/x-php {path suffix sock} { upvar #0 Httpd$sock data Url_Handle [list CgiHandle $data(url) {} $path] $sock } puts "PHP CGI Stuff loaded" puts {You need to register your php cgi directories with Cgi_Directory} ### regards, nicolas |