php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 08-02-2009, 15:21
FastandFurious
 Newbie
Links : Onlinestatus : FastandFurious ist offline
Registriert seit: Feb 2009
Beiträge: 1
FastandFurious ist zur Zeit noch ein unbeschriebenes Blatt
Standard [Funktion] Remote Download splitted into files

Hello Everyone,

I do use a remote download php script for fetching files which should be backuped.

code 1: remote download
code 2: split function
code 3: cURL -range

Is it possible to add a file split function? so that I am
able to download the remote file as a splitted one that can be
merged to the original file in the end?

I found that cURL can split a file and download simultaneously from multiple locations... right now I do not know how to combine
both functions!!

code1:
PHP-Code:
<?php 
  
function human_file_size($size
  { 
    
$filesizename = array("B""KB""MB""GB""TB""PB""EB""ZB""YB"); 
    return 
round($size/pow(1024, ($i floor(log($size1024)))), 2) . $filesizename[$i]; 
  } 
  
  function 
duration($int_seconds=0$if_reached=null
  { 
    
$key_suffix 's'$periods = array('year'=>31556926,'month'=>2629743,'day'=>86400,'hour'=>3600,'minute'=>60,'second'=>1); 
    
$flag_hide_zero true
    foreach( 
$periods as $key => $length 
    { 
      
$temp floor$int_seconds $length ); 
      if( !
$flag_hide_zero || $temp 
      { 
        
$build[] = $temp.' '.$key.($temp!=1?'s':null); 
        
$flag_hide_zero false
      } 
      
$int_seconds fmod($int_seconds$length); 
    } 
    return ( !empty(
$build)?implode(', '$build):$if_reached ); 
  } 
  
  if(!
is_writeable('./')) 
  { 
    exit(
'Cannot write to local dir (needs chmod).'); 
  } 
  
$remote_file $_POST['url']; 
  if(
$_POST['output']) 
  { 
    
$local_file $_POST['output']; 
  } 
  else 
  { 
    
$decoded_url rawurldecode($remote_file); 
    
$local_file substr($decoded_urlstrrpos($decoded_url'/') + 1); 
  } 
  if(
file_exists($local_file)) 
  { 
    
unlink($local_file); 
    echo(
"<b>$local_file</b> has Been Replaced<br>"); 
  } 
  if(
$remote_file
  { 
    
$startTime time(); 
    @
set_time_limit(0); 
    
ignore_user_abort(); 
    
$file_in fopen($remote_file'r'); 
    
$file_out fopen('./'.$local_file'a'); 
    if(
$file_in
    { 
      while(!
feof($file_in)) 
      { 
        
$buffer fread($file_in8192); 
        
fwrite($file_out$buffer8192); 
      } 
      
fclose($file_in); 
      
fclose($file_out); 
      
$size filesize($local_file); 
      
$humansize human_file_size($size); 
      
$seconds time() - $startTime
      if(
$size <= 10240
      { 
        
unlink($local_file); 
        exit(
"<b>$local_file</b> has been deleted"); 
      } 
      
$count duration($seconds); 
      
$url rawurlencode($local_file); 
      exit(
"<b>Filename: </b><a href=$url>$local_file</a><br><b>Filesize: </b>$humansize<br><b>Time: </b>$count"); 
    } 
  } 
  exit; 
?>
code2:
PHP-Code:
<?php 
  
// --------------------------- 
  // Edit variables (3 variables) 
  // ---------------------------  
  // File to split, is its not in the same folder with filesplit.php, 
  //   full path is required. $filename = "http://www.remoteserver.com/path/tofile";  
  // Target folder. Splitted files will be stored here. Original file never gets touched. 
  // Do not append slash! Make sure webserver has write permission on this folder. $targetfolder = 'www.myserver.com/path/tofile';  
  // File size in Mb per piece/split. 
  // For a 200Mb file if piecesize=10 it will create twenty 10Mb files $piecesize = 150; 
  // splitted file size in MB    
  // --------------------------- 
  // Do NOT edit this section 
  // ---------------------------  
  
$buffer 1024
  
$piece 1048576*$piecesize$current 0
  
$splitnum 1;  
  if(!
file_exists($targetfolder)) 
  {     
    if(
mkdir($targetfolder)) 
    {         
      echo 
"Created target folder $targetfolder".br();     
    } 
  }  
  if(!
$handle fopen($filename"rb")) 
  {     
    die(
"Unable to open $filename for read! Make sure you edited filesplit.php correctly!".br()); 
  }  
  
$base_filename basename($filename);  
  
$piece_name $targetfolder.'/'.$base_filename.'.'.str_pad($splitnum3"0"STR_PAD_LEFT); 
  if(!
$fw fopen($piece_name,"w")) 
  {     
    die(
"Unable to open $piece_name for write. Make sure target folder is writeable.".br()); 
  } 
  echo 
"Splitting $base_filename into $piecesize Mb files ".br()."(last piece may be smaller in size)".br(); 
  echo 
"Writing $piece_name...".br(); 
  while (!
feof($handle) and $splitnum 999
  {     
    if(
$current $piece
    {         
      if(
$content fread($handle$buffer)) 
      {             
        if(
fwrite($fw$content)) 
        {                 
          
$current += $buffer;             
        } 
        else 
        {                 
          die(
"filesplit.php is unable to write to target folder. Target folder may not have write permission! Try chmod +w target_folder".br());             
        }         
      }     
    } 
    else 
    {         
      
fclose($fw);         
      
$current 0;         
      
$splitnum++;         
      
$piece_name $targetfolder.'/'.$base_filename.'.'.str_pad($splitnum3"0"STR_PAD_LEFT);         
      echo 
"Writing $piece_name...".br();         
      
$fw fopen($piece_name,"w");     
    } 
  } 
  
fclose($fw); 
  
fclose($handle); 
  echo 
"Done! ".br(); 
  exit;  
  function 
br() 
  {     
    return (!empty(
$_SERVER['SERVER_SOFTWARE']))?'<br>':"\n"
  } 
?>
code3:
Step One

Identify the download mirrors from the Ubuntu website. Choose at least 4 different mirrors. I have chosen the following locations :

url1=http://ftp.daum.net/ubuntu-releases/intrepid/ubuntu-8.10-desktop-i386.iso
url2=http://ftp.yz.yamagata-u.ac.jp/pub/linux/ubuntu/releases/intrepid/ubuntu-8.10-desktop-i386.iso
url3=http://ie.releases.ubuntu.com/intrepid/ubuntu-8.10-desktop-i386.iso
url4=http://releases.ubuntu.com/intrepid/ubuntu-8.10-desktop-i386.iso

Where url1, url2, url3 and url4 are variables which are associated with the corresponding full paths of the Ubuntu ISO file.
Step Two

We are going to split the file ubuntu-8.10-desktop-i386.iso into 4 parts, with 3 parts of 200 MB and the rest making up the 4th part. So the cURL command(s) will be as follows :

curl --range 0-199999999 -o ubuntu-iso.part1 $url1 &
curl --range 200000000-399999999 -o ubuntu-iso.part2 $url2 &
curl --range 400000000-599999999 -o ubuntu-iso.part3 $url3 &
curl --range 600000000- -o ubuntu-iso.part4 $url4 &

--range option retrieves a byte range in the first three cases 199.99 MB of the file. -o specifies the output file name and $url[1..4] are the above mentioned URLs.

For easy execution, I have created a bash script named “download.sh“, comprising of the above lines and to start the download, I need just run the script.

#FILE NAME : download.sh (Download accelerator)
#!/bin/sh

url1=http://ftp.daum.net/ubuntu-releases/intrepid/ubuntu-8.10-desktop-i386.iso
url2=http://ftp.yz.yamagata-u.ac.jp/pub/linux/ubuntu/releases/intrepid/ubuntu-8.10-desktop-i386.iso
url3=http://ie.releases.ubuntu.com/intrepid/ubuntu-8.10-desktop-i386.iso
url4=http://releases.ubuntu.com/intrepid/ubuntu-8.10-desktop-i386.iso

curl --range 0-199999999 -o ubuntu-iso.part1 $url1 &
curl --range 200000000-399999999 -o ubuntu-iso.part2 $url2 &
curl --range 400000000-599999999 -o ubuntu-iso.part3 $url3 &
curl --range 600000000- -o ubuntu-iso.part4 $url4 &

EDIT:
line breaks sponsored by kropff

Geändert von Kropff (08-02-2009 um 18:36 Uhr)
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

Top-Side Guestbook

Gästebuch auf Textbasis (kein MySQL nötig) mit Smilies, Ip Sperre (Zeit selbst einstellbar), Spamschutz, Captcha (Code-Eingabe), BB-Code, Hitcounter, Löschfunktion, Editierfunktion, Kommentarfunktion, Kürzung langer Wörter, Seiten- bzw. Blätterfunktion, V

22.10.2018 webmaster10 | Kategorie: PHP/ Gaestebuch
ebiz-trader 6.0 - Das professionelle PHP Marktplatz Script ansehen ebiz-trader 6.0 - Das professionelle PHP Marktplatz Script

Mit unserer Lösungen können Sie nahezu jeden B2B / B2C Marktplatz betreiben den Sie sich vorstellen können. Ganz egal ob Sie einen Automarktplatz, Immobilenportal oder einfach einen Anzeigenmarkt betreiben möchten. Mit ebiz-trader können Sie Ihre Anforder

11.10.2018 Berni | Kategorie: PHP/ Anzeigenmarkt
PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 07:40 Uhr.