Penggunaan fungsi GENORATERS di PHP

Selama ini kita sering menggunakan Auto-Increment Integer sebagai Primary Key pada tabel database kita. Kemudian biasanya dalam aplikasi web, kita mengakses data dengan alamat URL seperti ini

http://myapplication.com/user?id=105
http://myapplication.com/user/105

Pengguna aplikasi kami dapat dengan mudah mengenali URL, di mana User ID kami adalah 105. Suatu kali pengguna dengan santai mengakses URL dan mengganti User ID misalnya

for ($i = 1; $i <= 1000, $i++) {
    saveData('http://myapplication.com/user?id=' . $i);
}

// Result:
// http://myapplication.com/user?id=1
// http://myapplication.com/user?id=2
// http://myapplication.com/user?id=...
// http://myapplication.com/user?id=999
// http://myapplication.com/user?id=1000    
1, atau
for ($i = 1; $i <= 1000, $i++) {
    saveData('http://myapplication.com/user?id=' . $i);
}

// Result:
// http://myapplication.com/user?id=1
// http://myapplication.com/user?id=2
// http://myapplication.com/user?id=...
// http://myapplication.com/user?id=999
// http://myapplication.com/user?id=1000    
2. Sehingga Pengguna dapat mengetahui Pengguna mana yang mendaftar sebelum dan sesudahnya, meskipun hal itu mungkin tidak diperbolehkan. Atau, pengguna menggunakan
for ($i = 1; $i <= 1000, $i++) {
    saveData('http://myapplication.com/user?id=' . $i);
}

// Result:
// http://myapplication.com/user?id=1
// http://myapplication.com/user?id=2
// http://myapplication.com/user?id=...
// http://myapplication.com/user?id=999
// http://myapplication.com/user?id=1000    
_3, yang biasanya User ID
for ($i = 1; $i <= 1000, $i++) {
    saveData('http://myapplication.com/user?id=' . $i);
}

// Result:
// http://myapplication.com/user?id=1
// http://myapplication.com/user?id=2
// http://myapplication.com/user?id=...
// http://myapplication.com/user?id=999
// http://myapplication.com/user?id=1000    
4 adalah User Administrator, tentu ini berbahaya

Atau bisa saja ada orang iseng, hacker, yang penasaran, lalu membuat program untuk mendapatkan data semua User, hanya dengan perintah sederhana, misalnya

for ($i = 1; $i <= 1000, $i++) {
    saveData('http://myapplication.com/user?id=' . $i);
}

// Result:
// http://myapplication.com/user?id=1
// http://myapplication.com/user?id=2
// http://myapplication.com/user?id=...
// http://myapplication.com/user?id=999
// http://myapplication.com/user?id=1000    
_

Dengan script sederhana, hacker ini bisa mendapatkan semua data pengguna hanya dalam waktu singkat

Ceritanya, kami berhasil membuat aplikasi besar, dan digunakan di satu tempat. Datanya sudah ribuan. Lalu ada permintaan untuk install aplikasi di tempat lain juga, agar nantinya ada 2 server aplikasi, bahkan lebih

Data aplikasi di Server #1 sudah menggunakan Primary Key

for ($i = 1; $i <= 1000, $i++) {
    saveData('http://myapplication.com/user?id=' . $i);
}

// Result:
// http://myapplication.com/user?id=1
// http://myapplication.com/user?id=2
// http://myapplication.com/user?id=...
// http://myapplication.com/user?id=999
// http://myapplication.com/user?id=1000    
5 misalkan
for ($i = 1; $i <= 1000, $i++) {
    saveData('http://myapplication.com/user?id=' . $i);
}

// Result:
// http://myapplication.com/user?id=1
// http://myapplication.com/user?id=2
// http://myapplication.com/user?id=...
// http://myapplication.com/user?id=999
// http://myapplication.com/user?id=1000    
6. Aplikasi di Server #2, karena masih baru, tentu saja akan menggunakan Primary Key
for ($i = 1; $i <= 1000, $i++) {
    saveData('http://myapplication.com/user?id=' . $i);
}

