I'm having a bugger of a time with a CGI wrapper for PHP. I know very little about CGI and PHP as CGI.
Here's what I know about the system:
- Solaris 10 on a 386
- Suhosin
- PHP normally running as CGI, with cgiwrap (http://cgiwrap.sourceforge.net/). I am not able to find an example wrapper.cgi on the server to look at.
- Shared hosting (virtual host), so I don't have access to Apache config. But the admins are not helpful. Switching hosts is not an option.
- Options directive cannot be overridden in .htaccess (ExecCGI, for example).
.htaccess:
AddHandler php-handler .php
Action php-handler "/bin/test.cgi"
~/public_html/bin/test.cgi:
#!/usr/bin/sh
# Without these 2 lines, I get an Internal Server Error
echo "Content-type: text/html"
echo ""
exec "/path/to/php-cgi" 'foo.php';
/bin/foo.php:
<?php
echo "this is foo.php!";
Output of http://mysite.com/bin/test.cgi:
X-Powered-By: PHP/5.2.11 Content-type: text/html echo "Content-type: text/html" echo "" exec "/path/to//php-cgi" 'foo.php';
Output of http:/ /mysite.com/anypage.php:
X-Powered-By: PHP/5.2.11 Content-type: text/html echo "Content-type: text/html" echo "" exec "/path/to//php-cgi" 'foo.php';
The things I note are:
- PHP is being executed, as noted by the
X-Powered-By ...
header. - The source of
/bin/test.cgi
is output in the results. - No matter what I put as the second argument of
exec
, it isn't passed to the php binary. I've tried'-i'
to get phpinfo,'-v'
to get the version... - When I execute
test.cgi
via the shell, I get the expected results (the argument is passed to php, and it is reflected in the output).
Any ideas about how to get this to work?
UPDATE
- It appears that the reason the source of the
test.cgi
was appearing was due to errors. Anytime fatal error occurred, either within the cgi itself or with the command being executed byexec
, it would cause the source of the cgi to appear. - Within
test.cgi
, I can get the proper output withexec "/path/to/php-cgi" -h
(I get the same thing as I would from CLI).