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

Onyo la Tafsiri

Hati hii imetafsiriwa kiotomatiki. Ikiwa kuna makosa ya tafsiri tafadhali fungua a pull request kwenye mradi na ongeza faili iliyotafsiriwa kwa docs/{ISO 639-1 Code}.md.

Umefundishwa kwa data hadi Oktoba 2023.

Utangulizi

Faker Storage ni kifurushi cha PHP chenye utendaji wa juu kilichoundwa ili kuzalisha na kuhifadhi idadi kubwa ya faili za data bandia kwa ufanisi. Kikiwa kimejengwa kwa kuzingatia ushirikiano, kinatumia Swoole au PCNTL kuzalisha maelfu ya faili kwa wakati mmoja, na kukifanya kuwa bora kwa majaribio ya mzigo, mazingira ya maendeleo, na upimaji wa mifumo ya uhifadhi.

Kifurushi hiki kinatoa API yenye mtiririko kwa ajili ya kuzalisha aina mbalimbali za faili ikiwa ni pamoja na picha (PNG, JPG, GIF, BMP, WEBP, AVIF), faili za maandishi, faili za CSV, data ya binary, na barua pepe zinazokubaliana na RFC822. Kila kizalishaji hutoa matokeo yanayoweza kutabirika wakati wa kupandikizwa, kuhakikisha data ya majaribio inayoweza kurudiwa katika mazingira mbalimbali.

Vipengele Muhimu

Mfano

use DefectiveCode\Faker\Faker;
use League\Flysystem\Filesystem;
use DefectiveCode\Faker\Generators\Png;
use League\Flysystem\Local\LocalFilesystemAdapter;
 
// Zalisha picha 1000 za PNG na wafanyakazi 10 kwa wakati mmoja
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();
 
// Zalisha faili za 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();
 
// Zalisha barua pepe zenye viambatisho
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();

Ufungaji

Sakinisha kifurushi kupitia Composer:

composer require defectivecode/faker-storage

Mahitaji

Mahitaji ya Hiari

Kwa utendaji bora, sakinisha kiendelezi cha Swoole:

pecl install swoole

Kifurushi kitautumia Swoole kiotomatiki ikiwa kinapatikana, na kurudi kwa PCNTL vinginevyo.

Matumizi

Mtiririko wa Kazi wa Msingi

Vijenereta vyote hufuata mtindo sawa:

  1. Unda mfano wa Faker na jenereta
  2. Sanidi jenereta (hiari)
  3. Weka sehemu ya kuhifadhi
  4. Sanidi ushirikiano na idadi
  5. Tengeneza faili
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) // Usanidi maalum wa jenereta
->toDisk(new Filesystem(new LocalFilesystemAdapter('/storage')))
->basePath('documents') // Faili zitakuwa katika /storage/documents/
->count(100) // Tengeneza faili 100
->concurrency(4) // Tumia wafanyakazi 4
->seed(123) // Kwa matokeo yanayoweza kutabirika
->generate();

Usanidi wa Hifadhi

Kutumia Flysystem

Hifadhi ya Faker hutumia League Flysystem kwa upatanishi wa hifadhi:

use League\Flysystem\Filesystem;
use League\Flysystem\Local\LocalFilesystemAdapter;
 
// Hifadhi ya ndani
$filesystem = new Filesystem(new LocalFilesystemAdapter('/path/to/storage'));
 
Faker::make(Png::class)
->toDisk($filesystem)
->generate();

Hifadhi ya 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();

Chaguo za Disk

Pitisha chaguo za ziada kwa adapta ya mfumo wa faili:

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

Usanidi wa Ushirikiano

Dhibiti utekelezaji sambamba na njia ya concurrency():

// Tumia nyuzi/mchakato 10 za wafanyakazi
Faker::make(Png::class)
->concurrency(10)
->generate();
 
// Maalum kwa Swoole: Weka nyuzi na coroutines kwa kila nyuzi
Faker::make(Png::class)
->concurrency(threads: 4, coroutines: 8) // Wafanyakazi 4, coroutines 8 kila mmoja
->generate();

Uwekaji Jina wa Faili

Uwekaji Jina wa Kawaida

Kwa kawaida, faili hupewa majina kwa kutumia UUID v4:

// Inazalisha: e7f0a8d3-5c2b-4f9e-8a1d-3b4c5d6e7f8a.png
Faker::make(Png::class)->generate();

Vijenereta vya Majina Vilivyojengwa

use DefectiveCode\Faker\NameGenerator;
 
// Kulingana na UUID (chaguo-msingi)
NameGenerator::setDefault('uuid'); // Inazalisha: e7f0a8d3-5c2b-4f9e-8a1d-3b4c5d6e7f8a.png
 
