带文件得form上传perl cgi脚本

纯Delphi开发CGI <br />------------------------------------这是以前写下的---------------------------------------<br /> <br /> <br /> <br />在JAVA泛滥、ASP.net 漫山遍野的今天,也许,大家认为CGI是一种落后的技术,但,也许大家有所不知的是CGI是一种效率很高的编程方式。因为,在前端,CGI不用面对复杂的网络请求过程,而后端输出,又是可以直接输出给浏览器。<br /><br /> 宝刀未老的PERL,是CG 阅读详情
#! /usr/bin/perl -w


use strict;
use Fcntl;    # C fcntl.h得对应模块,这里会使用其中定义得O_xx等常量。
use CGI;

#定义一些系统控制常量
use constant RECEIVE_FILE_PATH => '/Library/WebServer/Received';
use constant BUFFER_SIZE => 10_240;
use constant MAX_SIZE_FILE_PATH => 1024*1024*512;


my $q = new CGI();
$q->cgi_error and &error($q, 'Having error creating cgi handle: '.$q->cgi_error);
my $username = $q -> param('uname') or &error($q, 'username cannot be fetched');
my $password = $q -> param('pw') or &error($q, 'password cannot be fetched');

#获取上传文件得文件名
my $file = $q -> param('upload_file') or &error($q, 'upload file name cannot be fetched');

#获取上传文件得本地文件句柄
my $fh = $q -> upload('upload_file') or &error($q, 'cannot get the handler of uploaded file with name - '.$file);

# 检查上传文件存储目录,确认未超出限定size值
&file_path_volume_check($q);

#用控制力强得sysopen打开用于写入得句柄,并且保持句柄对应的文件不重名。
until(sysopen(OUTPUT, RECEIVE_FILE_PATH."/$file", O_CREAT|O_EXCL|O_WRONLY)){
$file =~ s/(\w+)(\.\w+)$/$1_$2/;
}

#这是简便的方式,但控制力较弱,不能表达一些sysopen有的逻辑。
#open OUTPUT, "> ".RECEIVE_FILE_PATH."/$file";
# or &error($q, 'open OUTPUT fails');  

#把读写句柄都设置成2进制模式,以免处理的是上传的2进制文件(jpg, zip.....)
binmode $fh;
binmode OUTPUT;


my $buffer ="";

#循环从硬盘读出BUFFER_SIZE大小的字节到内存,然后再通过OUTPUT写入磁盘。这是对无边界的二进制数据的操作方式。
while(read($fh, $buffer, BUFFER_SIZE)){
print OUTPUT $buffer;

}

#如果就是上传的文本(.txt)的话,可用下面简便方式

#while(<$fh>){
# print OUTPUT $_;
#}


close $fh;
close OUTPUT;


&error($q, 'Thank you for uploading!'); 


sub file_path_volume_check{
my ($q) = @_;
opendir DIR, RECEIVE_FILE_PATH or error($q, '/Library/WebServer/Received cannot be opened');
my $path_size;
while(readdir DIR){
$path_size += -s RECEIVE_FILE_PATH."/$_";
} 
erorr($q, 'Library/WebServer/Received  is full, cannot receive more files.') if($path_size > MAX_SIZE_FILE_PATH);
}
sub error{
my ($q, $aug) = @_;
print $q -> header('text/html'),
 $q -> start_html('ERROR'),
 $q -> p('Error is: '.$aug),
 $q -> end_html();
exit 1;

}


*************************************************************

对应的html:

<html>
<head>
Sample Form
</head>
<body>
<p>
<form action='/cgi-bin/form_processor.cgi' method='post' enctype='multipart/form-data'>   #enctype='multipart/form-data' 这种media type格式支持文件上传
username: <input type='text' name='uname' value='username' size='20'><br>
dummy password: <input type='password' name='pw' value='dummy password' size='20'>
<br><br>
<input type='file' name='upload_file'>
<input type='submit' name='submit_button' value='Upload File'>
</form>
   </p>
</body>
</html>


