- Something
- Tuesday, January 8th, 2008 at 10:15:34pm MST
- .htaccess:
- Options -Indexes
- RewriteEngine on
- RewriteRule videoloader/(...........).flv videoloader.php?id=$1
- RewriteRule videoloader/(...........)/.*.flv videoloader.php?id=$1
- videoloader.php:
- <?php
- include "dbinfo.php";
- ini_set ('display_errors', '0');
- function headers()
- {
- header('Content-Transfer-Encoding: Binary');
- header('Content-type: video/x-flv');
- // change the above to whatever is appropriate
- header('P3P: CP="NOI ADM DEV PSAi COM NAV OUR OTRo STP IND DEM"');
- header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
- header("Cache-Control: no-store, no-cache, must-revalidate");
- header("Last-Modified: Wed, 11 Apr 2020 02:32:57 GMT");
- header('Accept-Ranges:bytes');
- header("Pragma: no-cache");
- }
- $id = $_GET['id'];
- $useragent = $_SERVER['HTTP_USER_AGENT'];
- headers();
- $t = getTCode($id,$useragent);
- $contentlength = getContentLength($id,$t);
- header("$contentlength");
- $url = "http://www.youtube.com/get_video?video_id=" . $id . "&t=" . $t;
- set_time_limit(0);
- readfile_chunked($url);
- ?>
- dbinfo.php:
- <?
- require_once("curl_http_client.php");
- $useragent = $_SERVER['HTTP_USER_AGENT'];
- ////////////////////////
- // streaming settings //
- ////////////////////////
- $packetsize = 4096;
- $prebufferpackets = 2;
- $bufferpackets =1;
- function getTCode($videoid,$useragent= "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.11) Gecko/20070312 Firefox/1.5.0.11")
- {
- $curl = &new Curl_HTTP_Client();
- $curl->set_user_agent($useragent);
- $referrer = "http://www.youtube.com/watch?v=" . $videoid;
- set_time_limit (600);
- $data = $curl->fetch_url($referrer);
- //echo $data;
- // search for our &t=
- $array1 = explode ("&t=", $data);
- $array2 = explode ('&', $array1[1]);
- $t = $array2[0];
- //echo "\nt =" . $t . "/n";
- return $t;
- }
- function getContentLength($videoid,$t)
- {
- $url = "http://www.youtube.com/get_video?video_id=" . $videoid . "&t=" . $t;
- $array = get_headers($url);
- $count = count($array);
- for ($i=0; $i < $count; $i++)
- {
- if (strpos($array[$i], "Length"))
- {
- if ($array[$i] != "Content-Length: 0")
- {
- return($array[$i]);
- }
- }
- }
- return "Content-Length: 0";
- }
- function readfile_chunked($filename) {
- global $packetsize;
- global $prebufferpackets;
- global $bufferpackets;
- $chunksize = $bufferpackets;; // it will stream for every packet. how many packets per echo
- $tobuffer = $prebufferpackets; // how much times chunksize we want to buffer for the initial request
- $first = 1;
- $buffer = '';
- $handle = fopen($filename, 'rb');
- if ($handle === false)
- {
- return false;
- }
- while (!feof($handle))
- {
- $buffer = '';
- set_time_limit(0);
- if ($first == 1) { $todo = $chunksize * $tobuffer; $first =0;} else { $todo = $chunksize; }
- for ($i=0; $i<$todo; $i++)
- {
- $buffer .= fread($handle, $packetsize);
- }
- echo $buffer;
- ob_flush();
- flush();
- }
- $status = fclose($handle);
- return $status;
- }
- ?>
- curl_http_client.php:
- <?php
- /**
- * @version $Id$
- * @package dinke.net
- * @copyright © 2007 Dinke.net
- * @author Dragan Dinic <dragan@dinke.net>
- */
- /**
- * Curl based HTTP Client
- * Simple but effective OOP wrapper around Curl php lib.
- * Contains common methods needed
- * for getting data from url, setting referrer, credentials,
- * sending post data, managing cookies, etc.
- *
- * Samle usage:
- * $curl = &new Curl_HTTP_Client();
- * $useragent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)";
- * $curl->set_user_agent($useragent);
- * $curl->store_cookies("/tmp/cookies.txt");
- * $post_data = array('login' => 'pera', 'password' => 'joe');
- * $html_data = $curl->send_post_data(http://www.foo.com/login.php, $post_data);
- */
- class Curl_HTTP_Client
- {
- /**
- * Curl handler
- * @access private
- * @var resource
- */
- var $ch ;
- /**
- * set debug to true in order to get usefull output
- * @access private
- * @var string
- */
- var $debug = false;
- /**
- * Contain last error message if error occured
- * @access private
- * @var string
- */
- var $error_msg;
- /**
- * Curl_HTTP_Client constructor
- * @param boolean debug
- * @access public
- */
- function Curl_HTTP_Client($debug = false)
- {
- $this->debug = $debug;
- // initialize curl handle
- $this->ch = curl_init();
- //set various options
- //set error in case http return code bigger than 300
- curl_setopt($this->ch, CURLOPT_FAILONERROR, true);
- // allow redirects
- curl_setopt($this->ch, CURLOPT_FOLLOWLOCATION, true);
- //hack to make code work on windows
- //if(strpos(PHP_OS,"WIN") !== false)
- {
- curl_setopt($this->ch, CURLOPT_SSL_VERIFYPEER, 0);
- }
- }
- /**
- * Set username/pass for basic http auth
- * @param string user
- * @param string pass
- * @access public
- */
- function set_credentials($username,$password)
- {
- curl_setopt($this->ch, CURLOPT_USERPWD, "$username:$password");
- }
- /**
- * Set referrer
- * @param string referrer url
- * @access public
- */
- function set_referrer($referrer_url)
- {
- curl_setopt($this->ch, CURLOPT_REFERER, $referrer_url);
- }
- /**
- * Set client's useragent
- * @param string user agent
- * @access public
- */
- function set_user_agent($useragent)
- {
- curl_setopt($this->ch, CURLOPT_USERAGENT, $useragent);
- }
- /**
- * Set to receive output headers in all output functions
- * @param boolean true to include all response headers with output, false otherwise
- * @access public
- */
- function include_response_headers($value)
- {
- curl_setopt($this->ch, CURLOPT_HEADER, $value);
- }
- /**
- * Set proxy to use for each curl request
- * @param string proxy
- * @access public
- */
- function set_proxy($proxy)
- {
- curl_setopt($this->ch, CURLOPT_PROXY, $proxy);
- }
- /**
- * Send post data to target URL
- * return data returned from url or false if error occured
- * @param string url
- * @param array assoc post data array ie. $foo['post_var_name'] = $value
- * @param string ip address to bind (default null)
- * @param int timeout in sec for complete curl operation (default 10)
- * @return string data
- * @access public
- */
- function send_post_data($url, $postdata, $ip=null, $timeout=600)
- {
- //set various curl options first
- // set url to post to
- curl_setopt($this->ch, CURLOPT_URL,$url);
- // return into a variable rather than displaying it
- curl_setopt($this->ch, CURLOPT_RETURNTRANSFER,true);
- //bind to specific ip address if it is sent trough arguments
- if($ip)
- {
- if($this->debug)
- {
- echo "Binding to ip $ip\n";
- }
- curl_setopt($this->ch,CURLOPT_INTERFACE,$ip);
- }
- //set curl function timeout to $timeout
- curl_setopt($this->ch, CURLOPT_TIMEOUT, $timeout);
- //set method to post
- curl_setopt($this->ch, CURLOPT_POST, true);
- //generate post string
- $post_array = array();
- if(!is_array($postdata))
- {
- return false;
- }
- foreach($postdata as $key=>$value)
- {
- $post_array[] = urlencode($key) . "=" . urlencode($value);
- }
- $post_string = implode("&",$post_array);
- if($this->debug)
- {
- echo "Post String: $post_string\n";
- }
- // set post string
- curl_setopt($this->ch, CURLOPT_POSTFIELDS, $post_string);
- //and finally send curl request
- $result = curl_exec($this->ch);
- if(curl_errno($this->ch))
- {
- if($this->debug)
- {
- echo "Error Occured in Curl\n";
- echo "Error number: " .curl_errno($this->ch) ."\n";
- echo "Error message: " .curl_error($this->ch)."\n";
- }
- return false;
- }
- else
- {
- return $result;
- }
- }
- /**
- * fetch data from target URL
- * return data returned from url or false if error occured
- * @param string url
- * @param string ip address to bind (default null)
- * @param int timeout in sec for complete curl operation (default 5)
- * @return string data
- * @access public
- */
- function fetch_url($url, $ip=null, $timeout=600)
- {
- // set url to post to
- curl_setopt($this->ch, CURLOPT_URL,$url);
- //set method to get
- curl_setopt($this->ch, CURLOPT_HTTPGET,true);
- // return into a variable rather than displaying it
- curl_setopt($this->ch, CURLOPT_RETURNTRANSFER,true);
- //bind to specific ip address if it is sent trough arguments
- if($ip)
- {
- if($this->debug)
- {
- echo "Binding to ip $ip\n";
- }
- curl_setopt($this->ch,CURLOPT_INTERFACE,$ip);
- }
- //set curl function timeout to $timeout
- curl_setopt($this->ch, CURLOPT_TIMEOUT, $timeout);
- //and finally send curl request
- $result = curl_exec($this->ch);
- if(curl_errno($this->ch))
- {
- if($this->debug)
- {
- echo "Error Occured in Curl\n";
- echo "Error number: " .curl_errno($this->ch) ."\n";
- echo "Error message: " .curl_error($this->ch)."\n";
- }
- return false;
- }
- else
- {
- return $result;
- }
- }
- /**
- * Fetch data from target URL
- * and store it directly to file
- * @param string url
- * @param resource value stream resource(ie. fopen)
- * @param string ip address to bind (default null)
- * @param int timeout in sec for complete curl operation (default 5)
- * @return boolean true on success false othervise
- * @access public
- */
- function fetch_into_file($url, $fp, $ip=null, $timeout=600)
- {
- // set url to post to
- curl_setopt($this->ch, CURLOPT_URL,$url);
- //set method to get
- curl_setopt($this->ch, CURLOPT_HTTPGET, true);
- // store data into file rather than displaying it
- curl_setopt($this->ch, CURLOPT_FILE, $fp);
- //bind to specific ip address if it is sent trough arguments
- if($ip)
- {
- if($this->debug)
- {
- echo "Binding to ip $ip\n";
- }
- curl_setopt($this->ch, CURLOPT_INTERFACE, $ip);
- }
- //set curl function timeout to $timeout
- curl_setopt($this->ch, CURLOPT_TIMEOUT, $timeout);
- //and finally send curl request
- $result = curl_exec($this->ch);
- if(curl_errno($this->ch))
- {
- if($this->debug)
- {
- echo "Error Occured in Curl\n";
- echo "Error number: " .curl_errno($this->ch) ."\n";
- echo "Error message: " .curl_error($this->ch)."\n";
- }
- return false;
- }
- else
- {
- return true;
- }
- }
- /**
- * Send multipart post data to the target URL
- * return data returned from url or false if error occured
- * (contribution by vule nikolic, vule@dinke.net)
- * @param string url
- * @param array assoc post data array ie. $foo['post_var_name'] = $value
- * @param array assoc $file_field_array, contains file_field name = value - path pairs
- * @param string ip address to bind (default null)
- * @param int timeout in sec for complete curl operation (default 30 sec)
- * @return string data
- * @access public
- */
- function send_multipart_post_data($url, $postdata, $file_field_array=array(), $ip=null, $timeout=600)
- {
- //set various curl options first
- // set url to post to
- curl_setopt($this->ch, CURLOPT_URL, $url);
- // return into a variable rather than displaying it
- curl_setopt($this->ch, CURLOPT_RETURNTRANSFER, true);
- //bind to specific ip address if it is sent trough arguments
- if($ip)
- {
- if($this->debug)
- {
- echo "Binding to ip $ip\n";
- }
- curl_setopt($this->ch,CURLOPT_INTERFACE,$ip);
- }
- //set curl function timeout to $timeout
- curl_setopt($this->ch, CURLOPT_TIMEOUT, $timeout);
- //set method to post
- curl_setopt($this->ch, CURLOPT_POST, true);
- // disable Expect header
- // hack to make it working
- $headers = array("Expect: ");
- curl_setopt($this->ch, CURLOPT_HTTPHEADER, $headers);
- // initialize result post array
- $result_post = array();
- //generate post string
- $post_array = array();
- $post_string_array = array();
- if(!is_array($postdata))
- {
- return false;
- }
- foreach($postdata as $key=>$value)
- {
- $post_array[$key] = $value;
- $post_string_array[] = urlencode($key)."=".urlencode($value);
- }
- $post_string = implode("&",$post_string_array);
- if($this->debug)
- {
- echo "Post String: $post_string\n";
- }
- // set post string
- //curl_setopt($this->ch, CURLOPT_POSTFIELDS, $post_string);
- // set multipart form data - file array field-value pairs
- if(!empty($file_field_array))
- {
- foreach($file_field_array as $var_name => $var_value)
- {
- if(strpos(PHP_OS, "WIN") !== false) $var_value = str_replace("/", "\\", $var_value); // win hack
- $file_field_array[$var_name] = "@".$var_value;
- }
- }
- // set post data
- $result_post = array_merge($post_array, $file_field_array);
- curl_setopt($this->ch, CURLOPT_POSTFIELDS, $result_post);
- //and finally send curl request
- $result = curl_exec($this->ch);
- if(curl_errno($this->ch))
- {
- if($this->debug)
- {
- echo "Error Occured in Curl\n";
- echo "Error number: " .curl_errno($this->ch) ."\n";
- echo "Error message: " .curl_error($this->ch)."\n";
- }
- return false;
- }
- else
- {
- return $result;
- }
- }
- /**
- * Set file location where cookie data will be stored and send on each new request
- * @param string absolute path to cookie file (must be in writable dir)
- * @access public
- */
- function store_cookies($cookie_file)
- {
- // use cookies on each request (cookies stored in $cookie_file)
- curl_setopt ($this->ch, CURLOPT_COOKIEJAR, $cookie_file);
- }
- /**
- * Get last URL info
- * usefull when original url was redirected to other location
- * @access public
- * @return string url
- */
- function get_effective_url()
- {
- return curl_getinfo($this->ch,CURLINFO_EFFECTIVE_URL);
- }
- /**
- * Get http response code
- * @access public
- * @return int
- */
- function get_http_response_code()
- {
- return curl_getinfo($this->ch,CURLINFO_HTTP_CODE);
- }
- /**
- * Return last error message and error number
- * @return string error msg
- * @access public
- */
- function get_error_msg()
- {
- $err = "Error number: " .curl_errno($this->ch) ."\n";
- $err .="Error message: " .curl_error($this->ch)."\n";
- return $err;
- }
- }
- ?>
advertising
Update the Post
Either update this post and resubmit it with changes, or make a new post.
You may also comment on this post.
Please note that information posted here will expire by default in one month. If you do not want it to expire, please set the expiry time above. If it is set to expire, web search engines will not be allowed to index it prior to it expiring. Items that are not marked to expire will be indexable by search engines. Be careful with your passwords. All illegal activities will be reported and any information will be handed over to the authorities, so be good.