<mx:Blog title="{lontong}" />

Sesuai janjiku di milis, ini ada beberapa hasil ato tepatnya oprekan terhadap kinerja mapserver di sandbox-ku.
Banyak yang bertanya-tanya, “Lama-kelamaan server kok makin berat ya?”
Atau, “Aduh, datanya kok ke-load sebagian? Apa salah dan dosaku?”
Dan pertanyaan-pertanyaan lainnya yang mungkin dapat membantu para webhoster untuk mulai menyediakan jasa hosting mapserver tanpa takut lagi ancaman keamanan karena hampir keseluruhan program berjalan pada mode cgi. Intinya, klo mo hosting webmapserver, pihak hoster gak harus selalu mentok pada VPS ato dedicated bahkan colocation server. Sekali lagi, maenanku saat ini semuanya content yang membutuhkan bandwidth gila-gilaan sedangkan arga bandwidth masih ajubilah mahalnya. Dan dukungan teknis (technical support) yang masih jarang. Makanya di milis aku tawarin klo mau gabung sewa satu server terpusat, kita keroyok rame-rame ntar aku yang nginstalin, tentu harganya jauh lebih murah.

Okelah, itu sekedar prolog perkenalan mengenai beberapa posting ke depan.

Mari kita lihat yang menjadi latar belakang permasalahannya, dan perlu diingat ini semacam summary yang diperoleh dari milis resmi dan situsnya mapserver plus hasil oprekan sendiri untuk pihak web hoster:

  1. Semua technical support di web hoster tentu sudah mengenal adanya google maps atau yahoomaps (go to hell live-nya m$ huehehehe), tapi berapa orang yang tau kinerja teknisnya?
  2. Ambil asumsi semua pihak technical support web hoster (atau para admin dedicated server di apapun) tau dan bisa compiling mapserver, tapi gitu mereka tau bekerja pada mode cgi, hmmm… bisa dibayangkan betapa rewelnya mereka mengatakan tidak untuk shared hosting kecuali harus vps atau dedi/colo server. (ini bahkan berlaku untuk —yang katanya webhoster terbesar di Indonesia— di gedung cyber kuningan)
  3. Karena openGIS lebih ‘berpihak’ pada PostgreSQL, berapa banyak dari mereka yang menyertakan postgis dalam paket hosting atau (bahkan ironisnya) yang menyertakan postgresql dibandingkan MySQL yang katanya akan terasa ‘kampungan’ kalo tidak disertai MySQL?
  4. Orang-orang cenderung upgrading daripada optimalisasi hardware dan software yang terlibat
  5. Dan satu lagi yang paling penting, PHP CGI !!!
    Ayo, ngacung pihak webhosting yang menyertakan php dalam mode cgi default! Yaaaa… gak ada deh. “SECURITY, MAS!!!”, jawab kalian.
    Ya ya ya, I know it! Dan satu lagi memang load komputer untuk ini menjadi sangat berat (terjadi saat PHP5 baru keluar dan ada masalah pada kompabilitas fcgi-nya). Ini terjadi waktu aku setup server di sini untuk maps dan flex [dot] lontongcorp.com-nya.
  6. Dan berapa orang developer s/w yang paham (hanya) dengan membaca phpinfo fitur-fitur yang tersedia di server itu seperti apa?

Mudah-mudahan ini menjadi semacam jembatan antara developer s/w dengan penyedia layanan dalam hosting webmapping. Ini lebih ke technical report yang pengennya sih dibukuin untuk lebih detail. O ya, sebagai contoh di sini aku menggunakan FreeBSD, PostgreSQL 8.2.x, MySQL 5.x dan PHP 5.
And I don’t like java coz it’s make my server’s load become crazy for this stuff. Sorry.

