Est-ce que quelqu'un en connaît-il un? J'ai besoin de tester des scripts de téléchargement / téléchargement de téléchargement et de télécharger des fichiers vraiment importants générés. J'allais intégrer l'utilitaire de test avec mon script de débogage. P>
8 Réponses :
Pour commencer, vous pouvez essayer quelque chose comme ceci:
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
}
Mais la taille ne se rapportera pas à un fichier de choix donné le fera-t-il?
$ Taille contient la taille du fichier donné.
N'a pas réalisé que PHP a stocké un chiffre unique sur 1 octet. THX. :)
@Matw: ça ne le fait pas. Mais il stocke un seul caractère i> (comme converti en str_repeat () code>) dans 1 octet.
@ NeverendendendingQueue: Avec de gros fichiers, la mémoteuse du serveur serait touchée. Dans la tompase, vous devez utiliser le classique fopen code> et effectuer une boucle de fwrite code> plus une finale fcfose code>.
Avez-vous vraiment besoin de tant de variation de la variation que vous avez besoin d'un script PHP? Je voudrais simplement créer des fichiers de test de différentes tailles via la ligne de commande et les utiliser dans mes tests d'unité. Sauf si le fichier est susceptible de causer un bogue, il semblerait que vous soyez trop ingénierie ici ...
Pour créer un fichier dans Windows; p>
dd if=/dev/zero of=filepath/filename.txt bs=10000000 count=1
FSUTIL FILE CREATEEW CODE> Crée un fichier vide, la question est sur le point de créer un fichier avec des données aléatoires.
Pourquoi ne pas avoir de script qui diffuse des données aléatoires? Le script peut prendre des paramètres pour la taille de fichier, le type, etc. p>
De cette façon, vous pouvez simuler de nombreux scénarios, par exemple la bande passante, l'extrémité prématurée du fichier, etc. p>
Le fichier doit-il vraiment être aléatoire? Si oui, il suffit de lire / dev / urandom sur un système Linux: p>
S'il n'a pas vraiment besoin d'être aléatoire, il suffit de trouver des fichiers que vous avez couchés qui sont la taille appropriée, ou (alternativement) utilisez Il n'y a aucune raison pour laquelle cela doit être fait dans un script PHP: les outils de shell ordinaires sont parfaitement suffisants pour générer les fichiers dont vous avez besoin. P> dd if = / dev / urandom de = votre fichier BS = 4096 comptage = 1024 code> # pour un fichier de 4 Mo. p>
goudron code> et faites quelques builles de différentes tailles. < / p>
Si vous voulez vraiment des données aléatoires, vous voudrez peut-être essayer ceci:
$data = '';
for ($byteSize-- >= 0) {
$data .= chr(rand(0,255));
}
generate_file () code> de "marco demaio" n'est pas de mémoire sympathique, donc j'ai créé 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);
}
}
Si vous générez un fichier aléatoire, pourquoi voudriez-vous éventuellement l'ouvrir avec un éditeur de texte?
@Phil non seulement les éditeurs de texte. Il pourrait être utile si vous lisez la ligne de fichier par ligne via fgets () code> ou des fonctions similaires pour éviter une énorme utilisation de la mémoire. Bien sûr, vous pouvez supprimer cette partie si vous le souhaitez. Je l'ai ouvert via un éditeur de texte pour vérifier si la sortie est que j'en ai besoin;)
generate_file () de @marco Demaio a provoqué ci-dessous lors de la génération de fichier 4GB.
Avertissement: str_repeat (): le résultat est trop grand, maximum 2147483647 autorisé dans /home/xxx/test_suite/handler.php sur la ligne 38 p> blockQuote>
J'ai trouvé en dessous de la fonction de php.net et cela fonctionne comme un charme. Je l'ai testé jusqu'à P>
17,6 To (voir la mise à jour ci-dessous) p> blockQquote>
en moins de 3 secondes. p>
xxx pré> mise à jour: h1>
J'essayais de frapper 120TB, 1200 To et plus mais de la taille était limité à 17,6 To. Après une certaine google, j'ai trouvé que c'est
max_volume_size code> pour système de fichiers REISERFS qui était sur mon serveur. Peut être PHP peut gérer 1200TB également en quelques secondes seulement. :) p> p>
Cela semble très impossible d'écrire autant de données en 3 secondes. Quel type de matériel est-il hébergé?
@PCnate C'était serveur privé, hébergé sur Wiredtree.
Cela crée un fichier rempli de NULLS, qui est un cas particulier - c'est un "fichier rare". Certains systèmes de fichiers traitent ces particulièrement, peuvent les manipuler extrêmement rapides et éviter d'affecter tout stockage. Avec GNU dd code>, vous pouvez essentiellement créer instantanément un fichier de sélects de 17,6 To avec jet de fichier = 1k recherche = 17600000000 compte = 0 code> - via EN.Wikipedia.org/wiki/sparse_file
Je suggérerais d'utiliser une bibliothèque comme Faker pour générer des données de test. p>
S'il n'y a pas de scripts facilement disponible, il ne semble pas trop trivial pour coder un sur vous-même.