Defective Code Logo

Total Downloads Latest Stable Version Latest Stable Version

English | العربية | বাংলা | Bosanski | Deutsch | Español | Français | हिन्दी | Italiano | 日本語 | 한국어 | मराठी | Português | Русский | Kiswahili | தமிழ் | తెలుగు | Türkçe | اردو | Tiếng Việt | 中文

مقدمة

Faker Storage عبارة عن حزمة PHP عالية الأداء مصممة لتوليد وتخزين كميات كبيرة من ملفات البيانات المزيفة بكفاءة. تم بناؤها مع مراعاة التزامن، حيث تستفيد من Swoole أو PCNTL لتوليد الآلاف من الملفات بشكل متوازي، مما يجعلها مثالية لاختبار الحمل، وبيئات التطوير، وتقييم أنظمة التخزين.

تقدم الحزمة واجهة برمجة تطبيقات سلسة لتوليد أنواع مختلفة من الملفات بما في ذلك الصور (PNG، JPG، GIF، BMP، WEBP، AVIF)، وملفات النصوص، وملفات CSV، وبيانات ثنائية، ورسائل بريد إلكتروني متوافقة مع RFC822. كل مولد ينتج مخرجات حتمية عند تهيئته، مما يضمن بيانات اختبار قابلة للتكرار عبر البيئات المختلفة.

الميزات الرئيسية

مثال

use DefectiveCode\Faker\Faker;
use League\Flysystem\Filesystem;
use DefectiveCode\Faker\Generators\Png;
use League\Flysystem\Local\LocalFilesystemAdapter;
 
// توليد 1000 صورة PNG مع 10 عمال متوازيين
Faker::make(Png::class)
->width(800, 1920)
->height(600, 1080)
->toDisk(new Filesystem(new LocalFilesystemAdapter('/path/to/storage')))
->basePath('images')
->count(1000)
->concurrency(10)
->seed(42)
->generate();
 
// توليد ملفات CSV
use DefectiveCode\Faker\Generators\Csv;
 
Faker::make(Csv::class)
->columns(5, 10)
->rows(100, 500)
->delimiter(',')
->toDisk(new Filesystem(new LocalFilesystemAdapter('/path/to/storage')))
->count(50)
->generate();
 
// توليد رسائل بريد إلكتروني مع مرفقات
use DefectiveCode\Faker\Generators\Email;
 
Faker::make(Email::class)
->paragraphs(3, 5)
->sentences(2, 4)
->withAttachment(Png::class, 1, 3)
->toDisk(new Filesystem(new LocalFilesystemAdapter('/path/to/storage')))
->count(100)
->generate();

التثبيت

قم بتثبيت الحزمة عبر Composer:

composer require defectivecode/faker-storage

المتطلبات

الاعتمادات الاختيارية

للحصول على أداء مثالي، قم بتثبيت إضافة Swoole:

pecl install swoole

ستستخدم الحزمة تلقائيًا Swoole إذا كانت متاحة، وسقوط إلى PCNTL إذا لم تكن كذلك.

الاستخدام

سير العمل الأساسي

تتبع جميع المولدات نفس النمط:

  1. إنشاء مثيل Faker مع مولد
  2. تكوين المولد (اختياري)
  3. تعيين وجهة التخزين
  4. تكوين التزامن والعدد
  5. توليد الملفات
use DefectiveCode\Faker\Faker;
use League\Flysystem\Filesystem;
use DefectiveCode\Faker\Generators\Text;
use League\Flysystem\Local\LocalFilesystemAdapter;
 
Faker::make(Text::class)
->paragraphs(5, 10) // تكوين خاص بالمولد
->toDisk(new Filesystem(new LocalFilesystemAdapter('/storage')))
->basePath('documents') // الملفات ستكون في /storage/documents/
->count(100) // توليد 100 ملف
->concurrency(4) // استخدام 4 عمال
->seed(123) // للحصول على مخرجات حتمية
->generate();

تكوين التخزين

باستخدام Flysystem

تستخدم Faker Storage League Flysystem لتجريد التخزين:

use League\Flysystem\Filesystem;
use League\Flysystem\Local\LocalFilesystemAdapter;
 
// التخزين المحلي
$filesystem = new Filesystem(new LocalFilesystemAdapter('/path/to/storage'));
 
Faker::make(Png::class)
->toDisk($filesystem)
->generate();

تخزين AWS S3

use Aws\S3\S3Client;
use League\Flysystem\Filesystem;
use League\Flysystem\AwsS3V3\AwsS3V3Adapter;
 