Solusi simpel permasalahan di atas adalah:

  1. Mapserver CGI diakses menggunakan WMS online ataupun menggunakan mod_alias dan mod_rewrite apache, atau
  2. Apache untuk keamanan data dibuat seperti pada tutorial sebelumnya (MapSecuring)
  3. Data peta dasar yang besar disimpan pada database postgresql sedangkan data yang kecil disimpan pada database dbf
  4. Data point (POI/ROI/ or whatever u call it), disimpan pada mysql dengan parsing XML (GML) dalam koordinat pada client dan hanya berdasarkan area terpilih saja
  5. Generated image dibuat dengan tile-cache untuk cachingke client tanpa memberatkan server lebih lanjut
  6. Generated icon baca GML tadi dan ditampilkan terpisah dari data map
  7. PHP dipasang dengan dua mode, apache module dan CGI
  8. Gunakan tools-tools bantuan yang mungkin bisa mempercepat kinerja, semacam: FastCGI, KaMap, OpenLayers, atau implementasi AJAX lainnya kayak Adobe Flex misalnya (lagi ngoprekin ini soalnya hehe…)

Karena kepanjangan, aku lanjutkan laen kali untuk pembahasannya satu per satu dilengkapi dengan source code mapviewer. So, stay tune :p
Silahkan tinggalkan komentar di bawah, apa aja yang pengen ditambahin di tutorial kali ini yang ingin dibahas sampai habis ntarnya. Klo gak ada komen bisa-bisa malah jadi males dan lupa mo posting lagi kelanjutannya hehe…

***** fiuhhh…. bakal panjang neh keknya (padahal aku tadinya pengen ke tutorial multimedia dulu :( )


Lanjutan tutorial sebelumnya…..

Ketujuh, mapfile dengan menggunakan fungsi
shortest_path_as_geometry(’nama_table’,source_oid,target_oid):

CONNECTIONTYPE postgis
CONNECTION "host=localhost dbname=roads user=routing password=password"
DATA "the_geom from (
         SELECT gid, the_geom from shortest_path_as_geometry('route', 1, 4552)
         ) as route using unique gid using srid=-1"

Catatan: untuk menampilkan hasil routingnya, hanya dengan memanggil fungsi shortest_path_as_geometry() dengan parameter nama_tabel (dalam hal ini tabel ‘route’) [koma] source_id sebagai titik awal berangkat routing dilihat pada kolom source_id di tabel ‘route’ dan [koma] target_id sebagai titik akhir atau tujuan routing dilihat pada kolom target_id di tabel ‘route’.

Hasilnya seperti di bawah ini:
Routing01

Dengan hasil zooming untuk melihat lebih detail rute terpendek yang ditempuh:
Routing02

Kedelapan,, rangkuman perintah sql yang dapat dibuat menjadi satu bentuk file (misalkan routing_full) setelah postgis, dijkstra dan data sql telah Anda masukkan berisi:

CREATE TABLE route (gid int UNIQUE, source_id int, target_id int, edge_id int) WITH OIDS;
SELECT AddGeometryColumn('route', 'the_geom', -1, 'MULTILINESTRING', 2 );
INSERT INTO route (gid, the_geom) (SELECT gid, the_geom FROM jalanbandung);
SELECT assign_vertex_id('route', 1);
SELECT create_graph_tables('route', 'int4');
SELECT update_cost_from_distance('route');

dan jalankan dengan perintah:

C:\PgSQL > psql -U routing -d roads -f routing_full.sql

tunggu dan database routing siap digunakan ;)

Kesembilan, untuk tampilan yang dinamis, Anda dapat merubah source_id dan target_id pada script .map sesuai dengan masukan dari web. Caranya dapat dilihat pada tutorial sebelumnya

Kesepuluh, Selamat Mencoba.


Pernah lihat ato nyoba aplikasi yahoo maps?
Saat kita mencari arah atau jalur terpendek dari satu lokasi ke lokasi lainnya, marker jalan muncul sebagai penunjuk arah jalur terpendek yang harus kita tempuh. Aplikasi ini menggunakan metoda Vertex Simplication dengan menghitung jarak terpendek. Sampai saat ini, untuk menangani datanya dari database postgresql yang kita simpan dipakai diprogram pgDIJKSTRA/pgRouting dari PostLBS. Ini sebenarnya hasil oprekan yang sudah cukup lama dan dilakukan di atas Windows menggunakan fungsi pgDijkstra, PostgreSQL 8.1.0 dan tidak berjalan pada PostgreSQL 8.0. Awalnya sih dari melihat dari dokumen yang dibawa oleh Pak Hadi, aku jadi tertarik kenapa ada error di function PostgreSQL-nya.
Kita coba menggunakan database roads dengan database username routing.

