PDA

View Full Version : آموزش: split file in php



tmwebseo
یک شنبه 07 مهر 1392, 12:17 عصر
با استفاده از کد زیر میتوانیم هر فایلی را تا تعداد999 تکه splitکنیم. در ضمن این کد قابلیت rejoinفایل های split شده را دارد.

$filename = "http://www.iyinet.com/my-big-file.zip";

$targetfolder = '/tmp';

$piecesize = 10; // splitted file size in MB

$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($splitnum, 3, "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($splitnum, 3, "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";
}

MMSHFE
یک شنبه 07 مهر 1392, 14:20 عصر
لطفاً کدتون رو در تاپیک Snippetهای PHP در بخش اعلانهای تالار PHP قرار بدین. با تشکر

tmwebseo
یک شنبه 07 مهر 1392, 15:40 عصر
قرار دادم با توجه به تازه کار بودن من امیدوارم درست قرار داده باشم