Problem Repeat Header Pada cetakan multisheet excell

Pada aplikasi APBD yang kami bangun, ada kebutuhan untuk mencetak laporan dalam bentuk multi sheet. Jadi sekali cetak, user dapat mencetak data dalam beberapa sheet. Setiap sheet benernya formatnya sama, hanya data saja yang berbeda.

Kami menggunakan library opentbs dan phpexcell untuk menyelesaikan permasalahan tersebut. Untuk laporan yang tidak memerlukan repeat header, kami tidak menemui kendala. Namun pada laporan yang membutuhkan repeat header, entah kenapa pada saat d export ke excell, settingan repeat headernya jadi hilang. Padahal di template laporan sudah kami set repeat headernya.

Setelah kami analisa, sepertinya masalah terjadi pada saat mengcopy template dari sheet1 untuk dgandakan ke sheet2 lainnya. Entah kenapa settingan repeat header yang sudah dsetting di templatenya tidak ikut tercopy. Akhirnya kami harus googling2 mencari solusinya. Setelah beberapa hari googling akhirnya kami menemukan referensi ini https://docs.typo3.org/typo3cms/extensions/phpexcel_library/1.7.4/manual.html. Solusinya ada di bagian “5.4.12.Setting rows/columns to repeat at top/left”.  Berdasar referensi tersebut kami menambahkan script seperti ini pada step setelah melakukan pencopyan sheet1.

$newSheet = $phpexcel->getSheetByName(‘sheet1’)->copy();
$newSheet->getPageSetup()->setRowsToRepeatAtTopByStartAndEnd(20, 24);

Setelah ada penambahan baris kedua di atas, akhirnya cetakannya sudah bisa keluar repeat headernya. Alhamdulillah, setelah perjuangan panjang akhirnya kami dberi pencerahan. Padahal sudah sempat putus asa menghadapi kasus ini.

 

 

Tuning pada xampp web server

Xampp merupakan software yang berisi apache, mysql, ftp, dll yang biasanya ditujukan untuk kepentingan development. Namun dikantorku bekerja, xampp ini dimanfaatkan di server production. Sebenarnya dari segi keamanan dan performance cukup mengkhawatirkan. Tapi apa boleh buat, sudah terlanjur familiar dengan xampp akhirnya aku mengalah untuk mengikutinya.

Namun karena memang xampp ini tujuannya bukan untuk server production muncul beberapa masalah, antara lain :

  1. Beberapa kali terjadi down pada web servernya, seringnya karena masalah koneksi database yang overload
  2. Diserang/dihack oleh para hacker, karena default settingan yang kurang secure.
  3. Performance yang kurang optimal

Oleh karena sering terjadi beberapa masalah di atas, maka mau tidak mau aku harus terjun untuk melakukan analisa dan riset yang bertujuan mencari solusi dari permasalahan-permasalahn di atas. Setelah sekian lama googling dan membaca beberapa referensi, akhirnya aku memutuskan untuk melakukan beberapa langkah pada settingan xampp, antara lain :

  1. Menambah limit memory menjadi minimal 5 GB, kebetulan server memiliki 16 GB memory.
  2. Menonaktifkan modul-modul yang tidak dipakai antara lain : mysql, sql server, pdo, ssl, dav, virtual host, dll
  3. Menambah limit maksimal klien, ini agar web server mampu menghandle lebih banyak user secara bersamaan
  4. Mengurangi bandwith dengan cara mengaktifkan module mod_deflate
  5. Untuk meningkatkan keamanan beberapa modul dan fungsi aku disabled, antara lain :
    – Disabled modul yg tidak dipakai mod_imap, mod_include, mod_info, mod_userdir, mod_autoindex
    – Disabled write folder yang tidak boleh ditulis oleh public
    – Disabled service yang tidak dpakai d server
    – Matikan fungsi sbb : show_source, system, proc_terminate,shell_exec, exec, passthru, proc_open, phpinfo, popen
    – Sembunyikan versi php dengan cara expose_php  = on diubah menjadi expose_php  = off (ada di file php.ini)
    – ServerSignature di off kan dan server Tokens di setting prod (ada di httpd-deafult.conf)
    – Sembunyikan pesan erro php dengan cara display_errors = Off; html_errors = Off; display_startup_errors = Off; log_errors = On; allow_url_fopen = Off
    – Hapus folder mysql, phpmyadmin, webdav, mercurymail,anonymous, filezilaftp,install,webalizer. Aplikasi-aplikasi tidak aku butuhkan, jadi aku putuskan untuk dihapus.

Beberapa langkah yang aku lakukan di atas bertujuan untuk meningkatkan performance dan keamanan web server. Alhamdulillah sampe sekarang, web server masih belum down dan masih belum dijebol hacker.

Problem koneksi ke database mysql