Baiklah, catatan yang pertama dimulai dari:

Pertama, pastikan pada database telah terinstall postgis. Bisa dengan installer yang disediakan pada windows atau sistem operasi lainnya.Untuk melihat apakah sudah terinstall, pada database ada table geometry_columns (registrasi data geometry tiap table) dan spatial_ref_sys sebagai projection table-nya.
*update : Bila menggunakan installer windows v8.2.x sudah terinstall otomatis dan sudah terdapat template postgis. Kita hanya membuat database berdasarkan template ini.
Bila belum terinstall ataupun terbuat templatenya, silahkan lihat postingan sebelumnya. Hanya saja secara default, kepimilikan fungsi dan kedua tabel oleh database postgres. Untuk merubahnya kita lakukan perintah:

C:\PgSQL> psql -U postgres -d roads
       psql> ALTER TABLE geometry_columns OWNER TO routing;
       psql> ALTER TABLE spatial_ref_sys OWNER TO routing;

Kedua, masukkan data jalan anda. Misalkan jalanbandung.sql

C:\PgSQL > psql -U routing -d roads -f jalanbandung.sql

Catatan: Pada beberapa type mapserver, dibutuhkan OID table yang mengandung data geometri sedangkan default postgresql 8.1 yang dicoba default-nya without oids. Ubah table Anda memakai OIDS dengan mengedit file SQL Anda pada bagian CREATE TABLE namatable ( ….) WITH OIDS;

Ketiga, masukkan fungsi dijkstra:

C:\PgSQL> psql -U postgres -d roads -f dijkstra.sql
C:\PgSQL> psql -U postgres -d roads -f dijkstra_postgis.sql

Catatan: Pada dijkstra.sql aku berhasil menemukan bug kecil terhadap fungsi create_graph_tables nantinya.
Oleh karena itu perlu diedit sedikit pada bagian :

"CREATE OR REPLACE FUNCTION create_graph_tables"
// temukan di bagian bawahnya yang bertuliskan:
 
EXECUTE 'CREATE TABLE ' || edges_table
                                    || ' (id serial, source int, target int, '
                                    || 'cost float8, reverse_cost float8,
                                    UNIQUE (source, target))';
 
// ubah menjadi
 
EXECUTE 'CREATE TABLE ' || edges_table
                                    || ' (id serial, source int, target int, '   
                                    || 'cost float8, reverse_cost float8) WITH OIDS';

Catatan: Belum dicoba pada fungsi yang terbaru

Keempat, buat satu table baru sebagai tempat hasil routing kita. Misalkan saja dengan nama table route. Caranya dengan membuat satu file sql baru route.sql dengan tabel isian berasal dari jalanbandung. File route.sql berisi:

CREATE TABLE route (gid int UNIQUE, source_id int, target_id int, edge_id int) WITH OIDS;
SELECT AddGeometryColumn('route', 'the_geom', -1, 'MULTILINESTRING', 2 );
INSERT INTO route (gid, the_geom) (SELECT gid, the_geom FROM jalanbandung);

atau bisa dilakukan tanpa membuat file route.sql dengan mengetikkan di konsol pgsql dengan mengetikkan terlebih dulu:

C:\PgSQL> psql -U routing roads

dan untuk mengeksekusi route.sql kita berikan perintah:

C:\PgSQL> psql -U postgres -d roads -f route.sql

Catatan: Tabel ini bertujuan untuk menempatkan data gid dan data geometri dari tabel kita yang sebenarnya identik tanpa mengikutkan informasi dari kolom lain.Kita tidak bereksperimen dengan tabel data melainkan pada tabel route ini. Bisa Anda lihat isi tabel ini terdiri dari kolom: || gid || source_id || target_id || the_geom || dengan source_id, target_id dan edge_id masih kosong. Di sinilah peran fungsi dijkstra yang kita install tadi akan bermain.

