Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 生成大型虚拟文件的算法_Php_Algorithm_File - Fatal编程技术网

Php 生成大型虚拟文件的算法

Php 生成大型虚拟文件的算法,php,algorithm,file,Php,Algorithm,File,是否有人编写了一个快速算法,用PHP生成一个大的虚拟文件,比如500MB-2GB?如果你根本不关心文件内容,你可以在任何位置写一些东西: $f = fopen('largefile', 'wb'); fseek($f, 2 * 1000 * 1000 * 1000, SEEK_SET); fwrite($f, 'after 2 GB'); fclose($f); 如果操作系统和文件系统支持,文件将非常大,但实际占用的磁盘空间不会超过两个字节 /* far too long to file c

是否有人编写了一个快速算法,用PHP生成一个大的虚拟文件,比如500MB-2GB?

如果你根本不关心文件内容,你可以在任何位置写一些东西:

$f = fopen('largefile', 'wb');
fseek($f, 2 * 1000 * 1000 * 1000, SEEK_SET);
fwrite($f, 'after 2 GB');
fclose($f);
如果操作系统和文件系统支持,文件将非常大,但实际占用的磁盘空间不会超过两个字节

 /* far too long to file creation , do not use especially not
$f = fopen('largefile', 'wb');
        fseek($f, 2 * 1000 * 1000 * 1000, SEEK_SET);
        fwrite($f, 'after 2 GB');
        fclose($f);*/
^^最好的功能是使用0创建4GB文件^^

FUNCTION CreatFileDummy($file_name,$size) {   
// 32bits 4 294 967 296 bytes MAX Size
    $f = fopen($file_name, 'wb');
    if($size >= 1000000000)  {
        $z = ($size / 1000000000);       
        if (is_float($z))  {
            $z = round($z,0);
            fseek($f, ( $size - ($z * 1000000000) -1 ), SEEK_END);
            fwrite($f, "\0");
        }       
        while(--$z > -1) {
            fseek($f, 999999999, SEEK_END);
            fwrite($f, "\0");
        }
    }
    else {
        fseek($f, $size - 1, SEEK_END);
        fwrite($f, "\0");
    }
    fclose($f);

Return true;
}
在Php 32bit 4 294 967 296中测试它^Max:

createFileDummy('mydummyfile.iso',4294967296)

您想要写入、读取和创建虚拟文件,我的代码在这里^ ^:


dd if=/dev/zero of=dummy bs=1024 count=500000
只需添加一个系统命令调用,瞧,您就有了一个生成一个大型虚拟文件的php脚本;-)@KerrekSB这不是“快速”算法:P better
dd if=/dev/zero of=dummy bs=1 count=1 seek=500000
@Herbert:这种方法很容易适用于任何支持
fopen
/
fread
/
fwrite
:-)是的,我知道如何在linux中实现它,但限制是我不能使用ddDope函数,但从技术上讲,那不是2GB。@Mob,嗯?这将写入2GB+10字节。如果您想准确地写入2GB,可以调用
ftruncate
而不是
fwrite
,或者写入2G-1字节并调用
fwrite('\0')
。在UNIX/Linux上,这将创建一个10字节的文件,其中有一个2GB的引导孔。这可能是您想要的,也可能不是您想要的。@Rich Homolka Define hole。这是一个有20亿空字节+10个额外字节的文件,不是吗?我绝对不同意你的说法,它只取决于操作系统。正如我在回答中所写的,文件系统还必须支持稀疏文件。例如,对于FAT32驱动器上的Linux 3.3,此代码将创建一个占用2GB磁盘空间的文件。