perl post 上传文件 ###列出组信息 use LWP::UserAgent; use LWP; use Encode; use LWP::Simple; use LWP::UserAgent; use HTTP::Cookies; use HTTP::Headers; use HTTP::Response; use Encode; use URI::Escape; use URI::URL; use JSON; 阅读详情

相关推荐

Perl CGI 轻松进阶(PDG)

Perl CGI 轻松进阶(PDG)

如何使用CGI.pm模块和Perl上传文件

注意 :如果只需要perl代码,则可以跳到文章结尾。 介绍 将文件从本地计算机上传到远程Web服务器具有许多有用的目的,其中最明显的是文件共享。 例如,您将图像上载到服务器以通过Internet与其他人共享图像。 Perl已准备就绪,可以通过CGI.pm模块上传文件,而CGI.pm模块一直是核心模块,它允许用户执行许多操作而无需了解很多底层技术。 本文本身不是perl教程。 我不会在幕后...

IT与开发人员的地盘 969

用 perl 实现文件上传

用 perl 实现文件上传

perl上传文件实例程序

示例的 HTML 文件如下: html> body> form method="POST" action="psupload.cgi" ENCTYPE="multipart/form-data"> File 1: input type="file" name="FILE1"> br> File 2: input type="file" name="FILE2"> br> input type

stonesharp的专栏 2131

perl读写文件.txt

在linux上perl对文件读写的几种方法 整体读入 逐行读入 写入

perl脚本(压缩文件夹下文件)上传服务器

利用perl写一脚本压缩本地文件夹上传到服务器,具体, #!/usr/bin/perl -w use Archive::Zip qw( :ERROR_CODES :CONSTANTS ); use File::Path; use File::Copy; my $zip = Archive::Zip->new(); use strict; my ( $sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst ) = localtime( time - 604800 );#一周前的时间 my $yyyymmdd = sprintf( "ddd", $year + 1900, $mon + 1, $mday ); my $get_name = 'D:/Notepad'; # 可以改为带参数运行$ARGV[0] my $topath = 'O:/etest/mu'; #$ARGV[1] my @data; opendir( TEMP, "$get_name" ) || die "$!";#读文件夹测试时间 while ( my $file = readdir TEMP ) { if ( $file !~ /^\.\.?$/ ) { chomp $file; if ( -d "$get_name/$file" ) { if ( time_change( ( stat("$get_name/$file") )[9] ) < $yyyymmdd ) { push @data, $file; } } } } closedir(TEMP); #一下是每个文件夹压缩,测试上传成功删除本地文件夹和zip foreach my $j (@data) { $zip = Archive::Zip->new(); $zip->addTree( "$get_name/$j", "$j", sub { /.*/ } ); my $status = $zip->writeToFileNamed("$get_name/$j.zip"); if ( $status == AZ_OK ) { copy( "$get_name/$j.zip", "$topath/$j.zip" ); if ( -e "$topath/$j.zip" ) { rmtree("$get_name/$j"); unlink("$get_name/$j.zip"); } else { unlink("$get_name/$j.zip"); } } } sub time_change { my $tt = shift; my ( $sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst ) = localtime($tt); my $ymd = sprintf( "ddd", $year + 1900, $mon + 1, $mday ); }

perl脚本将文件上传至服务器,Perl实现远程上传脚本并执行

前面懒人之脚本配置snmp服务文章提到,提到用perl 写非交互远程登录,上传安装脚本,并执行。呵呵 用了一天才完成,最后朋友给加了,循环。下面脚本经过测试没问题,这脚本还的改进,我需要从服务器上下载日志到本地。1 #!/usr/bin/perl2 #Author:luyafei3 #Email:chulianwang@qq.com4 #The script used as uplo...

weixin_39527487的博客 726

别再用MounRiver了!在VSCode里用PlatformIO搞定CH32V208开发(附完整配置流程)

本文详细介绍了如何在VSCode中使用PlatformIO进行CH32V208开发,替代传统的MounRiver Studio。通过完整的配置流程和优化技巧,开发者可以构建高效、现代化的RISC-V开发环境,显著提升编译速度和开发效率。

weixin_28711397的博客 533

使用Perl编写CGI程序(前后端)

