我正在尝试读出从页面中的表单发送到我的Perl脚本的POST数据.我用Google搜索并发现:
read(STDIN, $param_string, $ENV{'CONTENT_LENGTH'})
Run Code Online (Sandbox Code Playgroud)
读取整个Data-String,并以.的形式将整个字符串写入$ param_string
Param1=Value1&Param2=Value2&Param3=Value3
Run Code Online (Sandbox Code Playgroud)
通过将它拆分到正确的位置,我得到了必要的数据.
但我想知道为什么我的$ param_string是空的.
当我用GET尝试整个事情时:
$param_string = $ENV{'QUERY_STRING'};
Run Code Online (Sandbox Code Playgroud)
一切正常.有人有想法吗?
在使用Perl编写CGI应用程序时,请使用以下代码来记录访问者.
(my $digits = #ENV{'REMOTE_ADDR'}) =~ s/\.//g;
my $address = pack("C4", $digits);
Run Code Online (Sandbox Code Playgroud)
在perldoc,
打包模板,列表
"C4"应该是模板.这是什么意思?
我正在使用 lighttpd 并编写了以下 cgi 脚本:
main(){
printf("Content-type: text/html\n\n");
char * pwd ="";
pwd=getenv("PWD");
printf ("The current path is: %s",pwd);
}
Run Code Online (Sandbox Code Playgroud)
结果是
The current path is: (null)
Run Code Online (Sandbox Code Playgroud)
嗯,我不明白为什么。而且我不知道如何找到执行脚本的路径。我正在寻找带有路径的 args[0],并为此使用了 pwd,但也许我应该切换到不同的东西。
更新
不工作也是
char cwd[_PC_PATH_MAX+1];
getcwd(cwd, _PC_PATH_MAX+1);
Run Code Online (Sandbox Code Playgroud)
cwd 是“”。如果我停止使用房间 1408 作为我的数据中心,我的脚本可能知道它在哪里。:P
当我从shtml运行它时,我的perl脚本显示渲染的代码
<!--#include virtual="/cgi-bin/Script.cgi"-->
Run Code Online (Sandbox Code Playgroud)
当我直接从地址字段(site.com/cgi-bin/Script.cgi)运行它时,我看到html代码.为什么会这样?谢谢.
#!/usr/bin/env python
import time
import sys
import os
for i in range(10):
progress_bar = \
"""
<!DOCTYPE html>
<html>
<body>
<p>Display a gauge:</p>
<meter value="%s" min="0" max="10">2 out of 10</meter><br>
</body>
</html>
"""%(i)
print progress_bar
sys.stdout.flush() # do this after the print
time.sleep(1.0)
Run Code Online (Sandbox Code Playgroud)
在这里,我试图创建一个进度条,其中'i'是进度指示器.
.屏幕截图如下.我所期望的是,通过使用sys.stdout.flush(),可以消除以前的HTML打印,仅保留当前"i"的进度,但它不起作用.任何想法如何实现我的目标?
很抱歉这个新手问题,但是Perl脚本中的换行符不起作用。也就是说,下面的脚本中的\ n和\ t根本不起作用,它仅显示“ Hello Perl!Hello CGI!”。在一排。通常,此现象的原因是什么?如果有人知道,请告诉我。非常感谢你。
#!/usr/bin/perl
print "Content-Type: text/html; charset=UTF-8\n\n";
print "Hello Perl!\n";
print "Hello \t CGI!";
Run Code Online (Sandbox Code Playgroud) 我是python的新手,我正在尝试运行一个简单的脚本(在Mac上,如果这很重要).
现在,这段代码,给我内部服务器错误:
#!/usr/bin/python
print 'hi'
Run Code Online (Sandbox Code Playgroud)
但这个就像一个魅力(只有额外的'打印'命令):
#!/usr/bin/python
print
print 'hi'
Run Code Online (Sandbox Code Playgroud)
任何解释?谢谢!
更新:
当我从终端运行这个脚本时,一切都很好.但是当我从浏览器运行它时:
http://localhost/cgi-bin/test.py
Run Code Online (Sandbox Code Playgroud)
我得到这个错误(再次,只有我没有添加额外的打印命令).我当然使用Apache服务器.
我是脚本语言的新手,我们将在9月份开始使用一些CGI脚本.我在CGI和Perl之间感到困惑.
它们是相同的,还是两种不同的语言?
首先,作为背景,我试图在创建新实体时加密我们在服务器上的数据。这是在一个起源于 Perl CGI 系统的遗留系统上,并且有一个单独的部分是 PHP。Perl 部分创建组,后来实现了 PHP 以对其进行加密。
我正在尝试从 Perl CGI 文件执行 PHP 加密脚本。我试过使用:
exec("/path/to/file arg1 arg2")
system("/path/to/file arg1 arg2")
backtick operator /path/to/file arg1 arg2
open ("/path/to/file arg1 arg2 |)
我还尝试直接指向 /bin/php 并将文件作为参数传递给每种情况。到目前为止,我唯一发生的事情是:
从我在线阅读的内容来看,我认为 CGI 可能以某种形式的“受保护”模式运行,该模式禁用了某些文件上的 exec/system/open/backtick 命令,但我不确定这就是问题所在。据我所知,没有迹象表明许可受到限制。如果有人有任何见解,非常感谢。如果您需要更多信息,请告诉我。