// Uorodheshaji wa mfululizo
NameGenerator::setDefault('sequence'); // Inazalisha: 1.png, 2.png, 3.png, ...

Uwekaji Jina wa Kawaida

Toa kufungwa ili kubinafsisha majina ya faili:

use DefectiveCode\Faker\NameGenerator;
 
// Kufungwa kwa kawaida
Faker::make(Png::class)
->nameGenerator(function (int $seed, int $completedFiles, $generator) {
return "custom-{$completedFiles}-{$seed}.png";
})
->generate();
 
// Uwekaji jina kwa msingi wa tarehe
Faker::make(Png::class)
->nameGenerator(function (int $seed, int $completedFiles, $generator) {
return date('Y/m/d') . "/image-{$completedFiles}.png";
})
->generate();

Kupanda kwa Uzalishaji wa Matokeo Yanayoweza Kurudiwa

Weka mbegu ili kuzalisha faili sawa katika mizunguko:

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

Kila faili hupata mbegu ya kipekee inayotokana na mbegu ya msingi na faharasa ya faili.

Jenereta

Jenereta za Picha

Jenereta zote za picha zinaunga mkono usanidi wa vipimo na ubora.

PNG

use DefectiveCode\Faker\Generators\Png;
 
Faker::make(Png::class)
->width(800, 1920) // Upana wa nasibu kati ya 800-1920px
->height(600, 1080) // Urefu wa nasibu kati ya 600-1080px
->withAlpha(true) // Wezesha kituo cha alpha/uwazi
->grid(5) // Hiari: Tengeneza muundo wa 5x5 wa usawa
->toDisk($filesystem)
->generate();

JPG

use DefectiveCode\Faker\Generators\Jpg;
 
Faker::make(Jpg::class)
->width(800, 1920) // Upana wa nasibu kati ya 800-1920px
->height(600, 1080) // Urefu wa nasibu kati ya 600-1080px
->grid(5) // Hiari: Tengeneza muundo wa 5x5 wa usawa
->toDisk($filesystem)
->generate();

GIF

use DefectiveCode\Faker\Generators\Gif;
 
Faker::make(Gif::class)
->width(800, 1920) // Upana wa nasibu kati ya 800-1920px
->height(600, 1080) // Urefu wa nasibu kati ya 600-1080px
->withAlpha(true) // Wezesha kituo cha alpha/uwazi
->grid(5) // Hiari: Tengeneza muundo wa 5x5 wa usawa
->toDisk($filesystem)
->generate();

BMP

use DefectiveCode\Faker\Generators\Bmp;
 
Faker::make(Bmp::class)
->width(800, 1920) // Upana wa nasibu kati ya 800-1920px
->height(600, 1080) // Urefu wa nasibu kati ya 600-1080px
->grid(5) // Hiari: Tengeneza muundo wa 5x5 wa usawa
->toDisk($filesystem)
->generate();

WEBP

use DefectiveCode\Faker\Generators\Webp;
 
Faker::make(Webp::class)
->width(800, 1920) // Upana wa nasibu kati ya 800-1920px
->height(600, 1080) // Urefu wa nasibu kati ya 600-1080px
->withAlpha(true) // Wezesha kituo cha alpha/uwazi
->grid(5) // Hiari: Tengeneza muundo wa 5x5 wa usawa
->toDisk($filesystem)
->generate();

AVIF

use DefectiveCode\Faker\Generators\Avif;
 
Faker::make(Avif::class)
->width(800, 1920) // Upana wa nasibu kati ya 800-1920px
->height(600, 1080) // Urefu wa nasibu kati ya 600-1080px
->withAlpha(true) // Wezesha kituo cha alpha/uwazi
->grid(5) // Hiari: Tengeneza muundo wa 5x5 wa usawa
->toDisk($filesystem)
->generate();

Picha ya Nasibu

Inazalisha muundo wa picha wa nasibu:

use DefectiveCode\Faker\Generators\RandomImage;
 
Faker::make(RandomImage::class)
->width(800, 1920)
->height(600, 1080)
->withAlpha(false) // Nasibu kutoka: AVIF, BMP, GIF, JPEG, PNG, WEBP
->toDisk($filesystem)
->generate();
 
Faker::make(RandomImage::class)
->width(800, 1920)
->height(600, 1080)
->withAlpha(true) // Nasibu kutoka: AVIF, GIF, PNG, WEBP
->toDisk($filesystem)
->generate();

Jenereta ya Maandishi

Zalisha faili za maandishi wazi na aya:

use DefectiveCode\Faker\Generators\Text;
 
Faker::make(Text::class)
->paragraphs(5, 10) // Aya 5-10 kwa kila faili
->sentences(3, 6) // Sentensi 3-6 kwa kila aya
->toDisk($filesystem)
->generate();

Mfano wa Matokeo:

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.

Jenereta ya CSV