Kelima, kolom source_id dan target_id pada tabel route dengan mengetikkan perintah sql:

C:\PgSQL> psql -U routing roads
       psql> SELECT assign_vertex_id('route', 0.000001);

Script ini akan berjalan tergantung ketelitian verteks yang Anda inginkan (di atas menggunakan 0.000001 satuan) dan besarnya banyaknya data Anda. Semakin teliti (misalnya 0.01 satuan) maka script akan berlangsung semakin lama. Hasilnya akan disimpan pada kolom source_id dan target_id tabel route dengan membuat id dan data geometri pada tabel baru vertices_tmp.
Catatan: Berdasarkan hasil percobaan, prosedur ini hanya bisa dijalankan sekali.Apabila Anda merasa gagal melakukannya (source_id,target_id pada tabel route masih kosong begitu juga tabel vertices_tmp) Anda harus menghapus database Anda dan mengulangi dari awal.Ini disebabkan karena saat melakukan assignment antara tabel route dan vertices_tmp, fungsi mencatat oid tabel vertices_tmp yang pertama kali dibuat. Sedangkan apabila prosedur ini diulangi, oid tabel vertices_tmp tentu saja sudah berubah. Namun bila ada saran dan masukan yang lebih berguna, aku sih sangat berterima kasih ;)

Keenam, kolom edge_id pada tabel route masih kosong. Isikan dengan mengetikkan perintah sql:

C:\PgSQL> psql -U routing roads
       psql> SELECT create_graph_tables('route', 'int4');
       // Script ini selain mengisi kolom edge_id,
       // juga akan membuat 2 tabel baru: route_edges dan route_vertices.
       // Sekarang lihat isi dari tabel route_edges. psql&gt; SELECT * FROM route_edges LIMIT 3;

akan menghasilkan kira-kira seperti ini:

id  | source | target | cost | reverse_cost
---+-------+-------+------+--------------
1  |    1     |   2      |         |
2  |    3     |   3      |         |
4  |    2     |   2      |         |
 
(3 rows)

Untuk mengisi kolom cost sebagai hasil perhitungan besar jarak per path, gunakan perintah sql:

SELECT update_cost_from_distance('route');
SELECT * FROM route_edges LIMIT 3;

akan menghasilkan:

id  | source | target |            cost         | reverse_cost
---+-------+-------+-------------------+--------------
1   |     1   |    2     | 6857.46585793103 |
2   |     3   |    3     | 37349.9592156392 |
4   |     2   |    2     | 14040.5673116933 |
 
(3 rows)

Bersambung biar gak kepanjangan…


Ini dokumen lama yang (untungnya) ketemu lagi.
Jadi untuk beberapa postingan ke depan kayaknya hanya jurnaling dokumen2 lama yang gak sempat dicatat dalam web (namanya juga weblog :D ). Kali ini dokumentasi nginstall mapserver di FreeBSD. Untuk library yang diperlukan kita install leat port sedangkan untuk mapservernya sendiri kita install secara manual karena kalau lewat port, faktor depedensi library akan menyebabkan makan space harddisk yang sangat besar.

