hi
i' using a script on apache and now i want to use it on nginx, but it does
not work. hears my codes and config.(i use windows)

please help me. sorry for my long topic

nginx.conf:


#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request"
'
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    server {
        listen       81;
        server_name  localhost;
         autoindex on;
        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
       


               
         }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on
127.0.0.1:9000
        #
        location ~ \.php$ {         
                  
            
            root           html;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            include        fastcgi_params;
            fastcgi_param  SCRIPT_FILENAME 
E:/nginx/html/$fastcgi_script_name;
           
        }

          

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }


    # another virtual host using mix of IP-, name-, and port-based
configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}




    # HTTPS server
    #
    #server {
    #    listen       443 ssl;
    #    server_name  localhost;

    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;

    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;

    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}

}



download.php code:

<?php

        require_once('config.php');
        
        require_once('http.class.php');
        $av_http = new av_httpdownload;

        function av_remote_auth_check( $data ){
                global $av_config;
                $request = '';
                $request .= 'action=av_user_auth';
                $request .= '&user_name='.$data[0];
                $request .= '&user_password='.$data[1];
                $request .= '&confirm_key='.$av_config['key'];
                $response = '';
                $ch = curl_init();
                curl_setopt($ch, CURLOPT_URL, $av_config['site_url'] );
                curl_setopt($ch, CURLOPT_POST, true);
                curl_setopt($ch, CURLOPT_POSTFIELDS, $request);
                curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
                curl_setopt($ch, CURLOPT_HEADER, false);
                curl_setopt($ch, CURLOPT_TIMEOUT, 60);
                $response = curl_exec($ch);
                curl_close($ch);
                if( $response == 'true' )
                        return true;
                else
                        return false;
        }
        
        if( empty( $_SERVER['PATH_INFO'] ) )
                return;
        
        
        
        $fileData = explode( '/' , ltrim( $_SERVER['PATH_INFO'] , '/' ) );
        
        $filePath = $av_config['files_path'] . $fileData[0];
        
        $isFree = ( isset( $fileData[1] ) && $fileData[1] == 'free' ) ? true :