// Result:
// http://myapplication.com/user?id=1
// http://myapplication.com/user?id=2
// http://myapplication.com/user?id=...
// http://myapplication.com/user?id=999
// http://myapplication.com/user?id=1000    
5 dari
for ($i = 1; $i <= 1000, $i++) {
    saveData('http://myapplication.com/user?id=' . $i);
}

// Result:
// http://myapplication.com/user?id=1
// http://myapplication.com/user?id=2
// http://myapplication.com/user?id=...
// http://myapplication.com/user?id=999
// http://myapplication.com/user?id=1000    
8 lagi, dan
for ($i = 1; $i <= 1000, $i++) {
    saveData('http://myapplication.com/user?id=' . $i);
}

// Result:
// http://myapplication.com/user?id=1
// http://myapplication.com/user?id=2
// http://myapplication.com/user?id=...
// http://myapplication.com/user?id=999
// http://myapplication.com/user?id=1000    
9 juga. Sampai saat ini tentunya tidak ada masalah, karena 2 aplikasi tersebut berjalan sendiri-sendiri

Belakangan ada permintaan untuk menggabungkannya menjadi 1 tempat, dengan alasan pengelolaan yang lebih mudah dan distribusi yang terpusat. Pertanyaannya, lalu bagaimana cara menggabungkannya? . Sedangkan Kunci Utama harus unik

Dalam kasus lain, aplikasi yang memiliki jumlah transaksi yang sangat besar, masif, dan cepat, misalnya dalam 1 detik ada 1000 transaksi/memasukkan data baru, fungsi

for ($i = 1; $i <= 1000, $i++) {
    saveData('http://myapplication.com/user?id=' . $i);
}

// Result:
// http://myapplication.com/user?id=1
// http://myapplication.com/user?id=2
// http://myapplication.com/user?id=...
// http://myapplication.com/user?id=999
// http://myapplication.com/user?id=1000    
9 ini tidak akan bekerja dengan baik. Namun jika insert masih dibatasi 1-2 menit saja, hal ini tidak menjadi masalah

Dari Wikipedia

Maksud dari UUID adalah untuk mengaktifkan sistem terdistribusi untuk mengidentifikasi informasi secara unik tanpa koordinasi pusat yang signifikan. Dalam konteks ini kata unik harus diartikan "praktis unik" daripada "dijamin unik". Karena pengidentifikasi memiliki ukuran yang terbatas, dua item yang berbeda mungkin memiliki pengidentifikasi yang sama. Ukuran pengidentifikasi dan proses pembangkitan perlu dipilih sehingga membuat hal ini cukup mustahil dalam praktiknya. Siapa pun dapat membuat UUID dan menggunakannya untuk mengidentifikasi sesuatu dengan keyakinan yang masuk akal bahwa pengidentifikasi yang sama tidak akan pernah dibuat secara tidak sengaja oleh siapa pun untuk mengidentifikasi sesuatu yang lain. Oleh karena itu, informasi yang diberi label dengan UUID dapat digabungkan ke dalam satu basis data tanpa perlu menyelesaikan konflik pengidentifikasi (ID).

Sederhananya, UUID adalah kumpulan 32 karakter (String) yang dibuat secara acak (random) dengan teknik khusus yang dijamin unik untuk setiap data. Bahkan dalam 1 detik, jika 1000 UUID dihasilkan, kecil kemungkinan akan ada UUID yang sama. Sehingga lebih cocok digunakan sebagai Primary Key

Contoh UUID (tanpa strip)

25769c6cd34d4bfeba98e0ee856f3e7a
00b245066523042a3bf4698f30617f0e
0179ec949e72ed4df4e0182965a71073

UUID tersebut tentu saja sulit ditebak oleh pengguna karena tidak memiliki pola tertentu. Jika ada seorang hacker yang ingin menggunakan program looping untuk mendapatkan semua data User, maka ia perlu membuat banyak kombinasi dari 32 karakter tersebut, tentunya tidak mudah dan membutuhkan waktu yang lama.

Jika kita mencari Composer Package di library Packagist yang populer digunakan untuk membuat UUID, ini adalah ramsey/uuid/website. RAMSEY/UUID / sumber. GitHub

Tambahkan paket ini di composer. json dengan perintah

composer require ramsey/uuid

Kemudian untuk menggunakannya, Anda bisa menggunakan contoh seperti yang ada di dokumentasi library ini