$client = new S3Client([
'credentials' => [
'key' => 'your-key',
'secret' => 'your-secret',
],
'region' => 'us-east-1',
'version' => 'latest',
]);
 
$adapter = new AwsS3V3Adapter($client, 'your-bucket-name');
$filesystem = new Filesystem($adapter);
 
Faker::make(Png::class)
->toDisk($filesystem)
->basePath('uploads/images')
->generate();

خيارات القرص

قم بتمرير خيارات إضافية لموصل نظام الملفات:

Faker::make(Png::class)
->toDisk($filesystem)
->diskOptions([
'visibility' => 'public',
'ACL' => 'public-read',
'CacheControl' => 'max-age=31536000',
])
->generate();

تكوين التزامن

تحكم في التنفيذ المتوازي باستخدام الطريقة concurrency():

// استخدم 10 خيوط/عمليات عامل
Faker::make(Png::class)
->concurrency(10)
->generate();
 
// خاص ب Swoole: تعيين كل من الخيوط والتعاونيات لكل خيط
Faker::make(Png::class)
->concurrency(threads: 4, coroutines: 8) // 4 عمال، 8 تعاونيات لكل منهم
->generate();

تسمية الملفات

التسمية الافتراضية

بشكل افتراضي، يتم تسمية الملفات باستخدام UUID v4:

// توليد: e7f0a8d3-5c2b-4f9e-8a1d-3b4c5d6e7f8a.png
Faker::make(Png::class)->generate();

مولدات الأسماء المدمجة

use DefectiveCode\Faker\NameGenerator;
 
// بناءً على UUID (افتراضي)
NameGenerator::setDefault('uuid'); // توليد: e7f0a8d3-5c2b-4f9e-8a1d-3b4c5d6e7f8a.png
 
// ترقيم تسلسلي
NameGenerator::setDefault('sequence'); // توليد: 1.png، 2.png، 3.png، ...

التسمية المخصصة

قدم إغلاقًا لتخصيص أسماء الملفات:

use DefectiveCode\Faker\NameGenerator;
 
// إغلاق مخصص
Faker::make(Png::class)
->nameGenerator(function (int $seed, int $completedFiles, $generator) {
return "custom-{$completedFiles}-{$seed}.png";
})
->generate();
 
// تسمية تعتمد على التاريخ
Faker::make(Png::class)
->nameGenerator(function (int $seed, int $completedFiles, $generator) {
return date('Y/m/d') . "/image-{$completedFiles}.png";
})
->generate();

استخدام البذور للتكرار

قم بتعيين بذور لتوليد نفس الملفات عبر التشغيلات:

Faker::make(Png::class)
->seed(42)
->count(10)
->generate();

كل ملف يحصل على بذور فريدة حتمية مشتقة من البذور الأساسية ومؤشر الملف.

المولدات

مولدات الصور

تدعم جميع مولدات الصور تكوين الأبعاد والجودة.

PNG

use DefectiveCode\Faker\Generators\Png;
 
Faker::make(Png::class)
->width(800, 1920) // عرض عشوائي بين 800-1920 بكسل
->height(600, 1080) // ارتفاع عشوائي بين 600-1080 بكسل
->withAlpha(true) // تمكين قناة ألفا/الشفافية
->grid(5) // اختياري: توليد نمط متناظر 5x5
->toDisk($filesystem)
->generate();

JPG

use DefectiveCode\Faker\Generators\Jpg;
 
Faker::make(Jpg::class)
->width(800, 1920) // عرض عشوائي بين 800-1920 بكسل
->height(600, 1080) // ارتفاع عشوائي بين 600-1080 بكسل
->grid(5) // اختياري: توليد نمط متناظر 5x5
->toDisk($filesystem)
->generate();

GIF

use DefectiveCode\Faker\Generators\Gif;
 
Faker::make(Gif::class)
->width(800, 1920) // عرض عشوائي بين 800-1920 بكسل
->height(600, 1080) // ارتفاع عشوائي بين 600-1080 بكسل
->withAlpha(true) // تمكين قناة ألفا/الشفافية
->grid(5) // اختياري: توليد نمط متناظر 5x5
->toDisk($filesystem)
->generate();

BMP

use DefectiveCode\Faker\Generators\Bmp;
 
Faker::make(Bmp::class)
->width(800, 1920) // عرض عشوائي بين 800-1920 بكسل
->height(600, 1080) // ارتفاع عشوائي بين 600-1080 بكسل
->grid(5) // اختياري: توليد نمط متناظر 5x5
->toDisk($filesystem)
->generate();

