PHPFaker教程展示了如何使用Faker包在PHP中生成假数据。我们使用fzaninotto/Faker包。
$ php -v php -v PHP 8.1.2 (cli) (built: Aug 8 2022 07:28:23) (NTS) ...
我们使用PHP版本8.1.2。
PHP伪造者
Faker是一个生成假数据的PHP库。Faka数据通常用于测试或用一些虚拟数据填充数据库。Faker深受Perl的Data::Faker和Ruby的Faker的启发。
PHPFaker设置
该软件包随composer一起安装。
$ composer req fzaninotto/faker
我们安装fzaninotto/faker包。
$ composer req symfony/var-dumper
此外,我们安装了SymfonyDumper,它在转储变量时提供更好的控制台输出。
Faker工厂
使用Faker\Factory::create我们创建并初始化了一个faker生成器。在生成器上,我们访问生成器属性(称为格式化程序)以生成假数据。在内部,Faker将数据生成委托给提供者。
默认提供程序使用英语语言环境。Faker支持其他语言环境;它们的完成程度不同。
简单的Faker示例
下面的例子是Faker的简单演示。
<?php
require('vendor/autoload.php');
$faker = Faker\Factory::create();
echo $faker->name . "\n";
echo $faker->address . "\n";
该示例输出一个虚假的姓名和地址。
$ php simple.php Antonia Hahn 355 Mills Light Apt. 722 Krajcikburgh, RI 36330
这是一个示例输出。
假名
在第二个例子中,我们伪造了与用户名相关的数据。
<?php
require('vendor/autoload.php');
$faker = Faker\Factory::create();
echo $faker->name() . "\n";
echo $faker->name('male') . "\n";
echo $faker->name('female') . "\n";
echo $faker->firstName() . "\n";
echo $faker->firstName($gender='male') . "\n";
echo $faker->firstName($gender='female') . "\n";
echo $faker->firstNameMale('female') . "\n";
echo $faker->firstNameFemale('female') . "\n";
echo $faker->lastName() . "\n";
该示例创建了男性和女性的假全名、名字和姓氏。
$ php names.php Darion Walker Prof. Chet Kessler Prof. Jaida Greenholt PhD Cristopher Reid Gilda Wiley Juanita Jones
这是一个示例输出。
伪造语言环境数据
Faker在一定程度上支持本地化数据。locale被传递给工厂create方法。请注意,locale已完成为各种级别。
<?php
require('vendor/autoload.php');
$faker = Faker\Factory::create('sk_SK');
for ($i = 0; $i < 3; $i++) {
$name = $faker->name;
$city = $faker->cityName;
$phone = $faker->phoneNumber;
echo "$name, $city, $phone\n";
}
该示例生成斯洛伐克语的虚假数据。
$ php localized.php RNDr. Kvetoslava Zelenayová DSc., Malé DvornÃky, 00421 742 587 664 Agáta Molnárová, Äabalovce, +421 857 627 309 PhDr. Igor Truben, Mokrá Lúka, 00421577302978
这是一个示例输出。请注意,斯洛伐克语有口音。
伪造标题
以下示例为职称创建假数据。Faker生成学术和个人职称。
<?php
require('vendor/autoload.php');
$faker = Faker\Factory::create();
echo $faker->title() . "\n";
echo $faker->title('male'). "\n";
echo $faker->title('female'). "\n";
echo $faker->titleMale . "\n";
echo $faker->titleFemale . "\n";
echo $faker->suffix . "\n";
该程序会为男性和女性生成虚假头衔。
$ php titles.php Ms. Dr. Miss Prof. Mrs. DDS
这是一个示例输出。
伪色
Faker可以创建颜色名称或不同的颜色格式,例如十六进制和RGB。
<?php
require('vendor/autoload.php');
$faker = Faker\Factory::create();
echo $faker->hexcolor . "\n";
echo $faker->rgbcolor . "\n";
dump($faker->rgbColorAsArray);
echo $faker->rgbCssColor . "\n";
echo $faker->safeColorName . "\n";
echo $faker->colorName . "\n";
该示例展示了如何使用Faker创建颜色。
$ php colours.php #662d69 180,149,135 array:3 [ 0 => 190 1 => 115 2 => 170 ] rgb(119,164,223) aqua LightGreen DarkGray
这是一个示例输出。
伪造数字
Faker允许生成随机数字、整数或浮点值。
<?php
require('vendor/autoload.php');
$faker = Faker\Factory::create();
echo $faker->randomDigit . "\n";
echo $faker->randomDigitNotNull . "\n";
echo $faker->randomNumber() . "\n";
echo $faker->randomNumber($nbDigits = 3, $strict = true) . "\n";
echo $faker->randomFloat() . "\n";
echo $faker->randomFloat($nbMaxDecimals = 5, $min = 0, $max = 20) . "\n";
echo $faker->numberBetween($min = 1500, $max = 6000) . "\n";
dump($faker->shuffle([1, 2, 3, 4, 5, 6]));
该示例生成随机数字、整数和浮点数。它还会随机打乱数组值。
$ php numbers.php 6 6 3654715 614 4164 12.29093 2347 array:6 [ 0 => 3 1 => 6 2 => 2 3 => 5 4 => 1 5 => 4 ]
这是一个示例输出。
伪造唯一值
使用unique修饰符,我们可以生成唯一的假值。
<?php
require('vendor/autoload.php');
$faker = Faker\Factory::create();
$vals = [];
for ($i = 0; $i < 6; $i++) {
$vals[] = $faker->unique()->randomDigit;
}
dump($vals);
该示例生成一个包含六个唯一数字的数组。
$ php unique_values.php array:6 [ 0 => 0 1 => 6 2 => 9 3 => 1 4 => 5 5 => 3 ]
这是一个示例输出。
伪造可选值
使用optional修饰符,我们可以生成可选的假值。可选值可以为null。
<?php
require('vendor/autoload.php');
$faker = Faker\Factory::create();
$vals = [];
for ($i = 0; $i < 6; $i++) {
$vals[] = $faker->unique()->randomDigit;
}
dump($vals);
该示例生成一个包含六个可选数字的数组。
$ php optional_values.php array:6 [ 0 => 7 1 => 4 2 => null 3 => null 4 => null 5 => 8 ]
这是一个示例输出。
伪造互联网相关数据
Faker有几个用于伪造互联网相关数据的访问器。
<?php
require('vendor/autoload.php');
$faker = Faker\Factory::create();
echo $faker->email . "\n";
echo $faker->safeEmail . "\n";
echo $faker->freeEmail . "\n";
echo $faker->companyEmail . "\n";
echo $faker->freeEmailDomain . "\n";
echo $faker->safeEmailDomain . "\n";
echo $faker->userName . "\n";
echo $faker->password . "\n";
echo $faker->domainName . "\n";
echo $faker->domainWord . "\n";
echo $faker->tld . "\n";
echo $faker->url . "\n";
echo $faker->slug . "\n";
echo $faker->ipv4 . "\n";
echo $faker->localIpv4 . "\n";
echo $faker->ipv6 . "\n";
echo $faker->macAddress . "\n";
该示例显示了各种互联网相关数据,包括电子邮件、域名、别名、IP地址和URL。
$ php internet.php johns.ryleigh@rowe.com merle96@example.com nyasia.bergnaum@hotmail.com morar.dylan@champlin.com gmail.com example.net bartoletti.ena }#)W+OVU<Lgaa.Atp5^ metz.com blanda org http://www.kling.com/ optio-magnam-provident-pariatur-dolores-consequatur-beatae 127.131.186.145 10.135.68.26 ccf1:64a7:d145:98eb:742d:dc60:cf9e:5d4a C8:31:FD:24:15:06
这是一个示例输出。
用Faker生成XML数据
在下面的示例中,我们使用Faker和Twig模板生成XML数据。XML文件将包含用户。
$ mkdir fakexml $ cd fakexml $ mkdir templates $ composer req fzaninotto/faker $ composer req twig/twig
我们创建一个新的项目目录并安装Faker和Twig模板引擎。
<?php
class User
{
public $firstName;
public $lastName;
public $occupation;
function __construct(string $first, string $last, string $occupation)
{
$this->firstName = $first;
$this->lastName = $last;
$this->occupation = $occupation;
}
}
这是User.php,它具有以下属性:$firstName、$lastName和$occupation;
<?php
require __DIR__ . '/vendor/autoload.php';
require __DIR__ . '/User.php';
use Twig\Environment;
use Twig\Loader\FilesystemLoader;
use Faker\Factory;
$loader = new FilesystemLoader(__DIR__ . '/templates');
$twig = new Environment($loader);
$faker = Factory::create();
$users = [];
for ($i = 0; $i < 20; $i++)
{
$firstName = $faker->firstName;
$lastName = $faker->lastName;
$occupation = $faker->jobTitle;
$user = new User($firstName, $lastName, $occupation);
array_push($users, $user);
}
$content = $twig->render('users.xml.twig', ['users' => $users]);
file_put_contents('users.xml', $content);
该程序生成一个包含20个用户的数组。该数组被传递给要处理的Twig模板。该模板位于templates目录中。生成的内容写入users.xml文件。
<?xml version="1.0" encoding="UTF-8"?>
<users>
{% for user in users %}
<user id="{{ loop.index }}">
<firstname>{{ user.firstName }}</firstname>
<lastname>{{ user.lastName }}</lastname>
<occupation>{{ user.occupation }}</occupation>
</user>
{% endfor %}
</users>
在模板中,我们使用for指令来处理用户数组。
在本教程中,我们使用PHPFaker在PHP中生成假数据。
列出所有PHP教程。
