Bismillaahirrohmaanirrohiim…
Di bawah ini adalah fungsi yang berguna di PHP yang sering dipakai oleh programmer PHP.
Generate uniq ID
Biasanya di database MySQL programmer suka menggunakan autoincrement untuk primary key-nya, namun masalahnya akan muncul saat syncronisasi data dari beberapa database backup, karena bisa jadi nilai primary-nya sama.
Sebagai solusinya, programmer membuat sendiri fungsi yang menandai ID primary key benar-benar unik.
function getId() { $idt = explode(" ", microtime()); $uniqid = $idt[1]. substr($idt[0], 2); return $uniqid.rand(1000,9999); } //hasil contoh: 1618802094566629001421 (22 digit)
atau
function getId() { return uniqid(rand(1000,9999),true); //tanpa titik //return str_replace('.', '', uniqid(rand(100,999),true)); } //hasil contoh: 7408607ce1535575e0.35457382 (27 digit)
fungsi di atas bisa jadi masih berpotensi menghasilkan kode yang sama, silahkan ubah random angkanya sesuai kebutuhan.
Menampilkan teks saat kode dijalankan
Saat menjalankan program PHP, biasanya teks baru akan ditampilkan setelah kode pada file tersebut selesai dieksekusi.
Nah, untuk menampilkan text tanpa menunggu kode selesai diekseskusi fungsinya adalah sebagai berikut:
function print_cmd($txt) { echo $txt; @ob_end_flush(); @ob_flush(); flush(); ob_start(); }
Menunggu user input saat php CLI dijalankan
function wait_user_input() { $handle = fopen ("php://stdin","r"); $line = fgets($handle); fclose($handle); return trim($line); }
Host tidak sama dengan domain kita
Jika kita punya website dengan IP address private, semua domain dapat diarahkan ke IP website kita.
Sehingga jika ada orang iseng membuat nama domain lain kemudian diarahkan ke IP website kita, jadinya web kita mempunyai banyak alamat website.
Contoh, IP server kita 123.123.123.123 bisa untuk domain webku.com, webmu.com, webkita.com dengan tampilan yang sama.
Agar setiap domain yang diarahkan ke IP server menjadi benar-benar domain milik kita, fungsinya adalah sbb:
if (strtolower($_SERVER['HTTP_HOST']) !== 'namadomainku.com') { header('location:https://namadomainku.com'.$_SERVER['REQUEST_URI']); exit(); }
Echo pre
Untuk memudahkan membaca array, daripada var_dump hehehe
function echoPre($arr) { echo '<pre>'; print_r($arr); echo '</pre>'; }
Teks menjadi slug
Tujuan sudah jelas, agar link kita sesuai judul berita sehingga disukai search engine.
function textToSlug($text='') { $text = trim($text); if (empty($text)) return ''; $text = preg_replace("/[^a-zA-Z0-9\-\s]+/", "", $text); $text = strtolower(trim($text)); $text = str_replace(' ', '-', $text); $text = $text_ori = preg_replace('/\-{2,}/', '-', $text); return $text; }
Slug menjadi text
Kebalikan dari teks menjadi slug, dari URL menjadi teks yang mudah dibaca manusia.
function slugToText($slug='') { $slug = trim($slug); if (empty($slug)) return ''; $slug = str_replace('-', ' ', $slug); $slug = ucwords($slug); return $slug; }
simpan html yang ditampilkan kedalam teks
Ini biasa dipakai saat ingin cache full page, beberapa plugin cache wordpress konsepnya dia membuat file statis (txt, html, dll) berdasarkan URL, jika sudah disimpan dalam cache saat ada akses ke URL tersebut tidak perlu query macem-macem, tinggal ambil dari cache yang disimpan tersebut.
berikut ini cara menyimpan teks, html, css, javascript ke dalam file statis.
$cached_file = dirname(__FILE__).'/cache/namacache.html'; ob_start(); //teks/html/css/javascript @file_put_contents($cached_file, ob_get_contents());
Redirect http ke https dengan PHP
Kode di bawah ini bisa digunakan untuk wordpress maupun untuk web PHP pada umumnya. Contoh ini jika dipakai di wordpress terbaru.
<?php $host_http = 'yourdomain.com'; if (!isset($_SERVER['HTTP_HOST'])) $_SERVER['HTTP_HOST'] = $host_http; if (!isset($_SERVER['REQUEST_URI'])) $_SERVER['REQUEST_URI'] = ''; if (strtolower($_SERVER['HTTP_HOST']) !== $host_http) { header('location:https://'.$host_http.$_SERVER['REQUEST_URI']); exit(); } $protocol_web = ((!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS']!=='off') || $_SERVER['SERVER_PORT']==443) ? 'https://':'http://'; if ($protocol_web==='http://') { header('location:https://'.$host_http.$_SERVER['REQUEST_URI']); exit(); } /** * Front to the WordPress application. This file doesn't do anything, but loads * wp-blog-header.php which does and tells WordPress to load the theme. * * @package WordPress */ /** * Tells WordPress to load the WordPress theme and output it. * * @var bool */ define( 'WP_USE_THEMES', true ); /** Loads the WordPress Environment and Template */ require( dirname( __FILE__ ) . '/wp-blog-header.php' );
Set timezone asia jakarta
ini_set('date.timezone','Asia/Jakarta');
//bisa juga ditambahkan dibawahnya date_default_timezone_set("Asia/Jakarta");
Mengambil nama file yang sedang diakses
//misal url = https://namadomain/blog/proses-data.php basename(__FILE__, '.php'); output: proses-data basename(__FILE__); output: proses-data.php
Cek JSON valid atau tidak
$array = json_decode($json, true); if (json_last_error() !== JSON_ERROR_NONE) { echo 'json not valid'; } else { echo 'json valid'; }
Hapus tag HTML dan isinya dengan PHP
<?php //menghapus semua tag <table> tanpa property dan isinya $html = preg_replace('#<table>(.*?)</table>#is', '', $html); //menghapus semua tag <tr> yang mempunyai class dimulai "tebal" $html = preg_replace('#<tr class=\"tebal(.*?)>(.*?)</tr>#is', '', $html); //menghapus semua tag <script property> dan isinya, dengan property/attribute apa saja $html = preg_replace('#<script(.*?)>(.*?)</script>#is', '', $html); //menghapus semua tag <script property> dan isinya, dengan property/attribute apa saja $html = preg_replace('/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/is', '', $html); //menghapus semua tag <img property> dan isinya, dengan property/attribute apa saja $html = preg_replace("/<img[^>]+\>/i", "", $html);
Menghapus properti/atribut dari tag HTML
<?php //menghapus property "type" dari tag <ul>, isinya tetap ada $html = preg_replace('/<ul type="(.+?)">(.+?)<\/ul>/i', "<ul>$2</ul>", $html);
Menghapus isi dari property nya saja
//style akan dikosongkan/dihapus preg_replace('/(<[^>]+) style=".*?"/i', '$1', $string); //style akan dikosongkan/dihapus pada tag img preg_replace('/(<img[^>]+) style=".*?"/i', '$1', $string);
Menghapus semua atribut di semua tag HTML
$teks = '<span class="abc" style="padding:10px;"><strong style="padding:10;margin:10;">ini teks tebal</strong></span>'; $teks = preg_replace("/<([a-z][a-z0-9]*)[^>]*?(\/?)>/si",'<$1$2>', $teks); //hasilnya=> <span><strong>ini teks tebal</strong></span> /* penjelasan regex di atas / # Mulai Pattern < # Cari '<' pada awalan setiap tag ( # Mulai group $1 nama tag [a-z] # harus berisi 'a' sampai 'z' [a-z0-9]* # harus berisi 'a' sampai 'z' atau angka '0' sampai '9'. 0 atau beberapa kali. ) # selesai Group tag [^>]*? # temukan sesuatu selain tutup tag '>', 0 atau beberapa kali, apa saja (\/?) # Mulai Group $2 - '/' jika ada > # temukan tutup tag '>' /is # finish Pattern - Case Insensitive huruf besar dan kecil dan bisa Multi-line */
Membuat fungsi ago, konversi tanggal menjadi teks
//deprecate on php >= 8 function time_elapsed_string($datetime, $full = false) { $now = new DateTime; $ago = new DateTime($datetime); $diff = $now->diff($ago); $diff->w = floor($diff->d / 7); $diff->d -= $diff->w * 7; $string = array( 'y' => 'year', 'm' => 'month', 'w' => 'week', 'd' => 'day', 'h' => 'hour', 'i' => 'minute', 's' => 'second', ); foreach ($string as $k => &$v) { if ($diff->$k) { $v = $diff->$k . ' ' . $v . ($diff->$k > 1 ? 's' : ''); } else { unset($string[$k]); } } if (!$full) $string = array_slice($string, 0, 1); return $string ? implode(', ', $string) . ' ago' : 'just now'; } //updated function time_elapsed_string($datetime, $full = false) { $timestamp = strtotime($datetime); $strTime = array("second", "minute", "hour", "day", "month", "year"); $length = array("60","60","24","30","12","10"); $currentTime = time(); if($currentTime >= $timestamp) { $diff = time()- $timestamp; for($i = 0; $diff >= $length[$i] && $i < count($length)-1; $i++) { $diff = $diff / $length[$i]; } $diff = round($diff); $s = ($diff > 1) ? 's' : ''; return $diff . " " . $strTime[$i].$s . " ago "; } return 'just now'; }
Ukuran file menjadi human readable
function human_filesize($bytes, $dec = 2) { $size = array('B', 'kB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'); $factor = floor((strlen($bytes) - 1) / 3); return sprintf("%.{$dec}f", $bytes / pow(1024, $factor)) . @$size[$factor]; }
Cache file dengan waktu
$data_arr = array(); $file_cache = dirname(__FILE__).'/file_cache.json'; $getcache = false; if (is_file($file_cache)) { $mod_time = filemtime($file_cache); $selisih_detik = time() - $mod_time; //$selisih_menit = floor(($selisih_detik%3600)/60); $selisih_menit = ($selisih_detik/60); if ($selisih_menit < 60) { $getcache = true; } //dipanggil terus bisa jadi curl dibawah gagal $hasils = file_get_contents($file_cache); $data_arr = json_decode($hasils, true); }
Cara scan folder dan file dengan PHP
//iterasi file $myfiles = array_diff(scandir(dirname(__FILE__).'/namafolder'), array('.', '..')); foreach ($myfiles as $fname_prev) { if (strpos($fname_prev, '~')!==false) continue;//biasanya untuk skip temporary file }
Demikian beberapa fungsi yang berguna yang biasa digunakan programmer PHP untuk keperluan ngoding.
Monggo jika ada yang ingin menambahkan fungsi berguna atau ingin membuat fungsi lainnya.
Semoga bermanfaat…