WEBP

use DefectiveCode\Faker\Generators\Webp;
 
Faker::make(Webp::class)
->width(800, 1920) // عرض عشوائي بين 800-1920 بكسل
->height(600, 1080) // ارتفاع عشوائي بين 600-1080 بكسل
->withAlpha(true) // تمكين قناة ألفا/الشفافية
->grid(5) // اختياري: توليد نمط متناظر 5x5
->toDisk($filesystem)
->generate();

AVIF

use DefectiveCode\Faker\Generators\Avif;
 
Faker::make(Avif::class)
->width(800, 1920) // عرض عشوائي بين 800-1920 بكسل
->height(600, 1080) // ارتفاع عشوائي بين 600-1080 بكسل
->withAlpha(true) // تمكين قناة ألفا/الشفافية
->grid(5) // اختياري: توليد نمط متناظر 5x5
->toDisk($filesystem)
->generate();

صورة عشوائية

تولد صورة بتنسيق عشوائي:

use DefectiveCode\Faker\Generators\RandomImage;
 
Faker::make(RandomImage::class)
->width(800, 1920)
->height(600, 1080)
->withAlpha(false) // عشوائي من: AVIF، BMP، GIF، JPEG، PNG، WEBP
->toDisk($filesystem)
->generate();
 
Faker::make(RandomImage::class)
->width(800, 1920)
->height(600, 1080)
->withAlpha(true) // عشوائي من: AVIF، GIF، PNG، WEBP
->toDisk($filesystem)
->generate();

مولد النصوص

توليد ملفات نصية بسيطة مع فقرات:

use DefectiveCode\Faker\Generators\Text;
 
Faker::make(Text::class)
->paragraphs(5, 10) // 5-10 فقرات لكل ملف
->sentences(3, 6) // 3-6 جمل لكل فقرة
->toDisk($filesystem)
->generate();

مثال على المخرجات:

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
 
Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.

مولد CSV

توليد ملفات CSV ببيانات عشوائية:

use DefectiveCode\Faker\Generators\Csv;
 
Faker::make(Csv::class)
->columns(5, 10) // 5-10 أعمدة
->rows(100, 500) // 100-500 صفوف
->delimiter(',') // فاصل الأعمدة
->enclosure('"') // enclosure للحقل
->escape('\\') // حرف الهروب
->eol("\n") // نهاية السطر
->toDisk($filesystem)
->generate();

مثال على المخرجات:

"John Doe","john@example.com","555-1234","New York","Engineer"
"Jane Smith","jane@example.com","555-5678","Los Angeles","Designer"
"Bob Johnson","bob@example.com","555-9012","Chicago","Manager"

مولد البيانات الثنائية

توليد بيانات ثنائية عشوائية:

use DefectiveCode\Faker\Generators\Binary;
 
Faker::make(Binary::class)
->length(1024, 1048576) // 1KB - 1MB
->toDisk($filesystem)
->generate();

مولد البريد الإلكتروني

توليد ملفات بريد إلكتروني متوافقة مع RFC822:

use DefectiveCode\Faker\Generators\Email;
 
Faker::make(Email::class)
->paragraphs(3, 5) // فقرات في جسم البريد
->sentences(2, 4) // جمل لكل فقرة
->withAttachment(Png::class, 1, 3) // إضافة 1-3 مرفقات PNG
->toDisk($filesystem)
->generate();

رؤوس البريد الإلكتروني

تشمل رسائل البريد الإلكتروني المولدة:

البريد الإلكتروني مع مرفقات

ارفق ملفات باستخدام أسماء أو مثيلات مولدات:

use DefectiveCode\Faker\Generators\Email;
use DefectiveCode\Faker\Generators\Png;
use DefectiveCode\Faker\Generators\Pdf;
 
Faker::make(Email::class)
->withAttachment(Png::class, 1, 3) // 1-3 مرفقات PNG
->generate();
 
// إرفاق باستخدام مثيل المولد المكوّن
$pngGenerator = new Png(Png::getDefaultConfig());
$pngGenerator->width(400, 800)->height(300, 600);
 
Faker::make(Email::class)
->withAttachment($pngGenerator, 2, 5)
->generate();

مثال على المخرجات:

إلى: John Doe <john.doe@example.com>
من: Jane Smith <jane.smith@example.com>
الموضوع: اجتماع هام غدًا
التاريخ: الجمعة، 03 كانون الثاني 2026 10:30:00 +0000
معرّف الرسالة: <3e92e5c2b0d632b3a36fbbb17484b7fe@example.com>
نوع المحتوى: multipart/mixed; boundary="----=_Part_123"
 
