php 如何在 x86 系统上制作具有所需大小的空文件

how make empty file with desired size on x86 systems by php

我想通过 php 在 windows 服务器 2003 x86 上制作一个所需大小的空文件。大于 2GB 的文件例如 2.67Gb - 2870348740 字节。

我使用此代码但创建了一个大小为 1.89GB - 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);

你可以简单地这样做

file_put_contents('mybigfatfile.txt', str_repeat("[=10=]",2*1024*1024*1024));

更新

您也可以在 x86 系统上使用

构建字符串
$kb = str_repeat("[=11=]",1024);
$mb = str_repeat($kb,1024);
$gb = str_repeat($mb,1024);
file_put_contents('mybigfatfile.txt', str_repeat($gb,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("[=10=]",$offset),FILE_APPEND);
    }
}