false;
        
        if( file_exists( $filePath ) ) {
                if( ! $isFree  ){
                        $LoginSuccessful = false;
                        if ( isset($_SERVER['PHP_AUTH_USER']) && 
isset($_SERVER['PHP_AUTH_PW'])
){
                                $Username = $_SERVER['PHP_AUTH_USER'];
                                $Password = $_SERVER['PHP_AUTH_PW'];
                                if ( av_remote_auth_check( 
array($Username,$Password) ) ){
                                        $LoginSuccessful = true;
                                }
                        }
                        if ( ! $LoginSuccessful ){
                                header('WWW-Authenticate: Basic realm="Enter 
User name and Password for
VIP Download."');
                                header('HTTP/1.0 401 Unauthorized');
                                print "Login failed!\n";
                        }
                        else {
                                $av_http->set_byfile( $filePath ); 
                                $av_http->download( $fileData[0] );
                        }
                } else{
                        $av_http->set_byfile( $filePath ); 
                        $av_http->use_resume = false;
                        $av_http->speed = 
is_numeric($av_config['free_dl_speed']) ?
intval($av_config['free_dl_speed']) : 100; 
                        $av_http->download( $fileData[0] );
                }
        }
        
        die();






config.php code:

<?php

        $av_config = array();
        
        $av_config['key'] = 'something';
        
        $av_config['free_dl_speed'] = 30; // 
        
        $av_config['site_url'] = 'example.com'; your site that users have been
registerd.
         
        $av_config['files_folder'] = 'hgfGVFCDuytrfn'; folder that you keep your
files
        
        $av_config['files_path'] = dirname(__FILE__) . '/' .
$av_config['files_folder'] . '/'; // 



http.class.php codes:

<?php
class av_httpdownload{

        var $data = null;
        var $data_len = 0;
        var $data_mod = 0;
        var $data_type = 0;
        var $data_section = 0; //section download
        /**
         * @var ObjectHandler
         **/
        var $handler = array('auth' => null);
        var $use_resume = true;
        var $use_autoexit = false;
        var $use_auth = false;
        var $filename = null;
        var $mime = null;
        var $bufsize = 2048;
        var $seek_start = 0;
        var $seek_end = -1;
        
        /**
         * Total bandwidth has been used for this download
         * @var int
         */
        var $bandwidth = 0;
        /**
         * Speed limit
         * @var float
         */
        var $speed = 0;
        
        /*-------------------
        | Download Function |
        -------------------*/
        /**
         * Check authentication and get seek position
         * @return bool
         **/
        function initialize() {
                global $HTTP_SERVER_VARS;
                
                if ($this->use_auth) //use authentication
                {
                        if (!$this->_auth()) //no authentication
                        {
                                header('WWW-Authenticate: Basic realm="Please 
enter your username and
password"');
                header('HTTP/1.0 401 Unauthorized');
                header('status: 401 Unauthorized');
                if ($this->use_autoexit) exit();
                                return false;
                        }
                }
                if ($this->mime == null) $this->mime = 
"application/octet-stream";
//default mime
                
                if (isset($_SERVER['HTTP_RANGE']) ||
isset($HTTP_SERVER_VARS['HTTP_RANGE']))
                {
                        
                        if (isset($HTTP_SERVER_VARS['HTTP_RANGE'])) $seek_range 
=
substr($HTTP_SERVER_VARS['HTTP_RANGE'] , strlen('bytes='));
                        else $seek_range = substr($_SERVER['HTTP_RANGE'] , 
strlen('bytes='));
                        
                        $range = explode('-',$seek_range);
                        
                        if ($range[0] > 0)
                        {
                                $this->seek_start = intval($range[0]);
                        }
                        
                        if ($range[1] > 0) $this->seek_end = intval($range[1]);
                        else $this->seek_end = -1;
                        
                        if (!$this->use_resume)
                        {
                                $this->seek_start = 0;
                                
                                //header("HTTP/1.0 404 Bad Request");
                                //header("Status: 400 Bad Request");
                                
                                //exit;
                                
                                //return false;
                        }
                        else
                        {
                                $this->data_section = 1;
                        }
                        
                }
                else
                {
                        $this->seek_start = 0;
                        $this->seek_end = -1;
                }
                
                return true;
        }
        /**
         * Send download information header
         **/
        function header($size,$seek_start=null,$seek_end=null) {
                header('Content-type: ' . $this->mime);
                header('Content-Disposition: attachment; filename="' . 
$this->filename.
'"');
                header('Last-Modified: ' . date('D, d M Y H:i:s \G\M\T' ,
$this->data_mod));
                
                if ($this->data_section && $this->use_resume){
                        header("HTTP/1.0 206 Partial Content");
                        header("Status: 206 Partial Content");
                        header('Accept-Ranges: bytes');
                        header("Content-Range: bytes 
$seek_start-$seek_end/$size");
                        header("Content-Length: " . ($seek_end - $seek_start + 
1));
                } else {
                        header("Content-Length: $size");
                }
        }
        
        function download_ex($size){
                if (!$this->initialize()) return false;
                ignore_user_abort(true);
                //Use seek end here
                if ($this->seek_start > ($size - 1)) $this->seek_start = 0;
                if ($this->seek_end <= 0) $this->seek_end = $size - 1;
                $this->header($size,$seek,$this->seek_end);
                $this->data_mod = time();
                return true;
        }
        
        /**
         * Start download
         * @return bool
         **/
        function download( $file_name = null ) {
                if (!$this->initialize()) return false;
                
                $seek = $this->seek_start;
                $speed = $this->speed;
                $bufsize = $this->bufsize;
                $packet = 1;
                
                //do some clean up
                @ob_end_clean();
                $old_status = ignore_user_abort(true);
                @set_time_limit(0);
                $this->bandwidth = 0;
                
                $size = $this->data_len;
                
                if ($this->data_type == 0){
                        
                        $size = filesize($this->data);
                        if ($seek > ($size - 1)) $seek = 0;
                        
                        if ( $file_name == null )
                                $this->filename = basename( $this->data );
                        else
                                $this->filename = $file_name;
                        
                        $res = fopen($this->data,'rb');
                        if ($seek) fseek($res , $seek);
                        if ($this->seek_end < $seek) $this->seek_end = $size - 
1;
                        
                        $this->header($size,$seek,$this->seek_end); //always 
use the last seek
                        $size = $this->seek_end - $seek + 1;
                        
                        while (!(connection_aborted() || connection_status() == 
1) && $size > 0)
                        {
                                if ($size < $bufsize)
                                {
                                        echo fread($res , $size);
                                        $this->bandwidth += $size;
                                }
                                else
                                {
                                        echo fread($res , $bufsize);
                                        $this->bandwidth += $bufsize;
                                }
                                
                                $size -= $bufsize;
                                flush();
                                
                                if ($speed > 0 && ($this->bandwidth > 
$speed*$packet*1024))
                                {
                                        sleep(1);
                                        $packet++;
                                }
                        }
                        fclose($res);
                        
                }
                
                elseif ($this->data_type == 1) //download from a string
                {
                        if ($seek > ($size - 1)) $seek = 0;
                        if ($this->seek_end < $seek) $this->seek_end = 
$this->data_len - 1;
                        $this->data = substr($this->data , $seek , 
$this->seek_end - $seek + 1);
                        //if ($this->filename == null) $this->filename = time();
                        $size = strlen($this->data);
                        $this->header($this->data_len,$seek,$this->seek_end);
                        while (!connection_aborted() && $size > 0) {
                                if ($size < $bufsize)
                                {
                                        $this->bandwidth += $size;
                                }
                                else
                                {
                                        $this->bandwidth += $bufsize;
                                }
                                
                                echo substr($this->data , 0 , $bufsize);
                                $this->data = substr($this->data , $bufsize);
                                
                                $size -= $bufsize;
                                flush();
                                
                                if ($speed > 0 && ($this->bandwidth > 
$speed*$packet*1024))
                                {
                                        sleep(1);
                                        $packet++;
                                }
                        }
                } else if ($this->data_type == 2) {
                        //just send a redirect header
                        header('location: ' . $this->data);
                }
                
                if ($this->use_autoexit) exit();
                
                //restore old status
                ignore_user_abort($old_status);
                @set_time_limit(ini_get("max_execution_time"));
                
                return true;
        }
        
        function set_byfile($dir) {
                if (is_readable($dir) && is_file($dir)) {
                        $this->data_len = 0;
                        $this->data = $dir;
                        $this->data_type = 0;
                        $this->data_mod = filemtime($dir);
                        return true;
                } else return false;
        }
        
        function set_bydata($data) {
                if ($data == '') return false;
                $this->data = $data;
                $this->data_len = strlen($data);
                $this->data_type = 1;
                $this->data_mod = time();
                return true;
        }
        
        function set_byurl($data) {
                $this->data = $data;
                $this->data_len = 0;
                $this->data_type = 2;
                return true;
        }
        
        function set_lastmodtime($time) {
                $time = intval($time);
                if ($time <= 0) $time = time();
                $this->data_mod = $time;
        }
        
        /**
         * Check authentication
         * @return bool
         **/
        function _auth() {
                if (!isset($_SERVER['PHP_AUTH_USER'])) return false;
                if (isset($this->handler['auth']) &&
function_exists($this->handler['auth']))
                {
                        return $this->handler['auth']('auth' ,
$_SERVER['PHP_AUTH_USER'],$_SERVER['PHP_AUTH_PW']);
                }
                else return true; //you must use a handler
        }
        
}

?>

Posted at Nginx Forum: 
http://forum.nginx.org/read.php?2,250179,250179#msg-250179

_______________________________________________
nginx mailing list
[email protected]
http://mailman.nginx.org/mailman/listinfo/nginx

Reply via email to