小网页 - 无法让php.exe返回数据

时间:2016-02-04 16:50:53

标签: php windows batch-file cmd localhost

我无法让Tiny web local server使用php.exe生成网页 - 并学习PHP。我遵循instructions from the Ritlabs page并完全理解Tiny web仅使用写入STDOUT的控制台应用程序。我正在使用带有ChromePortable的Windows,因为IE“安全功能”被设计为阻止此类活动。

要使Tiny Web工作,cgi-bin文件夹中的脚本必须与可执行文件正确关联,并且扩展名应存在于PATHEXT环境变量中。 Tiny Web从Windows注册表中读取文件关联以执行脚本。 Tiny web没有配置文件。可执行程序必须是控制台程序而不是GUI应用程序。一些可执行文件需要选项来加载脚本文件,我倾向于使用批处理文件来按顺序获取参数。

e.g。 gawk.bat

:Change to current batch file location - with gawk.exe
cd /D "%~dp0"
:Run
gawk.exe -f "%1" %~2 

这将运行我的“http://localhost:88/cgi-bin/test.awk”并生成动态网页。我假设如果php脚本与批处理文件相关联,php.exe将以类似的方式工作:

e.g。 php.bat

:Change to current batch file location - with php.exe
cd /D "%~dp0"
:Run
php.exe -f "%1" -- %~2

我的test.php脚本包含:

<?php echo "Content-Type: text/plain\n\n";?>
<?php echo "Hello World - from PHP";?>

然而,这给了我一个错误:“CGI脚本/cgi-bin/test.php什么都没有返回”,尽管它在DOS命令提示符下运行完美!我尝试使用php-cgi.exe“%1”运行.php,这给出了相同的服务器错误,并在命令行前置了一个标题,然后按预期打印。

我不希望(没有持久性)安装ISS或任何其他软件。具有讽刺意味的是,我正在努力用Tiny web运行php cgi脚本,但是可以用COMSPEC,LUA51.EXE,GSLSHELL.EXE,CSCRIPT.EXE,GAWK.EXE甚至SQLITE3.EXE生成动态页面!

Q1。我刚接错了test.php?

Q2。我应该如何处理php文件以通过STDOUT将结果返回到Tiny web?

Q3。为了使这个便携式我想为Tiny.exe周围的环境制作临时文件关联。如果我有管理员权限,我会在我的run.bat中使用assoc和ftype来启动Tiny web。在工作场所的windows子管理世界中有任何线索吗?

提前致谢。

1 个答案:

答案 0 :(得分:1)

如果您分析TinyWeb源代码,它会以下列方式运行/ cgi-bin /中的脚本:

如果扩展名为.EXE,则直接运行,否则,它会使用Windows Win32 API调用FindExecutable找到此类文件扩展名的可执行文件:https://msdn.microsoft.com/en-us/library/windows/desktop/bb776419%28v=vs.85%29.aspx

然后,如果找到此文件扩展名的.exe可执行文件,它将使用此可执行文件运行并将您的脚本路径作为第一个命令行参数传递。

要检查是否存在与脚本扩展名关联的可执行文件,请在cgi-bin文件夹中运行cmd.exe并从命令行键入脚本名称,它应该将输出提供给屏幕。我没有在我的Windows机器上安装PHP,但我有Perl,如果我输入myscript.pl,它会向屏幕输出,所以它确认FindExecutable()找到它。此外,当我输入perl.exe myscript.pl时,它也会生成正确的输出 - 这就是TinyWeb运行它的方式。运行cmd.exe并键入test.php会发生什么?它是否打印出所需的输出?顺便说一句,我没有听说任何人都能用PHP运行TinyWeb。但是如果你从命令行输入test.php并且php.exe test.php也可以,那么TinyWeb就可以运行你的PHP脚本了。