Come posso creare in PHP un file con una determinata dimensione (indipendentemente dal contenuto)?php crea il file con le dimensioni date
Devo creare un file più grande di 1 GB. Intorno 4-10GB massima
Come posso creare in PHP un file con una determinata dimensione (indipendentemente dal contenuto)?php crea il file con le dimensioni date
Devo creare un file più grande di 1 GB. Intorno 4-10GB massima
Si può fare uso di fopen
e 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.
In fase di esecuzione:
$ php a.php
$ wc somefile.txt
0 1 100 somefile.txt
$
Se il contenuto del file è irrilevante poi basta pad - ma facciamo sicuro di non generare una variabile troppo grande da tenere in 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);
Se il file deve essere leggibile da qualcos'altro - allora come lo fai dipende dall'altra cosa che ha bisogno di leggerlo.
C.
Guardate il mio codice in basso
^^ La caratteristica migliore è qui con degli 0 per creare un file da 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;
}
prova si ^^ Max in Php 32bit 4 294 967 296:
CreatFileDummy ('mydummyfile.iso', 4294967296);
Si desidera scrivere, leggere e Creat file fittizio il mio codice è qui ^^:
'fseek()' non altera le dimensioni del file. – jmz
Ora che hai modificato il codice per fare un 'fwrite()', funziona, ma la tua risposta originale menzionava solo 'fseek()'. In futuro, dovresti fornire il codice completo, come la versione modificata, o spiegarlo in maggior dettaglio. La persona che fa la domanda non sa come farlo, è per questo che sta chiedendo. – jmz
questo fallisce quando provo a creare un file più grande di 1 GB su un sistema server win 2003 (ho tutti i diritti, ed è NTFS) – Mike