require 'vendor/autoload.php';

use Ramsey\Uuid\Uuid;

// Generate a version 1 (time-based) UUID object
$uuid1 = Uuid::uuid1();
echo $uuid1->toString() . "\n"; // e4eaaaf2-d142-11e1-b3e4-080027620cdd

// Generate a version 3 (name-based and hashed with MD5) UUID object
$uuid3 = Uuid::uuid3(Uuid::NAMESPACE_DNS, 'php.net');
echo $uuid3->toString() . "\n"; // 11a38b9a-b3da-360f-9353-a5a725514269

// Generate a version 4 (random) UUID object
$uuid4 = Uuid::uuid4();
echo $uuid4->toString() . "\n"; // 25769c6c-d34d-4bfe-ba98-e0ee856f3e7a

// Generate a version 5 (name-based and hashed with SHA1) UUID object
$uuid5 = Uuid::uuid5(Uuid::NAMESPACE_DNS, 'php.net');
echo $uuid5->toString() . "\n"; // c4a760a8-dbcf-5254-a0d9-6a4474bd1b62

UUID yang dibuat memiliki beberapa jenis versi (versi 1 sampai dengan 5) yang masing-masing memiliki persyaratan tersendiri. Saya biasanya menggunakan versi 4

Karena kita menggunakan string UUID sebagai Primary Key maka tipe data field yang dibuat tidak boleh Integer, melainkan harus Variable Character (VARCHAR), dengan panjang maksimal 32 karakter. Di Laravel, untuk Migrasi dan Pembuat Skema juga harus disesuaikan

Schema::create('users', function(Blueprint $table) 
{
    $table->string('id', 32)->primary();
});

Agar dapat menggunakan UUID pada Model ORM Eloquent, terlebih dahulu kita harus menonaktifkan fitur auto increment dengan cara

class User extends Model {

    protected $table = 'users';

    public $incrementing = false;

}

Kemudian kita dapat menggunakan UUID ini pada saat

25769c6cd34d4bfeba98e0ee856f3e7a
00b245066523042a3bf4698f30617f0e
0179ec949e72ed4df4e0182965a71073
4 data seperti biasa

use Ramsey\Uuid\Uuid;

class UserController extends Controller {

    public function store()
    {
        $user           = new User;
        $user->id       = Uuid::uuid4()->getHex(); // toString();
        $user->name     = "Yoga Hanggara";
        $user->save();
    }

    public function update($id)
    {
        $user = User::find($id);
        $user->save();
    }
}

Salah satu efek samping dari penggunaan UUID sebagai Primary Key adalah tidak bisa mengurutkan atau mengurutkan berdasarkan

for ($i = 1; $i <= 1000, $i++) {
    saveData('http://myapplication.com/user?id=' . $i);
}

// Result:
// http://myapplication.com/user?id=1
// http://myapplication.com/user?id=2
// http://myapplication.com/user?id=...
// http://myapplication.com/user?id=999
// http://myapplication.com/user?id=1000    
5, karena datanya berupa String, bukan Integer seperti biasanya. Untuk kebutuhan ini, kita harus dengan cerdik memanipulasi kolom
25769c6cd34d4bfeba98e0ee856f3e7a
00b245066523042a3bf4698f30617f0e
0179ec949e72ed4df4e0182965a71073
6 /
25769c6cd34d4bfeba98e0ee856f3e7a
00b245066523042a3bf4698f30617f0e
0179ec949e72ed4df4e0182965a71073
7

Apa fungsi dari suatu fungsi dalam PHP?

Function (atau Fungsi) dalam bahasa pemrograman adalah kode program yang dirancang untuk menyelesaikan tugas tertentu, dan merupakan bagian dari program utama . Kita dapat membuat fungsi kita sendiri, atau menggunakan fungsi yang dibuat oleh programmer lain.

Apa kepanjangan dari PHP?

Awalnya PHP adalah kependekan dari Personal Home Page (Personal site). PHP pertama kali dibuat oleh Rasmus Lerdorf pada tahun 1995. Pada saat itu PHP masih bernama Form Interpreted (FI), yaitu berupa sekumpulan script yang digunakan untuk mengolah data form dari web.