Mudah-mudahan semuanya sudah bisa menginstall lewat port. Kalau belum bisa dilihat di Install lewat port FreeBSD di halaman lainnya. Hanya saja kalau untuk dukungan php/mapscript, kita perlu PHP cgi mode dengan regex library dari system, bukan yang bundle. Oke, ini dia caranya:

  1. Install library yang diperlukan dulu ya
    • Graphic lib (/usr/ports/graphics/) GD, PNG, JPEG, xpm
    • Projection library (/usr/ports/graphics/proj)
    • Geospatial lib — GDAL (/usr/ports/graphics/gdal)

    Untuk lebih singkatnya sebenarnya install proj dan gdal saja lewat port sudah cukup karena akan ‘memuaskan’ kebutuhannya sendiri.

  2. Install Apache (dan MySQL — optional) dengan cara yang sama
  3. Install PostgreSQL (disarankan versi 8.1 ke atas) untuk support PostGIS
    akan dijelaskan di posting selanjutnya ya
  4. Install PHP-CGI
    Sewaktu catatan yang lama ditulis, mapserver belum support PHP5 tapi karena sekarang sudah mendukung, kita install PHP5-CGI saja.

    # cd /usr/ports/www/php5-cgi
    # setenv WITH_REGEX_TYPE "system"
    # make install clean
    # echo 'AddType application/x-httpd-php-cgi .php .php3 .php4 .php5 .phtml' >>
              /usr/local/etc/apache2/httpd.conf
    # echo 'Action application/x-httpd-php-cgi /cgi-bin/php' >>
             /usr/local/etc/apache2/httpd.conf
    

    Pastikan pada direktori cgi-bin sudah ada php atau bila php-cgi, ganti dengan /cgi-bin/php-cgi pada baris terakhir perintah di atas

  5. Install Mapserver
    Unduh mapserver dan simpan (misalnya) pada /usr/src. Saat tulisan ini dibuat terdapat versi 4.10.1 dan saya simpan sebagai /usr/src/mapserver-4.10.1.tar.gz

    # cd /usr/src && tar zxvf mapserver-4.10.1.tar.gz
    # cd /usr/src/mapserver-4.10.1
    	// konfigurasi: gunakan ./configure -–help untuk melihat lebih lengkap
    	// ini konfigurasiku
    # ./configure –-with-gd=/usr/local –-with-wfs –-with-wcs –-with-wmsclient
          		–-with-wfsclient -–with-sos –-with-php=/usr/local/include/php
          		–-with-mygis –-with-postgis –-with-eppl
          		–-with-pdf –-with-proj=/usr/local
          		–-with-geos=/usr/local/bin/geos-config
          		–-with-gdal=/usr/local/bin/gdal-config
          		-–with-ogr=/usr/local/bin/gdal-config
    
    	// pastikan mode grafik yang diinginkan sudah masuk:
    	// using GD ( -DUSE_GD_GIF -DUSE_GD_PNG -DUSE_GD_JPEG
    	//                -DUSE_GD_WBMP -DUSE_GD_FT
    	//               -DGD_HAS_GDIMAGEGIFPTR -DGD_HAS_GETBITMAPFONTS)
    	// dan php menggunakan regex dari system
    	// checking whether we should use PHP’s regex… no
    	// PHP/MapScript module configured.
    
    # make
    
      // cek hasil kompilasi Anda
    
    # mapserv -v
      // MapServer LontongCorp v4.10.1 OUTPUT=GIF OUTPUT=PNG OUTPUT=JPEG
      // OUTPUT=WBMP OUTPUT=PDF OUTPUT=SVG SUPPORTS=PROJ
      // SUPPORTS=FREETYPE SUPPORTS=WMS_SERVER SUPPORTS=WMS_CLIENT
      // SUPPORTS=WFS_SERVER SUPPORTS=WFS_CLIENT SUPPORTS=WCS_SERVER
      // SUPPORTS=SOS_SERVER INPUT=EPPL7 INPUT=POSTGIS INPUT=OGR INPUT=GDAL
      // INPUT=MYGIS INPUT=SHAPEFILE
      // bila sudah seperti di atas (tentu saja tanpa LontongCorp)
      // berarti mapserver kita siap digunakan
    
      // salin hasil eksekusi ke cgi-bin apache
      // (/usr/local/www/cgi-bin atau lainnya sesuai konfigurasi httpd.conf Anda)
    
    # cp mapserv /usr/local/www/cgi-bin/
    # cp legend /usr/local/www/cgi-bin/
    # cp msencrypt /usr/local/www/cgi-bin/
    # cp shp2img /usr/local/www/cgi-bin/
    # cp shp2mysql.pl /usr/local/www/cgi-bin/
    # cp shp2pdf /usr/local/www/cgi-bin/
    # cp shptree /usr/local/www/cgi-bin/
    # cp shptreetst /usr/local/www/cgi-bin/
    # cp shptreevis /usr/local/www/cgi-bin/
    # cp sortshp /usr/local/www/cgi-bin/
    # cp tile4ms /usr/local/www/cgi-bin/
    
    // salin module php/mapscript (php_mapscript.so) ke folder extension php
    // (lihat di php.ini)
    
    # cp mapscript/php3/php_mapscript.so /usr/local/lib/php/extensions/
    
  6. Restart apache Anda dan jalankan program test (gunakan demo peta ITASCA) yang disediakan oleh mapserver (unduh terpisah)

