2010-08-31 14 views
6

¿Cómo puedo crear en PHP un archivo con un tamaño determinado (sin importar el contenido)?php create file with given size

Tengo que crear un archivo de más de 1GB. Arround 4-10GB máxima

Respuesta

7

Puede hacer uso de fopen y fseek

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. 

En ejecución:

$ php a.php 

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

'fseek()' no altera el tamaño del archivo. – jmz

+1

Ahora que ha editado el código para hacer un 'fwrite()', funciona, pero su respuesta original solo menciona 'fseek()'. En el futuro, debe proporcionar el código completo, como la versión editada, o explicar con más detalle. La persona que hace la pregunta no sabe cómo hacerlo, es por eso que pregunta. – jmz

+0

esto falla cuando intento crear un archivo de más de 1 GB en un sistema de servidor de win 2003 (tengo todos los derechos, y es NTFS) – Mike

1

Si el contenido del archivo es irrelevante a continuación, sólo pad - pero sí hacen Asegúrese de no generar una variable demasiado grande para guardarla en la memoria:

<?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); 

Si el archivo tiene que ser legible por otra cosa, entonces la forma en que lo haga depende de la otra cosa que necesite leerlo.

C.

0

Mira mi código en la parte inferior

^^ La mejor característica es aquí con 0s para crear un archivo de 4 GB ^^

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; 
} 

prueba que ^^ Max en PHP 32 bits 4 294 967 296:

CreatFileDummy ('mydummyfile.iso', 4294967296);

¿Quieres escribir, leer y Creat archivo ficticio mi código está aquí ^^:

https://github.com/Darksynx/php

Algorithm to Generate a LARGE Dummy File