------=_Part_123
نوع المحتوى: text/plain; charset=utf-8
نقل المحتوى: quoted-printable
 
Lorem ipsum dolor sit amet, consectetur adipiscing elit...
 
------=_Part_123
نوع المحتوى: image/png; name="attachment.png"
تخيض المحتوى: attachment; filename="attachment.png"
نقل المحتوى: base64
 
iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+M9QDwADhgGAWjR9awAAAABJRU5ErkJggg==
------=_Part_123--

الاستخدام المتقدم

مولدات مخصصة

قم بإنشاء مولداتك الخاصة عن طريق تنفيذ واجهة Generator:

use DefectiveCode\Faker\Configs\Config;
use DefectiveCode\Faker\Concerns\SetsSeed;
use DefectiveCode\Faker\Generators\Generator;
use DefectiveCode\Faker\Concerns\PreparesFaker;
 
class MyCustomGenerator implements Generator
{
use PreparesFaker;
use SetsSeed;
 
public function __construct(public Config $config) {}
 
public static function getDefaultConfig(): Config
{
return new MyCustomConfig([
'contentType' => 'application/x-custom',
'nameGenerator' => NameGenerator::default('extension'),
]);
}
 
public function generate(): mixed
{
// منطق التوليد الخاص بك هنا
$data = $this->faker->randomElement(['foo', 'bar', 'baz']);
 
$stream = fopen('php://temp', 'w+');
fwrite($stream, $data);
 
return $stream;
}
}
 
// استخدم مولدك المخصص
Faker::make(MyCustomGenerator::class)
->toDisk($filesystem)
->generate();

فصول التكوين

تستخدم كل مولدات فصل تكوين يمتد من Config:

use DefectiveCode\Faker\Configs\Config;
 
class MyCustomConfig extends Config
{
public int $minValue = 1;
public int $maxValue = 100;
}

نصائح الأداء

  1. استخدم Swoole: قم بتثبيت إضافة Swoole للحصول على أفضل أداء
  2. ضبط التزامن: مطابقة عدد الخيوط مع نوى وحدة المعالجة المركزية للحصول على أعلى إنتاجية
  3. عمليات الدفعة: توليد دفعات كبيرة بدلاً من عمليات صغيرة متعددة
  4. موقع التخزين: استخدم تخزين سريع (SSD، قرص محلي) للملفات المؤقتة قبل التحميل
  5. شبكة الإدخال/الإخراج: عند استخدام S3، قم بزيادة التزامن لزيادة استخدام عرض النطاق الترددي

التكوين

طرق التكوين العالمية

هذه الطرق متاحة على جميع مثيلات Faker:

make(string $generator): Faker

إنشاء مثيل جديد من Faker مع المولد المحدد:

Faker::make(Png::class)

toDisk(Filesystem $filesystem): Faker

تعيين وجهة التخزين (مطلوبة):

Faker::make(Png::class)
->toDisk(new Filesystem(new LocalFilesystemAdapter('/storage')))

basePath(string $basePath): Faker

تعيين المسار الأساسي داخل نظام الملفات:

Faker::make(Png::class)
->basePath('images/uploads') // الملفات المخزنة في /storage/images/uploads/

count(int $count): Faker

تعيين عدد الملفات لتوليدها:

Faker::make(Png::class)
->count(1000)

concurrency(int $threads, ?int $coroutines = null): Faker

تكوين التنفيذ المتوازي:

// التزامن الأساسي
Faker::make(Png::class)
->concurrency(4)
 
// خاص بـ Swoole: الخيوط والتعاونيات
Faker::make(Png::class)
->concurrency(threads: 4, coroutines: 8)

seed(int $seed): Faker

تعيين بذور للتوليد الحتمي:

Faker::make(Png::class)
->seed(42)

nameGenerator(Closure $generator): Faker

تخصيص تسمية الملفات:

Faker::make(Png::class)
->nameGenerator(function (int $seed, int $completedFiles, $generator) {
return "file-{$completedFiles}.png";
})

diskOptions(array $diskOptions): Faker

تمرير الخيارات لموصل نظام الملفات:

Faker::make(Png::class)
->diskOptions([
'visibility' => 'public',
'ACL' => 'public-read',
])

generate(): void

تنفيذ توليد الملفات:

Faker::make(Png::class)->generate();

دعم الإرشادات