Hanya begitu saja.
Selesai


Ini sebenarnya topik lama yang udah aku angkat di milis Mapserver-id tapi supaya menuh-menuhin blog :D , aku tulis lagi di sini. Jadi kasusnya pertama-tama kayak gini: Oya, ada yang merhatiin gak masalah keamanan di sini? Ato bikin-bikin-bikin, yang penting jadi, gitu diancam boleh diobrak-abrik gak, Pan? (nama samaran, red :D ). Setidaknya keamanan data aja. Ini aku kasi tau caranya. Ini berdasarkan yang aku lihat di Mapserver-nya ITB. Bisa diakses di http://petakampus.itb.ac.id/. Katanya sih (ini katanya lho, maklum orang sok tau ngomong), yang buat web itu juga ikutan milis ini dan dianggap jago, sesepuh ato apapun namanya di sini, ato bahkan di dunia mapserver indonesia ya? ayo, siapa yah orangnya, pengen kenalan neh.beneran deh :D Oke, kini langkah2-nya:

  1. Buka website itu, maka akan di-redirect ke
  2. Dari web address bar itu lihat address-nya dan cari yang .map (map=../htdocs/petakampus/itb.map)
  3. Sekarang kita tahu dimana nyimpan .map-nya (map=../htdocs/petakampus/itb.map) yaitu di http://petakampus.itb.ac.id/petakampus/itb.map VOILA!!! kebuka brur.
  4. Sekarang kita tau, “Owhhh… make ms4w juga toh! ITB gitu lohhhh” :D cari bagian SHAPEPATH ./shp/gedung/ (ceritanya kita mo nyuri data neh) ke bagian layer DATA … (misalnya jalan) maka kita dapat ./shp/gedung/jalan(.shp/.shx/.dbf) buka aja misalnya http://petakampus.itb.ac.id/petakampus/shp/gedung/jalan.shp untuk kasus ini sudah di-directive (caranya liat aja httpd_*.conf di ms4w/httpd.d) hingga muncul pesan:
  5. Forbidden

    You don’t have permission to access /petakampus/shp/gedung/jalan.shp on this server.


    Apache/2.0.50 (Win32) Server at petakampus.itb.ac.id> Port 80

    Tapi yang menarik justru yang ini:

  6. Database!!!
    Cari bagian ini:
  7. CONNECTIONTYPE postgis
    CONNECTION "user=**** dbname=******  port=5432
                       host=petakampus.itb.ac.id password=***"
    // (liat sendiri)
    DATA "the_geom from (select gid, zone_id, id_gedung, nm_gedung,
             the_geom from gedung) as foo using unique gid"

VOILA!!! LAGI Hellooooow!!!! it’s your secrecy there! c’mon! walaupun host-nya localhost dan di pg_hba.conf di set hanya dibuka bener2 dari local, tapi kan………


Sekarang solusi yang ditawarkan oleh Pak Iwan Setiawan:

  1. Jangan pernah menayangkan full URL seperti yang ditampilkan pada petakampus itb tersebut:
    Dengan scripting sederhana URL tersebut bisa ditampilkan sebagai: http://petakampus.itb.ac.id/petakampus/frames_dhtml.html
  2. Jangan pernah menyimpan file data dan file .map di direktori yang dapat diakses oleh publik. Cukup simpan di direktori lain yang tidak termasuk dalam wilayah akses web (wwwroot)
  3. Periksa dan tutupi segala lubang keamanan pada server anda.

Salam MapServer! — Iwan Setiawan bima.cakti [@] g****.com


