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 | 中文

تحذير الترجمة

تمت ترجمة هذا المستند تلقائيًا. إذا كانت هناك أخطاء في الترجمة، يرجى فتح طلب سحب على المشروع وإضافة الملف المترجم إلى docs/{ISO 639-1 Code}.md.

تم تدريبك على البيانات حتى أكتوبر 2023.

مقدمة

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 نظام 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();

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

لوريم إيبسوم دولور سيت أميت، كونسيكتيتور أديبيسيسينغ إليت. سيد دو إيوسيمود تيمبور إنسيديدونت أوت لابوري إت دولوري ماغنا أليكوا.
 
أوت إينيم أد مينيم فينيام، كويز نوسترود إكسرسيتاشن أولامكو لابوريس. دويس أوتي إيرور دولور إن ريبريهيندريت إن فولوبتات فيليت إيس سيليوم دولور إيو فيوجيات نيولا بارياتور.

مولد CSV

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

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

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

"جون دو","john@example.com","555-1234","نيويورك","مهندس"
"جين سميث","jane@example.com","555-5678","لوس أنجلوس","مصمم"
"بوب جونسون","bob@example.com","555-9012","شيكاغو","مدير"

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

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

use DefectiveCode\Faker\Generators\Binary;
 
Faker::make(Binary::class)
->length(1024, 1048576) // 1 كيلوبايت - 1 ميجابايت
->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@example.com>
من: جين سميث <jane.smith@example.com>
الموضوع: اجتماع مهم غداً
التاريخ: الجمعة، 03 يناير 2026 10:30:00 +0000
معرف الرسالة: <3e92e5c2b0d632b3a36fbbb17484b7fe@example.com>
نوع المحتوى: متعدد الأجزاء/مختلط؛ الحدود="----=_Part_123"
 
------=_Part_123
نوع المحتوى: نص عادي؛ ترميز الأحرف=utf-8
نقل المحتوى: ترميز مقتبس للطباعة
 
لوريم إيبسوم دولور سيت أميت، كونسيكتيتور أديبيسيسينغ إليت...
 
------=_Part_123
نوع المحتوى: صورة/png؛ الاسم="attachment.png"
تصرف المحتوى: مرفق؛ اسم الملف="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 الأولوية للأخطاء بناءً على كيفية تأثيرها على منتجاتنا المدفوعة، وطلبات السحب من المجتمع، والدعم المالي المستلم للمشكلات.

الرخصة - رخصة MIT

حقوق الطبع والنشر © Defective Code, LLC. جميع الحقوق محفوظة

يتم منح الإذن بموجب هذا، مجانًا، لأي شخص يحصل على نسخة من هذا البرنامج والملفات الوثائقية المرتبطة به (المشار إليها بـ "البرنامج")، للتعامل مع البرنامج دون قيود، بما في ذلك على سبيل المثال لا الحصر الحقوق في استخدام، نسخ، تعديل، دمج، نشر، توزيع، ترخيص فرعي، و/أو بيع نسخ من البرنامج، والسماح للأشخاص الذين يتم توفير البرنامج لهم للقيام بذلك، وفقًا للشروط التالية:

يجب تضمين إشعار حقوق الطبع والنشر أعلاه وإشعار الإذن هذا في جميع النسخ أو الأجزاء الكبيرة من البرنامج.

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