Setelah dilakukan install ulang yang disebabkan adanya masalah security, muncul permasalahan pada script sinkronise. Script sinkronise ini bertujuan untuk melakukan integrasi antar database (semacam ETL tools). Script ini aku develop menggunakan bahasa pemrograman PHP, dan dijalankan di command prompt windows. Jadi fungsinya kurang lebih sebagai berikut : menarik data dari database1 -> mengolah -> mengupdate ke database2.

Script sincronise ini sebelum dilakukan install ulang sudah berjalan normal, namun entah mengapa setelah dilakukan proses install ulang ternyata muncul error yang tidak biasa. Setelah beberapa kali cek dan analisa, beberapa informasi yang aku dapat sebagai berikut :

  1. Koneksi ke database mysql di port 3306 tidak ada masalah (status koneksi suskses)
  2. Pada saat koneksi ke database mysql di port 83306, muncul error sebagai berikut “php warning mysql_connect() : a connection attempt failed because the connected party did not properly respond after a period of time or established connection failed because connected has failed to respond”.
  3. Sudah aku cek settingan host, user, password dan nama database, tapi masih saja muncul error seperti di atas.

Dari beberapa informasi tersebut, aku coba googling dan dapat referensi seperti ini https://bugs.php.net/bug.php?id=50172. Berdasar referensi tersebut, solusinya adalah perbaikan(menghilangkan comment) pada file C:\Windows\System32\drivers\etc\hosts. Setelah aku hilangkan comment pada file tersebut sesuai yang ada di referensi tersebut, akhirnya script sincronise bisa berjalan lagi.. he2x..

Multiple Connection Database

Berawal adanya permasalahan data pada aplikasi presensi di salah satu klien , akhirnya aku harus terjun lagi ke dunia pemrograman. He2, benernya biasanya juga kadang-kadang ngoding, sekedar menghilangkan kebosanan ngurusi “anak-anak”.

Jadi ceritanya, ada data kehadiran pegawai yang disinyalir dmanipulasi oleh pegawai entah dimanipulasi sendiri atau minta tolong ke orang yang expert atau bisa juga hacker. Indikasinya, data kehadiran yang tampil d aplikasi presensi berbeda dengan data di mesin. Indikasi inilah yang mengarah kepada dugaan adanya manipulasi data.

Terus terang aku cukup tertantang untuk menganalisa lebih dalam terhadap permasalahan ini. Berdasarkan pengecekan data pada dua database yang aku terima, memang ditemukan adanya perbedaan antara data di database mesin dengan data di database aplikasi.  Lalu tiba-tiba kekhawatiran itu muncul, jangan-jangan kasus seperti ini terjadi pada pegawai lainnya. Oleh karena datanya yang lumayan banyak, maka atas nama kepraktisan aku buatkan script sederhana menggunakan php untuk membandingkan semua data pegawai antara data di database mesin dengan di database aplikasi.

Nah saat membuatkan script itulah aku menemukan permasalahan multiple database. Karena script yang aku buat harus terkoneksi ke dua database yang berbeda bahkan dua server yang berbeda maka diperlukan dua koneksi database dalam satu script.  Awalnya script untuk koneksi ke database yang aku buat seperti ini

$con1 = mysql_connect($host1,$user1,$pass1);
mysql_select_db($db1,$con1);

$con2 = mysql_connect($host2,$user2,$pass2);
mysql_select_db($db2,$con2);

diteruskan dengan query-query untuk mengambil data dan menampilkannya.

Tapi ternyata, query yang aku buat untuk mengambil data dengan menggunakan $con1 tidak muncul datanya. Aku coba echo $con, muncul #resourceid 2. Berarti harusnya koneksi ke database tidak ada masalah. Tapi kenapa kok pada saat menjalankan query dengan perintah mysql_query($query,$con1) tidak muncul datanya. Aku coba jalankan query tersebut menggunakan mysql tools client g ada masalah. Akhirnya aku coba googling permasalahan multiple database di php. Akhirnya setelah membaca beberapa referensi, dapatlah solusinya. Ternyata simple solusinya, cukup menambahkan satu parameter lagi di koneksi yang kedua, jadinya kurang lebih seperti ini :

$con1 = mysql_connect($host1,$user1,$pass1);
mysql_select_db($db1,$con1);

$con2 = mysql_connect($host2,$user2,$pass2,true);
mysql_select_db($db2,$con2);

Iyap, perbedaanya hanya menambahkan parameter true pada koneksi yang kedua dan dicoba ternyata sudah keluar hasil querynya. He2, ternyata solusinya simple yah..

 

Welcome !

Selamat datang di newbiephp. Blog ini berisi sharing pengalaman penulis dalam menggunakan php. Penulis bukanlah seorang yang ahli dalam membuat program menggunakan PHP. Untuk itu catatan yang ada di blog ini mungkin tidak terlalu mendalam. Semoga blog ini bisa membantu teman-teman yang pengin belajar PHP.