makefile — как сделать пустой файл нужного размера в системах x86 с помощью Stack Overflow

Я хочу сделать пустой файл с нужным размером на Windows Server 2003 x86 по php. Файл размером более 2 ГБ, например, 2,67 ГБ — 2870348740 байт.

Я использую этот код, но создаю файл размером 1,89 ГБ — 2040109466 байт.

Что я должен сделать сейчас?

$size = 2870348740;
$fp = fopen('fileLocation/test.x', 'wb'); // open in write mode.
$eachpart = floor(1.9 * 1024*1024*1024); // 1.9 Gbyte to byte
$parts = ceil($size/$eachpart);
for ($i=0; $i<$parts; $i++){
if ($i == $parts-1) $offset = $size - (($parts-1)*$eachpart) -1;
else $offset = $eachpart;

fseek($fp, $offset ,SEEK_CUR); // seek from current position
}
fwrite($fp,0); // write a dummy char at SIZE position
fclose($fp);

0

Решение

Вы можете просто сделать это

file_put_contents('mybigfatfile.txt', str_repeat("\0",2*1024*1024*1024));

Обновить

Вы можете построить строку также в системе x86 с

$kb = str_repeat("\0",1024);
$mb = str_repeat($kb,1024);
$gb = str_repeat($mb,1024);
file_put_contents('mybigfatfile.txt', str_repeat($gb,2));
2

Другие решения

Я расширил решение @gafreax и сделал этот код, и проблема решена.

благодаря @gafreax.

function makeFile($size,$dest){
$eachpart = 100 * 1024*1024; // 100Mb
$parts = ceil($size/$eachpart);
for ($i=0; $i<$parts; $i++){
if ($i == $parts-1) $offset = $size - (($parts-1)*$eachpart);
else $offset = $eachpart;

file_put_contents($dest, str_repeat("\0",$offset),FILE_APPEND);
}
}
0

По вопросам рекламы [email protected]