说明CGI(Common Gateway Interface) 是WWW技术中最重要的技术之一,有着不可替代的重要地位。CGI是外部应用程序(CGI程序)与WEB服务器之间的接口标准,是在CGI程序和Web服务器之间传递信息的过程。CGI规范允许Web服务器执行外部程序,并将它们的输出发送给Web浏览器,CGI将Web的一组简单的静态超媒体文档变成一个完整的新的交互式媒体。Common Gatew...

芸灵fly的博客 5193

海康工业相机硬件触发与YOLOv5实时检测的工业自动化实践

本文详细介绍了如何将海康工业相机的硬件触发模式与YOLOv5目标检测模型相结合,构建一套高实时性的工业自动化质检系统。文章从产线痛点出发,深入解析了硬件接线、SDK回调取图的实战技巧(包括规避常见Bug),并展示了如何将YOLOv5封装为服务,最终通过Flask API串联业务逻辑,实现从精准触发到实时AI判断的完整落地流程。

k6l7m8n9的博客 492

【3d打印】基于Klipper的3d打印远程上位机系统(Qt),klipper源码,通信解析,打印参数设置

基于Klipper的3d打印远程上位机系统(Qt),klipper源码,通信解析,打印参数设置(启庞Kp3s V1)

共享IT之美,共创机器未来 3189

37、Using Perl for CGI Scripting

本文深入探讨了使用Perl进行CGI脚本编程的各个方面,重点介绍了CGI.pm模块在处理Web表单、生成动态HTML内容中的应用。通过一个完整的在线调查表实例,展示了数据读取、表单处理、结果统计与输出的全过程。文章还涵盖了CGI变量、GET与POST方法区别、重定向、Cookie管理、文件上传、安全性最佳实践以及提升性能的嵌入式Perl解决方案(如mod_perl和PerlIS)。适合希望掌握传统CGI开发及理解Web后端基础机制的开发者阅读。

kmeans3miner的博客 44

【读论文】AI陪伴场景长期记忆(用户画像)解决方案

在长程人机交互中,如何让 AI 记住用户,不再是简单的“检索增强(RAG)”就能解决的问题。传统的向量数据库面临“信息信噪比低”、“人格不一致”以及“随着对话无限增长而崩塌”的困境。MemTensor 团队联合人大提出的Inside Out框架,从认知心理学汲取灵感,提出了一种基于PersonaTree(人格树)的显式记忆进化机制。该方案通过训练一个轻量级的(使用 DeepSeek-R1 蒸馏数据 + GRPO 强化学习),实现了将非结构化对话流实时压缩为结构化树操作(新增|更新|删除)。

kakaZhui的博客 816

Upload File Cgi Sample

#! c:/perl/bin/perluse CGI;$q = new CGI;$upload_dir = "portraits";if ($q->param(portrait)) { &print_page_start; &write_file; &print_page_end;}else { &print_page

Trending Up... 1667

学Simulink——基于扩展卡尔曼滤波(EKF)的列车牵引电机转子温度在线估计仿真