Tanggapan :Simple Solution emang seperti yang dibilang bung (ato Pak nih manggilnya :D;) Iwan Setiawan. Itu juga kalo emang service yang ditawarkan juga simpel. klo udah komersil tetap bahaya. Kenapa?

    <li>Walaupun jauh dari jangkauan www/htdocs apache tapi dengan url dinamis sebagai inputan mapserver, kita tetap masih bisa lihat {<input id=”map” name=”map” value=”/path/map/Anda/peta.map” type=”hidden” />} kan? tinggal masukin ke url juga dengan http://localhost/../../../../../nyampe/root/arahin/ke/path/map/Anda/peta.map juga masih bisa diaksesoleh umum

  1. OS (M$. Winblows) tidak mengenal adanya akses nobody:nogroup ato root:wheel kayak Un*x makanya semua yang ngakses web (untuk nyalain service Apache harus Admin kan?) dianggap administrator!!!
  2. Root Path (/) system !seharusnya! sama dengan root Apache. Misalnya begini: apache diinstal di C:\ms4w\Apache makanya root Apache dibaca pada direktori tersebut sedangkan pada sistem seharusnya pada C:\ (ini ada hubungannya dengan solusi yang aku tawarkan di bawah). Akibatnya beberapa orang mungkin sering menghadapi masalah pada halaman html dengan memasukkan root path sebagai awal.Contoh: {<input type=”hidden” id=”map” name=”map” value=”/path/map/Anda/peta.map”/>} harus Anda masukkan dengan {<input id=”map” name=”map2″ value=”../htdocs/path/map/Anda/peta.map” type=”hidden” />} merujuk pada path cgi-bin Anda.

Lalu solusi yang aku tawarkan bagaimana? Nah, di sini sok tahu aku berperan :p huehehehe… 1. Jangan pernah pakai M$. Winblows. Kalaupun Anda mau maksa dan terlalu malas dan tolol (no offense yak :D;) untuk menggunakan un*x, buat satu user lagi dengan akses terbatas (limited user) lalu jalankan service dengan user tersebut. semuanya pasti pernah nginstall postgresql di winblows kan? caranya sama seperti itu (dulu pernah nemu script .bat-nya tapi udah ilang T_T ). trus tambahin aja user tadi di httpd.conf:

User nobody Group Users
cari atau buat baru di Computer Management -> System Tools -> Local Users and Groups -> Groups (untuk Apache2 katanya sih ini masih banyak masalah, gak tau ntah kata sapa :p;)
Trus setting kepemilikan direktori milik Admin kecuali htdocs atau folder html Anda milik user yang tadi dibuat. oya cgi-bin tempat mapserv.exe dsb juga di-set jadi milik si user tadi.
(Repot? Makanya pakai un*x biar aman :p. Masih tetap gak mau? ya skip aja langkah ini hehe…)

2. Oke, sekarang konfigurasi apache-nya (httpd.conf)
Cari di httpd.conf bagian yang “^\.ht” kira-kira isinya seperti ini:

<FilesMatch "^\.ht" >
	Order allow,deny
	Deny from all
</FilesMatch >

salin-tulis jadinya isinya ada 2, dan ganti satu lagi dengan .map

# ini untuk semua yang berawalan dengan .ht
<FilesMatch "^\.ht" >
	Order allow,deny
	Deny from all
</FilesMatch >
 
# dan ini untuk semua yang berakhiran dengan .map, .shp, .shx, .idx, .dbf
<FilesMatch "\.(map|idx|shx|shp|dbf)" >
	Order allow,deny
	Deny from all
</FilesMatch >

dengan konfigurasi ini juga sebenarnya juga sudah cukup aman. tapi aku ingin lebih. namanya juga manusia, serakah! ;)

3. Sekarang untuk tiap aplikasi kita bikin konfigurasi sendiri seperti pada aplikasi ms4w pada umumnya, namakan aja aplikasinya LontongCorp yang diinstall di C:\ms4w\apps\LontongCorp dengan apache konfigurasi httpd_LontongCorp.conf di
C:\ms4w\httpd.d Aplikasi LontongCorp memiliki dir: htdocs, src dan data; maka isi dari httpd_LontongCorp.conf kita buat seperti ini:

