Czy ktoś wie o jednym? Muszę przetestować niektóre skrypty do wczytywania/pobierania i potrzebuję naprawdę dużych plików wygenerowanych. Zamierzałem zintegrować narzędzie testowe z moim skryptem debugowania.Skrypt PHP do generowania pliku z losowymi danymi o danej nazwie i rozmiarze?
Odpowiedz
Na początek można spróbować czegoś takiego:
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
}
Tworzy plik wypełniony losowo cyfry (0-9).
, ale rozmiar nie będzie odnosił się do danego pliku, prawda? – Mathew
$ rozmiar zawiera podany rozmiar pliku. – webbiedave
Nie zdawałem sobie sprawy, że PHP zapisuje jednocyfrowe ints jako 1 bajt. Dzięki. :) – Mathew
Czy naprawdę potrzebujesz tak dużego zróżnicowania plików, że potrzebujesz skryptu PHP? Po prostu tworzyłem pliki testowe o różnych rozmiarach za pomocą wiersza poleceń i używam ich w testach jednostkowych. Chyba, że sam plik prawdopodobnie spowoduje błąd, wydaje się, że masz do czynienia z nadmierną inżynierią ...
Aby utworzyć plik w systemie Windows;
fsutil file createnew d:\filepath\filename.txt 1048576
w systemie Linux;
dd if=/dev/zero of=filepath/filename.txt bs=10000000 count=1
jeśli jest źródłem pliku (w tym przypadku nic), od jest plik wyjściowy, bs jest ostateczny rozmiar pliku, Ilość określa ile bloków chcesz skopiować.
'fsutil file createnew' tworzy PUSTY PLIK, pytanie dotyczy utworzenia pliku z losowymi danymi. –
Dlaczego nie ma skryptu, który strumieniowo losuje dane? Skrypt może przyjmować parametry dla rozmiaru pliku, typ itp
ten sposób można symulować wiele scenariuszy, na przykład ograniczenie szerokości pasma przedwczesny koniec pliku itd. Itp
Czy plik naprawdę trzeba być przypadkowe? Jeśli tak, po prostu przeczytaj z/dev/urandom w systemie Linux:
dd if=/dev/urandom of=yourfile bs=4096 count=1024
# dla pliku 4MB.
Jeśli to naprawdę nie musi być losowe, po prostu znajdź jakieś pliki, które leżą w pobliżu, które są odpowiedniej wielkości, lub (alternatywnie) użyj tar
i zrób kilka paczek o różnych rozmiarach.
Nie ma powodu, aby to zrobić w skrypcie PHP: zwykłe narzędzia powłoki są całkowicie wystarczające do wygenerowania potrzebnych plików.
Jeśli chcesz naprawdę losowe dane może chcesz spróbować to:
$data = '';
for ($byteSize-- >= 0) {
$data .= chr(rand(0,255));
}
może zająć trochę czasu, chociaż, jeśli chcesz duże rozmiary plików (jak w przypadku jakichkolwiek danych losowych).
generate_file()
z "Marco Demaio" nie jest przyjazny pamięci, więc stworzyłem 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);
}
}
Jak widać linebreaks są dodawane każdego 1024 bajtów, aby uniknąć problemów z funkcji, które są ograniczone do 1024-9999 bajtów. na przykład fgets() z < = PHP 4.3. I ułatwia otwieranie pliku za pomocą edytora tekstowego, który ma ten sam problem z super długimi liniami.
generate_file() from @Marco Demaio spowodował to poniżej podczas generowania pliku 4GB.
Ostrzeżenie: str_repeat(): Wynik jest zbyt duży, maksymalny dozwolony 2147483647 w /home/xxx/test_suite/handler.php na linii 38
znalazłem poniżej funkcji z php.net i to działa jak urok. I przetestowane września
17,6 TB (patrz aktualizacji poniżej)
w ciągu mniej niż 3 sekundy.
function CreatFileDummy($file_name,$size = 90294967296) {
// 32bits 4 294 967 296 bytes MAX Size
$f = fopen('dummy/'.$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;
}
Aktualizacja:
starałem się trafić 120TB, 1200 TB i więcej, ale rozmiar pliku został ograniczony do 17,6 TB. Po pewnym przeszukaniu go znalazłem, że jest to max_volume_size
dla systemu plików, który był na moim serwerze. Być może PHP może obsłużyć 1200 TB również w kilka sekund. :)
To wydaje się bardzo niemożliwe, aby zapisać tak dużo danych w 3 sekundy. Jakiego rodzaju sprzęt jest hostowany? – pcnate
@pcnate to był prywatny serwer, hostowany na Wiredtree. –
Spowoduje to utworzenie pliku wypełnionego zerami, co jest szczególnym przypadkiem - jest to plik "rzadki". Niektóre systemy plików traktują je specjalnie, mogą nimi manipulować niezwykle szybko i mogą unikać przydzielania im pamięci. Z Gnu 'dd' możesz w zasadzie natychmiast utworzyć plik rozrzutu o szerokości 17,6 TB z' dd of = filename bs = 1k seek = 17600000000 count = 0' - przez https://pl.wikipedia.org/wiki/Sparse_file –
- 1. PHP Przesyłanie i nadpisywanie pliku o tej samej nazwie
- 2. Automatycznie wypełniają prymitywne właściwości losowymi danymi?
- 3. Czy istnieje skrypt do generowania pliku migracji SQL (postgres)?
- 4. Jak utworzyć wiele plików z losowymi danymi za pomocą bashu
- 5. Odzyskiwanie szeregować dane w pliku php o nazwie użyciem Ajax
- 6. Bitset o zmiennym rozmiarze
- 7. Klasa PHP do generowania HTML?
- 8. wektor o stałym rozmiarze
- 9. PHP nieaktualne: Metody o tej samej nazwie
- 10. Problem z losowymi i wątkami w .NET
- 11. Co to jest format pliku o nazwie
- 12. Czy skrypt PHP może uruchomić inny skrypt PHP i zakończyć?
- 13. Freeradius i skrypt auth PHP
- 14. Uzyskaj ciąg kwerendy o nazwie pliku JavaScript
- 15. Skrypt uruchom/uruchom skrypt php z parametrami
- 16. Jak używać g ++ do tworzenia pliku obiektowego o konkretnej nazwie
- 17. Wyjątek SocketException podczas pobierania pliku zip o dużym rozmiarze
- 18. Skrypt PHP do pobrania pliku nie działa w IE
- 19. Pobieranie pliku o innej nazwie do zapisanej nazwy
- 20. Manipulowanie danymi utf8mb4 z MySQL z PHP
- 21. std :: array o rozmiarze zero
- 22. tablica sortowania o rozmiarze n
- 23. Rozwiązanie PHP do generowania wykresu radarowego
- 24. Skrypt PHP przekonwertować pliki .DBF do .MYSQL
- 25. Brak modułu o nazwie builtins
- 26. Android i obliczanie rozmiaru jednoliniowego łańcucha w danej czcionce i rozmiarze czcionki?
- 27. Znajdź pliki o rozmiarze w systemie Unix
- 28. Jak poprawnie wyrównać tablicę 2-wymiarową 5x10 z losowymi danymi w konsoli?
- 29. Utwórz nowy plik o określonym rozmiarze
- 30. Skrypt PHP do zapełniania tabel MySQL
Jeśli nie ma dostępnych skryptów, nie wydaje się zbyt proste, aby samemu je zakodować. –