【发布时间】:2017-05-25 18:34:55
【问题描述】:
我有一个名为 install-app-pl.cgi 的 CGI perl 脚本:
#!/usr/bin/perl -w
print header('text/html');
use strict;
use CGI ':standard';
# Get me some vars
my @params = param();
my $APP_NAME = param('app_name');
my $APP_WEB_PORT = param('app_web_port');
my $APP_WEB_USER = param('app_web_user');
my $APP_WEB_PASS = param('app_web_pass');
my $DOWNLOAD_DIR = param('download_dir');
my $CONFIG_DIR = param('config_dir');
my $LIBRARY_DIR = param('library_dir');
my $TEMP_DOWNLOAD_DIR = param('temp_download_dir');
# Run another script
if ( $APP_NAME ) {
print "Installing $APP_NAME...";
print "<pre>";
system ("perl /var/www/mysite.local/public_html/lib/$APP_NAME/install-$APP_NAME.pl");
print "</pre>" ;
}
else {
print "No app specified, check the error log";
}
我试图让它将 CGI 参数中定义的变量传递给install-$APP_NAME.pl
#!/usr/bin/perl -w
print header('text/html');
use strict;
use CGI ':standard';
require "/var/www/mysite.local/public_html/cgi-bin/install-app-pl.cgi"
# Echo my vars
print "$CONFIG_DIR $DOWNLOAD_DIR $LIBRARY_DIR $PGID $PUID $TZ $APP_WEB_PORT";
但我不确定传递这些信息的最佳方式。
【问题讨论】:
-
所以你要根据用户输入在文件系统上执行东西而不彻底清理/限制数据?嗯...有趣的方法。
-
您将参数传递给脚本,就像您将参数传递给任何 shell 进程一样。如果你有一堆,传递序列化表示(例如 JSON)或使用某种持久存储(例如文件、数据库)可能更有意义。
-
@stevieb:我不同意。你真的学会了如何一次正确地做每件事吗?如果是这样,那么你知道的比我多。
-
至于我们对这类问题的反应:我们这里的大多数人都是长期使用 Perl 的专业程序员。如果有人问一个非常具体的问题,我们通常不会质疑原因,但在你的情况下,有很多背景故事听起来像是一个不好的方法。因此,我们建议替代方案并指出缺陷。这是为了鼓励人们学习更多,并以更安全或更现代的方式做事。
-
您也确实要求最好的方法,它会征求意见,这是题外话。这里已经提到了三种可以回答这个问题的方法,我至少知道另外两种。不过,最好的方法恕我直言,不要这样做。