有谁知道吗?我需要测试一些上传/下载脚本,并需要生成一些非常大的文件.我打算将测试实用程序与我的调试脚本集成.
首先,您可以尝试这样的事情:
function generate_file($file_name, $size_in_bytes)
{
$data = str_repeat(rand(0,9), $size_in_bytes);
file_put_contents($file_name, $data); //writes $data in a file
}
Run Code Online (Sandbox Code Playgroud)
这会创建一个填充了随机数字(0-9)的文件.
generate_file()来自“Marco Demaio”的内存不友好,所以我创建了file_rand()。
function file_rand($filename, $filesize) {
if ($h = fopen($filename, 'w')) {
if ($filesize > 1024) {
for ($i = 0; $i < floor($filesize / 1024); $i++) {
fwrite($h, bin2hex(openssl_random_pseudo_bytes(511)) . PHP_EOL);
}
$filesize = $filesize - (1024 * $i);
}
$mod = $filesize % 2;
fwrite($h, bin2hex(openssl_random_pseudo_bytes(($filesize - $mod) / 2)));
if ($mod) {
fwrite($h, substr(uniqid(), 0, 1));
}
fclose($h);
umask(0000);
chmod($filename, 0644);
}
}
Run Code Online (Sandbox Code Playgroud)
如您所见,每 1024 个字节添加换行符,以避免限制为 1024-9999 个字节的函数出现问题。例如 fgets() 与 <= PHP 4.3。并且它可以更轻松地使用文本编辑器打开文件,该编辑器具有与超长行相同的问题。
你真的需要文件大小的变化,你需要PHP脚本吗?我只是通过命令行创建不同大小的测试文件,并在我的单元测试中使用它们.除非文件大小本身可能会导致错误,否则你似乎在这里过度工程......
在Windows中创建文件;
fsutil file createnew d:\filepath\filename.txt 1048576
Run Code Online (Sandbox Code Playgroud)
在Linux中;
dd if=/dev/zero of=filepath/filename.txt bs=10000000 count=1
Run Code Online (Sandbox Code Playgroud)
如果是文件源(在这种情况下没有),的是输出文件,BS是最后的文件大小,数量定义要多少块复制.