⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 progress.cgi

📁 将本目录下的所有文件与目录传上您的服务器IIS虚拟目录下.并配置好ASP.NET的运行环境.更改好数据库连接地址即可.
💻 CGI
字号:
#!/usr/bin/perl -w# PHP File Uploader with progress bar Version 1.43	# Copyright (C) Raditha Dissanyake 2003,2004# http://www.raditha.com# Licence:# The contents of this file are subject to the Mozilla Public# License Version 1.1 (the "License"); you may not use this file# except in compliance with the License. You may obtain a copy of# the License at http://www.mozilla.org/MPL/# # Software distributed under the License is distributed on an "AS# IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or# implied. See the License for the specific language governing# rights and limitations under the License.# # The Initial Developer of the Original Code is Raditha Dissanayake.# Portions created by Raditha are Copyright (C) 2003,2004# Raditha Dissanayake. All Rights Reserved.# # Portions contributed by Orest Kinasevych are Copyright (C)# 2003 Kinasevych Saj## CHANGES# 1.00 #   No longer uses cookies. This has two major benefits; the first#   being that minority of users who do not like cookies are not #   inconvinienced. Secondly there is one less dependecy and this #   would lead to a smoother setup for most people.#   (if you want to use cookies look at the contrib folder)## 1.02#   added a cache control header in version 1.02## 1.10#   Added a more detailed progress bar in version ## 1.42#   The organization of the temporary files have been improved so to#   make is easier to clean up after abandoned uploads. (as suggested#   by Igor Kryltsov)##	use CGI;use Fcntl qw(:DEFAULT :flock);#use Carp;		# Carp is only needed if you want debugging. Uncomment the above line# if you comment out any of the carp statements in the body of the # script.## the most obvious issue that we will face is file locking.# if two threads read and write from the same file at the same# time only one of them will be allowed to finish the operation.# Since we are storing our temporary data in a file we are likely to# run into that exact same problem.# We can't overcome it but we can make sure the progress bar does# not display junk when that happens.### status codes = 0-uploading, 1-started, 2- complete$query = new CGI();$sessionid = $query->param('sessionid');$sessionid =~ s/[^a-zA-Z0-9]//g;  # santized as suggested by Terrence Johnson.$iTotal = $query->param('iTotal');$iRead = $query->param('iRead');$status =  $query->param('iStatus');### The code that deals with calculating elapsed time, time remaining # and upload speed were contributed by Orest Kinasevych ##### Get values assigned for current time and upload start time###$dtnow = $query->param('dtnow'); # assign value for current time$dtnow=time;$dtstart = $query->param('dtstart'); # assign value for upload start time###carp "$dtnow  $dtstart";$thisUrl = $query->url;### Elapsed time# Calculate elapsed time and format for display##$dtelapsed = $dtnow - $dtstart;$dtelapsed_sec = ($dtelapsed % 60); # gets number of seconds$dtelapsed_min = ((($dtelapsed - $dtelapsed_sec) % 3600) / 60); # gets number of minutes$dtelapsed_hours = (((($dtelapsed - $dtelapsed_sec) - ($dtelapsed_min * 60)) % 86400) / 3600);# gets number of hours; assuming that we won't be going into days!if ($dtelapsed_sec < 10) { $dtelapsed_sec = "0$dtelapsed_sec"; } # append leading zeroif ($dtelapsed_min < 10) { $dtelapsed_min = "0$dtelapsed_min"; } # append leading zeroif ($dtelapsed_hours < 10) { $dtelapsed_hours = "0$dtelapsed_hours"; } # append leading zero$dtelapsedf = "$dtelapsed_hours:$dtelapsed_min:$dtelapsed_sec"; # display as 00:00:00##### Upload speed##$bSpeed = 0; # if not yet determinedif ($dtelapsed > 0) # avoid divide by zero errors{	$bSpeed = $iRead / $dtelapsed; # Bytes uploaded / Seconds elapsed = Bytes/Second speed	$bitSpeed = $bSpeed * 8; # bps	$kbitSpeed = $bitSpeed / 1000; # Kbps}else{	$kbitSpeed = $bSpeed; # just pass the zero value}$bSpeedf = sprintf("%d",$kbitSpeed); # remove decimals### Est remaining time# Calculate remaining time based on upload speed so far##$bRemaining = $iTotal - $iRead; # Total size - amount uploaded = amount remaining$dtRemaining = 0;if ($bSpeed > 0) {	# Bytes remaining / Bytes/Second = Seconds 	$dtRemaining = $bRemaining / $bSpeed;}$dtRemaining = sprintf("%d",$dtRemaining); # remove decimals$dtRemaining_sec = ($dtRemaining % 60); # gets number of seconds$dtRemaining_min = ((($dtRemaining - $dtRemaining_sec) % 3600) / 60); # gets number of minutes$dtRemaining_hours = (((($dtRemaining - $dtRemaining_sec) - ($dtRemaining_min * 60)) % 86400) / 3600); # gets number of hours; assuming that we won't be going into days!if ($dtRemaining_sec < 10){ 	# append leading zero	$dtRemaining_sec = "0$dtRemaining_sec";}if ($dtRemaining_min < 10){	# append leading zero	$dtRemaining_min = "0$dtRemaining_min";}if ($dtRemaining_hours < 10){ 	# append leading zero	$dtRemaining_hours = "0$dtRemaining_hours";}$dtRemainingf = "$dtRemaining_hours:$dtRemaining_min:$dtRemaining_sec"; # display as 00:00:00### The values for iStatus are#	0 - in progress#	1 - New upload#	2 - Complete###carp "iTotal = $iTotal, iRead = $iRead, status = $status, sessionId = $sessionid";require("./header.cgi");sub readFlength(){		if(open (STAT, $monitor_file))	{		sysopen(STAT,  $monitor_file, O_RDONLY)				or die "can't open numfile: $!";		$ofh = select(STAT); $| = 1; select ($ofh);		$iTotal = <STAT>;		#carp "trying to read the stuff in $iTotal";		if(defined($iTotal) && $iTotal ne "")		{			return 1;				}		else		{			return 0;		}	} 	return 0;	}### many thanx to Terrence Johnson who pointed out the fact that i should have added # cache control header.##print "Pragma: no-cache\n";print "Content-type: text/xml\n\n ";if($status == 1){	#new upload starting	show_starting();}elsif($status ==0){	##	# in progress	# we will try to read in the total size of data to be transfered from the	# shared file. It will also tell us how much data has been transfered upto	# now.	##	$bRead = -s "$post_data_file";			if(defined $bRead)	{		# We have  been able to read in it from the file.		$percent = $bRead * 100 / $iTotal;		$iRead=$bRead;			}	else	{		&show_error();		exit();	}	#	# division results in truncation errors at times so don't compare percentage	# There have been occaisional reports of the progress bar showing 100% but not	# disappearing even after file upload has been completed.	#	# Nils Menrad came up with the solution which is to modify the end of upload	# test.	#	if((($iTotal == $bRead) && $bRead != 0) || $bRead>$iTotal) 	{		if($status == 1 && -e "$signal_file")		{			$bRead=0;			$status=0;			&get_last_values();		}		else		{			show_complete();			unlink $monitor_file;			unlink $post_data_file;			unlink $signal_file;						exit;		}	}	else	{		$kachal = "$bRead , $iTotal";	}	&make_progress_bar();	exit;}else {	show_complete();}## Since the progress bar is in html, so it needs to refresh itself periodicaly to# obtain new values. The refresh url with the query string is generated by this # function.sub make_url{	#print "Content-type: text/html\n\n ";	#print "hellow $iTotal $iStatus $sessionid $iRead <br>\n" ;	##	$url = "$thisUrl?iTotal=$iTotal&iRead=$iRead&iStatus=$status&sessionid=$sessionid&dtnow=$dtnow&dtstart=$dtstart";	##	$url =~ s/\n//;		return $url;}sub make_progress_bar{	$url = make_url();		print <<__PART1__;	<UploadProgress sessionID="$sessionid">		<RefreshURL><![CDATA[$url]]></RefreshURL>		<TotalBytes>$iTotal</TotalBytes>		<ReadBytes>$iRead</ReadBytes>		<Status>$status</Status>		<Speed>$bSpeedf</Speed>		<TimeRemaining>$dtRemainingf</TimeRemaining>		<TimeElapsed>$dtelapsedf</TimeElapsed>	</UploadProgress>__PART1__}sub show_complete{		$status=2;	$url = make_url();	print <<__PART2__;	<UploadProgress sessionID="$sessionid">		<RefreshURL><![CDATA[$url]]></RefreshURL>		<TotalBytes>$iTotal</TotalBytes>		<ReadBytes>$iRead</ReadBytes>		<Status>$status</Status>		<Speed>$bSpeedf</Speed>		<TimeRemaining>0</TimeRemaining>		<TimeElapsed>$dtelapsedf</TimeElapsed>	</UploadProgress>__PART2__}sub show_starting{	#carp "starting";	if(readFlength() == 1)	{		$status=0;	}	$url = make_url();	print <<__PART2__;	<UploadProgress sessionID="$sessionid">		<RefreshURL><![CDATA[$url]]></RefreshURL>		<TotalBytes>$iTotal</TotalBytes>		<ReadBytes>$iRead</ReadBytes>		<Status>$status</Status>		<Speed>$bSpeedf</Speed>		<TimeRemaining>$dtRemainingf</TimeRemaining>		<TimeElapsed>$dtelapsedf</TimeElapsed>	</UploadProgress>__PART2__}sub show_error{	$url = make_url();	print <<__PART2__;	<UploadProgress sessionID="$sessionid">		<RefreshURL><![CDATA[$url]]></RefreshURL>		<TotalBytes>$iTotal</TotalBytes>		<ReadBytes>$iRead</ReadBytes>		<Status>-1</Status>		<Speed>$bSpeedf</Speed>		<TimeRemaining>$dtRemainingf</TimeRemaining>		<TimeElapsed>$dtelapsedf</TimeElapsed>	</UploadProgress>__PART2__}# this function may not return;sub get_last_values(){	if($status == 1)	{		show_starting();		exit;	}	else	{	 	if($status == 2)		{						show_complete();			exit;		}		else		{			#			# we have done everything possible to try to retrieve the data			# now try to calculate the percentage once again			#			$iTotal = $iTotal;			$bRead = $iRead;			if(defined($iTotal) && $iTotal != 0)			{				$percent = $bRead * 100 / $iTotal;				$kachal="1";			}			else			{				&show_error();				exit;			}		}	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -