2010-08-31 54 views

回答

7

您可以使用fopenfseek

define('SIZE',100); // size of the file to be created. 
$fp = fopen('somefile.txt', 'w'); // open in write mode. 
fseek($fp, SIZE-1,SEEK_CUR); // seek to SIZE-1 
fwrite($fp,'a'); // write a dummy char at SIZE position 
fclose($fp); // close the file. 

在执行时:

$ php a.php 

$ wc somefile.txt 
    0 1 100 somefile.txt 
$ 
+0

'FSEEK()'不会改变文件大小。 – jmz 2010-08-31 11:16:50

+1

现在你已经编辑了代码来执行'fwrite()',它可以工作,但你的原始答案只提到'fseek()'。将来,您应该提供完整的代码,如编辑后的版本,或者更详细地解释。问这个问题的人不知道如何去做,这就是他问的原因。 – jmz 2010-08-31 11:35:56

+0

当我尝试在win 2003服务器系统上创建一个大于1GB的文件(我拥有所有权利,并且它是NTFS)时,此操作失败 – Mike 2010-08-31 13:13:13

1

如果该文件的内容是不相关的然后就垫了 - 但不要做确保你不会产生太大的变量来保存内存:

<?php 
$fh = fopen("somefile", 'w'); 
$size = 1024 * 1024 * 10; // 10mb 
$chunk = 1024; 
while ($size > 0) { 
    fputs($fh, str_pad('', min($chunk,$size))); 
    $size -= $chunk; 
} 
fclose($fh); 

如果文件必须被别的东西读取 - 那你怎么做取决于需要读取它的其他东西。

C.

0

看看我在底部

代码^^的最大特点是在这里与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; 
} 

测试^^ Max在PHP的32位4 294 967 296:

CreatFileDummy('mydummyfile.iso',4294967296);

你想要写,读和科瑞文件虚拟我的代码在这里^^:

https://github.com/Darksynx/php

Algorithm to Generate a LARGE Dummy File