Php 我怎么知道发送了多少字节? 函数Ifurl($subject) { $pattern=“/http:\/\/”; $regex=preg\u match\u all($pattern,$subject,$array); 如果($regex==1) { 返回true;//如果它存在,则返回true } 其他的 { 返回false; } } 函数get\u start\u point($env\u http\u range) { //计算起点 $range=$env\u http\u range;//通常设置为$\u服务器['http\u range'] 如果($range!='') { $p1=strpos($range,“bytes=”); $p2=STRPO($range,“-”); $offset=substr($range,$p1+6,$p2-($p1+6)); }否则{ $offset=0; } 返回$offset; } 函数输出($url、$range、$range2)//无法记录输出8192未满量 { $opts=array('http'=>array('method'=>“GET”,'header'=>“Range:bytes=$Range-$range2”); $context=stream\u context\u create($opts); $fp=fopen($url,'r',false,$context); 而(!feof($fp)&&!连接被中止() { $data_transfer+=1024*8; fpassthru($fp); } $status=(!连接被中止()); 记录此数据(传输的数据); fclose($httphandle); } 函数日志\u此($line) { $filename='download_log.txt'; $handle=fopen($filename,'a'); fwrite($handle,$line.“\n”); } 函数url($url) { $define_url=Ifurl($url);//定义url是否为真! 如果($define_url==1) { $filename=basename($url);//定义文件的文件名 $httphandle=fopen($url,“r”);//打开文件并读取信息 $headers=stream\u get\u meta\u数据($httphandle); $filesize=$headers['wrapper_data'][6];//定义文件内容大小 $filecontent=$headers['wrapper_data'][8];//获取文件内容 $pattern=“/(\d+/”;//获取所有文件大小 preg_match_all($pattern,$filesize,$array); $filesize=$array[0][0];//获取文件大小; $returnarray=array(“文件名”=>$Filename,“文件大小”=>$Filesize,“文件url”=>$url,“文件内容”=>$Filecontent”); return$returnarray; } 其他的 { 返回“无法”;//无法进行请求! } } 函数XD($url) { $graburl=url($url); $filename=$graburl['filename']; $filesize=$graburl['filesize']; $filurl=$graburl['Fileurl']; $filecontent=$graburl['filecontent']; /////////////////////////////////////////// 设置\u魔术\u引号\u运行时(0); ini设置(“输出缓冲”、“关闭”); ob_end_clean(); ini_集('zlib.output_compression','Off'); 忽略用户中止(true); //////////////////////////////////////////// @标头(“缓存控制:”); @标头(“缓存控制:公共”); @标题(“内容类型:应用程序/八位字节流”); @标题(“内容处置:附件;文件名=”.$filename); @标题(“接受范围:字节”); $log=get_start_point($_SERVER['HTTP_RANGE']); 记录此($log); 如果(isset($\u服务器['HTTP\u范围]])) { 列表($a,$range)=分解(“=”,$\u服务器['HTTP\u range']); 列表($range1,$range2)=分解(“-”,$range); 如果($range2==''或$range2=$filesize){ $range2=$filesize-1; }; 如果($range1$range2){ $range1=0; } $new_length=$range2-$range1+1; @标题(“HTTP/1.1 206部分内容”); @标题(“内容范围:字节$range1-$range2/$filesize”); @标题(“内容长度:$new_长度”); 输出($url、$range1、$range2); } 否则{ @标题(“内容长度:.$filesize”); $httphandle=fopen($url,“r”);//打开文件并读取信息 而(!feof($httphandle)&&!连接被中止() { $data_transfer+=1024*8; echo-fread($httphandle,1024*8); 冲洗(); ob_end_flush(); } $status=(!连接被中止()); 记录此数据(传输的数据); fclose($httphandle); } } XD('http://rarlabs.com/rar/wrar393.exe')
我试图恢复下载,并记录已下载的字节使用缓冲区的代码工程伟大!但我无法记录从用户下载的全部字节数,函数输出会与服务器对话,以发送用户留下的字节。我用文本文件记录它,作为测试,当用户下载时,它会记录用户下载的字节,并将其保存到文本文件中。然而,唯一的问题是,当用户调用函数输出时,日志不会记录我尝试使用fread时的字节数,但代码会进入choas。如何记录用户下载的字节总数?尝试在中签出此函数文件:Php 我怎么知道发送了多少字节? 函数Ifurl($subject) { $pattern=“/http:\/\/”; $regex=preg\u match\u all($pattern,$subject,$array); 如果($regex==1) { 返回true;//如果它存在,则返回true } 其他的 { 返回false; } } 函数get\u start\u point($env\u http\u range) { //计算起点 $range=$env\u http\u range;//通常设置为$\u服务器['http\u range'] 如果($range!='') { $p1=strpos($range,“bytes=”); $p2=STRPO($range,“-”); $offset=substr($range,$p1+6,$p2-($p1+6)); }否则{ $offset=0; } 返回$offset; } 函数输出($url、$range、$range2)//无法记录输出8192未满量 { $opts=array('http'=>array('method'=>“GET”,'header'=>“Range:bytes=$Range-$range2”); $context=stream\u context\u create($opts); $fp=fopen($url,'r',false,$context); 而(!feof($fp)&&!连接被中止() { $data_transfer+=1024*8; fpassthru($fp); } $status=(!连接被中止()); 记录此数据(传输的数据); fclose($httphandle); } 函数日志\u此($line) { $filename='download_log.txt'; $handle=fopen($filename,'a'); fwrite($handle,$line.“\n”); } 函数url($url) { $define_url=Ifurl($url);//定义url是否为真! 如果($define_url==1) { $filename=basename($url);//定义文件的文件名 $httphandle=fopen($url,“r”);//打开文件并读取信息 $headers=stream\u get\u meta\u数据($httphandle); $filesize=$headers['wrapper_data'][6];//定义文件内容大小 $filecontent=$headers['wrapper_data'][8];//获取文件内容 $pattern=“/(\d+/”;//获取所有文件大小 preg_match_all($pattern,$filesize,$array); $filesize=$array[0][0];//获取文件大小; $returnarray=array(“文件名”=>$Filename,“文件大小”=>$Filesize,“文件url”=>$url,“文件内容”=>$Filecontent”); return$returnarray; } 其他的 { 返回“无法”;//无法进行请求! } } 函数XD($url) { $graburl=url($url); $filename=$graburl['filename']; $filesize=$graburl['filesize']; $filurl=$graburl['Fileurl']; $filecontent=$graburl['filecontent']; /////////////////////////////////////////// 设置\u魔术\u引号\u运行时(0); ini设置(“输出缓冲”、“关闭”); ob_end_clean(); ini_集('zlib.output_compression','Off'); 忽略用户中止(true); //////////////////////////////////////////// @标头(“缓存控制:”); @标头(“缓存控制:公共”); @标题(“内容类型:应用程序/八位字节流”); @标题(“内容处置:附件;文件名=”.$filename); @标题(“接受范围:字节”); $log=get_start_point($_SERVER['HTTP_RANGE']); 记录此($log); 如果(isset($\u服务器['HTTP\u范围]])) { 列表($a,$range)=分解(“=”,$\u服务器['HTTP\u range']); 列表($range1,$range2)=分解(“-”,$range); 如果($range2==''或$range2=$filesize){ $range2=$filesize-1; }; 如果($range1$range2){ $range1=0; } $new_length=$range2-$range1+1; @标题(“HTTP/1.1 206部分内容”); @标题(“内容范围:字节$range1-$range2/$filesize”); @标题(“内容长度:$new_长度”); 输出($url、$range1、$range2); } 否则{ @标题(“内容长度:.$filesize”); $httphandle=fopen($url,“r”);//打开文件并读取信息 而(!feof($httphandle)&&!连接被中止() { $data_transfer+=1024*8; echo-fread($httphandle,1024*8); 冲洗(); ob_end_flush(); } $status=(!连接被中止()); 记录此数据(传输的数据); fclose($httphandle); } } XD('http://rarlabs.com/rar/wrar393.exe'),php,header,buffer,filestream,fread,Php,Header,Buffer,Filestream,Fread,我试图恢复下载,并记录已下载的字节使用缓冲区的代码工程伟大!但我无法记录从用户下载的全部字节数,函数输出会与服务器对话,以发送用户留下的字节。我用文本文件记录它,作为测试,当用户下载时,它会记录用户下载的字节,并将其保存到文本文件中。然而,唯一的问题是,当用户调用函数输出时,日志不会记录我尝试使用fread时的字节数,但代码会进入choas。如何记录用户下载的字节总数?尝试在中签出此函数文件: 你看过卷曲延伸部分了吗?我建议你使用句号。我不明白这个问题。这是什么意思“当用户调用函数时?”?函数输
你看过卷曲延伸部分了吗?我建议你使用句号。我不明白这个问题。这是什么意思“当用户调用函数时?”?函数输出($url,$range,$range2)curl我想知道如何记录用户下载的字节数我很确定curl可以跟踪传输的字节数。请阅读文档。我确实看过。您是否可以解释一下,当用户下载文件时,如何跟踪字节?您想知道服务器到服务器的方式使用了多少字节,或者用户到您的服务器使用了多少字节?对于后者,PHP可能是错误的工具。您需要Web服务器级别的内容。
function Ifurl($subject)
{
$pattern = "/http:\/\//";
$regex = preg_match_all($pattern, $subject, $array);
if ($regex == 1)
{
return true; //true that it exist
}
else
{
return false;
}
}
function get_start_point($env_http_range)
{
//Calculate start point
$range = $env_http_range; // usually set to $_SERVER['HTTP_RANGE']
if ($range != '')
{
$p1 = strpos($range, "bytes=");
$p2 = strpos($range, "-");
$offset = substr($range, $p1+6, $p2-($p1+6));
} else {
$offset = 0;
}
return $offset;
}
function Output($url,$range,$range2) //cant record output 8192 not full amount
{
$opts = array('http'=>array('method'=>"GET",'header'=>"Range: bytes=$range-$range2"));
$context = stream_context_create($opts);
$fp = fopen($url, 'r', false, $context);
while(!feof($fp) && !connection_aborted())
{
$data_transferred += 1024 * 8;
fpassthru($fp);
}
$status = (!connection_aborted());
log_this($data_transferred);
fclose($httphandle);
}
function log_this($line)
{
$filename = 'download_log.txt';
$handle = fopen($filename, 'a');
fwrite($handle, $line . "\n");
}
function url($url)
{
$define_url = Ifurl($url); //define if the url is true!
if ($define_url == 1)
{
$filename = basename($url); //define the filename of the file
$httphandle = fopen($url, "r"); //open the file and read the information
$headers = stream_get_meta_data($httphandle);
$filesize = $headers['wrapper_data'][6]; //define the file conent size
$filecontent = $headers['wrapper_data'][8]; //get the file content
$pattern = "/(\d+)/"; //get all filesize dg
preg_match_all($pattern, $filesize, $array);
$filesize = $array[0][0]; //get the filesize;
$returnarray = array("Filename" => $filename,"Filesize" => $filesize, "Fileurl" => $url,"Filecontent" => $filecontent);
return $returnarray;
}
else
{
return "Unable"; //unable to make request!
}
}
function XD($url)
{
$graburl = url($url);
$filename = $graburl['Filename'];
$filesize = $graburl['Filesize'];
$filurl = $graburl['Fileurl'];
$filecontent = $graburl['Filecontent'];
///////////////////////////////////////////
set_magic_quotes_runtime(0);
ini_set('output_buffering', 'Off');
ob_end_clean();
ini_set('zlib.output_compression', 'Off');
ignore_user_abort(true);
////////////////////////////////////////////
@header("Cache-Control:");
@header("Cache-Control: public");
@header("Content-Type: application/octet-stream");
@header("Content-Disposition: attachment; filename=".$filename);
@header("Accept-Ranges: bytes");
$log = get_start_point($_SERVER['HTTP_RANGE']);
log_this($log);
if(isset($_SERVER['HTTP_RANGE']))
{
list($a, $range)=explode("=",$_SERVER['HTTP_RANGE']);
list($range1,$range2) = explode("-", $range);
if ($range2 == '' or $range2 < 0 or $range2 >= $filesize) {
$range2 = $filesize -1;
};
if ($range1 < 0 or $range1 > $range2) {
$range1 = 0;
}
$new_length = $range2 - $range1 + 1;
@header("HTTP/1.1 206 Partial Content");
@header("Content-Range: bytes $range1-$range2/$filesize");
@header("Content-Length: $new_length");
Output($url,$range1,$range2);
}
else {
@header("Content-Length: ".$filesize);
$httphandle = fopen($url, "r"); //open the file and read the information
while (!feof($httphandle) && !connection_aborted())
{
$data_transferred += 1024 * 8;
echo fread($httphandle, 1024 * 8);
flush();
ob_end_flush();
}
$status = (!connection_aborted());
log_this($data_transferred);
fclose($httphandle);
}
}
XD('http://rarlabs.com/rar/wrar393.exe')