I had a go at trying to get Apache to work on Windows without cygwin.

I think one issue that may be causing problems is that Apache doesn't set the 
USERPROFILE environment variable in the session. The result is that during the 
starting of the J session the noun "home" in profile.ijs gets the value of 0 
which causes a domain error at:
   user=. home,userx

I checked the IIS USERPROFILE setting and patched my profile.ijs with the 
following to give a similar result for Apache:

home=.    >(systype-5){(2!:5'HOME');(2!:5'USERPROFILE');'\My Documents'
home=.    'C:\Windows\system32\config\systemprofile'"_^:(0 -: ]) home
userx=.   '\j',('64-'#~16={:$3!:3[2),'602-user'
user=.    home,userx

By using the following jhp.bat (instead of jhp.sh) 

Rem ============ jhp.bat ===================
@echo off
rem set PATH_TRANSLATED=C:%SCRIPT_NAME%
set 
PATH_TRANSLATED=C:/users/rsherloc/documents/web/jhp/htdocs/examples/testrgs.jhp
"C:\program files\j602\bin\jconsole.exe" web/jhp/run %*
Rem ========================================

and commenting out the "exit 0" at the end of web/jhp/run.ijs I was able to 
verify that my script (testrgs.jhp) ran successfully and gives what looks like 
the desired output.

NB. ===== output from testrgs.jhp copied from jconsole session ===========
Content-Type: text/html

<html><head><title>J Test</title></head>

<body>

<h2>Welcome to JHP</h2>

<pre>
C:/users/rsherloc/documents/web/jhp/htdocs/examples/testrgs.jhp

SERVER_SOFTWARE : Apache/2.2.11 (Win32)
SERVER_NAME : localhost
GATEWAY_INTERFACE : CGI/1.1
SERVER_PROTOCOL : HTTP/1.1
SERVER_PORT : 80
REQUEST_METHOD : GET
REQUEST_URI : /jhpexapache/testrgs.jhp?one+two+three
PATH_INFO :
PATH_TRANSLATED : 
C:/users/rsherloc/documents/web/jhp/htdocs/examples/testrgs.jhp
SCRIPT_NAME : /cgi-bin/jhp.bat
SCRIPT_URI :
SCRIPT_URL :
QUERY_STRING : one+two+three
REMOTE_HOST :
REMOTE_ADDR : 127.0.0.1
AUTH_TYPE :
REMOTE_USER :
REMOTE_IDENT :
CONTENT_TYPE :
CONTENT_LENGTH :
HTTP_ACCEPT : text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
HTTP_USER_AGENT : Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1) 
Gecko/20090616 Firefox/3.5 (.NET CLR 3.5.30729)
USERPROFILE :
CGIPATH_j_ : C:/users/rsherloc/documents/web/jhp/htdocs/examples/testrgs.jhp
~home : C:\Windows\system32\config\systemprofile
~user : C:\Windows\system32\config\systemprofile\Documents\j602-user
</pre>

</body></html>
NB.===========end output ===========================================

However I still have to resolve the following issues:
  * I need to dynamically set PATH_TRANSLATED from SCRIPT_NAME (PowerShell 
looks promising here).
  * SCRIPT_NAME is set as "/cgi-bin/jhp.bat" not the path to the script from 
the browser. (could use base of REQUEST_URI instead)
  * I still get an Internal Server error from the above script (works fine from 
same file/folder in IIS)


> -----Original Message-----
> From: Oleg Kobchenko
> 
> This is a good tip. Since it's hard to figure out how
> to run any CGI on Apache for Windows:
>   #!scripts
> if you don't have /bin/sh and it's not clear how to run
> a cmd script. One venturing on Apache on Window must realize
> the consequences.
> 
> The following J script runs from command line, but gives
> an error under Apache (same drive where Apache installed):
> 
> ===============================================================
> #!/j602/bin/jconsole
> 
> echo_z_=: 0 0&$@(1!:2&2)
> 
> echo 'Content-Type: text/plain',LF,LF
> 
> echo 'Hello from J',LF,LF
> 
> exit ''
> ===============================================================
> 
> Error Log:
> [error] malformed header from script. Bad header=|domain error:
> test.ijs
> 
> You could configure:
>   ScriptInterpreterSource Registry-Strict
> and a registry key
>   Shell\ExecCGI\Command
> 
> Anyway first the above script should run, then you need to resovel
> PATH_TRANSLATED env variable.
> 
> 
> 

----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to