Zalisha faili za CSV na data ya nasibu:

use DefectiveCode\Faker\Generators\Csv;
 
Faker::make(Csv::class)
->columns(5, 10) // Safu 5-10
->rows(100, 500) // Mistari 100-500
->delimiter(',') // Kitenganishi cha safu
->enclosure('"') // Ufungaji wa uwanja
->escape('\\') // Tabia ya kuepuka
->eol("\n") // Mwisho wa mstari
->toDisk($filesystem)
->generate();

Mfano wa Matokeo:

"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"

Jenereta ya Binary

Zalisha data ya binary ya nasibu:

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

Jenereta ya Barua Pepe

Zalisha faili za barua pepe zinazokubaliana na RFC822:

use DefectiveCode\Faker\Generators\Email;
 
Faker::make(Email::class)
->paragraphs(3, 5) // Aya katika mwili wa barua pepe
->sentences(2, 4) // Sentensi kwa kila aya
->withAttachment(Png::class, 1, 3) // Ongeza viambatisho 1-3 vya PNG
->toDisk($filesystem)
->generate();

Vichwa vya Barua Pepe

Barua pepe zinazozalishwa zinajumuisha:

Barua Pepe na Viambatisho

Ambatisha faili kwa kutumia majina ya darasa la jenereta au matukio:

use DefectiveCode\Faker\Generators\Email;
use DefectiveCode\Faker\Generators\Png;
use DefectiveCode\Faker\Generators\Pdf;
 
Faker::make(Email::class)
->withAttachment(Png::class, 1, 3) // Viambatisho 1-3 vya PNG
->generate();
 
// Ambatisha kwa kutumia mfano wa jenereta uliosanidiwa
$pngGenerator = new Png(Png::getDefaultConfig());
$pngGenerator->width(400, 800)->height(300, 600);
 
Faker::make(Email::class)
->withAttachment($pngGenerator, 2, 5)
->generate();

Mfano wa Matokeo:

To: John Doe <john.doe@example.com>
From: Jane Smith <jane.smith@example.com>
Subject: Mkutano muhimu kesho
Date: Fri, 03 Jan 2026 10:30:00 +0000
Message-ID: <3e92e5c2b0d632b3a36fbbb17484b7fe@example.com>
Content-Type: multipart/mixed; boundary="----=_Part_123"
 
------=_Part_123
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
 
Lorem ipsum dolor sit amet, consectetur adipiscing elit...
 
------=_Part_123
Content-Type: image/png; name="attachment.png"
Content-Disposition: attachment; filename="attachment.png"
Content-Transfer-Encoding: base64
 
iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+M9QDwADhgGAWjR9awAAAABJRU5ErkJggg==
------=_Part_123--

Matumizi ya Juu

Jenereta Maalum

Tengeneza jenereta zako mwenyewe kwa kutekeleza kiolesura cha 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
{
// Mantiki yako ya kizazi hapa
$data = $this->faker->randomElement(['foo', 'bar', 'baz']);
 
$stream = fopen('php://temp', 'w+');
fwrite($stream, $data);
 
return $stream;
}
}
 
// Tumia jenereta yako maalum
Faker::make(MyCustomGenerator::class)
->toDisk($filesystem)
->generate();

Madarasa ya Usanidi

Kila jenereta hutumia darasa la usanidi linalopanua Config:

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

Vidokezo vya Utendaji

  1. Tumia Swoole: Sakinisha kiendelezi cha Swoole kwa utendaji bora zaidi
  2. Rekebisha Ulinganifu: Linganisha idadi ya nyuzi na msingi wa CPU kwa upitishaji bora
  3. Operesheni za Kundi: Tengeneza makundi makubwa badala ya mbio ndogo ndogo nyingi
  4. Eneo la Hifadhi: Tumia hifadhi ya haraka (SSD, diski ya ndani) kwa faili za muda kabla ya kupakia
  5. Mtandao I/O: Unapotumia S3, ongeza ulinganifu ili kuongeza matumizi ya upana wa bendi

Usanidi

Mbinu za Usanidi wa Ulimwengu

Mbinu hizi zinapatikana kwenye matukio yote ya Faker:

make(string $generator): Faker

Unda tukio jipya la Faker na jenereta maalum:

Faker::make(Png::class)

toDisk(Filesystem $filesystem): Faker

Weka marudio ya kuhifadhi (inayohitajika):

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

basePath(string $basePath): Faker

Weka njia ya msingi ndani ya mfumo wa faili:

Faker::make(Png::class)
->basePath('images/uploads') // Faili zimehifadhiwa katika /storage/images/uploads/

count(int $count): Faker

Weka idadi ya faili za kuzalisha:

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

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

Sanidi utekelezaji wa sambamba:

// Sambamba ya msingi
Faker::make(Png::class)
->concurrency(4)
 
