PHP Faker 教程展示了如何使用 Faker 软件包在 PHP 中生成伪造数据, 我们使用fzaninotto/Faker
包。
PHP Faker
Faker 是一个生成假数据的 PHP 库,Faka 数据通常用于测试或用一些伪数据填充数据库,Faker 受到 Perl 的 Data :: Faker 和 Ruby 的 Faker 的极大启发。
PHP Faker 设置
该软件包随 composer 一起安装。
$ composer req fzaninotto/faker
我们安装fzaninotto/faker
软件包。
$ composer req symfony/var-dumper
另外,我们安装了 Symfony Dumper,它在转储变量时提供更好的控制台输出。
Faker 工厂
使用Faker\Factory::create()
,我们创建并初始化一个伪造者生成器。 在生成器上,我们访问生成器属性(称为格式化程序)以生成伪数据。 在内部,Faker 将数据生成委托给提供程序。
默认提供程序使用英语语言环境。 Faker 支持其他语言环境; 他们的完成水平不同。
简单的 Faker 示例
以下示例是 Faker 的简单演示。
simple.php
<?php
require('vendor/autoload.php');
faker = Faker\Factory::create();
echofaker->name . "\n";
echo $faker->address . "\n";
该示例输出伪造的名称和地址。
$ php simple.php
Antonia Hahn
355 Mills Light Apt. 722
Krajcikburgh, RI 36330
Faker 名称
在第二个示例中,我们伪造与用户名有关的数据。
names.php
<?php
require('vendor/autoload.php');
faker = Faker\Factory::create();
echofaker->name() . "\n";
echo faker->name('male') . "\n";
echofaker->name('female') . "\n";
echo faker->firstName() . "\n";
echofaker->firstName(gender='male') . "\n";
echofaker->firstName(gender='female') . "\n";
echofaker->firstNameMale('female') . "\n";
echo faker->firstNameFemale('female') . "\n";
echofaker->lastName() . "\n";
该示例创建假的全名,男性的姓氏和姓氏。
$ php names.php
Darion Walker
Prof. Chet Kessler
Prof. Jaida Greenholt PhD
Cristopher
Reid
Gilda
Wiley
Juanita
Jones
Faker 语言环境数据
Faker 在某种程度上支持本地化数据。 语言环境已传递给工厂create()
方法。 请注意,语言环境已完成各种级别。
localized.php
<?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 标题
以下示例为标题创建伪造数据。 Faker 产生学术和个人头衔。
titles.php
<?php
require('vendor/autoload.php');
faker = Faker\Factory::create();
echofaker->title() . "\n";
echo faker->title('male'). "\n";
echofaker->title('female'). "\n";
echo faker->titleMale . "\n";
echofaker->titleFemale . "\n";
echo $faker->suffix . "\n";
该程序会为男性和女性生成假标题。
$ php titles.php
Ms.
Dr.
Miss
Prof.
Mrs.
DDS
Faker 颜色
Faker 可以创建颜色名称或不同的颜色格式,例如十六进制和 RGB。
colours.php
<?php
require('vendor/autoload.php');
faker = Faker\Factory::create();
echofaker->hexcolor . "\n";
echo faker->rgbcolor . "\n";
dump(faker->rgbColorAsArray);
echo faker->rgbCssColor . "\n";
echofaker->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 数字
Faker 允许生成随机数字,整数或浮点值。
numbers.php
<?php
require('vendor/autoload.php');
faker = Faker\Factory::create();
echofaker->randomDigit . "\n";
echo faker->randomDigitNotNull . "\n";
echofaker->randomNumber() . "\n";
echo faker->randomNumber(nbDigits = 3, strict = true) . "\n";
echofaker->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
]
Faker 唯一值
使用unique()
修饰符,我们可以产生唯一的假值。
unique_values.php
<?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
]
Faker 可选值
使用optional()
修饰符,我们可以生成可选的假值。 可选值可以为 null。
optional_values.php
<?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 互联网相关数据
Faker 有多个用于伪造与 Internet 相关的数据的访问器。
internet.php
<?php
require('vendor/autoload.php');
faker = Faker\Factory::create();
echofaker->email . "\n";
echo faker->safeEmail . "\n";
echofaker->freeEmail . "\n";
echo faker->companyEmail . "\n";
echofaker->freeEmailDomain . "\n";
echo faker->safeEmailDomain . "\n";
echofaker->userName . "\n";
echo faker->password . "\n";
echofaker->domainName . "\n";
echo faker->domainWord . "\n";
echofaker->tld . "\n";
echo faker->url . "\n";
echofaker->slug . "\n";
echo faker->ipv4 . "\n";
echofaker->localIpv4 . "\n";
echo faker->ipv6 . "\n";
echofaker->macAddress . "\n";
该示例显示了各种与 Internet 相关的数据,包括电子邮件,域名,信息,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 模板引擎。
User.php
<?php
class User
{
public firstName;
publiclastName;
public occupation;
function __construct(stringfirst, string last, stringoccupation)
{
this->firstName =first;
this->lastName =last;
this->occupation =occupation;
}
}
这是User.php
,具有以下属性:$firstName
,$lastName
和$occupation
;
fake_xml.php
<?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);
该程序将生成一个包含二十个用户的数组。 数组将传递到 Twig 模板进行处理。 模板位于templates
目录中。 生成的内容被写入users.xml
文件。
templates/users.xml.twig
<?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
指令来处理用户数组。
您可能也对以下相关教程感兴趣: PHP PDO 教程, Twig 教程和 PHP 教程。