Showing posts with label php. Show all posts
Showing posts with label php. Show all posts

Plugins Wordpress minify HTML

Kalau kita cek blog kita menggunakan gtmetrix skor minify HTML tidak 100%. Plugins ini fungsinya untuk merampingkan konten/posting kita dengan membuang white space dan karakter CR LF (untuk ganti baris), dengan demikian ukuran halaman kita akan sedikit berkurang dan akan sedikit mempercepat pageload.
Langsung saja copas code berikut ini, simpan sebagai file php dan unggah ke folder plugins. Selanjutnya aktifkan dari dashboard admin wordpress.
<?php
/*
Plugin Name: OMH Ogah Minify HTML
Description: Remove white space from the content
Version: 1.0
Author: Ogah
Author URI: http://wallpaper.4fd.us/
*/

function minifyhtml( $content ) {
 $original = $content; // get original content
 $content = preg_replace('/\s\s+|\r|\n/sui', '', $original);
 return $content;
}
add_filter('the_content', 'minifyhtml', 20);


Catatan:
Plugins ini hanya memproses content post, untuk html di header, sidebar maupun footer tidak akan berubah.
Anda bisa mengedit template dengan menghapus white space secara manual atau gunakan plugins yang bisa meminify keseluruhan code html blog.

Plugins dan posting ini boleh dishare ulang asal tidak merubah link Author URI

Membuat Badword Filter

Kali ini saya akan berbagi cara membuat badword filter.
Saya membuat script ini karena udah pusing muter-muter nyari badword filter yang bisa mereject komen yang mengandung kata-kata kotor.
Kebanyakan script yang sudah dishare adalah script untuk mengganti kata kotor dengan kata-kata lain, atau ada juga yang mereject kata-kata kotor tapi kalau ada awalan atau akhiran dari kata-kata tersebut yang artinya lain tetep kena filter atau kereject.
contoh: ass adalah badword, tapi pass atau association bukan badword. kadang pada kasus ini pass dan association juga ikut kena.

Ok langsung saja, berikut ini scriptnya
<?php
// ini cuma contoh array badword yang akan difilter
// silakan ganti sendiri kata apa aja yang mau difilter
$badword = array('anu', 'mumet', 'pusing');
$ban = "/\b(".implode('|', $badword).")\b/siu";
if(preg_match($ban, $post)) {
 echo 'Sorry kamu tidak diijinkan memposting dengan kata-kata kotor';
}
else {
 // post diproses
}
?>

Perhatikan script tersebut, yang membuat script ini beda dengan yang lain adalah \b atau boundary.
Dengan ditambahkan boundary pada delimiter maka pass dan association tidak akan match dengan ass.

Boundari juga bisa dipakai dalam fungsi preg_replace yang cuma akan mengganti match word, bukan mengganti word yang mengandung unsur match (gak jelas ngomong apa ini, intinya gitu lah hehe)
ok, sekian saja silakan mencoba dan silakan mumet sendiri :)

Plugins wordpress pengaman wp admin dan menyembunyikan wp login

Plugins ini bikinanku sendiri, masih bingung mau aku kasih nama apa :)
Sementara aku kasih nama "Menyembunyikan wp-login" Gunanya kalau ada orang iseng mau membuka/mengakses dashboar wordpress atau mau buka halaman login, maka yang akan muncul adalah error 404.
Error 404 ini adalah kode error jika file atau URL yang kita buka tidak ada.
Langsung saja saya share langkah-langkah pembuatan pluginsnya.
  1. Bikin file text cuma berisi 2 baris terserah mau disimpan dengan nama apa, boleh pake .txt atau .dat atau .ini
    contoh: konfigurasi.txt
    tulis username pada baris pertama dan password pada baris kedua.
    user name dan password tidak harus sama dengan user dan password wordpressnya, saya anjurkan beda dengan yang untuk wordpress.
  2. Copy kode berikut ini, perhatikan konfigurasi.txt adalah file text yang tadi dibikin
    <?php
    /*
    Plugin Name: Menyembunyikan wp-login
    Description: URL wp-login.php tidak akan muncul jika belum login pakai form login plugin ini
    Version: 0.0.7
    Author: Hendro
    Author URI: http://www.mp3free4.us/
    */
    
    $konfig = dirname(__FILE__).'/konfigurasi.txt';
    $usr = file($konfig);
    $anggota = trim($usr[0]);
    $pas = trim($usr[1]);
    $cuki = $anggota.$pas;
    $cuki = md5(md5($cuki));
    
    if(isset($_GET['action']) && $_GET['action'] == 'logout') {
     setcookie('mlebu', '');
    }
    if(isset($_GET['loggedout']) && $_GET['loggedout'] == 'true') {
     header('Location: ./'); exit;
    }
    
    if($_SERVER['REQUEST_URI'] === '/mumet') {
     if(isset($_POST['mlebu'])) {
      if($_POST['jeneng'] === $anggota && $_POST['kunci'] === $pas) {
       $coki = $_POST['jeneng'].$_POST['kunci'];
       $coki = md5(md5($coki));
       setcookie('mlebu', $coki, time()+(3600*2), '/');
      }
     }
    
    ?>
    <html>
    <head>
    <title>User Login</title>
    </head>
    <body>
    <h1>User Login</h1>
    <form method='post' action=''>
    <table>
    <tr><td>Username</td><td>: <input type='text' name='jeneng' autocomplete='off' value=''/></td></tr>
    <tr><td>Password</td><td>: <input type='password' name='kunci' autocomplete='off' value=''/></td></tr>
    <tr><td colspan='2'><input type='submit' name='mlebu' value='Login' style='float:left;'/></td></tr>
    </table>
    </form>
    <?php
     if(isset($_POST['mlebu'])) {
      if($_POST['jeneng'] === $anggota && $_POST['kunci'] === $pas) {
       echo '<h2>Login Tahap 1 Sukses</h2>Tunggu sebentar, anda akan di bawa masuk ke login selanjutnya.<br/><b>Demi keamanan sesi untuk administrator dibatasi hanya 2 jam, setelah itu anda harus login lagi dari awal.</b><br/><br/>Jika dalam waktu 10 detik anda tidak otomatis diredirect ke login selanjutnya silakan <a href="../wp-login.php">klik di sini</a><meta http-equiv="refresh" content="10; url=../wp-login.php">';
      }
      else { echo '<h2>Login Salah</h2>Silakan coba lagi.'; }
     }
    echo "<br/>\r\n</body>\r\n</html>";
    exit;
    }
    
    perhatikan baris ini
    if($_SERVER['REQUEST_URI'] === '/mumet') {
    '/mumet' itu nanti digunakan untuk URL login, contoh http://domain.com/mumet
    anda harus mengganti mumet dengan kata yang lain dan usahakan yang susah ditebak
    simpan sebagai file php terserah mau pakai nama apa, disimpan sebagai index.php juga boleh
  3. Buka FTP atau file manager cpanel hosting anda dan masuk ke folder wp-content, masuk lagi ke subfolder plugins.
    bikin subfolder baru di dalam folder plugins dan upload kedua file tadi ke folder baru tersebut.
  4. Login ke dashboard wordpress kemudian aktifkan plugin Menyembunyikan wp-login ini
  5. Balik ke FTP atau file manager cpanel lagi.
    edit file php plugin ini kemudian tambahkan kode berikut ini di bawah tanda } yang paling bawah
    if(!isset($_COOKIE['mlebu']) OR $_COOKIE['mlebu'] != $cuki){
     if(preg_match('/wp-login/', $_SERVER['REQUEST_URI']) OR preg_match('/\/wp-admin/', $_SERVER['REQUEST_URI'])) {
      header('HTTP/1.1 404 Not Found');
      header("Status: 404 Not Found");
    ?>
    <html>
    <head>
    <meta name="viewport" content="width=device-width, minimum-scale=1.0, maximum-scale=1.0" />
    <meta name="robots" content="noindex, noodp, noydir" />
    <title>404 Not Found</title>
    </head><body>
    <h1>Not Found</h1>
    
    
    <br/>
    The request URL <?php echo $_SERVER["REQUEST_URI"]; ?> was not found on this server.<br />
    </body>
    </html>
    <?php
      exit();
     }
    }
    
  6. Coba balik lagi ke dashboard wp dan refresh, kalau yang muncul error 404 Not Found berarti anda sudah berhasil menginstall plugins pengaman ini.
    Selanjutnya untuk masuk ke dashboard, anda harus melewati 2 login. yang pertama login yang digenerate oleh plugins Menyembunyikan wp-login dan yang kedua login aslinya wordpress
Pasti timbul pertanyaan "Kenapa kok ada penambahan kode setelah plugin diaktivasi, kenapa gak ditulis langsung pada saat sebelum diupload?"
Karena kalau ditulis sekalian sebelum diupload maka plugins ini tidak akan bisa diaktivasi karena keburu error 404 lebih dulu dan bahkan seterusnya dashboard akan error 404 kalau pluginnya belum kita hapus ;)
Penambahan kode di atas juga tidak bisa dilakukan lewat plugins editor di dashboard wp, kecuali kalau mau edit user dan passwordnya.

All in 1 Rewrite URL htaccess

Kali ini saya akan berbagi trik untuk Rewrite URL .htaccess yang dapat digunakan untuk bermacam-macam fungsi.
anda mungkin pernah menggunakan .htaccess berikut ini
RewriteEngine on
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

dan mungkin rewrite rule tersebut masih anda tambah lagi dengan rewrite rule yang lain yang sebenarnya tidak dibutuhkan lagi jika anda sudah menggunakan rule yang di atas itu.

Dengan htaccess tersebut di atas, anda dapat membuat bermacam kombinasi permalink dan bermacam handling.
Kuncinya semua handling dan permalink diatur dari file index.php

Berikut ini saya berikan beberapa contoh permalink dan handling.
1. Permalink menyerupai folder
Anda ingin URL semacam
http://domain.com/?id=1&name=budi
menjadi
http://domain.com/1/budi

anda tidak perlu lagi menambahkan rule ke .htaccess, anda cukup menambahkan fungsi di index.php dan merubah sedikit skrip yang menghandle query string id=1&name=budi karena sekarang sudah tidak bisa lagi menggunakan $_GET
Lalu bagaimana cara mendapatkan value id = 1 dan name = budi?
kita bisa menggunakan
$_SERVER['REQUEST_URI']
atau
$_SERVER['REDIRECT_URL']

caranya di file index.php tambahkan fungsi ini
$query = $_SERVER['REDIRECT_URL'];
$query = explode('/', $query);
if(count($query) > 3) { header('Location: http://domain.com'); exit; }
dari sini kita mendapatkan $query[1] = 1 dan $query[2] = budi
perubahan yang harus kita lakukan:
misal semula kita menggunakan $id = $_GET['id']; sekarang kita ganti $id = $query[1];
dan $name = $_GET['name']; kita ganti $name = $query[2]; baris yang if(count($query) > 3) { header('Location: http://domain.com'); exit; } kita gunakan sebagai pengaman kalau ada visitor yang iseng menambahkan folder yang panjang di URL

2. Rewrite URL search seperti search engine
URL
http://domain.com/search.php?q=test
menjadi
http://domain.com/search?q=test

kita tambahkan fungsi berikut ke file index.php
if($_SERVER['REDIRECT_URL'] == '/search') {
$q = $_GET['q'];
}
atau bisa juga seperti ini
if($_SERVER['REDIRECT_URL'] == '/search') {
include('search.php');
}

Untuk rewrite yang jenis ini kita masih dapat menggunakan $_GET untuk mendapatkan value dari query string.
fungsi if di atas hanya digunakan untuk menghandle jika URL nya
http://domain.com/search
atau
http://domain.com/search?q=test


3. Menghandle extension yang bukan .php
Anda ingin file php anda bisa dibuka pakai extension lain misal .html atau .txt
kita tinggal menambahkan fungsinya di index.php contoh URL nya
http://domain.com/latihan.html
tapi berjalan sebagai php dan URL aslinya adalah
http://domain.com/latihan.php

if($_SERVER['REDIRECT_URL'] == '/latihan.html') {
include('latihan.php'); exit;
}

atau URL nya
http://domain.com/latihan.txt
tapi berjalan sebagai php dan URL aslinya adalah
http://domain.com/latihan.php

if($_SERVER['REDIRECT_URL'] == '/latihan.txt') {
include('latihan.php'); exit;
}


Anda ingin gambar dari website lain tapi URL nya pakai domain anda
http://domain.com/image.jpg
sumbernya dari
http://domainlain.com/image.jpg

if($_SERVER['REDIRECT_URL'] == '/image.jpg') {
header('Content-Type: image/jpeg');
$img = file_get_contents('http://domainlain.com/image.jpg');
echo $img; exit; }


Untuk jenis permalink atau handling yang lain silakan coba-coba sendiri. Untuk menghandle extension anda mungkin harus menambahkan header content-type sesuai MIME type masing-masing.

Catatan:
Trik ini tidak akan berjalan jika ada file aslinya
misal seperti contoh di atas jika file
http://domain.com/latihan.html
ada, maka yang dibuka di browser adalah file latihan.html bukan latihan.php meski sudah kita atur handlingnya di index.php

PHP Geo targeted content atau geo targeted ads

Kadang untuk beberapa alasan tertentu, kita ingin menampilkan konten (content) atau iklan (ads) hanya untuk pengunjung dari negara tertentu saja.
Script ini bisa digunakan untuk keperluan tersebut.
Negara dari IP pengunjung kita dapatkan dari API www.freegeoip.net yang gratis kita gunakan dengan batasan 10.000 queries per jam.
langsung saja, scriptnya seperti ini

contoh hanya untuk menampilkan iklan atau konten visitor dari negara Amerika
$urlgeo = "http://www.freegeoip.net/json/".$_SERVER['REMOTE_ADDR'];
$geo = file_get_contents($urlgeo);
$jsgeo = json_decode($geo, true);
$negara = $jsgeo['country_code'];
if($negara == 'US') {
 echo 'konten atau kode iklan';
}


contoh untuk menampilkan iklan jika visitor bukan dari negara Cina
$urlgeo = "http://www.freegeoip.net/json/".$_SERVER['REMOTE_ADDR'];
$geo = file_get_contents($urlgeo);
$jsgeo = json_decode($geo, true);
$negara = $jsgeo['country_code'];
if($negara != 'CN') {
 echo 'konten atau kode iklan';
}
mudah-mudahan script ini bermanfaat.

PHP Validasi Tanggal

Pada artikel sebelumnya telah kita bahas cara merubah/konversi tanggal menjadi nama hari.
Tapi tanpa adanya validasi maka akan terkesan aneh jika tanggal 50 dianggap ada :)
Langsung saja ke fungsi PHP nya.
Yang kita pakai untuk validasi tanggal dengan adalah fungsi checkdate()
Penggunaannya checkdate('bulan/tanggal/tahun) atau silakan baca referensinya di manual fungsi checkdate.

Dari contoh form pada artikel Konversi tanggal menjadi hari menggunakan PHP kalau kita validasi maka perlu kita tambahkan code berikut setelah if(isset($_GET['ubah'])) {

$cek = checkdate($_POST['m'], $_POST['d'], $_POST['y']);
if($cek != 1) { echo 'Tanggal tidak valid'; }

atau script lengkapnya menjadi seperti ini

<?php
echo '<form method="get" action="">
tanggal:<input type="text" name="tanggal" value="">
<select name="bulan">
<option value="1">Januari</option>
<option value="2">Pebruari</option>
<option value="3">Maret</option>
<option value="4">April</option>
<option value="5">Mei</option>
<option value="6">Juni</option>
<option value="7">Juli</option>
<option value="8">Agustus</option>
<option value="9">September</option>
<option value="10">Oktober</option>
<option value="11">November</option>
<option value="12">Desember</option>
</select>
tahun:<input type="text" name="tahun" value="">
<input type="submit" name="ubah" value="Cari Hari">
</form><br/>';
if(isset($_GET['ubah'])) {
$cek = checkdate($_POST['m'], $_POST['d'], $_POST['y']);
if($cek != 1) {
echo 'Tanggal tidak valid!';
}
else {
$tgl = $_GET['bulan'].'/'.$_GET['tanggal'].'/'.$_GET['tahun'];
$unix = strtotime($tgl);
$hari = date("D", $unix);
$hari = str_replace('Sun', 'Minggu', $hari);
$hari = str_replace('Mon', 'Senin', $hari);
$hari = str_replace('Tue', 'Selasa', $hari);
$hari = str_replace('Wed', 'Rabu', $hari);
$hari = str_replace('Thu', 'Kamis', $hari);
$hari = str_replace('Fri', 'Jum\'at', $hari);
$hari = str_replace('Sat', 'Sabtu', $hari);
echo 'tanggal '.$_GET['tanggal'].'-'.$_GET['bulan'].'-'.$_GET['tahun'].' adalah hari '.$hari;
}
}
?>


hasil dari checkdate() ini adalah 1 atau TRUE jika benar dan 0 atau FALSE jika salah (tidak valid).

semoga bermanfaat

Konversi tanggal menjadi hari menggunakan PHP

Script ini digunakan untuk mengetahui hari dari tanggal yang diinput, atau bisa dibilang konversi tanggal ke hari. Fungsi-fungsi PHP yang digunakan dalam script ini yaitu:
  • strtotime()
    gunanya untuk memparsing tanggal menjadi unix timestamp.
  • date()
    untuk mendapatkan local time/date (tanggal dan jam server)
Penggunaan fungsi strtotime() adalah sebagai berikut: strtotime('bulan/tanggal/tahun') lebih detailnya bisa baca di manual fungsi strtotime dan untuk fungsi date bisa baca di manual fungsi date script lengkapnya seperti ini:
<?php
echo '<form method="get" action="">
tanggal:<input type="text" name="tanggal" value="">
<select name="bulan">
 <option value="1">Januari</option>
 <option value="2">Pebruari</option>
 <option value="3">Maret</option>
 <option value="4">April</option>
 <option value="5">Mei</option>
 <option value="6">Juni</option>
 <option value="7">Juli</option>
 <option value="8">Agustus</option>
 <option value="9">September</option>
 <option value="10">Oktober</option>
 <option value="11">November</option>
 <option value="12">Desember</option>
</select>
tahun:<input type="text" name="tahun" value="">
<input type="submit" name="ubah" value="Cari Hari">
</form><br/>';
if(isset($_GET['ubah'])) {
 $tgl = $_GET['bulan'].'/'.$_GET['tanggal'].'/'.$_GET['tahun'];
 $unix = strtotime($tgl);
 $hari = date("D", $unix); // hasilnya 3 huruf nama hari bahasa inggris
 # supaya harinya menjadi bahasa indonesia maka harus kita gant/replace
 $hari = str_replace('Sun', 'Minggu', $hari);
 $hari = str_replace('Mon', 'Senin', $hari);
 $hari = str_replace('Tue', 'Selasa', $hari);
 $hari = str_replace('Wed', 'Rabu', $hari);
 $hari = str_replace('Thu', 'Kamis', $hari);
 $hari = str_replace('Fri', 'Jum\'at', $hari);
 $hari = str_replace('Sat', 'Sabtu', $hari);
 echo 'tanggal '.$_GET['tanggal'].'-'.$_GET['bulan'].'-'.$_GET['tahun'].' adalah hari '.$hari;
}
?>
Tapi fungsi date ini tidak memiliki validator sendiri, jika tanggal yang diinput lebih besar dari 31 atau tidak ada dalam kalender maka tanggal tersebut akan tetap di proses dan dianggap bulan berikutnya. misal kita masukkan tanggal 31 April 2012, maka script akan membacanya sebagai tanggal 1 Mei 2012. Untuk memvalidasi input tanggal agar sesuai dengan kalender akan saya sampaikan lain waktu.