2015-12-29 7 views
0

Я хочу сделать пустой файл с нужным размером на сервере Windows 2003 x86 по php. Файл размером более 2 ГБ. 2.67Gb - 2870348740 байт.Как сделать пустой файл с желаемым размером в системах x86 по php

Я использую этот код, но делает файл размером 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); 
+1

Фактически, файл с размером больше '0' не пуст. – localheinz

ответ

2

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

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

Update

вы можете построить строку также на системы 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)); 
+0

Вам не хватает закрывающей круглой скобки, @gafreax! – localheinz

+0

@gafreax в str_repeat второй параметр должен быть ** больше 0 ** и _2 * 1024 * 1024 * 1024_ в ** системах x86 ** находится вне диапазона положительных чисел и дает нам ** отрицательное число **. поэтому str_repeat покажет нам ошибку! – saeid

+0

спасибо @localheinz, я добавил пропущенную скобку – gafreax

0

Я продлил @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); 
    } 
}