本文介绍了一种基于扩展卡尔曼滤波(EKF)的列车牵引电机转子温度在线估计方法,通过Simulink建模实现。文章首先阐述了EKF在估计电机转子温度中的优势,即利用易测量信号(如电流、电压、转速)在线估计难以直接测量的转子温度,并分析了温升对电机性能的影响。随后详细讲解了电机热电增广模型的构建,包括定子电阻温度关系、一阶热近似模型和PMSM的dq轴方程。接着,文章提供了Simulink建模的详细步骤,包括PMSM+FOC电流环的搭建、EKF算法的实现(推荐使用ExtendedKalmanFilter块或MAT

xiaoheshang_123的博客 56

Android日志实战——Tombstones日志分析(七)

Tombstones 一般是由 Dalvik 错误、状态监视调试器、C 层代码以及 libc 的一些问题导致的。当系统发生 Tombstone 的时候,内核(kernel)首先会上报一个严重的警告信号(signal),上层接收到之后,进程的调试工具会把进程中当时的调用栈现场保存起来,并在系统创建了 data/tombstones 目录后把异常时的进程信息写在此目录里面,开发者需要通过调用栈来分析整个调用流程来找出出问题的点。Tombstone原因分析pid 与 tid 相同,问题出在主线程。

小旭的专栏 2521

CGI介绍

1、什么是CGI 2、CGI和Webserver的区别 2、CGI的标准输入和标准输出 3、CGI的环境变量 4、CGI程序数据处理的一般工作流程 5、CGI中From表单数据的分析和解码 1、什么是CGI CGI即通用网关接口(Common Gateway Interface),是一个Web服务器主机提供信息服务的标准接口。通过CGI接口,Web服务器就能够获取客户端提交...

蓬莱道人的博客 3791

扣子Coze智能体万字教程:从入门到精通,一文掌握AI工作流搭建

智能体 = 角色设定 + 提示词 + 变量输入一个好提示词的核心是结构、风格和复用性创建后可以一键发布成网页应用、对话助手整个过程0代码,只靠配置,人人可学,人人可用四、进阶一:理解「工作流」的威力如果你已经用扣子创建了几个简单的智能体,比如写个爆款小红书文案、生成一段短视频脚本,那恭喜你已经入门。但如果你还停留在“一个智能体 = 一段提示词”的层级,你离真正的智能体生产力革命,还差一步:学会搭建“工作流”——让多个大模型自动协同完成任务。

互联网架构师笔记 3493

Uploading Files Using CGI and Perl

Uploading Files Using CGI and PerlWould you like to give your visitors the ability to upload files to your site? Letting them upload content with their Web browsers can be very useful, and fun too!

peakerli的专栏 2110

2025年数学建模国赛高教社杯A题、B题、C题、D题、E题详细思路和代码 模型||插值与拟合

核心思想:构造一个精确通过所有已知离散数据点(xi, yi)的函数y = f(x),并以此函数来估算或预测未知点的值。基本假设:我们认为已知的数据点是100%精确、无误差的(或者误差可忽略不计),比如理论计算值、高精度仪器测量值等。我们的目标是“还原”或“重建”出点与点之间的真实函数关系。关键特征精确性:曲线或曲面必须穿过每一个样本点。局部性:插值结果严重依赖于局部数据点的分布和数值。用途:用于“补全”数据、填充缺失值、进行函数近似等。常见方法多项式插值:拉格朗日插值、牛顿插值。

2201_76125261的博客 802

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

使用http 上传文件的原理

http 文件上传 RFC1867

ruixj的专栏 3万+

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

往linux上传不了文件失败,linux - 文件大小超过60K时文件上传失败 - 堆栈内存溢出...

我一直在努力将内部应用程序转换为不使用FTP,因为安全团队已告知我们要退出FTP。 因此,我一直在使用HTTP上传,并且在大多数情况下效果很好。 我们的环境是Linux,HP-UX,Solaris和AIX的混搭。 在我们的Linux服务器上,curl是通用的,因此我一直在使用curl的POST功能进行上传,并且可以完美地工作。 不幸的是,Unix机器很少有卷曲,甚至没有wget,所以我用p...

weixin_36469638的博客 674

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Python CGI编程

CGI(Common Gateway Interface)通用网关接口,它是一段程序,运行在服务器上。如:HTTP服务器,提供同客户端HTML页面的接口。 CGI程序可以是python脚本,PERL脚本,shell脚本,c或者c++程序等。 web服务器支持及配置 apache支持CGI配置:一般CGI目录为:/var/www/cgi-bin/ ...

weixin_30300523的博客 98

Python_21_CGI编程

Python CGI编程 什么是CGI CGI 目前由NCSA维护,NCSA定义CGI如下: CGI(Common Gateway Interface),通用网关接口,它是一段程序,运行在服务器上如:HTTP服务器,提供同客户端HTML页面的接口。 网页浏览 为了更好的了解CGI是如何工作的,我们可以从在网页上点击一个链接或URL的流程: 1、使用你的浏

anxyanxyan的博客 277
上一篇: Dos:find
下一篇: JVM基础
firstephen
博客等级 码龄18年 7粉丝 14原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值