<?php
// error_reporting(E_ALL);
require("../inc/db.inc.php");
$ftp_server = "r1.chels.ru";
$user="******";
$pass="*******";
$RESTS=0;
function usleepWindows($usec)
{
$start = gettimeofday();
do
{
$stop = gettimeofday();
$timePassed = 1000000 * ($stop['sec'] - $start['sec'])
+ $stop['usec'] - $start['usec'];
}
while ($timePassed < $usec);
}
$id=(int)$id;
$byte2="";
$REST_BEGIN=0;
$q="select `id` , `patch_name` from `programs` where `id`='".intval(abs($id))."'";
$m=mysql_query($q);
if(mysql_num_rows($m)>0)
{
$a=mysql_fetch_array($m);
$FILE_NAME=$a["patch_name"];
// $FILE_NAME="test.txt";
$conn_id = ftp_connect($ftp_server);
$login_result = ftp_login($conn_id, $user, $pass);
$FILE_SIZE = ftp_size($conn_id, urldecode($FILE_NAME));
$FILE_PATCH = "ftp://".$user.":".$pass."@".$ftp_server."/".$FILE_NAME;
if($FILE_SIZE>0)
{
header("Accept-Ranges: bytes");
$contentLength = $FILE_SIZE;
$fileOffset = false;
$fileLength = false;
if ( isset( $_SERVER['HTTP_RANGE'] ) )
{
$httpRange = trim( $_SERVER['HTTP_RANGE'] );
if ( preg_match( "/^bytes=([0-9]+)-$/", $httpRange, $matches ) )
{
$fileOffset = $matches[1];
$ASD_RANGE=$FILE_SIZE-1;
$ASD= trim($fileOffset."-".$ASD_RANGE);
$RESUME_POS=$fileOffset;
header("Content-Range: bytes $ASD/$FILE_SIZE");
header( "HTTP/1.1 206 Partial content" );
$contentLength -= $fileOffset;
$RESTS=1;
}
}
else
{
$ASD_RANGE=$FILE_SIZE-1;
$ASD= trim("0-".$ASD_RANGE);
$RESUME_POS=0;
header("Content-Range: bytes ".$ASD."/$FILE_SIZE");
}
header("Content-Length: ".$contentLength);
header("Content-Disposition: attachment; filename=$FILE_NAME");
header("Content-type: application/octet-stream");
function ftp_send($msg)
{
global $fp;
fputs($fp, $msg);
return fgets ($fp,128);
}
// print "RESUME_POS[$RESUME_POS]";
function get_file($port)
{
global $ftp_server;
$fp = fsockopen ($ftp_server, $port, $errno, $errstr, 3);
if (!$fp) {
echo "$errstr ($errno)<br>\n";
}
else
{
while(!feof($fp))
{
// usleepWindows(200000); /// 1 000 000 - 1 sec
echo fgets ($fp,4096);
flush();
}
fclose ($fp);
}
}
$fp = fsockopen ($ftp_server, 21, $errno, $errstr, 30);
if (!$fp)
{
echo "$errstr ($errno)<br>\n";
}
else
{
fgets ($fp,128);
ftp_send("USER $user\n");
ftp_send("PASS $pass\n");
ftp_send("SYST\n");
ftp_send("TYPE I\n");
ftp_send("REST 100\n");
ftp_send("REST 0\n");
ftp_send("PWD\n");
ftp_send("PASV\n");
$pasv = ftp_send("PASV\n");
if($RESUME_POS>0){
ftp_send("REST $RESUME_POS\n");
}
$byte = explode(",", $pasv);
for ($i = 0; $byte[5][$i] != ")"; $i++) {
$byte2 .= $byte[5][$i];
}
$pasv = ($byte[4] * 256) + $byte2;
fputs($fp, "RETR $FILE_NAME\n");
get_file($pasv);
fclose ($fp);
}
}
else
{
print "
<pre>
<b>File not found</b>!
</pre>
";
}
}
?>