Skip to content

Instantly share code, notes, and snippets.

@unique1984
Last active August 29, 2024 01:17
Show Gist options
  • Select an option

  • Save unique1984/d8a4c4ace2dece7b8a75e02357e5f2bd to your computer and use it in GitHub Desktop.

Select an option

Save unique1984/d8a4c4ace2dece7b8a75e02357e5f2bd to your computer and use it in GitHub Desktop.
create / merge file chunks using php
<?php
/*****************************************
* App : create / merge file chunks using php
* File : file_chunks.php
* Date : Wed Nov 28 16:40:42 +03 2018
* Version : 1.0.0
* Email : yasinkarabulak@gmail.com
*
* MIT License
* Copyright (c) 2018 Yasin KARABULAK
*******************************************/
//~ Options
$fileName = "Sword Art Online_ Alicization.ep8.mp4";
$chunkSize = 2048 * 1024; //~ bytes
$chunkCount = getChunkCount( $fileName, $chunkSize );
$saveChunksAs = "_chunks/";
!is_dir( $saveChunksAs )? mkdir( $saveChunksAs ): null;
$saveMergedAs = "merged_".$fileName;
function getChunkCount ( $file, $chunkSize )
{
$bytes = filesize( $file );
if( $chunkSize < $bytes )
{
$mod = $bytes % $chunkSize;
$chunkCount = ( $bytes - $mod ) / $chunkSize;
$chunkCount++;
return $chunkCount;
}
return (int)1;
}
echo getChunkCount( $fileName, $chunkSize ) . " piece(s)\n";
//~ server side slice
function createChunks ( $file, $chunkSize, $saveChunksAs )
{
$chunksCount = getChunkCount( $file, $chunkSize );
$seek = 0;
for ( $i = 1; $i <= $chunksCount; $i++)
{
$fh = fopen( $file, 'rb' );
fseek( $fh, $seek );
$chunk = fread( $fh, $chunkSize );
fclose( $fh );
$seek = $seek + $chunkSize;
$writeChunk = fopen( $saveChunksAs.$i, 'ab' );
$write = fwrite( $writeChunk, $chunk );
fclose( $writeChunk );
}
}
createChunks( $fileName, $chunkSize, $saveChunksAs );
//~ local side merge
function mergeChunks ( $saveChunksAs, $chunkCount, $chunkSize, $saveMergedAs )
{
for ($i = 1; $i <= $chunkCount; $i++)
{
$fh = fopen( $saveChunksAs.$i, 'rb' );
$buffer = fread( $fh, $chunkSize );
fclose( $fh );
$total = fopen( $saveMergedAs, 'ab' );
$write = fwrite( $total, $buffer );
fclose( $total );
}
}
mergeChunks ( $saveChunksAs, $chunkCount, $chunkSize, $saveMergedAs );
?>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment