diff --git a/content/blog/script-php-cek-double-entry-dari-setiap-line-dalam-1-file/feature-find-duplicate-php-script.png b/content/blog/script-php-cek-double-entry-dari-setiap-line-dalam-1-file/feature-find-duplicate-php-script.png
new file mode 100644
index 0000000..d172f06
Binary files /dev/null and b/content/blog/script-php-cek-double-entry-dari-setiap-line-dalam-1-file/feature-find-duplicate-php-script.png differ
diff --git a/content/blog/script-php-cek-double-entry-dari-setiap-line-dalam-1-file/index.id.md b/content/blog/script-php-cek-double-entry-dari-setiap-line-dalam-1-file/index.id.md
new file mode 100644
index 0000000..e2430ac
--- /dev/null
+++ b/content/blog/script-php-cek-double-entry-dari-setiap-line-dalam-1-file/index.id.md
@@ -0,0 +1,260 @@
+---
+title: "Script PHP Cek Double Entry Dari Setiap Line Dalam 1 File"
+description: "Script untuk pengecekan double entry dari setiap linenya dalam 1 file. Dapat digunain juga untuk pengecekan wordlist, email, password, proxy, dll"
+date: 2012-12-01T20:25:00+07:00
+lastmod:
+draft: false
+noindex: false
+featured: false
+pinned: false
+# comments: false
+series:
+# -
+categories:
+ - Programming
+tags:
+ - PHP
+images:
+# -
+# menu:
+# main:
+# weight: 100
+# params:
+# icon:
+# vendor: bs
+# name: book
+# color: '#e24d0e'
+authors:
+# - ditatompel
+---
+
+Jadi ceritanya kemarin ada **NOC** yang bertanya, bisa ga sih klo kita ngecek entri konfigurasi yang *double* menggunakan script. Terus ane dikasi contoh file yang namanya `nice.rsc`. Setelah saya buka, ternyata file tersebut digunakan untuk menambahkan alamat IP yang terdaftar di **OpenIXP** ke **MikroTik RouterOS**.
+
+
+
+Setelah saya cek lagi dari atas ke bawah, ternyata konfigurasinya 1 line 1 rule. Karena 1 line 1 rule juga saya jadi ingat dengan sistem semacam wordlist untuk melakukan *bruteforce*. =D
+
+
+Lalu saya iseng dan membuat scriptnya untuk ngecek entry yang double dari setiap linenya dalam 1 file. Jadi bisa digunain juga untuk ngecek wordlist, email, password, proxy, dll yang double2.
+
+Penampakannya kurang lebih seperti di sini :
+
+{{< youtube cCQPADuOHfU >}}
+
+Scriptnya:
+```php
+checkReqFunc();
+
+ $this->cmd = $this->args($opts);
+ if ( !array_key_exists('list', $this->cmd) )
+ exit( $this->usage($this->cmd['input'][0]) );
+ $this->enumValues($this->cmd['list']);
+ }
+
+ function checkReqFunc() {
+ $ok = 1;
+ foreach( $this->reqFunc as $func ) {
+ if ( !function_exists($func) ) {
+ print 'You need function ' . $func . " to execute this tool!\n";
+ $ok = 0;
+ }
+ }
+ if(php_sapi_name() != 'cli') {
+ print "This is not WebBased program! Use this tool from CLI.";
+ $ok = 0;
+ }
+ if ( !$ok ) exit;
+ }
+
+ /**
+ * Check list file
+ * @return bool. TRUE if file exists and readable.
+ */
+ function cekFile ($file) {
+ if ( !is_file($file) || !is_readable($file) )
+ return false;
+ return true;
+ }
+
+ private function usage($file) {
+ $msg = "Usage : ";
+ $msg .= $file . " --list=[list]\n";
+ $msg .= "\tOptions : \n";
+ $msg .= "\t\t-v :\t\t verbose mode.\n";
+ $msg .= "\t\t--out=[file] :\t Save non duplicate entry to file.\n";
+ $msg .= "Example :\n";
+ $msg .= $file . " --list=/path/to/file.txt --out=/path/to/file.txt.new -v\n";
+ return $msg;
+ }
+
+ private function enumValues($filename) {
+ if ( !$this->cekFile($filename) )
+ exit("File is not readable!\n");
+ if ( array_key_exists("out", $this->cmd) ) {
+ $this->checkWrite($this->cmd['out']);
+ $fh = fopen($this->cmd['out'], 'w');
+ }
+ $time_start = microtime(1);
+ print "File : " . $filename . " (" . $this->format_bytes(filesize($filename)) . ")\n";
+ $fGetContents = file_get_contents($filename);
+ $content = explode("\n", $fGetContents);
+ $totalLines = count($content);
+ print "Total : " . $this->plural($totalLines,'line') . "\n";
+ $totalDuplicate = 0;
+ print "Please be patient, process will be a little longer for large file sizes...\n";
+ $unique = array_unique($content);
+ if( $totalLines > count($unique) ) {
+ for($i = 0; $i < $totalLines; $i++) {
+ $percentage = (int)number_format($i/$totalLines, 2, '', '');
+ $prog = "Progress : " . $this->ID_nummeric($i) . "/" . $this->ID_nummeric($totalLines) . " " . $percentage . "%";
+ echo $prog;
+ echo "\033[" . strlen($prog) . "D";
+ if(!array_key_exists($i, $unique)) {
+ if ( array_key_exists("v", $this->cmd) )
+ print "Duplicate entry on line " . ($i+1) . ": " . $content[$i] . "\n";
+ $totalDuplicate++;
+ }
+ else {
+ if ( array_key_exists("out", $this->cmd) ) {
+ if ( !is_writable($this->cmd['out']) )
+ exit("[Error] " . $this->cmd['out'] . " is not writable.\n");
+ fwrite($fh, $content[$i] . "\n");
+ }
+ }
+ }
+ }
+ print "Total duplicate entry : " . $this->plural($totalDuplicate) . "\n";
+ if ( array_key_exists("out", $this->cmd) )
+ print "New list saved to: " . $this->cmd['out'] . " (" . $this->format_bytes(filesize($this->cmd['out'])) . ")\n";
+ $time_end = microtime(1);
+ $execution_time = ($time_end - $time_start);
+ print 'process complete in ' . $execution_time . " sec\n";
+ }
+
+ private function ID_nummeric ($number) {
+ return number_format($number, 0, ',','.');
+ }
+
+ private function checkWrite($location) {
+ if ( is_dir($location) )
+ exit("[Error] " . $location . " is a directory.\n");
+ }
+
+ private function plural($number, $txt='item') {
+ if ( $number > 1 )
+ return $this->ID_nummeric($number) . " " . $txt . "s";
+ return $this->ID_nummeric($number) . " " . $txt;
+ }
+
+ // yatsynych at gmail dot com
+ function format_bytes($a_bytes) {
+ if ($a_bytes < 1024) {
+ return $a_bytes .' B';
+ } elseif ($a_bytes < 1048576) {
+ return round($a_bytes / 1024, 2) .' KiB';
+ } elseif ($a_bytes < 1073741824) {
+ return round($a_bytes / 1048576, 2) . ' MiB';
+ } elseif ($a_bytes < 1099511627776) {
+ return round($a_bytes / 1073741824, 2) . ' GiB';
+ } elseif ($a_bytes < 1125899906842624) {
+ return round($a_bytes / 1099511627776, 2) .' TiB';
+ } elseif ($a_bytes < 1152921504606846976) {
+ return round($a_bytes / 1125899906842624, 2) .' PiB';
+ } elseif ($a_bytes < 1180591620717411303424) {
+ return round($a_bytes / 1152921504606846976, 2) .' EiB';
+ } elseif ($a_bytes < 1208925819614629174706176) {
+ return round($a_bytes / 1180591620717411303424, 2) .' ZiB';
+ } else {
+ return round($a_bytes / 1208925819614629174706176, 2) .' YiB';
+ }
+ }
+
+ /**
+ * Make UNIX like parameter command.
+ * This function from losbrutos and modified by earomero. Thankyou. =)
+ * @author losbrutos
+ * @author earomero
+ * @param array argv
+ * @return array
+ */
+ private function args($argv) {
+ $_ARG = array();
+ foreach ($argv as $arg) {
+ if (preg_match('#^-{1,2}([a-zA-Z0-9]*)=?(.*)$#', $arg, $matches)) {
+ $key = $matches[1];
+ switch ($matches[2]) {
+ case '':
+ case 'true':
+ $arg = true;
+ break;
+ case 'false':
+ $arg = false;
+ break;
+ default:
+ $arg = $matches[2];
+ }
+
+ // make unix like -afd == -a -f -d
+ if(preg_match("/^-([a-zA-Z0-9]+)/", $matches[0], $match)) {
+ $string = $match[1];
+ for($i=0; strlen($string) > $i; $i++) {
+ $_ARG[$string[$i]] = true;
+ }
+ } else {
+ $_ARG[$key] = $arg;
+ }
+ } else {
+ $_ARG['input'][] = $arg;
+ }
+ }
+ return $_ARG;
+ }
+}
+?>
+```
+Tinggal panggil classnya :
+
+```php
+$cek = new FindDuplicates ($argv);
+```
+Ingat, ini CLI ya.. jadi buat eksekusinya :
+```bash
+php [nama_script_phpnya] --list=[nama_file_yang_di_cek]
+```
+
+Ada 2 option tambahan yang bisa digunakan :
+
+- `-v` : untuk *verbose mode*.
+- `--out=[file]` : buat bikin file baru yang udah diilangin duplikatnya.
+
+```bash
+php class.FindDuplicates.php --list=openixp.rsc --out=openixp.rsc.new -v
+```
+Akan menampilkan line yang sama/serupa/sudah ada ke terminal dari file `openixp.rsc` kemudian bikin file baru yang udah '*dibersihin*' dengan nama `openixp.rsc.new`.
+
+Misal file yang mau di cek gede, sampe puluhan mega, mungkin perlu ngeset **PHP** `memory_limit` nya jadi `-1`.
+
+Belum saya test di windows. Silahkan klo ada yg mau mengembangkan.
diff --git a/resources/_gen/images/blog/script-php-cek-double-entry-dari-setiap-line-dalam-1-file/feature-find-duplicate-php-script_hubf1d7b8a3e0a02a3790f9faed2cb8469_651175_0x360_resize_box_3.png b/resources/_gen/images/blog/script-php-cek-double-entry-dari-setiap-line-dalam-1-file/feature-find-duplicate-php-script_hubf1d7b8a3e0a02a3790f9faed2cb8469_651175_0x360_resize_box_3.png
new file mode 100644
index 0000000..ee4a3cd
Binary files /dev/null and b/resources/_gen/images/blog/script-php-cek-double-entry-dari-setiap-line-dalam-1-file/feature-find-duplicate-php-script_hubf1d7b8a3e0a02a3790f9faed2cb8469_651175_0x360_resize_box_3.png differ
diff --git a/resources/_gen/images/blog/script-php-cek-double-entry-dari-setiap-line-dalam-1-file/feature-find-duplicate-php-script_hubf1d7b8a3e0a02a3790f9faed2cb8469_651175_0x640_resize_box_3.png b/resources/_gen/images/blog/script-php-cek-double-entry-dari-setiap-line-dalam-1-file/feature-find-duplicate-php-script_hubf1d7b8a3e0a02a3790f9faed2cb8469_651175_0x640_resize_box_3.png
new file mode 100644
index 0000000..14504f8
Binary files /dev/null and b/resources/_gen/images/blog/script-php-cek-double-entry-dari-setiap-line-dalam-1-file/feature-find-duplicate-php-script_hubf1d7b8a3e0a02a3790f9faed2cb8469_651175_0x640_resize_box_3.png differ
diff --git a/resources/_gen/images/blog/script-php-cek-double-entry-dari-setiap-line-dalam-1-file/feature-find-duplicate-php-script_hubf1d7b8a3e0a02a3790f9faed2cb8469_651175_864e5f0aeca24fb20124b17e90209c9c.webp b/resources/_gen/images/blog/script-php-cek-double-entry-dari-setiap-line-dalam-1-file/feature-find-duplicate-php-script_hubf1d7b8a3e0a02a3790f9faed2cb8469_651175_864e5f0aeca24fb20124b17e90209c9c.webp
new file mode 100644
index 0000000..a8e69a3
Binary files /dev/null and b/resources/_gen/images/blog/script-php-cek-double-entry-dari-setiap-line-dalam-1-file/feature-find-duplicate-php-script_hubf1d7b8a3e0a02a3790f9faed2cb8469_651175_864e5f0aeca24fb20124b17e90209c9c.webp differ
diff --git a/resources/_gen/images/blog/script-php-cek-double-entry-dari-setiap-line-dalam-1-file/feature-find-duplicate-php-script_hubf1d7b8a3e0a02a3790f9faed2cb8469_651175_c363056d1e71095196d6e102c62765a1.webp b/resources/_gen/images/blog/script-php-cek-double-entry-dari-setiap-line-dalam-1-file/feature-find-duplicate-php-script_hubf1d7b8a3e0a02a3790f9faed2cb8469_651175_c363056d1e71095196d6e102c62765a1.webp
new file mode 100644
index 0000000..7764fd2
Binary files /dev/null and b/resources/_gen/images/blog/script-php-cek-double-entry-dari-setiap-line-dalam-1-file/feature-find-duplicate-php-script_hubf1d7b8a3e0a02a3790f9faed2cb8469_651175_c363056d1e71095196d6e102c62765a1.webp differ