# ini untuk htdocs kita bolehin lihat
Alias /LontongCorp/ "/ms4w/apps/LontongCorp/htdocs/"
<directory "/ms4w/apps/LontongCorp/htdocs/" >
	AllowOverride None Options Indexes FollowSymLinks Multiviews
	Order allow,deny Allow from all
</directory >
 
#Tapi kalau yang ini, gak boleh lihat ya
<directory "/ms4w/apps/LontongCorp/src" >
	Options FollowSymLinks AllowOverride None
	Order deny,allow Deny from all Satisfy all
</directory >
 
<directory "/ms4w/apps/LontongCorp/data" >
	Options FollowSymLinks AllowOverride None
	Order deny,allow Deny from all Satisfy all
</directory >

dan yang agak menggangu sebenarnya pada httpd.conf bagian <Directory />, gak tau merefer ke mana? C:\ atau C:\ms4w\Apache ganti atau salin-tulis dengan

<directory "C:\" >

Kalau hanya directory / seperti gak guna :D

Intinya, pisahkan antara folder data dan halaman htdocs Anda trus dilock. klo memang mau data tetap bisa diakses dan di-download tapi hanya oleh orang2 tertentu, bikin aja .htaccess di folder trus dikasih password. jadi klo orang ngakses lewat http, dia minta password. masalah pada mapserver gak akan terjadi karena mapserver, baik cgi maupun mapscript, ngaksesnya lokal. Oke, cukup segitu aja. Trus udah aman? Belom!!! itu kan masih sekedar yang aku (sok) tahu. Ingat, ada yang bilang: “What made by man, can be destroyed by man too” -> Makanya harus sering doa ke Yang Di Atas kali ya huehehe… ps: ayo, sapa neh yang udah online trus bisa di-test gak kemanan sistemnya. MapTrack mungkin? ato ServMap??? ato Googling aja kali ya? bukan ngetest sistem keseluruhan, soalnya gak bisa sok tau banyak :D Happy MapSecuring!!! :D Nantikan seri2 isu lainnya dariku ya. Yang laennya? sharing dong ^_^ LontongCorp, Enjoy


Dan ini solusi dari hazmi abdun <flying_apache [@] yah**.com>ikutan nimbrung ah (telat bgt yah :p;) emang sih, klo pake mapserver versi cgi itu, query string di urlnya jadi “nge-be-te-in”, soalnya jadi panjang bgt dan apa yang sedang di proses itu jadi transparan alias bisa dibaca orang. tapi ya setidaknya kita harus bisa ngumpetin lokasi file .map-nya, soalnya tentu saja kita gak mau konfigurasi kita terbaca sama orang, seperti kasus ini.klo menurut gw, untuk pengguna windows, bisa ngikutin contoh yang di kasih di situsnya mapserver: ———————————— But anyway, even if it’s valid, the above URL is still ugly. And you might want to use a nicer URL for your WMS Online Resource URL. Here are some suggestions: …2. Another option is to use the “setenvif” feature of Apache: use symbolic links that all point to a same mapserv binary, and then for each symbolic link test the url, and set the MAP environment accordingly.For Windows and Apache users the steps are as follows (this requires Apache 1.3 or newer): * Copy mapserv.exe to a new name for your WMS, such as “mywms.exe”. * In httpd.conf, add:

SetEnvIf Request_URI "/cgi-bin/mywms/"
MS_MAPFILE=/path/to/mymap.map

————————————
note: copy paste dari: http://mapserver.gis.umn.edu/docs/howto/wms_server
Dan untuk ms4w sendiri kan sebenernya dibuat untuk belajar dong, bukan untuk produksi, seperti kata readme-nya MS4W:
————————————
…. Currently, the MS4W installation is considered neither secure nor stable. It should not be used for production purposes.
Do not expect to get any support for using this package in such an environment. ….
————————————
note: copy paste dari README_INSTALL.txt di MS4W sekian tambahannya.. :D
Viva Open Source!