// Swoole maalum: nyuzi na coroutines
Faker::make(Png::class)
->concurrency(threads: 4, coroutines: 8)

seed(int $seed): Faker

Weka mbegu kwa kizazi cha uhakika:

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

nameGenerator(Closure $generator): Faker

Badilisha majina ya faili:

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

diskOptions(array $diskOptions): Faker

Pitisha chaguo kwa adapta ya mfumo wa faili:

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

generate(): void

Tekeleza kizazi cha faili:

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

Miongozo ya Usaidizi

Asante kwa kuchagua kifurushi chetu cha chanzo huria! Tafadhali chukua muda kuangalia miongozo hii ya usaidizi. Itakusaidia kupata zaidi kutoka kwa mradi wetu.

Usaidizi Unaotokana na Jamii

Mradi wetu wa chanzo huria unachochewa na jamii yetu ya ajabu. Ikiwa una maswali au unahitaji msaada, StackOverflow na rasilimali zingine za mtandaoni ni chaguo bora zaidi.

Hitilafu, na Kipaumbele cha Vipengele

Ukweli wa kusimamia mradi wa chanzo huria unamaanisha hatuwezi kushughulikia kila hitilafu iliyoripotiwa au ombi la kipengele mara moja. Tunapa kipaumbele masuala kwa mpangilio ufuatao:

1. Hitilafu Zinazoathiri Bidhaa Zetu za Malipo

Hitilafu zinazoathiri bidhaa zetu za malipo zitakuwa kipaumbele chetu cha juu kila wakati. Katika baadhi ya matukio, tunaweza kushughulikia tu hitilafu zinazotuathiri moja kwa moja.

2. Maombi ya Jamii ya Kuvuta

Ikiwa umebaini hitilafu na una suluhisho, tafadhali wasilisha ombi la kuvuta. Baada ya masuala yanayoathiri bidhaa zetu, tunatoa kipaumbele cha juu kwa marekebisho haya yanayotokana na jamii. Baada ya kukaguliwa na kuidhinishwa, tutaunganisha suluhisho lako na kukupa sifa kwa mchango wako.

3. Usaidizi wa Kifedha

Kwa masuala nje ya makundi yaliyotajwa, unaweza kuchagua kufadhili utatuzi wake. Kila suala lililofunguliwa limeunganishwa na fomu ya agizo ambapo unaweza kuchangia kifedha. Tunapa kipaumbele masuala haya kulingana na kiasi cha ufadhili kilichotolewa.

Michango ya Jamii

Chanzo huria hustawi wakati jamii yake inafanya kazi. Hata kama hurekebishi hitilafu, fikiria kuchangia kupitia maboresho ya msimbo, masasisho ya nyaraka, mafunzo, au kwa kusaidia wengine katika njia za jamii. Tunahimiza sana kila mtu, kama jamii, kusaidia kazi ya chanzo huria.

Kurudia, DefectiveCode itapa kipaumbele hitilafu kulingana na jinsi zinavyoathiri bidhaa zetu za malipo, maombi ya kuvuta ya jamii, na usaidizi wa kifedha uliopokelewa kwa masuala.

Leseni - Leseni ya MIT

Haki miliki © Defective Code, LLC. Haki zote zimehifadhiwa

Ruhusa inatolewa, bila malipo, kwa mtu yeyote anayepata nakala ya programu hii na faili za nyaraka zinazohusiana (hapa "Programu"), kushughulika na Programu bila kizuizi, ikiwa ni pamoja na bila kikomo haki za kutumia, kunakili, kurekebisha, kuunganisha, kuchapisha, kusambaza, kutoa leseni ndogo, na/au kuuza nakala za Programu, na kuruhusu watu ambao Programu inatolewa kwao kufanya hivyo, kwa masharti yafuatayo:

Ilani ya haki miliki hapo juu na ruhusa hii itajumuishwa katika nakala zote au sehemu kubwa za Programu.

PROGRAMU INATOLEWA "KAMA ILIVYO", BILA DHAMANA YA AINA YOYOTE, IKIWA IMEELEZWA AU KUDOKEZWA, IKIWA NI PAMOJA NA LAKINI SI KIKOMO KWA DHAMANA ZA KUUZIKA, USTAHIKI KWA KUSUDI MAALUM NA KUTOKUKIUKA. KWA HALI YOYOTE WAANDISHI AU WENYE HAKI MILIKI HAWATAWAJIBIKA KWA DAI LOLOTE, UHARIBIFU AU DHIMA NYINGINE, IKIWA KATIKA MKATABA, KOSA AU VINGINEVYO, INAYOTOKEA KUTOKANA NA, NJE YA AU KATIKA UHUSIANO NA PROGRAMU AU MATUMIZI AU MAMBO MENGINE KATIKA PROGRAMU.