شكرًا لاختيارك حزمة المصادر المفتوحة الخاصة بنا! يرجى أخذ لحظة للاطلاع على هذه الإرشادات للدعم. ستساعدك في تحقيق أقصى استفادة من مشروعنا.

الدعم المدفوع من المجتمع

مشروعنا مفتوح المصدر مدفوع بمجموعتنا الرائعة. إذا كان لديك أي أسئلة أو تحتاج إلى مساعدة، فإن StackOverflow و موارد الإنترنت الأخرى هي أفضل خيارات لك.

الأخطاء، وأولويات الميزات

واقع إدارة مشروع مفتوح المصدر يعني أننا لا نستطيع معالجة كل خطأ تم الإبلاغ عنه أو طلب ميزة على الفور. نحن نعطي الأولوية للقضايا بالترتيب التالي:

1. الأخطاء التي تؤثر على منتجاتنا المدفوعة

تعتبر الأخطاء التي تؤثر على منتجاتنا المدفوعة دائمًا في قمة أولوياتنا. في بعض الحالات، قد نكتفي بمعالجة الأخطاء التي تؤثر علينا مباشرة.

2. طلبات السحب الخاصة بالمجتمع

إذا كنت قد حددت خطأ ولديك حل، يرجى تقديم طلب سحب. بعد القضايا التي تؤثر على منتجاتنا، نعطي الأولوية الأعلى لهذه الإصلاحات المدفوعة من المجتمع. بمجرد مراجعتها والموافقة عليها، سنقوم بدمج حلك ونذكر مساهمتك.

3. الدعم المالي

بالنسبة للقضايا خارج الفئات المذكورة، يمكنك اختيار تمويل حلها. كل قضية مفتوحة مرتبطة بنموذج طلب حيث يمكنك المساهمة ماليًا. نحن نعطي الأولوية لهذه القضايا بناءً على المبلغ المقدم من التمويل.

مساهمات المجتمع

تزدهر المصادر المفتوحة عندما يكون المجتمع نشطًا. حتى إذا لم تكن تقوم بإصلاح الأخطاء، قم بالتفكير في المساهمة من خلال تحسينات الكود، تحديثات الوثائق، الدروس التعليمية، أو من خلال مساعدة الآخرين في قنوات المجتمع. نحن نشجع الجميع، كمجتمع، على دعم العمل المفتوح المصدر.

للتأكيد، ستعطي DefectiveCode الأولوية للأخطاء بناءً على كيفية تأثيرها على منتجاتنا المدفوعة، وطلبات السحب الخاصة بالمجتمع، والدعم المالي المستلم للقضايا.

Lizenz - MIT Lizenz

Copyright © Defective Code, LLC. Alle Rechte vorbehalten

Hiermit wird kostenlos die Erlaubnis erteilt, an jede Person, die eine Kopie dieser Software und der zugehörigen Dokumentationsdateien (die "Software") erhält, mit der Software ohne Einschränkung umzugehen, einschließlich, aber nicht beschränkt auf die Rechte, die Software zu nutzen, zu kopieren, zu modifizieren, zu fusionieren, zu veröffentlichen, zu verteilen, Unterlizenzen zu erteilen und/oder Kopien der Software zu verkaufen, und Personen, denen die Software zur Verfügung gestellt wird, zu gestatten, dies zu tun, unter der Bedingung der folgenden Bedingungen:

Der obige Copyright-Hinweis und dieser Erlaubnishinweis müssen in allen Kopien oder wesentlichen Teilen der Software enthalten sein.

DIE SOFTWARE WIRD "WIE BESEHEN" BEREITGESTELLT, OHNE JEGLICHE GARANTIE, WELCHER ART, AUSDRÜCKLICH ODER IMPLIZIT, EINSCHLIESSLICH, ABER NICHT BESCHRÄNKT AUF DIE GARANTIEN DER MARKTFÄHIGKEIT, EIGNUNG FÜR EINEN BESTIMMTEN ZWECK UND KEINEN RECHTSBRUCH. IN KEINEM FALL SIND DIE AUTOREN ODER COPYRIGHT-RECHTHABER FÜR IRGENDEINEN ANSPRUCH, SCHÄDEN ODER SONSTIGE HAFTUNG HAFTBAR, UNABHÄNGIG DAVON, OB IN EINER KLAGE AUS VERTRAG, DELIKT ODER SONSTIGEM, ENTSTEHEND AUS, IM HINBLICK AUF ODER IN VERBINDUNG MIT DER SOFTWARE ODER DER NUTZUNG ODER ANDEREN TRANSAKTIONEN IN DER SOFTWARE.