我有一个从cgi应用程序填充的html页面.现在,当我通过表单在我的html页面上进行更改时
<form action="/cgi-bin/Lib.exe" method=POST name="checks" ID="Form2">
Run Code Online (Sandbox Code Playgroud)
这需要我从
http://localhost/index.html
到
http://localhost/cgi-bin/Lib.exe
,其中CGI输出我放在那里的一些调试行.然后我必须手动返回索引才能看到它已更新.
当html表单向cgi应用程序发送请求时,CGi应用程序对数据库进行更新并重写索引html.我如何留在索引页面并看到它更新?(我正在运行轻量级的GoAhead Web服务器,C中的CGI和HTML,JS)
谢谢.
各种用户正在浏览100%用C(CGI)编程的网站.每个网页都使用fopen/fgets/fread从文件中读取常用数据(如导航栏).如果各种各样的人浏览同一页面,每次打电话给fopen/fgets/fread会互相干扰吗?如果是这样,如何在C中解决?(这是一个Linux服务器,编译是用gcc完成的,这是用C编程的CGI网站.)
例:
FILE *DATAFILE = fopen(PATH, "r");
if ( DATAFILE != NULL )
{
while ( fgets( LINE, BUFFER, DATAFILE ) )
{
/* do something */
}
}
Run Code Online (Sandbox Code Playgroud) 我是perl的新手,我想在我的脚本上使用屏幕输入.这是我的脚本,我希望从键盘输入IOS命令.可以有人告诉我我错在哪里.问题我现在的脚本没有读取我的键盘输入,我不确定是否可以处理我的情况.谢谢!!
# ### Show #########################################################
$cmd = <STDIN>;
chomp ($cmd);
$show_error = "";
if ($ssh_switch eq 'yes') {
ssh_access();
}
print "\n",h2($host . ' - ' . $cmd);
@output=$cmd;
print hr(),"\n";
}
}
#########################################################################
Run Code Online (Sandbox Code Playgroud) 我可以使用以下代码通过CGI.pm在我的CGI脚本中成功显示图像:
#!/usr/bin/perl -w
use CGI::Carp qw(fatalsToBrowser);
use CGI qw/:standard/;
print img {src => "../images/myimage.png", align=>"CENTER"};
Run Code Online (Sandbox Code Playgroud)
但是,当我想要做的是在该图像中包含URL时,每当人们点击该图像时它将指向所需的URL,此代码失败:
print img {src => "../images/myimage.png", align=>"CENTER", -href=>"www.google.com"};
Run Code Online (Sandbox Code Playgroud)
什么是正确的方法呢?
如果我按原样运行这个脚本,它就可以了.
但为什么这不起作用cgi?
当我使用_\01_而不是_\00_它也适用cgi.
#!/usr/bin/env perl
use warnings;
use 5.012;
### script_1.cgi #########################################
my @array = ( '1524', '2.18 MB', '09/23/03', '_cool_name_', 'type' );
my $row = join "_\00_", @array;
say $row;
# submit $row to script_2.cgi
### script_2.cgi #########################################
# ...
# my $row = $cgi->param('row');
# my $name;
if ( $row =~ /_\00_([^\00]+)_\00_type\z/ ) {
# $name = $1;
say "Name: <$1>";
} else {
die "<$row> $!";
}
# Software …Run Code Online (Sandbox Code Playgroud) 我有以下隐藏的形式:
<form id='export_svg_container_single_form'
action='exportSVG.pl'
method='post'
target='_blank'
style='display:none;'>
<input type='text'
id='export_svg_container_single_form_data'
name='export_svg_data'
style=';' />
</form>
Run Code Online (Sandbox Code Playgroud)
export_svg_data在表单提交之前,字段值将填充SVG文档.
提交时,这将作用于以下简单的CGI脚本,用Perl编写:
#!/usr/bin/perl
use strict;
use warnings;
use CGI;
use CGI::Pretty qw/:standard/;
my $val = param('export_svg_data');
print "Content-Type:image/svg+xml\n";
print "Content-Disposition: inline\n";
print "Content-Description: File to download\n\n";
print $val;
Run Code Online (Sandbox Code Playgroud)
提交时,隐藏表单还会打开一个新选项卡并显示(在本例中)SVG文档.然后,最终用户可以将窗口保存到文件中.
相反,在提交表单时,我想要做的是让浏览器自动打开" 保存"或" 另存为"对话框,以便用户可以选择文件名并保存文档,而不是在浏览器窗口中呈现SVG.
我如何使用JavaScript或对CGI脚本进行适当的更改?(我想保持父表单页面不变,即打开新的选项卡或窗口,如果需要的话.)感谢您的建议.
为了再次澄清,我正在寻找一个解决方案,它会打开" 保存"对话框.我不希望脚本确定文件名并将其保存在任意位置,无需任何用户干预.
我收到错误"内部服务器错误.服务器遇到内部错误或配置错误,无法完成您的请求."
我在html中提交表单并获取其值.
HTML代码(index.cgi)
#!c:/perl/bin/perl.exe
print "Content-type: text/html; charset=iso-8859-1\n\n";
print "<html>";
print "<body>";
print "<form name = 'login' method = 'get' action = '/cgi-bin/login.pl'> <input type = 'text' name = 'uid'><br /><input type = 'text' name = 'pass'><br /><input type = 'submit'>";
print "</body>";
print "</html>";
Run Code Online (Sandbox Code Playgroud)
用于获取数据的Perl代码(login.pl)
#!c:/perl/bin/perl.exe
use CGI::Carp qw(fatalsToBrowser);
my(%frmfields);
getdata(\%frmfields);
sub getdata {
my ($buffer) = "";
if (($ENV{'REQUEST_METHOD'} eq 'GET')) {
my (%hashref) = shift;
$buffer = $ENV{'QUERY_STRING'};
foreach (split(/&/,$buffer)) {
my ($key, $value) = split(/=/, $_); …Run Code Online (Sandbox Code Playgroud) 从一开始就道歉.我无法提供我正在使用的代码.
我通过DBI查询数据库并使用perl通过fetchrow-array打印输出并打印$ variable
但是数据库中的字段包含\ 0\t\r \n等作为普通文本的一部分.
当通过变量和打印命令打印这些字段时,这些\ t\r\0文本字符被错误地打印为制表符,换行符,十六进制字符.我认为无法告诉print忽略任何像这样的字符串.
有任何想法吗?
谢谢.
好吧,十年来第一次使用Perl,有点生疏.从那时起思考也许是一些更新(天才吧?)
Alrighty,这是Perl 5,版本16,颠覆3 x86_64-linux-thread-multi,在AWS micro上有29个已注册的补丁.
Perl附带了它,我只是安装了perl-CGI perl-Data-Dumper
#!/usr/bin/perl
use CGI; # load cgi routines
my $q = CGI>new; # cgi object
print $q->header(),
$q->start_html("Hello World"),
$q->h1('Hello'),
$q->end_html;
~
Run Code Online (Sandbox Code Playgroud)
当我逐步构建程序时,似乎有一个简单而直截了当的可能性.但是如果我在命令行(或浏览器)运行它,我会遇到错误.
如果没有创建第4行的包或对象引用,则无法调用方法"header".
第4行是打印$ q-> header(); "create"是文件名.
有任何想法吗?让我了解Perl 2017的最新消息?生锈的问题总是非常简单.
我继承了一个旧的perl应用程序,我正试图复活.可悲的是,我不是一个perl人(而且只是一个新手开发人员).通过在线查找解决方案,我已经成功解决了这个应用程序的其他问题,但到目前为止我已经找不到解决方案了,所以觉得是时候征求意见了.
我找到了一个障碍,寻找有关如何解决我收到的错误的建议.
这是错误:
Can't locate object method "new" via package "CGI" at
/opt/app/htdocs/lib/APP/CGI.pm line 26.Compilation failed
in require at /opt/app/htdocs/lib/APP/CGI.pm line 4.
Run Code Online (Sandbox Code Playgroud)
这是/opt/app/htdocs/lib/APP/CGI.pm的前26行:
package APP::CGI;
use CGI;
use CGI::Carp qw(fatalsToBrowser set_message);
use APP::Error;
BEGIN {
sub handle_errors {
my $msg = shift;
&APP::Error::error($msg);
}
set_message(\&handle_errors);
}
use strict;
# hack: added these to resolve "can't locate" errors
use lib qw(/opt/app/htdocs);
use lib qw(/opt/app/htdocs/lib);
use lib qw(/opt/app/htdocs/lib/APP);
use lib qw(/opt/app/htdocs/lib/APP/Service);
# end hack
use vars qw/ $CGI %REDIRS /;
$CGI = …Run Code Online (Sandbox Code Playgroud)