<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="https://docs.indoglobal.com/w/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="id">
		<id>https://docs.indoglobal.com/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Docs</id>
		<title>Panduan Pengguna indoglobal.com - Kontribusi pengguna [id]</title>
		<link rel="self" type="application/atom+xml" href="https://docs.indoglobal.com/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Docs"/>
		<link rel="alternate" type="text/html" href="https://docs.indoglobal.com/wiki/Istimewa:Kontribusi_pengguna/Docs"/>
		<updated>2026-05-25T22:52:04Z</updated>
		<subtitle>Kontribusi pengguna</subtitle>
		<generator>MediaWiki 1.19.24</generator>

	<entry>
		<id>https://docs.indoglobal.com/wiki/Application_Server</id>
		<title>Application Server</title>
		<link rel="alternate" type="text/html" href="https://docs.indoglobal.com/wiki/Application_Server"/>
				<updated>2023-06-08T08:09:19Z</updated>
		
		<summary type="html">&lt;p&gt;Docs: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Untuk menggunakan aplikasi berbasis application server, pengguna bisa melakukan hal berikut ini:&lt;br /&gt;
&lt;br /&gt;
* Membuat application server melakukan listen ke localhost port antara 61000 dan 63000&lt;br /&gt;
* Membuat .htaccess untuk melakukan forward ke port tersebut.&lt;br /&gt;
&lt;br /&gt;
Perintah .htaccess untuk keperluan tersebut adalah sebagai berikut:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt;&lt;br /&gt;
RewriteEngine On&lt;br /&gt;
RewriteRule &amp;quot;^/(.*)$&amp;quot; &amp;quot;http://127.0.0.1:61999/$1&amp;quot; [P]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Untuk menjalankan aplikasi setelah server di-reboot, kita bisa gunakan crontab dengan waktu @reboot:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
@reboot ./start.sh&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sebaiknya informasikan ke tim kami apabila akan menggunakan application server agar tidak di-KILL secara otomatis oleh sistem. Selain itu seringkali diperlukan setting atau instalasi software yang perlu dilakukan oleh kami.&lt;br /&gt;
&lt;br /&gt;
Beberapa contoh application server yang pernah diimplementasikan di server kami menggunakan bahasa pemrograman atau framework sebagai berikut: Perl Dancer, Python, NodeJS&lt;br /&gt;
&lt;br /&gt;
[[Kategori:Web]]&lt;/div&gt;</summary>
		<author><name>Docs</name></author>	</entry>

	<entry>
		<id>https://docs.indoglobal.com/wiki/Application_Server</id>
		<title>Application Server</title>
		<link rel="alternate" type="text/html" href="https://docs.indoglobal.com/wiki/Application_Server"/>
				<updated>2023-06-08T08:05:18Z</updated>
		
		<summary type="html">&lt;p&gt;Docs: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Untuk menggunakan aplikasi berbasis application server, pengguna bisa melakukan hal berikut ini:&lt;br /&gt;
&lt;br /&gt;
* Membuat application server melakukan listen ke localhost port antara 61000 dan 63000&lt;br /&gt;
* Membuat .htaccess untuk melakukan forward ke port tersebut.&lt;br /&gt;
&lt;br /&gt;
Perintah .htaccess untuk keperluan tersebut adalah sebagai berikut:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt;&lt;br /&gt;
RewriteEngine On&lt;br /&gt;
RewriteRule &amp;quot;^/(.*)$&amp;quot; &amp;quot;http://127.0.0.1:61999/$1&amp;quot; [P]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Untuk menjalankan aplikasi setelah server di-reboot, kita bisa gunakan crontab dengan waktu @reboot:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
@reboot ./start.sh&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategori:Web]]&lt;/div&gt;</summary>
		<author><name>Docs</name></author>	</entry>

	<entry>
		<id>https://docs.indoglobal.com/wiki/Application_Server</id>
		<title>Application Server</title>
		<link rel="alternate" type="text/html" href="https://docs.indoglobal.com/wiki/Application_Server"/>
				<updated>2023-06-08T08:04:36Z</updated>
		
		<summary type="html">&lt;p&gt;Docs: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Untuk menggunakan aplikasi berbasis application server, pengguna bisa melakukan hal berikut ini:&lt;br /&gt;
&lt;br /&gt;
* Membuat application server melakukan listen ke localhost port antara 61000 dan 63000&lt;br /&gt;
* Membuat .htaccess untuk melakukan forward ke port tersebut.&lt;br /&gt;
&lt;br /&gt;
Perintah .htaccess untuk keperluan tersebut adalah sebagai berikut:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt;&lt;br /&gt;
RewriteEngine On&lt;br /&gt;
RewriteRule &amp;quot;^/(.*)$&amp;quot; &amp;quot;http://127.0.0.1:61999/$1&amp;quot; [P]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Untuk menjalankan aplikasi setelah server di-reboot, kita bisa gunakan crontab dengan waktu @reboot:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
@reboot ./start.sh&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategori:Web]]&lt;/div&gt;</summary>
		<author><name>Docs</name></author>	</entry>

	<entry>
		<id>https://docs.indoglobal.com/wiki/Application_Server</id>
		<title>Application Server</title>
		<link rel="alternate" type="text/html" href="https://docs.indoglobal.com/wiki/Application_Server"/>
				<updated>2023-06-08T08:04:04Z</updated>
		
		<summary type="html">&lt;p&gt;Docs: ←Membuat halaman berisi 'Untuk menggunakan aplikasi berbasis application server, pengguna bisa melakukan hal berikut ini:  * Membuat application server melakukan listen ke localhost port antar...'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Untuk menggunakan aplikasi berbasis application server, pengguna bisa melakukan hal berikut ini:&lt;br /&gt;
&lt;br /&gt;
* Membuat application server melakukan listen ke localhost port antara 61000 dan 63000&lt;br /&gt;
* Membuat .htaccess untuk melakukan forward ke port tersebut.&lt;br /&gt;
&lt;br /&gt;
Perintah .htaccess untuk keperluan tersebut adalah sebagai berikut:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt;&lt;br /&gt;
RewriteEngine On&lt;br /&gt;
RewriteRule &amp;quot;^/(.*)$&amp;quot; &amp;quot;http://127.0.0.1:61999/$1&amp;quot; [P]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Untuk menjalankan aplikasi setelah server di-reboot, kita bisa gunakan crontab dengan waktu @reboot:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;crontab&amp;quot;&amp;gt;&lt;br /&gt;
@reboot ./start.sh&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategori:Web]]&lt;/div&gt;</summary>
		<author><name>Docs</name></author>	</entry>

	<entry>
		<id>https://docs.indoglobal.com/wiki/Wordpress</id>
		<title>Wordpress</title>
		<link rel="alternate" type="text/html" href="https://docs.indoglobal.com/wiki/Wordpress"/>
				<updated>2021-08-03T06:20:02Z</updated>
		
		<summary type="html">&lt;p&gt;Docs: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Wordpress adalah CMS blog populer dan dapat didownload di [http://wordpress.org wordpress.org]. Berikut adalah beberapa hal yang berhubungan dengan instalasi Wordpress di sistem indoglobal.com&lt;br /&gt;
&lt;br /&gt;
==Rekomendasi Pasca Instalasi==&lt;br /&gt;
&lt;br /&gt;
Berikut adalah rekomendasi kami setelah melakukan instalasi Wordpress. Tujuannya adalah agar seluruh fitur yang ada di Wordpress dapat berfungsi penuh tanpa mengorbankan faktor keamanan.&lt;br /&gt;
&lt;br /&gt;
===Membuat Akun Share untuk keperluan upload===&lt;br /&gt;
&lt;br /&gt;
* Anda membutuhkan sebuah akun email yang akan diberi akses ke instalasi Wordpress anda. Anda dapat membuat akun email baru, atau menggunakan akun email yang sudah dibuat sebelumnya.&lt;br /&gt;
* Masuk ke File Manager, navigasikan ke folder instalasi Wordpress anda. Gunakan fungsi 'Share this folder'. Akan keluar menu 'Create a New Share'&lt;br /&gt;
* Ganti Email address menjadi email yang anda tentukan sebelumnya untuk diberi akses ke instalasi Wordpress.&lt;br /&gt;
* Masukkan share name misalnya 'wordpress'.&lt;br /&gt;
* Klik Create Share.&lt;br /&gt;
&lt;br /&gt;
Catat username untuk digunakan pada langkah berikutnya.&lt;br /&gt;
&lt;br /&gt;
===Konfigurasikan Wordpress untuk menggunakan FTP untuk melakukan modifikasi file===&lt;br /&gt;
&lt;br /&gt;
Sunting file wp-config.php, dan tambahkan baris berikut ini:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
define('FS_METHOD', 'ftpext');&lt;br /&gt;
define('FTP_HOST', 'localhost');&lt;br /&gt;
define('FTP_USER', 'user-wordpress@example.com');&lt;br /&gt;
define('FTP_PASS', 'password');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(ubah isi variabel sesuai konfigurasi anda)&lt;br /&gt;
&lt;br /&gt;
Anda juga dapat menghapus define FTP_PASS di atas untuk memaksimalkan keamanan. Wordpress akan secara otomatis menanyakan password FTP jika membutuhkannya.&lt;br /&gt;
&lt;br /&gt;
===Ubah permission folder wp-content===&lt;br /&gt;
&lt;br /&gt;
Dengan menggunakan [[File Manager]], ubahlah permission folder wp-content menjadi 'Read Write' (tidak perlu menggunakan fungsi recursive). Anda juga dapat melakukannya melalui FTP dengan mengganti permission folder tersebut menjadi 777 (CHMOD 777).&lt;br /&gt;
&lt;br /&gt;
==Proteksi Tambahan==&lt;br /&gt;
&lt;br /&gt;
===Menambahkan Proteksi Tambahan===&lt;br /&gt;
&lt;br /&gt;
CMS Wordpress sering mengalami serangan brute force dan hal ini adalah penyebab paling sering terjadinya masalah keamanan di situs web. Untuk mengatasinya, tambahlah baris berikut di .htaccess:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Files wp-login.php&amp;gt;&lt;br /&gt;
Require valid-user&lt;br /&gt;
&amp;lt;/Files&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Files xmlrpc.php&amp;gt;&lt;br /&gt;
Require valid-user&lt;br /&gt;
&amp;lt;/Files&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dengan perintah tersebut, Wordpress akan menanyakan password tambahan untuk login. Gunakan alamat email apa pada akun yang bersangkutan beserta passwordnya untuk melanjutkan.&lt;br /&gt;
&lt;br /&gt;
===Mematikan Proteksi Tambahan===&lt;br /&gt;
&lt;br /&gt;
Terkadang brute force Wordpress dilakukan secara masal melalui botnet dan kami sebagai pengelola server perlu mengatasinya dengan menerapkan proteksi untuk semua situs secara default.&lt;br /&gt;
&lt;br /&gt;
Jika anda ingin mematikannya, bisa dilakukan dengan perintah .htaccess berikut ini:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Files wp-login.php&amp;gt;&lt;br /&gt;
Require all granted&lt;br /&gt;
&amp;lt;/Files&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Files xmlrpc.php&amp;gt;&lt;br /&gt;
Require all granted&lt;br /&gt;
&amp;lt;/Files&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Masalah wp-cron==&lt;br /&gt;
&lt;br /&gt;
Untuk situs dengan beban tinggi, kami sarankan untuk mematikan wp-cron, dan menjalankan cron melalui [[Task Scheduler]]. Secara default, wp-cron dijalankan saat ada request masuk. Namun jika banyak request yang terjadi, akan terjadi race condition dan terjadi banyak proses yang menjalankan wp-cron sekaligus.&lt;br /&gt;
&lt;br /&gt;
Untuk mematikan wp-cron, silakan edit wp-config.php, dan tambahkan baris berikut:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
define('DISABLE_WP_CRON', true);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kemudian jadwalkan eksekusi wp-cron setiap jam dengan menambahkan baris berikut di crontab. Sesuaikan directory dengan directory ke web anda pada sistem.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
25 * * * * cd domain/example.com/example.com/web &amp;amp;&amp;amp; wsudo php wp-cron.php&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategori:Setting CMS]]&lt;/div&gt;</summary>
		<author><name>Docs</name></author>	</entry>

	<entry>
		<id>https://docs.indoglobal.com/wiki/Wordpress</id>
		<title>Wordpress</title>
		<link rel="alternate" type="text/html" href="https://docs.indoglobal.com/wiki/Wordpress"/>
				<updated>2021-08-03T03:15:39Z</updated>
		
		<summary type="html">&lt;p&gt;Docs: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Wordpress adalah CMS blog populer dan dapat didownload di [http://wordpress.org wordpress.org]. Berikut adalah beberapa hal yang berhubungan dengan instalasi Wordpress di sistem indoglobal.com&lt;br /&gt;
&lt;br /&gt;
==Rekomendasi Pasca Instalasi==&lt;br /&gt;
&lt;br /&gt;
Berikut adalah rekomendasi kami setelah melakukan instalasi Wordpress. Tujuannya adalah agar seluruh fitur yang ada di Wordpress dapat berfungsi penuh tanpa mengorbankan faktor keamanan.&lt;br /&gt;
&lt;br /&gt;
===Membuat Akun Share untuk keperluan upload===&lt;br /&gt;
&lt;br /&gt;
* Anda membutuhkan sebuah akun email yang akan diberi akses ke instalasi Wordpress anda. Anda dapat membuat akun email baru, atau menggunakan akun email yang sudah dibuat sebelumnya.&lt;br /&gt;
* Masuk ke File Manager, navigasikan ke folder instalasi Wordpress anda. Gunakan fungsi 'Share this folder'. Akan keluar menu 'Create a New Share'&lt;br /&gt;
* Ganti Email address menjadi email yang anda tentukan sebelumnya untuk diberi akses ke instalasi Wordpress.&lt;br /&gt;
* Masukkan share name misalnya 'wordpress'.&lt;br /&gt;
* Klik Create Share.&lt;br /&gt;
&lt;br /&gt;
Catat username untuk digunakan pada langkah berikutnya.&lt;br /&gt;
&lt;br /&gt;
===Konfigurasikan Wordpress untuk menggunakan FTP untuk melakukan modifikasi file===&lt;br /&gt;
&lt;br /&gt;
Sunting file wp-config.php, dan tambahkan baris berikut ini:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
define('FS_METHOD', 'ftpext');&lt;br /&gt;
define('FTP_HOST', 'localhost');&lt;br /&gt;
define('FTP_USER', 'user-wordpress@example.com');&lt;br /&gt;
define('FTP_PASS', 'password');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(ubah isi variabel sesuai konfigurasi anda)&lt;br /&gt;
&lt;br /&gt;
Anda juga dapat menghapus define FTP_PASS di atas untuk memaksimalkan keamanan. Wordpress akan secara otomatis menanyakan password FTP jika membutuhkannya.&lt;br /&gt;
&lt;br /&gt;
===Ubah permission folder wp-content===&lt;br /&gt;
&lt;br /&gt;
Dengan menggunakan [[File Manager]], ubahlah permission folder wp-content menjadi 'Read Write' (tidak perlu menggunakan fungsi recursive). Anda juga dapat melakukannya melalui FTP dengan mengganti permission folder tersebut menjadi 777 (CHMOD 777).&lt;br /&gt;
&lt;br /&gt;
==Proteksi Tambahan==&lt;br /&gt;
&lt;br /&gt;
===Menambahkan Proteksi Tambahan===&lt;br /&gt;
&lt;br /&gt;
CMS Wordpress sering mengalami serangan brute force dan hal ini adalah penyebab paling sering terjadinya masalah keamanan di situs web. Untuk mengatasinya, tambahlah baris berikut di .htaccess:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Files wp-login.php&amp;gt;&lt;br /&gt;
Require valid-user&lt;br /&gt;
&amp;lt;/Files&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Files xmlrpc.php&amp;gt;&lt;br /&gt;
Require valid-user&lt;br /&gt;
&amp;lt;/Files&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dengan perintah tersebut, Wordpress akan menanyakan password tambahan untuk login. Gunakan alamat email apa pada akun yang bersangkutan beserta passwordnya untuk melanjutkan.&lt;br /&gt;
&lt;br /&gt;
===Mematikan Proteksi Tambahan===&lt;br /&gt;
&lt;br /&gt;
Terkadang brute force Wordpress dilakukan secara masal melalui botnet dan kami sebagai pengelola server perlu mengatasinya dengan menerapkan proteksi untuk semua situs secara default.&lt;br /&gt;
&lt;br /&gt;
Jika anda ingin mematikannya, bisa dilakukan dengan perintah .htaccess berikut ini:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Files wp-login.php&amp;gt;&lt;br /&gt;
Require all granted&lt;br /&gt;
&amp;lt;/Files&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Files xmlrpc.php&amp;gt;&lt;br /&gt;
Require all granted&lt;br /&gt;
&amp;lt;/Files&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Masalah wp-cron==&lt;br /&gt;
&lt;br /&gt;
Untuk situs dengan beban tinggi, kami sarankan untuk mematikan wp-cron, dan menjalankan cron melalui [[Task Scheduler]]. Secara default, wp-cron dijalankan saat ada request masuk. Namun jika banyak request yang terjadi, akan terjadi race condition dan terjadi banyak proses yang menjalankan wp-cron sekaligus.&lt;br /&gt;
&lt;br /&gt;
Untuk mematikan wp-cron, silakan edit wp-config.php, dan tambahkan baris berikut:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
define('DISABLE_WP_CRON', 'true');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kemudian jadwalkan eksekusi wp-cron setiap jam dengan menambahkan baris berikut di crontab. Sesuaikan directory dengan directory ke web anda pada sistem.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
25 * * * * cd domain/example.com/example.com/web &amp;amp;&amp;amp; wsudo php wp-cron.php&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategori:Setting CMS]]&lt;/div&gt;</summary>
		<author><name>Docs</name></author>	</entry>

	<entry>
		<id>https://docs.indoglobal.com/wiki/Wordpress</id>
		<title>Wordpress</title>
		<link rel="alternate" type="text/html" href="https://docs.indoglobal.com/wiki/Wordpress"/>
				<updated>2021-08-03T03:15:14Z</updated>
		
		<summary type="html">&lt;p&gt;Docs: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Wordpress adalah CMS blog populer dan dapat didownload di [http://wordpress.org wordpress.org]. Berikut adalah beberapa hal yang berhubungan dengan instalasi Wordpress di sistem indoglobal.com&lt;br /&gt;
&lt;br /&gt;
==Rekomendasi Pasca Instalasi==&lt;br /&gt;
&lt;br /&gt;
Berikut adalah rekomendasi kami setelah melakukan instalasi Wordpress. Tujuannya adalah agar seluruh fitur yang ada di Wordpress dapat berfungsi penuh tanpa mengorbankan faktor keamanan.&lt;br /&gt;
&lt;br /&gt;
===Membuat Akun Share untuk keperluan upload===&lt;br /&gt;
&lt;br /&gt;
* Anda membutuhkan sebuah akun email yang akan diberi akses ke instalasi Wordpress anda. Anda dapat membuat akun email baru, atau menggunakan akun email yang sudah dibuat sebelumnya.&lt;br /&gt;
* Masuk ke File Manager, navigasikan ke folder instalasi Wordpress anda. Gunakan fungsi 'Share this folder'. Akan keluar menu 'Create a New Share'&lt;br /&gt;
* Ganti Email address menjadi email yang anda tentukan sebelumnya untuk diberi akses ke instalasi Wordpress.&lt;br /&gt;
* Masukkan share name misalnya 'wordpress'.&lt;br /&gt;
* Klik Create Share.&lt;br /&gt;
&lt;br /&gt;
Catat username untuk digunakan pada langkah berikutnya.&lt;br /&gt;
&lt;br /&gt;
===Konfigurasikan Wordpress untuk menggunakan FTP untuk melakukan modifikasi file===&lt;br /&gt;
&lt;br /&gt;
Sunting file wp-config.php, dan tambahkan baris berikut ini:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
define('FS_METHOD', 'ftpext');&lt;br /&gt;
define('FTP_HOST', 'localhost');&lt;br /&gt;
define('FTP_USER', 'user-wordpress@example.com');&lt;br /&gt;
define('FTP_PASS', 'password');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(ubah isi variabel sesuai konfigurasi anda)&lt;br /&gt;
&lt;br /&gt;
Anda juga dapat menghapus define FTP_PASS di atas untuk memaksimalkan keamanan. Wordpress akan secara otomatis menanyakan password FTP jika membutuhkannya.&lt;br /&gt;
&lt;br /&gt;
===Ubah permission folder wp-content===&lt;br /&gt;
&lt;br /&gt;
Dengan menggunakan [[File Manager]], ubahlah permission folder wp-content menjadi 'Read Write' (tidak perlu menggunakan fungsi recursive). Anda juga dapat melakukannya melalui FTP dengan mengganti permission folder tersebut menjadi 777 (CHMOD 777).&lt;br /&gt;
&lt;br /&gt;
==Proteksi Tambahan==&lt;br /&gt;
&lt;br /&gt;
===Menambahkan Proteksi Tambahan===&lt;br /&gt;
&lt;br /&gt;
CMS Wordpress sering mengalami serangan brute force dan hal ini adalah penyebab paling sering terjadinya masalah keamanan di situs web. Untuk mengatasinya, tambahlah baris berikut di .htaccess:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Files wp-login.php&amp;gt;&lt;br /&gt;
Require valid-user&lt;br /&gt;
&amp;lt;/Files&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Files xmlrpc.php&amp;gt;&lt;br /&gt;
Require valid-user&lt;br /&gt;
&amp;lt;/Files&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dengan perintah tersebut, Wordpress akan menanyakan password tambahan untuk login. Gunakan alamat email apa pada akun yang bersangkutan beserta passwordnya untuk melanjutkan.&lt;br /&gt;
&lt;br /&gt;
===Mematikan Proteksi Tambahan===&lt;br /&gt;
&lt;br /&gt;
Terkadang brute force Wordpress dilakukan secara masal melalui botnet dan kami sebagai pengelola server perlu mengatasinya dengan menerapkan proteksi untuk semua situs secara default.&lt;br /&gt;
&lt;br /&gt;
Jika anda ingin mematikannya, bisa dilakukan dengan perintah .htaccess berikut ini:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Files wp-login.php&amp;gt;&lt;br /&gt;
Require all granted&lt;br /&gt;
&amp;lt;/Files&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Files xmlrpc.php&amp;gt;&lt;br /&gt;
Require all granted&lt;br /&gt;
&amp;lt;/Files&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Masalah wp-cron==&lt;br /&gt;
&lt;br /&gt;
Untuk situs dengan beban tinggi, kami sarankan untuk mematikan wp-cron, dan menjalankan cron melalui [[Task Scheduler]]. Secara default, wp-cron dijalankan saat ada request masuk. Namun jika banyak request yang terjadi, akan terjadi race condition dan terjadi banyak proses yang menjalankan wp-cron sekaligus.&lt;br /&gt;
&lt;br /&gt;
Untuk mematikan wp-cron, silakan edit wp-config.php, dan tambahkan baris berikut:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
define('DISABLE_WP_CRON', 'true');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kemudian jadwalkan eksekusi wp-cron setiap jam dengan menambahkan baris berikut di crontab. Sesuaikan directory dengan directory ke web anda pada sistem.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
25 * * * * cd domain/example.com/example.com/web &amp;amp;&amp;amp; wsudo php wp-cron.php&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategori:Setting CMS]]&lt;/div&gt;</summary>
		<author><name>Docs</name></author>	</entry>

	<entry>
		<id>https://docs.indoglobal.com/wiki/Wordpress</id>
		<title>Wordpress</title>
		<link rel="alternate" type="text/html" href="https://docs.indoglobal.com/wiki/Wordpress"/>
				<updated>2021-08-03T03:14:57Z</updated>
		
		<summary type="html">&lt;p&gt;Docs: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Wordpress adalah CMS blog populer dan dapat didownload di [http://wordpress.org wordpress.org]. Berikut adalah beberapa hal yang berhubungan dengan instalasi Wordpress di sistem indoglobal.com&lt;br /&gt;
&lt;br /&gt;
==Rekomendasi Pasca Instalasi==&lt;br /&gt;
&lt;br /&gt;
Berikut adalah rekomendasi kami setelah melakukan instalasi Wordpress. Tujuannya adalah agar seluruh fitur yang ada di Wordpress dapat berfungsi penuh tanpa mengorbankan faktor keamanan.&lt;br /&gt;
&lt;br /&gt;
===Membuat Akun Share untuk keperluan upload===&lt;br /&gt;
&lt;br /&gt;
* Anda membutuhkan sebuah akun email yang akan diberi akses ke instalasi Wordpress anda. Anda dapat membuat akun email baru, atau menggunakan akun email yang sudah dibuat sebelumnya.&lt;br /&gt;
* Masuk ke File Manager, navigasikan ke folder instalasi Wordpress anda. Gunakan fungsi 'Share this folder'. Akan keluar menu 'Create a New Share'&lt;br /&gt;
* Ganti Email address menjadi email yang anda tentukan sebelumnya untuk diberi akses ke instalasi Wordpress.&lt;br /&gt;
* Masukkan share name misalnya 'wordpress'.&lt;br /&gt;
* Klik Create Share.&lt;br /&gt;
&lt;br /&gt;
Catat username untuk digunakan pada langkah berikutnya.&lt;br /&gt;
&lt;br /&gt;
===Konfigurasikan Wordpress untuk menggunakan FTP untuk melakukan modifikasi file===&lt;br /&gt;
&lt;br /&gt;
Sunting file wp-config.php, dan tambahkan baris berikut ini:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
define('FS_METHOD', 'ftpext');&lt;br /&gt;
define('FTP_HOST', 'localhost');&lt;br /&gt;
define('FTP_USER', 'user-wordpress@example.com');&lt;br /&gt;
define('FTP_PASS', 'password');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(ubah isi variabel sesuai konfigurasi anda)&lt;br /&gt;
&lt;br /&gt;
Anda juga dapat menghapus define FTP_PASS di atas untuk memaksimalkan keamanan. Wordpress akan secara otomatis menanyakan password FTP jika membutuhkannya.&lt;br /&gt;
&lt;br /&gt;
===Ubah permission folder wp-content===&lt;br /&gt;
&lt;br /&gt;
Dengan menggunakan [[File Manager]], ubahlah permission folder wp-content menjadi 'Read Write' (tidak perlu menggunakan fungsi recursive). Anda juga dapat melakukannya melalui FTP dengan mengganti permission folder tersebut menjadi 777 (CHMOD 777).&lt;br /&gt;
&lt;br /&gt;
==Proteksi Tambahan==&lt;br /&gt;
&lt;br /&gt;
===Menambahkan Proteksi Tambahan===&lt;br /&gt;
&lt;br /&gt;
CMS Wordpress sering mengalami serangan brute force dan hal ini adalah penyebab paling sering terjadinya masalah keamanan di situs web. Untuk mengatasinya, tambahlah baris berikut di .htaccess:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Files wp-login.php&amp;gt;&lt;br /&gt;
Require valid-user&lt;br /&gt;
&amp;lt;/Files&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Files xmlrpc.php&amp;gt;&lt;br /&gt;
Require valid-user&lt;br /&gt;
&amp;lt;/Files&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dengan perintah tersebut, Wordpress akan menanyakan password tambahan untuk login. Gunakan alamat email apa pada akun yang bersangkutan beserta passwordnya untuk melanjutkan.&lt;br /&gt;
&lt;br /&gt;
===Mematikan Proteksi Tambahan===&lt;br /&gt;
&lt;br /&gt;
Terkadang brute force Wordpress dilakukan secara masal melalui botnet dan kami sebagai pengelola server perlu mengatasinya dengan menerapkan proteksi untuk semua situs secara default.&lt;br /&gt;
&lt;br /&gt;
Jika anda ingin mematikannya, bisa dilakukan dengan perintah .htaccess berikut ini:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Files wp-login.php&amp;gt;&lt;br /&gt;
Require all granted&lt;br /&gt;
&amp;lt;/Files&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Files xmlrpc.php&amp;gt;&lt;br /&gt;
Require all granted&lt;br /&gt;
&amp;lt;/Files&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Masalah wp-cron==&lt;br /&gt;
&lt;br /&gt;
Untuk situs dengan beban tinggi, kami sarankan untuk mematikan wp-cron, dan menjalankan cron melalui [[Task Scheduler]]. Secara default, wp-cron dijalankan saat ada request masuk. Namun jika banyak request yang terjadi, akan terjadi race condition dan terjadi banyak proses yang menjalankan wp-cron sekaligus.&lt;br /&gt;
&lt;br /&gt;
Untuk mematikan wp-cron, silakan edit wp-config.php, dan tambahkan baris berikut:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
define('DISABLE_WP_CRON', 'true');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kemudian jadwalkan eksekusi wp-cron setiap jam dengan menambahkan baris berikut di crontab. Sesuaikan directory dengan directory ke web anda pada sistem.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;crontab&amp;quot;&amp;gt;&lt;br /&gt;
25 * * * * cd domain/example.com/example.com/web &amp;amp;&amp;amp; wsudo php wp-cron.php&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategori:Setting CMS]]&lt;/div&gt;</summary>
		<author><name>Docs</name></author>	</entry>

	<entry>
		<id>https://docs.indoglobal.com/wiki/Wordpress</id>
		<title>Wordpress</title>
		<link rel="alternate" type="text/html" href="https://docs.indoglobal.com/wiki/Wordpress"/>
				<updated>2021-08-03T03:14:30Z</updated>
		
		<summary type="html">&lt;p&gt;Docs: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Wordpress adalah CMS blog populer dan dapat didownload di [http://wordpress.org wordpress.org]. Berikut adalah beberapa hal yang berhubungan dengan instalasi Wordpress di sistem indoglobal.com&lt;br /&gt;
&lt;br /&gt;
==Rekomendasi Pasca Instalasi==&lt;br /&gt;
&lt;br /&gt;
Berikut adalah rekomendasi kami setelah melakukan instalasi Wordpress. Tujuannya adalah agar seluruh fitur yang ada di Wordpress dapat berfungsi penuh tanpa mengorbankan faktor keamanan.&lt;br /&gt;
&lt;br /&gt;
===Membuat Akun Share untuk keperluan upload===&lt;br /&gt;
&lt;br /&gt;
* Anda membutuhkan sebuah akun email yang akan diberi akses ke instalasi Wordpress anda. Anda dapat membuat akun email baru, atau menggunakan akun email yang sudah dibuat sebelumnya.&lt;br /&gt;
* Masuk ke File Manager, navigasikan ke folder instalasi Wordpress anda. Gunakan fungsi 'Share this folder'. Akan keluar menu 'Create a New Share'&lt;br /&gt;
* Ganti Email address menjadi email yang anda tentukan sebelumnya untuk diberi akses ke instalasi Wordpress.&lt;br /&gt;
* Masukkan share name misalnya 'wordpress'.&lt;br /&gt;
* Klik Create Share.&lt;br /&gt;
&lt;br /&gt;
Catat username untuk digunakan pada langkah berikutnya.&lt;br /&gt;
&lt;br /&gt;
===Konfigurasikan Wordpress untuk menggunakan FTP untuk melakukan modifikasi file===&lt;br /&gt;
&lt;br /&gt;
Sunting file wp-config.php, dan tambahkan baris berikut ini:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
define('FS_METHOD', 'ftpext');&lt;br /&gt;
define('FTP_HOST', 'localhost');&lt;br /&gt;
define('FTP_USER', 'user-wordpress@example.com');&lt;br /&gt;
define('FTP_PASS', 'password');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(ubah isi variabel sesuai konfigurasi anda)&lt;br /&gt;
&lt;br /&gt;
Anda juga dapat menghapus define FTP_PASS di atas untuk memaksimalkan keamanan. Wordpress akan secara otomatis menanyakan password FTP jika membutuhkannya.&lt;br /&gt;
&lt;br /&gt;
===Ubah permission folder wp-content===&lt;br /&gt;
&lt;br /&gt;
Dengan menggunakan [[File Manager]], ubahlah permission folder wp-content menjadi 'Read Write' (tidak perlu menggunakan fungsi recursive). Anda juga dapat melakukannya melalui FTP dengan mengganti permission folder tersebut menjadi 777 (CHMOD 777).&lt;br /&gt;
&lt;br /&gt;
==Proteksi Tambahan==&lt;br /&gt;
&lt;br /&gt;
===Menambahkan Proteksi Tambahan===&lt;br /&gt;
&lt;br /&gt;
CMS Wordpress sering mengalami serangan brute force dan hal ini adalah penyebab paling sering terjadinya masalah keamanan di situs web. Untuk mengatasinya, tambahlah baris berikut di .htaccess:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Files wp-login.php&amp;gt;&lt;br /&gt;
Require valid-user&lt;br /&gt;
&amp;lt;/Files&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Files xmlrpc.php&amp;gt;&lt;br /&gt;
Require valid-user&lt;br /&gt;
&amp;lt;/Files&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dengan perintah tersebut, Wordpress akan menanyakan password tambahan untuk login. Gunakan alamat email apa pada akun yang bersangkutan beserta passwordnya untuk melanjutkan.&lt;br /&gt;
&lt;br /&gt;
===Mematikan Proteksi Tambahan===&lt;br /&gt;
&lt;br /&gt;
Terkadang brute force Wordpress dilakukan secara masal melalui botnet dan kami sebagai pengelola server perlu mengatasinya dengan menerapkan proteksi untuk semua situs secara default.&lt;br /&gt;
&lt;br /&gt;
Jika anda ingin mematikannya, bisa dilakukan dengan perintah .htaccess berikut ini:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Files wp-login.php&amp;gt;&lt;br /&gt;
Require all granted&lt;br /&gt;
&amp;lt;/Files&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Files xmlrpc.php&amp;gt;&lt;br /&gt;
Require all granted&lt;br /&gt;
&amp;lt;/Files&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Masalah wp-cron==&lt;br /&gt;
&lt;br /&gt;
Untuk situs dengan beban tinggi, kami sarankan untuk mematikan wp-cron, dan menjalankan cron melalui [[Task Scheduler]]. Secara default, wp-cron dijalankan saat ada request masuk. Namun jika banyak request yang terjadi, akan terjadi race condition dan terjadi banyak proses yang menjalankan wp-cron sekaligus.&lt;br /&gt;
&lt;br /&gt;
Untuk mematikan wp-cron, silakan edit wp-config.php, dan tambahkan baris berikut:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
define('DISABLE_WP_CRON', 'true');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kemudian jadwalkan eksekusi wp-cron setiap jam dengan menambahkan baris berikut di crontab. Sesuaikan directory dengan directory ke web anda pada sistem.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cron&amp;quot;&amp;gt;&lt;br /&gt;
25 * * * * cd domain/example.com/example.com/web &amp;amp;&amp;amp; wsudo php wp-cron.php&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategori:Setting CMS]]&lt;/div&gt;</summary>
		<author><name>Docs</name></author>	</entry>

	<entry>
		<id>https://docs.indoglobal.com/wiki/Laravel</id>
		<title>Laravel</title>
		<link rel="alternate" type="text/html" href="https://docs.indoglobal.com/wiki/Laravel"/>
				<updated>2021-07-05T02:46:11Z</updated>
		
		<summary type="html">&lt;p&gt;Docs: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[http://laravel.com/ Laravel] adalah salah satu framework PHP yang populer digunakan. Berikut adalah masalah yang sering ditemui saat menggunakan Laravel dan solusinya.&lt;br /&gt;
&lt;br /&gt;
==Blank Page/Halaman Putih==&lt;br /&gt;
&lt;br /&gt;
Jika diakses melalui browser, yang keluar hanya halaman putih/kosong saja. Biasanya masalah ini disebabkan masalah permission pada folder app/storage. Ganti permission untuk folder tersebut menjadi Read-Write (recursive) melalui [[File Manager]] atau FTP.&lt;br /&gt;
&lt;br /&gt;
==Laravel Queue==&lt;br /&gt;
&lt;br /&gt;
Untuk menjalankan proses Laravel Queue, cara terbaik adalah dengan menjalankannya di screen melalui perintah:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
screen -d -m -S laravelqueue wsudo php path/to/artisan queue:work&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Perintah tersebut akan membuka sesi screen yang menjalankan queue:work. Jika diperlukan versi PHP tertentu, dapat dilakukan dengan mengganti &amp;quot;php&amp;quot; pada perintah tersebut dengan &amp;quot;php-7.3&amp;quot; misalnya. Ganti &amp;quot;path/to/artisan&amp;quot; dengan path lengkap ke command artisan.&lt;br /&gt;
&lt;br /&gt;
Agar tetap aktif jika server di-reboot, dapat dilakukan dengan menambahkan perintah tersebut pada [[Task Scheduler]]&lt;br /&gt;
&lt;br /&gt;
Untuk membuka kembali sesi screen tersebut, dapat digunakan perintah:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
screen -r laravelqueue&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategori:PHP]]&lt;br /&gt;
[[Kategori:Setting CMS]]&lt;/div&gt;</summary>
		<author><name>Docs</name></author>	</entry>

	<entry>
		<id>https://docs.indoglobal.com/wiki/Laravel</id>
		<title>Laravel</title>
		<link rel="alternate" type="text/html" href="https://docs.indoglobal.com/wiki/Laravel"/>
				<updated>2021-07-05T02:17:14Z</updated>
		
		<summary type="html">&lt;p&gt;Docs: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[http://laravel.com/ Laravel] adalah salah satu framework PHP yang populer digunakan. Berikut adalah masalah yang sering ditemui saat menggunakan Laravel dan solusinya.&lt;br /&gt;
&lt;br /&gt;
==Blank Page/Halaman Putih==&lt;br /&gt;
&lt;br /&gt;
Jika diakses melalui browser, yang keluar hanya halaman putih/kosong saja. Biasanya masalah ini disebabkan masalah permission pada folder app/storage. Ganti permission untuk folder tersebut menjadi Read-Write (recursive) melalui [[File Manager]] atau FTP.&lt;br /&gt;
&lt;br /&gt;
==Laravel Queue==&lt;br /&gt;
&lt;br /&gt;
Untuk menjalankan proses Laravel Queue, cara terbaik adalah dengan menjalankannya di screen melalui perintah:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
screen -d -m -S laraveljobs wsudo php path/to/artisan queue:work&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Perintah tersebut akan membuka sesi screen yang menjalankan queue:work. Jika diperlukan versi PHP tertentu, dapat dilakukan dengan mengganti &amp;quot;php&amp;quot; pada perintah tersebut dengan &amp;quot;php-7.3&amp;quot; misalnya. Ganti &amp;quot;path/to/artisan&amp;quot; dengan path lengkap ke command artisan.&lt;br /&gt;
&lt;br /&gt;
Agar tetap aktif jika server di-reboot, dapat dilakukan dengan menambahkan perintah tersebut pada [[Task Scheduler]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategori:PHP]]&lt;br /&gt;
[[Kategori:Setting CMS]]&lt;/div&gt;</summary>
		<author><name>Docs</name></author>	</entry>

	<entry>
		<id>https://docs.indoglobal.com/wiki/Laravel</id>
		<title>Laravel</title>
		<link rel="alternate" type="text/html" href="https://docs.indoglobal.com/wiki/Laravel"/>
				<updated>2021-07-05T02:15:12Z</updated>
		
		<summary type="html">&lt;p&gt;Docs: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[http://laravel.com/ Laravel] adalah salah satu framework PHP yang populer digunakan. Berikut adalah masalah yang sering ditemui saat menggunakan Laravel dan solusinya.&lt;br /&gt;
&lt;br /&gt;
==Blank Page/Halaman Putih==&lt;br /&gt;
&lt;br /&gt;
Jika diakses melalui browser, yang keluar hanya halaman putih/kosong saja. Biasanya masalah ini disebabkan masalah permission pada folder app/storage. Ganti permission untuk folder tersebut menjadi Read-Write (recursive) melalui [[File Manager]] atau FTP.&lt;br /&gt;
&lt;br /&gt;
==Laravel Jobs==&lt;br /&gt;
&lt;br /&gt;
Untuk menjalankan proses Laravel Jobs, cara terbaik adalah dengan menjalankannya di screen melalui perintah:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
screen -d -m -S laraveljobs wsudo php artisan queue:work&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Perintah tersebut akan membuka sesi screen yang menjalankan queue:work. Jika diperlukan versi PHP tertentu, dapat dilakukan dengan mengganti &amp;quot;php&amp;quot; pada perintah tersebut dengan &amp;quot;php-7.3&amp;quot; misalnya.&lt;br /&gt;
&lt;br /&gt;
Agar tetap aktif jika server di-reboot, dapat dilakukan dengan menambahkan perintah tersebut pada [[Task Scheduler]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategori:PHP]]&lt;br /&gt;
[[Kategori:Setting CMS]]&lt;/div&gt;</summary>
		<author><name>Docs</name></author>	</entry>

	<entry>
		<id>https://docs.indoglobal.com/wiki/Laravel</id>
		<title>Laravel</title>
		<link rel="alternate" type="text/html" href="https://docs.indoglobal.com/wiki/Laravel"/>
				<updated>2021-07-05T02:14:56Z</updated>
		
		<summary type="html">&lt;p&gt;Docs: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[http://laravel.com/ Laravel] adalah salah satu framework PHP yang populer digunakan. Berikut adalah masalah yang sering ditemui saat menggunakan Laravel dan solusinya.&lt;br /&gt;
&lt;br /&gt;
==Blank Page/Halaman Putih==&lt;br /&gt;
&lt;br /&gt;
Jika diakses melalui browser, yang keluar hanya halaman putih/kosong saja. Biasanya masalah ini disebabkan masalah permission pada folder app/storage. Ganti permission untuk folder tersebut menjadi Read-Write (recursive) melalui [[File Manager]] atau FTP.&lt;br /&gt;
&lt;br /&gt;
==Laravel Jobs==&lt;br /&gt;
&lt;br /&gt;
Untuk menjalankan proses Laravel Jobs, cara terbaik adalah dengan menjalankannya di screen melalui perintah:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
screen -d -m -S laraveljobs wsudo php artisan queue:work&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Perintah tersebut akan membuka sesi screen yang menjalankan queue:work. Jika diperlukan versi PHP tertentu, dapat dilakukan dengan mengganti &amp;quot;php&amp;quot; pada perintah tersebut dengan &amp;quot;php-7.3&amp;quot; misalnya.&lt;br /&gt;
&lt;br /&gt;
Agar tetap aktif jika server di-reboot, dapat dilakukan dengan menambahkan perintah tersebut pada [[Task Scheduler]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategori:PHP]]&lt;br /&gt;
[[Kategori:Setting CMS]]&lt;/div&gt;</summary>
		<author><name>Docs</name></author>	</entry>

	<entry>
		<id>https://docs.indoglobal.com/wiki/Moodle</id>
		<title>Moodle</title>
		<link rel="alternate" type="text/html" href="https://docs.indoglobal.com/wiki/Moodle"/>
				<updated>2020-08-01T02:59:46Z</updated>
		
		<summary type="html">&lt;p&gt;Docs: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===Instalasi Melalui CLI===&lt;br /&gt;
&lt;br /&gt;
Proses instalasi Moodle membutuhkan pembuatan tabel database yang sangat banyak. Dalam beberapa kasus, lamanya proses tersebut dapat membuat timeout dan mengakibatkan tidak seluruh tabel berhasil dibuat.&lt;br /&gt;
&lt;br /&gt;
Panduan ini khusus untuk Moodle yang diinstal manual, tidak melalui [[Apps]].&lt;br /&gt;
&lt;br /&gt;
Untuk melakukan instalasi melalui CLI, silakan lakukan sesuai petunjuk [https://docs.moodle.org/19/en/Administration_via_command_line Administration  via command line] di manual Moodle.&lt;br /&gt;
&lt;br /&gt;
===Permission===&lt;br /&gt;
&lt;br /&gt;
Folder 'moodledata' perlu dijadikan read-write secara rekursif. Gunakan [[File Manager]] untuk melakukannya atau dengan perintah chmod -R 777.&lt;br /&gt;
&lt;br /&gt;
===Menyalakan Debugging===&lt;br /&gt;
&lt;br /&gt;
Untuk menyalakan debug mode dan mengaktifkan pesan error, tambahkan baris berikut di config.php:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
@error_reporting(E_ALL | E_STRICT);&lt;br /&gt;
@ini_set('display_errors', '1');&lt;br /&gt;
$CFG-&amp;gt;debug = (E_ALL | E_STRICT);&lt;br /&gt;
$CFG-&amp;gt;debugdisplay = 1;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategori:Setting CMS]]&lt;/div&gt;</summary>
		<author><name>Docs</name></author>	</entry>

	<entry>
		<id>https://docs.indoglobal.com/wiki/Moodle</id>
		<title>Moodle</title>
		<link rel="alternate" type="text/html" href="https://docs.indoglobal.com/wiki/Moodle"/>
				<updated>2020-08-01T02:59:23Z</updated>
		
		<summary type="html">&lt;p&gt;Docs: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===Instalasi Melalui CLI===&lt;br /&gt;
&lt;br /&gt;
Proses instalasi Moodle membutuhkan pembuatan tabel database yang sangat banyak. Dalam beberapa kasus, lamanya proses tersebut dapat membuat timeout dan mengakibatkan tidak seluruh tabel berhasil dibuat.&lt;br /&gt;
&lt;br /&gt;
Panduan ini khusus untuk Moodle yang diinstal manual, tidak melalui [[Apps]].&lt;br /&gt;
&lt;br /&gt;
Untuk melakukan instalasi melalui CLI, silakan lakukan sesuai petunjuk [Administration  via command line|https://docs.moodle.org/19/en/Administration_via_command_line] di manual Moodle.&lt;br /&gt;
&lt;br /&gt;
===Permission===&lt;br /&gt;
&lt;br /&gt;
Folder 'moodledata' perlu dijadikan read-write secara rekursif. Gunakan [[File Manager]] untuk melakukannya atau dengan perintah chmod -R 777.&lt;br /&gt;
&lt;br /&gt;
===Menyalakan Debugging===&lt;br /&gt;
&lt;br /&gt;
Untuk menyalakan debug mode dan mengaktifkan pesan error, tambahkan baris berikut di config.php:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
@error_reporting(E_ALL | E_STRICT);&lt;br /&gt;
@ini_set('display_errors', '1');&lt;br /&gt;
$CFG-&amp;gt;debug = (E_ALL | E_STRICT);&lt;br /&gt;
$CFG-&amp;gt;debugdisplay = 1;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategori:Setting CMS]]&lt;/div&gt;</summary>
		<author><name>Docs</name></author>	</entry>

	<entry>
		<id>https://docs.indoglobal.com/wiki/Moodle</id>
		<title>Moodle</title>
		<link rel="alternate" type="text/html" href="https://docs.indoglobal.com/wiki/Moodle"/>
				<updated>2020-08-01T02:55:27Z</updated>
		
		<summary type="html">&lt;p&gt;Docs: ←Membuat halaman berisi '===Instalasi Melalui CLI===  Proses instalasi Moodle membutuhkan pembuatan tabel database yang sangat banyak. Dalam beberapa kasus, lamanya proses tersebut dapat membu...'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===Instalasi Melalui CLI===&lt;br /&gt;
&lt;br /&gt;
Proses instalasi Moodle membutuhkan pembuatan tabel database yang sangat banyak. Dalam beberapa kasus, lamanya proses tersebut dapat membuat timeout dan mengakibatkan tidak seluruh tabel berhasil dibuat.&lt;br /&gt;
&lt;br /&gt;
TBD&lt;br /&gt;
&lt;br /&gt;
===Permission===&lt;br /&gt;
&lt;br /&gt;
Folder 'moodledata' perlu dijadikan read-write secara rekursif. Gunakan [[File Manager]] untuk melakukannya atau dengan perintah chmod -R 777.&lt;br /&gt;
&lt;br /&gt;
===Menyalakan Debugging===&lt;br /&gt;
&lt;br /&gt;
Untuk menyalakan debug mode dan mengaktifkan pesan error, tambahkan baris berikut di config.php:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
@error_reporting(E_ALL | E_STRICT);&lt;br /&gt;
@ini_set('display_errors', '1');&lt;br /&gt;
$CFG-&amp;gt;debug = (E_ALL | E_STRICT);&lt;br /&gt;
$CFG-&amp;gt;debugdisplay = 1;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategori:Setting CMS]]&lt;/div&gt;</summary>
		<author><name>Docs</name></author>	</entry>

	<entry>
		<id>https://docs.indoglobal.com/wiki/Perl_Dancer</id>
		<title>Perl Dancer</title>
		<link rel="alternate" type="text/html" href="https://docs.indoglobal.com/wiki/Perl_Dancer"/>
				<updated>2020-07-29T10:02:26Z</updated>
		
		<summary type="html">&lt;p&gt;Docs: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Untuk melakukan instalasi perl Dancer, berikut adalah langkah-langkahnya:&lt;br /&gt;
&lt;br /&gt;
===Install Perl minimal versi 5.24===&lt;br /&gt;
&lt;br /&gt;
Silakan anda buka tiket untuk meminta staf kami menginstalkan paket rh-perl524 ke sistem.&lt;br /&gt;
&lt;br /&gt;
===Mengaktifkan Perl Versi Baru===&lt;br /&gt;
&lt;br /&gt;
Tambahkan baris berikut di `~/.bashrc_local`:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
source scl_source enable rh-perl524&lt;br /&gt;
export PATH=&amp;quot;$PATH:~/perl5/bin&amp;quot;&lt;br /&gt;
export PERL5LIB=$HOME/perl5/lib/perl5&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aktifkan konfigurasi tersebut dengan `source ~/.bashrc`&lt;br /&gt;
&lt;br /&gt;
===Instalasi Dancer===&lt;br /&gt;
&lt;br /&gt;
Gunakan perintah berikut untuk menginstall Dancer:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ cpanm --notest Dancer2 FCGI FCGI::ProcManager`&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Membuat Skeleton Aplikasi Dancer===&lt;br /&gt;
&lt;br /&gt;
Gunakan perintah berikut untuk membuat skeleton aplikasi dancer:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ dancer2 -a MyApp &amp;amp;&amp;amp; cd MyApp&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Menjalankan Aplikasi Dancer===&lt;br /&gt;
&lt;br /&gt;
Untuk menjalankan aplikasi Dancer tersebut, gunakan perintah:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ plackup -s FCGI --listen $HOME/myapp.sock myapp.psgi&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anda juga perlu mengganti permission socket agar dapat diakses oleh webserver:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ chmod 777 $HOME/myapp.sock&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Aktifkan Extension sockets di PHP===&lt;br /&gt;
&lt;br /&gt;
Masuk ke [[Control Panel]], lalu ke menu Language - PHP. Dan edit konfigurasi untuk versi PHP yang digunakan. Tambahkan baris berikut ke konfigurasi tersebut:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
extension=sockets.so&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Buat Client FastCGI===&lt;br /&gt;
&lt;br /&gt;
Gunakan script ini untuk membuat client FastCGI:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
/*&lt;br /&gt;
 * Configure these by adding two define()s to spawn-fcgi.conf.php:&lt;br /&gt;
 *&lt;br /&gt;
 * SPAWN should be a command to spawn a fastcgi process on a socket&lt;br /&gt;
 * SOCKET should point to the socket&lt;br /&gt;
 *&lt;br /&gt;
 * the example SPAWN is a web.py app (see demo.py)&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
define(&amp;quot;SOCKET&amp;quot;, '/home/xxx/myapp.sock');&lt;br /&gt;
define(&amp;quot;SPAWN&amp;quot;, '-');&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * Spawn-FCGI.php: A script to translate PHP requests into FastCGI&lt;br /&gt;
 * requests, thus allowing hosting of FastCGI apps (good) on any&lt;br /&gt;
 * PHP-compatible web host (cheap, common).&lt;br /&gt;
 *&lt;br /&gt;
 * This is almost a direct port of Flup's FastCGI test harness,&lt;br /&gt;
 * flup_fcgi_client.py (c) 2006 Allan Saddi &amp;lt;allan@saddi.com&amp;gt; +&lt;br /&gt;
 * 2011 Vladimir Rusinov &amp;lt;vladimir@greenmice.info&amp;gt;&lt;br /&gt;
 *&lt;br /&gt;
 * Modified to take request data from the environment rather than&lt;br /&gt;
 * from function parameters.&lt;br /&gt;
 *&lt;br /&gt;
 * PHP port + modifications (c) 2012 Shish &amp;lt;webmaster@shishnet.org&amp;gt;&lt;br /&gt;
 *&lt;br /&gt;
 *&lt;br /&gt;
 * Redistribution and use in source and binary forms, with or without&lt;br /&gt;
 * modification, are permitted provided that the following conditions&lt;br /&gt;
 * are met:&lt;br /&gt;
 * 1. Redistributions of source code must retain the above copyright&lt;br /&gt;
 *    notice, this list of conditions and the following disclaimer.&lt;br /&gt;
 * 2. Redistributions in binary form must reproduce the above copyright&lt;br /&gt;
 *    notice, this list of conditions and the following disclaimer in the&lt;br /&gt;
 *    documentation and/or other materials provided with the distribution.&lt;br /&gt;
 *&lt;br /&gt;
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND&lt;br /&gt;
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE&lt;br /&gt;
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE&lt;br /&gt;
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE&lt;br /&gt;
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL&lt;br /&gt;
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS&lt;br /&gt;
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)&lt;br /&gt;
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT&lt;br /&gt;
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY&lt;br /&gt;
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF&lt;br /&gt;
 * SUCH DAMAGE.&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * FastCGI constants&lt;br /&gt;
 */&lt;br /&gt;
define('FCGI_LISTENSOCK_FILENO', 0);&lt;br /&gt;
&lt;br /&gt;
define('FCGI_HEADER_LEN', 8);&lt;br /&gt;
&lt;br /&gt;
define('FCGI_VERSION_1', 1);&lt;br /&gt;
&lt;br /&gt;
define('FCGI_BEGIN_REQUEST', 1);&lt;br /&gt;
define('FCGI_ABORT_REQUEST', 2);&lt;br /&gt;
define('FCGI_END_REQUEST', 3);&lt;br /&gt;
define('FCGI_PARAMS', 4);&lt;br /&gt;
define('FCGI_STDIN', 5);&lt;br /&gt;
define('FCGI_STDOUT', 6);&lt;br /&gt;
define('FCGI_STDERR', 7);&lt;br /&gt;
define('FCGI_DATA', 8);&lt;br /&gt;
define('FCGI_GET_VALUES', 9);&lt;br /&gt;
define('FCGI_GET_VALUES_RESULT', 10);&lt;br /&gt;
define('FCGI_UNKNOWN_TYPE', 11);&lt;br /&gt;
define('FCGI_MAXTYPE', FCGI_UNKNOWN_TYPE);&lt;br /&gt;
&lt;br /&gt;
define('FCGI_NULL_REQUEST_ID', 0);&lt;br /&gt;
&lt;br /&gt;
define('FCGI_KEEP_CONN', 1);&lt;br /&gt;
&lt;br /&gt;
define('FCGI_RESPONDER', 1);&lt;br /&gt;
define('FCGI_AUTHORIZER', 2);&lt;br /&gt;
define('FCGI_FILTER', 3);&lt;br /&gt;
&lt;br /&gt;
define('FCGI_REQUEST_COMPLETE', 0);&lt;br /&gt;
define('FCGI_CANT_MPX_CONN', 1);&lt;br /&gt;
define('FCGI_OVERLOADED', 2);&lt;br /&gt;
define('FCGI_UNKNOWN_ROLE', 3);&lt;br /&gt;
&lt;br /&gt;
define('FCGI_MAX_CONNS', 'FCGI_MAX_CONNS');&lt;br /&gt;
define('FCGI_MAX_REQS', 'FCGI_MAX_REQS');&lt;br /&gt;
define('FCGI_MPXS_CONNS', 'FCGI_MPXS_CONNS');&lt;br /&gt;
&lt;br /&gt;
# SHIT: PHP needs different patterns for encode and decode&lt;br /&gt;
define('FCGI_Header', 'CCnnCx');&lt;br /&gt;
define('FCGI_Header2', 'Cversion/Ctype/nrequestId/ncontentLength/CpaddingLength/x');&lt;br /&gt;
define('FCGI_BeginRequestBody', 'nCx5');&lt;br /&gt;
define('FCGI_EndRequestBody', 'NCx3');&lt;br /&gt;
define('FCGI_UnknownTypeBody', 'Cx7');&lt;br /&gt;
&lt;br /&gt;
# SHIT: PHP has no calcsize; so we calculate by hand and hardcode the result&lt;br /&gt;
define('FCGI_BeginRequestBody_LEN', 8); # calcsize(FCGI_BeginRequestBody));&lt;br /&gt;
define('FCGI_EndRequestBody_LEN', 8); # calcsize(FCGI_EndRequestBody));&lt;br /&gt;
define('FCGI_UnknownTypeBody_LEN', 8); # calcsize(FCGI_UnknownTypeBody));&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * Decodes a name/value pair.&lt;br /&gt;
 * &lt;br /&gt;
 * The number of bytes decoded as well as the name/value pair&lt;br /&gt;
 * are returned.&lt;br /&gt;
 */&lt;br /&gt;
function decode_pair($s, $pos=0) {&lt;br /&gt;
    $nameLength = ord($s[$pos]);&lt;br /&gt;
    if($nameLength &amp;amp; 128) {&lt;br /&gt;
        $nameLength = unpack('N', substr($s, $pos, 4));&lt;br /&gt;
                $nameLength = $nameLength[0] &amp;amp; 0x7fffffff;&lt;br /&gt;
        $pos += 4;&lt;br /&gt;
        }&lt;br /&gt;
    else {&lt;br /&gt;
        $pos += 1;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
    $valueLength = ord($s[$pos]);&lt;br /&gt;
    if($valueLength &amp;amp; 128) {&lt;br /&gt;
        $valueLength = unpack('N', substr($s, $pos, 4));&lt;br /&gt;
                $valueLength = $valueLength[0] &amp;amp; 0x7fffffff;&lt;br /&gt;
        $pos += 4;&lt;br /&gt;
        }&lt;br /&gt;
    else {&lt;br /&gt;
        $pos += 1;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
    $name = substr($s, $pos, $nameLength);&lt;br /&gt;
    $pos += $nameLength;&lt;br /&gt;
    $value = substr($s, $pos, $valueLength);&lt;br /&gt;
    $pos += $valueLength;&lt;br /&gt;
&lt;br /&gt;
    return array($pos, array($name, $value));&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * Encodes a name/value pair.&lt;br /&gt;
 *&lt;br /&gt;
 * The encoded string is returned.&lt;br /&gt;
 */&lt;br /&gt;
function encode_pair($name, $value) {&lt;br /&gt;
    $nameLength = strlen($name);&lt;br /&gt;
    if($nameLength &amp;lt; 128) {&lt;br /&gt;
        $s = chr($nameLength);&lt;br /&gt;
        }&lt;br /&gt;
    else {&lt;br /&gt;
        $s = pack('N', $nameLength | 0x80000000);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
    $valueLength = strlen($value);&lt;br /&gt;
    if($valueLength &amp;lt; 128) {&lt;br /&gt;
        $s .= chr($valueLength);&lt;br /&gt;
        }&lt;br /&gt;
    else {&lt;br /&gt;
        $s .= pack('N', $valueLength | 0x80000000);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
    return $s . $name . $value;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function spawn() {&lt;br /&gt;
        #print &amp;quot;Spawning new FastCGI daemon\n&amp;quot;;&lt;br /&gt;
        $r = shell_exec(SPAWN);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * A FastCGI Record.&lt;br /&gt;
 * &lt;br /&gt;
 * Used for encoding/decoding records.&lt;br /&gt;
 */&lt;br /&gt;
class Record {&lt;br /&gt;
    function __construct($type=FCGI_UNKNOWN_TYPE, $requestId=FCGI_NULL_REQUEST_ID) {&lt;br /&gt;
        $this-&amp;gt;version = FCGI_VERSION_1;&lt;br /&gt;
        $this-&amp;gt;type = $type;&lt;br /&gt;
        $this-&amp;gt;requestId = $requestId;&lt;br /&gt;
        $this-&amp;gt;contentLength = 0;&lt;br /&gt;
        $this-&amp;gt;paddingLength = 0;&lt;br /&gt;
        $this-&amp;gt;contentData = '';&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
    /*&lt;br /&gt;
         * Attempts to receive length bytes from a socket, blocking if necessary.&lt;br /&gt;
         * (Socket may be blocking or non-blocking.)&lt;br /&gt;
     */&lt;br /&gt;
    function _recvall($sock, $length) {&lt;br /&gt;
        $dataList = array();&lt;br /&gt;
        $recvLen = 0;&lt;br /&gt;
        while($length) {&lt;br /&gt;
                        $d = socket_recv($sock, $data, $length, null);&lt;br /&gt;
                        if($d === false) {&lt;br /&gt;
                                $r = array($sock);&lt;br /&gt;
                                $w = array();&lt;br /&gt;
                                $x = array();&lt;br /&gt;
                                socket_select($r, $w, $x, NULL);&lt;br /&gt;
                                continue;&lt;br /&gt;
                        }&lt;br /&gt;
            if(!$data) {&lt;br /&gt;
                break;&lt;br /&gt;
                        }&lt;br /&gt;
            $dataList[] = $data;&lt;br /&gt;
            $dataLen = strlen($data);&lt;br /&gt;
            $recvLen += $dataLen;&lt;br /&gt;
            $length -= $dataLen;&lt;br /&gt;
                }&lt;br /&gt;
        return array(implode('', $dataList), $recvLen);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        /*&lt;br /&gt;
         * Read and decode a Record from a socket.&lt;br /&gt;
         */&lt;br /&gt;
    function read($sock) {&lt;br /&gt;
        try {&lt;br /&gt;
                        $parts = $this-&amp;gt;_recvall($sock, FCGI_HEADER_LEN);&lt;br /&gt;
            $header = $parts[0];&lt;br /&gt;
                        $length = $parts[1];&lt;br /&gt;
                }&lt;br /&gt;
        catch(Exception $e) {&lt;br /&gt;
            throw new EOFError();&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
        if($length &amp;lt; FCGI_HEADER_LEN) {&lt;br /&gt;
            throw new EOFError();&lt;br /&gt;
                }&lt;br /&gt;
        &lt;br /&gt;
                $parts = unpack(FCGI_Header2, $header);&lt;br /&gt;
        $this-&amp;gt;version = $parts['version'];&lt;br /&gt;
                $this-&amp;gt;type = $parts['type'];&lt;br /&gt;
                $this-&amp;gt;requestId = $parts['requestId'];&lt;br /&gt;
                $this-&amp;gt;contentLength = $parts['contentLength'];&lt;br /&gt;
                $this-&amp;gt;paddingLength = $parts['paddingLength'];&lt;br /&gt;
&lt;br /&gt;
        if($this-&amp;gt;contentLength) {&lt;br /&gt;
            try {&lt;br /&gt;
                                $parts = $this-&amp;gt;_recvall($sock, $this-&amp;gt;contentLength);&lt;br /&gt;
                $this-&amp;gt;contentData = $parts[0];&lt;br /&gt;
                                $length = $parts[1];&lt;br /&gt;
                        }&lt;br /&gt;
            catch(Exception $e) {&lt;br /&gt;
                throw new EOFError();&lt;br /&gt;
                        }&lt;br /&gt;
&lt;br /&gt;
            if($length &amp;lt; $this-&amp;gt;contentLength) {&lt;br /&gt;
                throw new EOFError();&lt;br /&gt;
                        }&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
        if($this-&amp;gt;paddingLength) {&lt;br /&gt;
            try {&lt;br /&gt;
                $this-&amp;gt;_recvall($sock, $this-&amp;gt;paddingLength);&lt;br /&gt;
                        }&lt;br /&gt;
            catch(Exception $e) {&lt;br /&gt;
                throw new EOFError();&lt;br /&gt;
                        }&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        /*&lt;br /&gt;
         * Writes data to a socket and does not return until all the data is sent.&lt;br /&gt;
         */&lt;br /&gt;
    function _sendall($sock, $data) {&lt;br /&gt;
        $length = strlen($data);&lt;br /&gt;
        while($length) {&lt;br /&gt;
                        $sent = socket_send($sock, $data, strlen($data), 0);&lt;br /&gt;
                        if($sent === FALSE) {&lt;br /&gt;
                                $errorcode = socket_last_error();&lt;br /&gt;
                                #if($errorcode == 107) { # ENOTCONN&lt;br /&gt;
                                #       spawn();&lt;br /&gt;
                                #       continue;&lt;br /&gt;
                                #}&lt;br /&gt;
                                #else if($e[0] == errno.EAGAIN) {&lt;br /&gt;
                                #       #select.select([], [sock], [])&lt;br /&gt;
                                #       continue;&lt;br /&gt;
                                #}&lt;br /&gt;
                                #else {&lt;br /&gt;
                                        $errormsg = socket_strerror($errorcode);&lt;br /&gt;
                                        die(&amp;quot;Couldn't write to socket: [$errorcode] $errormsg&amp;quot;);&lt;br /&gt;
                                #}&lt;br /&gt;
                        }&lt;br /&gt;
            $data = substr($data, $sent);&lt;br /&gt;
            $length -= $sent;&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        /*&lt;br /&gt;
         * Encode and write a Record to a socket.&lt;br /&gt;
         */&lt;br /&gt;
    function write($sock) {&lt;br /&gt;
        $this-&amp;gt;paddingLength = -$this-&amp;gt;contentLength &amp;amp; 7;&lt;br /&gt;
&lt;br /&gt;
        $header = pack(FCGI_Header, $this-&amp;gt;version, $this-&amp;gt;type,&lt;br /&gt;
                             $this-&amp;gt;requestId, $this-&amp;gt;contentLength,&lt;br /&gt;
                             $this-&amp;gt;paddingLength);&lt;br /&gt;
        $this-&amp;gt;_sendall($sock, $header);&lt;br /&gt;
        if($this-&amp;gt;contentLength) {&lt;br /&gt;
            $this-&amp;gt;_sendall($sock, $this-&amp;gt;contentData);&lt;br /&gt;
                }&lt;br /&gt;
        if($this-&amp;gt;paddingLength) {&lt;br /&gt;
            $this-&amp;gt;_sendall($sock, str_repeat(&amp;quot;\x00&amp;quot;, $this-&amp;gt;paddingLength));&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function _fcgiParams($sock, $requestId, $params) {&lt;br /&gt;
    $rec = new Record(FCGI_PARAMS, $requestId);&lt;br /&gt;
    $data = array();&lt;br /&gt;
    foreach($params as $name =&amp;gt; $value) {&lt;br /&gt;
        $data[] = encode_pair($name, $value);&lt;br /&gt;
        }&lt;br /&gt;
    $data = implode('', $data);&lt;br /&gt;
    $rec-&amp;gt;contentData = $data;&lt;br /&gt;
    $rec-&amp;gt;contentLength = strlen($data);&lt;br /&gt;
    $rec-&amp;gt;write($sock);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function connect() {&lt;br /&gt;
        $sock = socket_create(AF_UNIX, SOCK_STREAM, 0);&lt;br /&gt;
&lt;br /&gt;
        $connected = false;&lt;br /&gt;
        $errors = 0;&lt;br /&gt;
        while(!$connected &amp;amp;&amp;amp; $errors &amp;lt; 5) {&lt;br /&gt;
                $connected = @socket_connect($sock, SOCKET);&lt;br /&gt;
                if($connected === FALSE) {&lt;br /&gt;
                        $errorcode = socket_last_error();&lt;br /&gt;
                        # no socket, or first connection refusal&lt;br /&gt;
                        if($errorcode == 2 || ($errorcode == 111 &amp;amp;&amp;amp; $errors == 0)) {&lt;br /&gt;
                                spawn();&lt;br /&gt;
                        }&lt;br /&gt;
                        # ECONNREFUSED; we started a process but it isn't running yet&lt;br /&gt;
                        else if($errorcode == 111) {&lt;br /&gt;
                                sleep(1);&lt;br /&gt;
                                $errors++;&lt;br /&gt;
                        }&lt;br /&gt;
                        else {&lt;br /&gt;
                                $errormsg = socket_strerror($errorcode);&lt;br /&gt;
                                die(&amp;quot;Couldn't write to socket: [$errorcode] $errormsg&amp;quot;);&lt;br /&gt;
                        }&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
        if(!$connected) {&lt;br /&gt;
                die(&amp;quot;FastCGI daemon didn't start accepting connections&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        return $sock;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function pass_request() {&lt;br /&gt;
        $sock = connect();&lt;br /&gt;
&lt;br /&gt;
        $env = array();&lt;br /&gt;
        foreach($_SERVER as $k =&amp;gt; $v) {&lt;br /&gt;
                if(!is_array($v)) {&lt;br /&gt;
                        $env[$k] = $v;&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
        $env['PATH_INFO'] = @$env['REQUEST_URI'];  # for django&lt;br /&gt;
&lt;br /&gt;
        # Request IDs are supposed to be kept as small as possible&lt;br /&gt;
        # while remaining unique :S&lt;br /&gt;
    #$requestId = (int)(rand());&lt;br /&gt;
    $requestId = 1;&lt;br /&gt;
&lt;br /&gt;
    # Begin the request&lt;br /&gt;
    $rec = new Record(FCGI_BEGIN_REQUEST, $requestId);&lt;br /&gt;
    $rec-&amp;gt;contentData = pack(FCGI_BeginRequestBody, FCGI_RESPONDER, 0);&lt;br /&gt;
    $rec-&amp;gt;contentLength = FCGI_BeginRequestBody_LEN;&lt;br /&gt;
    $rec-&amp;gt;write($sock);&lt;br /&gt;
&lt;br /&gt;
    _fcgiParams($sock, $requestId, $env);&lt;br /&gt;
    _fcgiParams($sock, $requestId, array());&lt;br /&gt;
&lt;br /&gt;
    # Transfer wsgi.input to FCGI_STDIN&lt;br /&gt;
    $content_length = isset($env['CONTENT_LENGTH']) ? (int)$env['CONTENT_LENGTH'] : 0;&lt;br /&gt;
    $s = '';&lt;br /&gt;
        $fp = fopen(&amp;quot;php://input&amp;quot;, &amp;quot;r&amp;quot;);&lt;br /&gt;
    while($content_length &amp;gt; 0) {&lt;br /&gt;
        $chunk_size = min($content_length, 4096);&lt;br /&gt;
                $s = fread($fp, $chunk_size);&lt;br /&gt;
        if(!$s) {&lt;br /&gt;
                        break;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
        $content_length -= strlen($s);&lt;br /&gt;
        $rec = new Record(FCGI_STDIN, $requestId);&lt;br /&gt;
        $rec-&amp;gt;contentData = $s;&lt;br /&gt;
        $rec-&amp;gt;contentLength = strlen($s);&lt;br /&gt;
        $rec-&amp;gt;write($sock);&lt;br /&gt;
        }&lt;br /&gt;
        fclose($fp);&lt;br /&gt;
&lt;br /&gt;
    # Empty FCGI_DATA stream&lt;br /&gt;
    $rec = new Record(FCGI_DATA, $requestId);&lt;br /&gt;
    $rec-&amp;gt;write($sock);&lt;br /&gt;
&lt;br /&gt;
    # Main loop. Process FCGI_STDOUT, FCGI_STDERR, FCGI_END_REQUEST&lt;br /&gt;
    # records from the application.&lt;br /&gt;
    $result = array();&lt;br /&gt;
    $err = '';&lt;br /&gt;
    while(True) {&lt;br /&gt;
        $inrec = new Record();&lt;br /&gt;
        $inrec-&amp;gt;read($sock);&lt;br /&gt;
        if($inrec-&amp;gt;type == FCGI_STDOUT) {&lt;br /&gt;
            if($inrec-&amp;gt;contentData) {&lt;br /&gt;
                $result[] = $inrec-&amp;gt;contentData;&lt;br /&gt;
                        }&lt;br /&gt;
            else {&lt;br /&gt;
                # TODO: Should probably be pedantic and no longer&lt;br /&gt;
                # accept FCGI_STDOUT records?&amp;quot;&lt;br /&gt;
                        }&lt;br /&gt;
                }&lt;br /&gt;
        else if($inrec-&amp;gt;type == FCGI_STDERR) {&lt;br /&gt;
            # Simply forward to wsgi.errors&lt;br /&gt;
            $err .= $inrec-&amp;gt;contentData;&lt;br /&gt;
            #environ['wsgi.errors'].write(inrec.contentData)&lt;br /&gt;
                }&lt;br /&gt;
        else if($inrec-&amp;gt;type == FCGI_END_REQUEST) {&lt;br /&gt;
            # TODO: Process appStatus/protocolStatus fields?&lt;br /&gt;
            break;&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
    # Done with this transport socket, close it. (FCGI_KEEP_CONN was not&lt;br /&gt;
    # set in the FCGI_BEGIN_REQUEST record we sent above. So the&lt;br /&gt;
    # application is expected to do the same.)&lt;br /&gt;
    socket_close($sock);&lt;br /&gt;
&lt;br /&gt;
    $result = implode('', $result);&lt;br /&gt;
&lt;br /&gt;
    # Parse response headers from FCGI_STDOUT&lt;br /&gt;
    $status = '200 OK';&lt;br /&gt;
    $headers = array();&lt;br /&gt;
    $pos = 0;&lt;br /&gt;
    while(True) {&lt;br /&gt;
        $eolpos = strpos($result, &amp;quot;\n&amp;quot;, $pos);&lt;br /&gt;
        if($eolpos &amp;lt; 0) {&lt;br /&gt;
                        break;&lt;br /&gt;
                }&lt;br /&gt;
        $line = substr($result, $pos, $eolpos-$pos-1);&lt;br /&gt;
        $pos = $eolpos + 1;&lt;br /&gt;
&lt;br /&gt;
        # strip in case of CR. NB: This will also strip other&lt;br /&gt;
        # whitespace...&lt;br /&gt;
        $line = trim($line);&lt;br /&gt;
        &lt;br /&gt;
        # Empty line signifies end of headers&lt;br /&gt;
        if(trim($line) == &amp;quot;&amp;quot;) {&lt;br /&gt;
                        break;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
        # TODO: Better error handling&lt;br /&gt;
                $parts = explode(&amp;quot;:&amp;quot;, $line, 2);&lt;br /&gt;
        $header = $parts[0];&lt;br /&gt;
                $value = $parts[1];&lt;br /&gt;
        $header = strtolower(trim($header));&lt;br /&gt;
        $value = trim($value);&lt;br /&gt;
&lt;br /&gt;
        if($header == 'status') {&lt;br /&gt;
            # Special handling of Status header&lt;br /&gt;
            $status = $value;&lt;br /&gt;
            if(strpos($status, ' ') &amp;lt; 0) {&lt;br /&gt;
                # Append a dummy reason phrase if one was not provided&lt;br /&gt;
                $status .= ' FCGIApp';&lt;br /&gt;
                        }&lt;br /&gt;
                        header(&amp;quot;HTTP/1.0 &amp;quot;.$status);&lt;br /&gt;
                }&lt;br /&gt;
        else {&lt;br /&gt;
            $headers[] = array($header, $value);&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
    $result = substr($result, $pos);&lt;br /&gt;
&lt;br /&gt;
    return array($headers, $result);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
$req = pass_request();&lt;br /&gt;
&lt;br /&gt;
foreach($req[0] as $header) {&lt;br /&gt;
        header($header[0] .&amp;quot;: &amp;quot;. $header[1], false);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
print $req[1];&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sumber: https://github.com/shish/spawn-fcgi.php/blob/master/spawn-fcgi.php&lt;br /&gt;
&lt;br /&gt;
===Tambahkan .htaccess===&lt;br /&gt;
&lt;br /&gt;
Agar script dapat diakses melalui root URL, silakan tambahkan .htaccess berikut Mini:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt;&lt;br /&gt;
RewriteEngine On&lt;br /&gt;
RewriteBase /&lt;br /&gt;
RewriteCond %{REQUEST_FILENAME} !-f&lt;br /&gt;
RewriteRule ^(.*)$ spawn-fcgi.php [L]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategori:Setting_CMS]]&lt;/div&gt;</summary>
		<author><name>Docs</name></author>	</entry>

	<entry>
		<id>https://docs.indoglobal.com/wiki/Perl_Dancer</id>
		<title>Perl Dancer</title>
		<link rel="alternate" type="text/html" href="https://docs.indoglobal.com/wiki/Perl_Dancer"/>
				<updated>2020-07-29T09:57:05Z</updated>
		
		<summary type="html">&lt;p&gt;Docs: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Untuk melakukan instalasi perl Dancer, berikut adalah langkah-langkahnya:&lt;br /&gt;
&lt;br /&gt;
===Install Perl minimal versi 5.24===&lt;br /&gt;
&lt;br /&gt;
Silakan anda buka tiket untuk meminta staf kami menginstalkan paket rh-perl524 ke sistem.&lt;br /&gt;
&lt;br /&gt;
===Mengaktifkan Perl Versi Baru===&lt;br /&gt;
&lt;br /&gt;
Tambahkan baris berikut di `~/.bashrc_local`:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
source scl_source enable rh-perl524&lt;br /&gt;
export PATH=&amp;quot;$PATH:~/perl5/bin&amp;quot;&lt;br /&gt;
export PERL5LIB=$HOME/perl5/lib/perl5&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aktifkan konfigurasi tersebut dengan `source ~/.bashrc`&lt;br /&gt;
&lt;br /&gt;
===Instalasi Dancer===&lt;br /&gt;
&lt;br /&gt;
Gunakan perintah berikut untuk menginstall Dancer:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ cpanm --notest Dancer2 FCGI FCGI::ProcManager`&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Membuat Skeleton Aplikasi Dancer===&lt;br /&gt;
&lt;br /&gt;
Gunakan perintah berikut untuk membuat skeleton aplikasi dancer:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ dancer2 -a MyApp &amp;amp;&amp;amp; cd MyApp`&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Menjalankan Aplikasi Dancer===&lt;br /&gt;
&lt;br /&gt;
Untuk menjalankan aplikasi Dancer tersebut, gunakan perintah:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ plackup s FCGI --listen $HOME/myapp.sock myapp.psgi&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anda juga perlu mengganti permission socket agar dapat diakses oleh webserver:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ chmod 777 $HOME/myapp.sock&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Aktifkan Extension sockets di PHP===&lt;br /&gt;
&lt;br /&gt;
Masuk ke [[Control Panel]], lalu ke menu Language - PHP. Dan edit konfigurasi untuk versi PHP yang digunakan. Tambahkan baris berikut ke konfigurasi tersebut:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
extension=sockets.so&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Buat Client FastCGI===&lt;br /&gt;
&lt;br /&gt;
Gunakan script ini untuk membuat client FastCGI:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
/*&lt;br /&gt;
 * Configure these by adding two define()s to spawn-fcgi.conf.php:&lt;br /&gt;
 *&lt;br /&gt;
 * SPAWN should be a command to spawn a fastcgi process on a socket&lt;br /&gt;
 * SOCKET should point to the socket&lt;br /&gt;
 *&lt;br /&gt;
 * the example SPAWN is a web.py app (see demo.py)&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
define(&amp;quot;SOCKET&amp;quot;, '/home/xxx/myapp.sock');&lt;br /&gt;
define(&amp;quot;SPAWN&amp;quot;, '-');&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * Spawn-FCGI.php: A script to translate PHP requests into FastCGI&lt;br /&gt;
 * requests, thus allowing hosting of FastCGI apps (good) on any&lt;br /&gt;
 * PHP-compatible web host (cheap, common).&lt;br /&gt;
 *&lt;br /&gt;
 * This is almost a direct port of Flup's FastCGI test harness,&lt;br /&gt;
 * flup_fcgi_client.py (c) 2006 Allan Saddi &amp;lt;allan@saddi.com&amp;gt; +&lt;br /&gt;
 * 2011 Vladimir Rusinov &amp;lt;vladimir@greenmice.info&amp;gt;&lt;br /&gt;
 *&lt;br /&gt;
 * Modified to take request data from the environment rather than&lt;br /&gt;
 * from function parameters.&lt;br /&gt;
 *&lt;br /&gt;
 * PHP port + modifications (c) 2012 Shish &amp;lt;webmaster@shishnet.org&amp;gt;&lt;br /&gt;
 *&lt;br /&gt;
 *&lt;br /&gt;
 * Redistribution and use in source and binary forms, with or without&lt;br /&gt;
 * modification, are permitted provided that the following conditions&lt;br /&gt;
 * are met:&lt;br /&gt;
 * 1. Redistributions of source code must retain the above copyright&lt;br /&gt;
 *    notice, this list of conditions and the following disclaimer.&lt;br /&gt;
 * 2. Redistributions in binary form must reproduce the above copyright&lt;br /&gt;
 *    notice, this list of conditions and the following disclaimer in the&lt;br /&gt;
 *    documentation and/or other materials provided with the distribution.&lt;br /&gt;
 *&lt;br /&gt;
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND&lt;br /&gt;
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE&lt;br /&gt;
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE&lt;br /&gt;
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE&lt;br /&gt;
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL&lt;br /&gt;
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS&lt;br /&gt;
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)&lt;br /&gt;
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT&lt;br /&gt;
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY&lt;br /&gt;
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF&lt;br /&gt;
 * SUCH DAMAGE.&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * FastCGI constants&lt;br /&gt;
 */&lt;br /&gt;
define('FCGI_LISTENSOCK_FILENO', 0);&lt;br /&gt;
&lt;br /&gt;
define('FCGI_HEADER_LEN', 8);&lt;br /&gt;
&lt;br /&gt;
define('FCGI_VERSION_1', 1);&lt;br /&gt;
&lt;br /&gt;
define('FCGI_BEGIN_REQUEST', 1);&lt;br /&gt;
define('FCGI_ABORT_REQUEST', 2);&lt;br /&gt;
define('FCGI_END_REQUEST', 3);&lt;br /&gt;
define('FCGI_PARAMS', 4);&lt;br /&gt;
define('FCGI_STDIN', 5);&lt;br /&gt;
define('FCGI_STDOUT', 6);&lt;br /&gt;
define('FCGI_STDERR', 7);&lt;br /&gt;
define('FCGI_DATA', 8);&lt;br /&gt;
define('FCGI_GET_VALUES', 9);&lt;br /&gt;
define('FCGI_GET_VALUES_RESULT', 10);&lt;br /&gt;
define('FCGI_UNKNOWN_TYPE', 11);&lt;br /&gt;
define('FCGI_MAXTYPE', FCGI_UNKNOWN_TYPE);&lt;br /&gt;
&lt;br /&gt;
define('FCGI_NULL_REQUEST_ID', 0);&lt;br /&gt;
&lt;br /&gt;
define('FCGI_KEEP_CONN', 1);&lt;br /&gt;
&lt;br /&gt;
define('FCGI_RESPONDER', 1);&lt;br /&gt;
define('FCGI_AUTHORIZER', 2);&lt;br /&gt;
define('FCGI_FILTER', 3);&lt;br /&gt;
&lt;br /&gt;
define('FCGI_REQUEST_COMPLETE', 0);&lt;br /&gt;
define('FCGI_CANT_MPX_CONN', 1);&lt;br /&gt;
define('FCGI_OVERLOADED', 2);&lt;br /&gt;
define('FCGI_UNKNOWN_ROLE', 3);&lt;br /&gt;
&lt;br /&gt;
define('FCGI_MAX_CONNS', 'FCGI_MAX_CONNS');&lt;br /&gt;
define('FCGI_MAX_REQS', 'FCGI_MAX_REQS');&lt;br /&gt;
define('FCGI_MPXS_CONNS', 'FCGI_MPXS_CONNS');&lt;br /&gt;
&lt;br /&gt;
# SHIT: PHP needs different patterns for encode and decode&lt;br /&gt;
define('FCGI_Header', 'CCnnCx');&lt;br /&gt;
define('FCGI_Header2', 'Cversion/Ctype/nrequestId/ncontentLength/CpaddingLength/x');&lt;br /&gt;
define('FCGI_BeginRequestBody', 'nCx5');&lt;br /&gt;
define('FCGI_EndRequestBody', 'NCx3');&lt;br /&gt;
define('FCGI_UnknownTypeBody', 'Cx7');&lt;br /&gt;
&lt;br /&gt;
# SHIT: PHP has no calcsize; so we calculate by hand and hardcode the result&lt;br /&gt;
define('FCGI_BeginRequestBody_LEN', 8); # calcsize(FCGI_BeginRequestBody));&lt;br /&gt;
define('FCGI_EndRequestBody_LEN', 8); # calcsize(FCGI_EndRequestBody));&lt;br /&gt;
define('FCGI_UnknownTypeBody_LEN', 8); # calcsize(FCGI_UnknownTypeBody));&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * Decodes a name/value pair.&lt;br /&gt;
 * &lt;br /&gt;
 * The number of bytes decoded as well as the name/value pair&lt;br /&gt;
 * are returned.&lt;br /&gt;
 */&lt;br /&gt;
function decode_pair($s, $pos=0) {&lt;br /&gt;
    $nameLength = ord($s[$pos]);&lt;br /&gt;
    if($nameLength &amp;amp; 128) {&lt;br /&gt;
        $nameLength = unpack('N', substr($s, $pos, 4));&lt;br /&gt;
                $nameLength = $nameLength[0] &amp;amp; 0x7fffffff;&lt;br /&gt;
        $pos += 4;&lt;br /&gt;
        }&lt;br /&gt;
    else {&lt;br /&gt;
        $pos += 1;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
    $valueLength = ord($s[$pos]);&lt;br /&gt;
    if($valueLength &amp;amp; 128) {&lt;br /&gt;
        $valueLength = unpack('N', substr($s, $pos, 4));&lt;br /&gt;
                $valueLength = $valueLength[0] &amp;amp; 0x7fffffff;&lt;br /&gt;
        $pos += 4;&lt;br /&gt;
        }&lt;br /&gt;
    else {&lt;br /&gt;
        $pos += 1;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
    $name = substr($s, $pos, $nameLength);&lt;br /&gt;
    $pos += $nameLength;&lt;br /&gt;
    $value = substr($s, $pos, $valueLength);&lt;br /&gt;
    $pos += $valueLength;&lt;br /&gt;
&lt;br /&gt;
    return array($pos, array($name, $value));&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * Encodes a name/value pair.&lt;br /&gt;
 *&lt;br /&gt;
 * The encoded string is returned.&lt;br /&gt;
 */&lt;br /&gt;
function encode_pair($name, $value) {&lt;br /&gt;
    $nameLength = strlen($name);&lt;br /&gt;
    if($nameLength &amp;lt; 128) {&lt;br /&gt;
        $s = chr($nameLength);&lt;br /&gt;
        }&lt;br /&gt;
    else {&lt;br /&gt;
        $s = pack('N', $nameLength | 0x80000000);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
    $valueLength = strlen($value);&lt;br /&gt;
    if($valueLength &amp;lt; 128) {&lt;br /&gt;
        $s .= chr($valueLength);&lt;br /&gt;
        }&lt;br /&gt;
    else {&lt;br /&gt;
        $s .= pack('N', $valueLength | 0x80000000);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
    return $s . $name . $value;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function spawn() {&lt;br /&gt;
        #print &amp;quot;Spawning new FastCGI daemon\n&amp;quot;;&lt;br /&gt;
        $r = shell_exec(SPAWN);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * A FastCGI Record.&lt;br /&gt;
 * &lt;br /&gt;
 * Used for encoding/decoding records.&lt;br /&gt;
 */&lt;br /&gt;
class Record {&lt;br /&gt;
    function __construct($type=FCGI_UNKNOWN_TYPE, $requestId=FCGI_NULL_REQUEST_ID) {&lt;br /&gt;
        $this-&amp;gt;version = FCGI_VERSION_1;&lt;br /&gt;
        $this-&amp;gt;type = $type;&lt;br /&gt;
        $this-&amp;gt;requestId = $requestId;&lt;br /&gt;
        $this-&amp;gt;contentLength = 0;&lt;br /&gt;
        $this-&amp;gt;paddingLength = 0;&lt;br /&gt;
        $this-&amp;gt;contentData = '';&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
    /*&lt;br /&gt;
         * Attempts to receive length bytes from a socket, blocking if necessary.&lt;br /&gt;
         * (Socket may be blocking or non-blocking.)&lt;br /&gt;
     */&lt;br /&gt;
    function _recvall($sock, $length) {&lt;br /&gt;
        $dataList = array();&lt;br /&gt;
        $recvLen = 0;&lt;br /&gt;
        while($length) {&lt;br /&gt;
                        $d = socket_recv($sock, $data, $length, null);&lt;br /&gt;
                        if($d === false) {&lt;br /&gt;
                                $r = array($sock);&lt;br /&gt;
                                $w = array();&lt;br /&gt;
                                $x = array();&lt;br /&gt;
                                socket_select($r, $w, $x, NULL);&lt;br /&gt;
                                continue;&lt;br /&gt;
                        }&lt;br /&gt;
            if(!$data) {&lt;br /&gt;
                break;&lt;br /&gt;
                        }&lt;br /&gt;
            $dataList[] = $data;&lt;br /&gt;
            $dataLen = strlen($data);&lt;br /&gt;
            $recvLen += $dataLen;&lt;br /&gt;
            $length -= $dataLen;&lt;br /&gt;
                }&lt;br /&gt;
        return array(implode('', $dataList), $recvLen);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        /*&lt;br /&gt;
         * Read and decode a Record from a socket.&lt;br /&gt;
         */&lt;br /&gt;
    function read($sock) {&lt;br /&gt;
        try {&lt;br /&gt;
                        $parts = $this-&amp;gt;_recvall($sock, FCGI_HEADER_LEN);&lt;br /&gt;
            $header = $parts[0];&lt;br /&gt;
                        $length = $parts[1];&lt;br /&gt;
                }&lt;br /&gt;
        catch(Exception $e) {&lt;br /&gt;
            throw new EOFError();&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
        if($length &amp;lt; FCGI_HEADER_LEN) {&lt;br /&gt;
            throw new EOFError();&lt;br /&gt;
                }&lt;br /&gt;
        &lt;br /&gt;
                $parts = unpack(FCGI_Header2, $header);&lt;br /&gt;
        $this-&amp;gt;version = $parts['version'];&lt;br /&gt;
                $this-&amp;gt;type = $parts['type'];&lt;br /&gt;
                $this-&amp;gt;requestId = $parts['requestId'];&lt;br /&gt;
                $this-&amp;gt;contentLength = $parts['contentLength'];&lt;br /&gt;
                $this-&amp;gt;paddingLength = $parts['paddingLength'];&lt;br /&gt;
&lt;br /&gt;
        if($this-&amp;gt;contentLength) {&lt;br /&gt;
            try {&lt;br /&gt;
                                $parts = $this-&amp;gt;_recvall($sock, $this-&amp;gt;contentLength);&lt;br /&gt;
                $this-&amp;gt;contentData = $parts[0];&lt;br /&gt;
                                $length = $parts[1];&lt;br /&gt;
                        }&lt;br /&gt;
            catch(Exception $e) {&lt;br /&gt;
                throw new EOFError();&lt;br /&gt;
                        }&lt;br /&gt;
&lt;br /&gt;
            if($length &amp;lt; $this-&amp;gt;contentLength) {&lt;br /&gt;
                throw new EOFError();&lt;br /&gt;
                        }&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
        if($this-&amp;gt;paddingLength) {&lt;br /&gt;
            try {&lt;br /&gt;
                $this-&amp;gt;_recvall($sock, $this-&amp;gt;paddingLength);&lt;br /&gt;
                        }&lt;br /&gt;
            catch(Exception $e) {&lt;br /&gt;
                throw new EOFError();&lt;br /&gt;
                        }&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        /*&lt;br /&gt;
         * Writes data to a socket and does not return until all the data is sent.&lt;br /&gt;
         */&lt;br /&gt;
    function _sendall($sock, $data) {&lt;br /&gt;
        $length = strlen($data);&lt;br /&gt;
        while($length) {&lt;br /&gt;
                        $sent = socket_send($sock, $data, strlen($data), 0);&lt;br /&gt;
                        if($sent === FALSE) {&lt;br /&gt;
                                $errorcode = socket_last_error();&lt;br /&gt;
                                #if($errorcode == 107) { # ENOTCONN&lt;br /&gt;
                                #       spawn();&lt;br /&gt;
                                #       continue;&lt;br /&gt;
                                #}&lt;br /&gt;
                                #else if($e[0] == errno.EAGAIN) {&lt;br /&gt;
                                #       #select.select([], [sock], [])&lt;br /&gt;
                                #       continue;&lt;br /&gt;
                                #}&lt;br /&gt;
                                #else {&lt;br /&gt;
                                        $errormsg = socket_strerror($errorcode);&lt;br /&gt;
                                        die(&amp;quot;Couldn't write to socket: [$errorcode] $errormsg&amp;quot;);&lt;br /&gt;
                                #}&lt;br /&gt;
                        }&lt;br /&gt;
            $data = substr($data, $sent);&lt;br /&gt;
            $length -= $sent;&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        /*&lt;br /&gt;
         * Encode and write a Record to a socket.&lt;br /&gt;
         */&lt;br /&gt;
    function write($sock) {&lt;br /&gt;
        $this-&amp;gt;paddingLength = -$this-&amp;gt;contentLength &amp;amp; 7;&lt;br /&gt;
&lt;br /&gt;
        $header = pack(FCGI_Header, $this-&amp;gt;version, $this-&amp;gt;type,&lt;br /&gt;
                             $this-&amp;gt;requestId, $this-&amp;gt;contentLength,&lt;br /&gt;
                             $this-&amp;gt;paddingLength);&lt;br /&gt;
        $this-&amp;gt;_sendall($sock, $header);&lt;br /&gt;
        if($this-&amp;gt;contentLength) {&lt;br /&gt;
            $this-&amp;gt;_sendall($sock, $this-&amp;gt;contentData);&lt;br /&gt;
                }&lt;br /&gt;
        if($this-&amp;gt;paddingLength) {&lt;br /&gt;
            $this-&amp;gt;_sendall($sock, str_repeat(&amp;quot;\x00&amp;quot;, $this-&amp;gt;paddingLength));&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function _fcgiParams($sock, $requestId, $params) {&lt;br /&gt;
    $rec = new Record(FCGI_PARAMS, $requestId);&lt;br /&gt;
    $data = array();&lt;br /&gt;
    foreach($params as $name =&amp;gt; $value) {&lt;br /&gt;
        $data[] = encode_pair($name, $value);&lt;br /&gt;
        }&lt;br /&gt;
    $data = implode('', $data);&lt;br /&gt;
    $rec-&amp;gt;contentData = $data;&lt;br /&gt;
    $rec-&amp;gt;contentLength = strlen($data);&lt;br /&gt;
    $rec-&amp;gt;write($sock);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function connect() {&lt;br /&gt;
        $sock = socket_create(AF_UNIX, SOCK_STREAM, 0);&lt;br /&gt;
&lt;br /&gt;
        $connected = false;&lt;br /&gt;
        $errors = 0;&lt;br /&gt;
        while(!$connected &amp;amp;&amp;amp; $errors &amp;lt; 5) {&lt;br /&gt;
                $connected = @socket_connect($sock, SOCKET);&lt;br /&gt;
                if($connected === FALSE) {&lt;br /&gt;
                        $errorcode = socket_last_error();&lt;br /&gt;
                        # no socket, or first connection refusal&lt;br /&gt;
                        if($errorcode == 2 || ($errorcode == 111 &amp;amp;&amp;amp; $errors == 0)) {&lt;br /&gt;
                                spawn();&lt;br /&gt;
                        }&lt;br /&gt;
                        # ECONNREFUSED; we started a process but it isn't running yet&lt;br /&gt;
                        else if($errorcode == 111) {&lt;br /&gt;
                                sleep(1);&lt;br /&gt;
                                $errors++;&lt;br /&gt;
                        }&lt;br /&gt;
                        else {&lt;br /&gt;
                                $errormsg = socket_strerror($errorcode);&lt;br /&gt;
                                die(&amp;quot;Couldn't write to socket: [$errorcode] $errormsg&amp;quot;);&lt;br /&gt;
                        }&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
        if(!$connected) {&lt;br /&gt;
                die(&amp;quot;FastCGI daemon didn't start accepting connections&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        return $sock;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function pass_request() {&lt;br /&gt;
        $sock = connect();&lt;br /&gt;
&lt;br /&gt;
        $env = array();&lt;br /&gt;
        foreach($_SERVER as $k =&amp;gt; $v) {&lt;br /&gt;
                if(!is_array($v)) {&lt;br /&gt;
                        $env[$k] = $v;&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
        $env['PATH_INFO'] = @$env['REQUEST_URI'];  # for django&lt;br /&gt;
&lt;br /&gt;
        # Request IDs are supposed to be kept as small as possible&lt;br /&gt;
        # while remaining unique :S&lt;br /&gt;
    #$requestId = (int)(rand());&lt;br /&gt;
    $requestId = 1;&lt;br /&gt;
&lt;br /&gt;
    # Begin the request&lt;br /&gt;
    $rec = new Record(FCGI_BEGIN_REQUEST, $requestId);&lt;br /&gt;
    $rec-&amp;gt;contentData = pack(FCGI_BeginRequestBody, FCGI_RESPONDER, 0);&lt;br /&gt;
    $rec-&amp;gt;contentLength = FCGI_BeginRequestBody_LEN;&lt;br /&gt;
    $rec-&amp;gt;write($sock);&lt;br /&gt;
&lt;br /&gt;
    _fcgiParams($sock, $requestId, $env);&lt;br /&gt;
    _fcgiParams($sock, $requestId, array());&lt;br /&gt;
&lt;br /&gt;
    # Transfer wsgi.input to FCGI_STDIN&lt;br /&gt;
    $content_length = isset($env['CONTENT_LENGTH']) ? (int)$env['CONTENT_LENGTH'] : 0;&lt;br /&gt;
    $s = '';&lt;br /&gt;
        $fp = fopen(&amp;quot;php://input&amp;quot;, &amp;quot;r&amp;quot;);&lt;br /&gt;
    while($content_length &amp;gt; 0) {&lt;br /&gt;
        $chunk_size = min($content_length, 4096);&lt;br /&gt;
                $s = fread($fp, $chunk_size);&lt;br /&gt;
        if(!$s) {&lt;br /&gt;
                        break;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
        $content_length -= strlen($s);&lt;br /&gt;
        $rec = new Record(FCGI_STDIN, $requestId);&lt;br /&gt;
        $rec-&amp;gt;contentData = $s;&lt;br /&gt;
        $rec-&amp;gt;contentLength = strlen($s);&lt;br /&gt;
        $rec-&amp;gt;write($sock);&lt;br /&gt;
        }&lt;br /&gt;
        fclose($fp);&lt;br /&gt;
&lt;br /&gt;
    # Empty FCGI_DATA stream&lt;br /&gt;
    $rec = new Record(FCGI_DATA, $requestId);&lt;br /&gt;
    $rec-&amp;gt;write($sock);&lt;br /&gt;
&lt;br /&gt;
    # Main loop. Process FCGI_STDOUT, FCGI_STDERR, FCGI_END_REQUEST&lt;br /&gt;
    # records from the application.&lt;br /&gt;
    $result = array();&lt;br /&gt;
    $err = '';&lt;br /&gt;
    while(True) {&lt;br /&gt;
        $inrec = new Record();&lt;br /&gt;
        $inrec-&amp;gt;read($sock);&lt;br /&gt;
        if($inrec-&amp;gt;type == FCGI_STDOUT) {&lt;br /&gt;
            if($inrec-&amp;gt;contentData) {&lt;br /&gt;
                $result[] = $inrec-&amp;gt;contentData;&lt;br /&gt;
                        }&lt;br /&gt;
            else {&lt;br /&gt;
                # TODO: Should probably be pedantic and no longer&lt;br /&gt;
                # accept FCGI_STDOUT records?&amp;quot;&lt;br /&gt;
                        }&lt;br /&gt;
                }&lt;br /&gt;
        else if($inrec-&amp;gt;type == FCGI_STDERR) {&lt;br /&gt;
            # Simply forward to wsgi.errors&lt;br /&gt;
            $err .= $inrec-&amp;gt;contentData;&lt;br /&gt;
            #environ['wsgi.errors'].write(inrec.contentData)&lt;br /&gt;
                }&lt;br /&gt;
        else if($inrec-&amp;gt;type == FCGI_END_REQUEST) {&lt;br /&gt;
            # TODO: Process appStatus/protocolStatus fields?&lt;br /&gt;
            break;&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
    # Done with this transport socket, close it. (FCGI_KEEP_CONN was not&lt;br /&gt;
    # set in the FCGI_BEGIN_REQUEST record we sent above. So the&lt;br /&gt;
    # application is expected to do the same.)&lt;br /&gt;
    socket_close($sock);&lt;br /&gt;
&lt;br /&gt;
    $result = implode('', $result);&lt;br /&gt;
&lt;br /&gt;
    # Parse response headers from FCGI_STDOUT&lt;br /&gt;
    $status = '200 OK';&lt;br /&gt;
    $headers = array();&lt;br /&gt;
    $pos = 0;&lt;br /&gt;
    while(True) {&lt;br /&gt;
        $eolpos = strpos($result, &amp;quot;\n&amp;quot;, $pos);&lt;br /&gt;
        if($eolpos &amp;lt; 0) {&lt;br /&gt;
                        break;&lt;br /&gt;
                }&lt;br /&gt;
        $line = substr($result, $pos, $eolpos-$pos-1);&lt;br /&gt;
        $pos = $eolpos + 1;&lt;br /&gt;
&lt;br /&gt;
        # strip in case of CR. NB: This will also strip other&lt;br /&gt;
        # whitespace...&lt;br /&gt;
        $line = trim($line);&lt;br /&gt;
        &lt;br /&gt;
        # Empty line signifies end of headers&lt;br /&gt;
        if(trim($line) == &amp;quot;&amp;quot;) {&lt;br /&gt;
                        break;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
        # TODO: Better error handling&lt;br /&gt;
                $parts = explode(&amp;quot;:&amp;quot;, $line, 2);&lt;br /&gt;
        $header = $parts[0];&lt;br /&gt;
                $value = $parts[1];&lt;br /&gt;
        $header = strtolower(trim($header));&lt;br /&gt;
        $value = trim($value);&lt;br /&gt;
&lt;br /&gt;
        if($header == 'status') {&lt;br /&gt;
            # Special handling of Status header&lt;br /&gt;
            $status = $value;&lt;br /&gt;
            if(strpos($status, ' ') &amp;lt; 0) {&lt;br /&gt;
                # Append a dummy reason phrase if one was not provided&lt;br /&gt;
                $status .= ' FCGIApp';&lt;br /&gt;
                        }&lt;br /&gt;
                        header(&amp;quot;HTTP/1.0 &amp;quot;.$status);&lt;br /&gt;
                }&lt;br /&gt;
        else {&lt;br /&gt;
            $headers[] = array($header, $value);&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
    $result = substr($result, $pos);&lt;br /&gt;
&lt;br /&gt;
    return array($headers, $result);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
$req = pass_request();&lt;br /&gt;
&lt;br /&gt;
foreach($req[0] as $header) {&lt;br /&gt;
        header($header[0] .&amp;quot;: &amp;quot;. $header[1], false);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
print $req[1];&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sumber: https://github.com/shish/spawn-fcgi.php/blob/master/spawn-fcgi.php&lt;br /&gt;
&lt;br /&gt;
===Tambahkan .htaccess===&lt;br /&gt;
&lt;br /&gt;
Agar script dapat diakses melalui root URL, silakan tambahkan .htaccess berikut Mini:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt;&lt;br /&gt;
RewriteEngine On&lt;br /&gt;
RewriteBase /&lt;br /&gt;
RewriteCond %{REQUEST_FILENAME} !-f&lt;br /&gt;
RewriteRule ^(.*)$ spawn-fcgi.php [L]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategori:Setting_CMS]]&lt;/div&gt;</summary>
		<author><name>Docs</name></author>	</entry>

	<entry>
		<id>https://docs.indoglobal.com/wiki/Perl_Dancer</id>
		<title>Perl Dancer</title>
		<link rel="alternate" type="text/html" href="https://docs.indoglobal.com/wiki/Perl_Dancer"/>
				<updated>2020-07-29T09:23:20Z</updated>
		
		<summary type="html">&lt;p&gt;Docs: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Untuk melakukan instalasi perl Dancer, berikut adalah langkah-langkahnya:&lt;br /&gt;
&lt;br /&gt;
===Install Perl minimal versi 5.24===&lt;br /&gt;
&lt;br /&gt;
Silakan anda buka tiket untuk meminta staf kami menginstalkan paket rh-perl524 ke sistem.&lt;br /&gt;
&lt;br /&gt;
===Mengaktifkan Perl Versi Baru===&lt;br /&gt;
&lt;br /&gt;
Tambahkan baris berikut di `~/.bashrc_local`:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
source scl_source enable rh-perl524&lt;br /&gt;
export PATH=&amp;quot;$PATH:~/perl5/bin&amp;quot;&lt;br /&gt;
export PERL5LIB=$HOME/perl5/lib/perl5&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aktifkan konfigurasi tersebut dengan `source ~/.bashrc`&lt;br /&gt;
&lt;br /&gt;
===Instalasi Dancer===&lt;br /&gt;
&lt;br /&gt;
Gunakan perintah berikut untuk menginstall Dancer:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ cpanm --force Dancer2 FCGI FCGI::ProcManager`&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Membuat Skeleton Aplikasi Dancer===&lt;br /&gt;
&lt;br /&gt;
Gunakan perintah berikut untuk membuat skeleton aplikasi dancer:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ dancer2 -a MyApp &amp;amp;&amp;amp; cd MyApp`&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Menjalankan Aplikasi Dancer===&lt;br /&gt;
&lt;br /&gt;
Untuk menjalankan aplikasi Dancer tersebut, gunakan perintah:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ plackup s FCGI --listen $HOME/myapp.sock myapp.psgi&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anda juga perlu mengganti permission socket agar dapat diakses oleh webserver:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ chmod 777 $HOME/myapp.sock&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Aktifkan Extension sockets di PHP===&lt;br /&gt;
&lt;br /&gt;
Masuk ke [[Control Panel]], lalu ke menu Language - PHP. Dan edit konfigurasi untuk versi PHP yang digunakan. Tambahkan baris berikut ke konfigurasi tersebut:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
extension=sockets.so&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Buat Client FastCGI===&lt;br /&gt;
&lt;br /&gt;
Gunakan script ini untuk membuat client FastCGI:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
/*&lt;br /&gt;
 * Configure these by adding two define()s to spawn-fcgi.conf.php:&lt;br /&gt;
 *&lt;br /&gt;
 * SPAWN should be a command to spawn a fastcgi process on a socket&lt;br /&gt;
 * SOCKET should point to the socket&lt;br /&gt;
 *&lt;br /&gt;
 * the example SPAWN is a web.py app (see demo.py)&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
define(&amp;quot;SOCKET&amp;quot;, '/home/xxx/myapp.sock');&lt;br /&gt;
define(&amp;quot;SPAWN&amp;quot;, '-');&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * Spawn-FCGI.php: A script to translate PHP requests into FastCGI&lt;br /&gt;
 * requests, thus allowing hosting of FastCGI apps (good) on any&lt;br /&gt;
 * PHP-compatible web host (cheap, common).&lt;br /&gt;
 *&lt;br /&gt;
 * This is almost a direct port of Flup's FastCGI test harness,&lt;br /&gt;
 * flup_fcgi_client.py (c) 2006 Allan Saddi &amp;lt;allan@saddi.com&amp;gt; +&lt;br /&gt;
 * 2011 Vladimir Rusinov &amp;lt;vladimir@greenmice.info&amp;gt;&lt;br /&gt;
 *&lt;br /&gt;
 * Modified to take request data from the environment rather than&lt;br /&gt;
 * from function parameters.&lt;br /&gt;
 *&lt;br /&gt;
 * PHP port + modifications (c) 2012 Shish &amp;lt;webmaster@shishnet.org&amp;gt;&lt;br /&gt;
 *&lt;br /&gt;
 *&lt;br /&gt;
 * Redistribution and use in source and binary forms, with or without&lt;br /&gt;
 * modification, are permitted provided that the following conditions&lt;br /&gt;
 * are met:&lt;br /&gt;
 * 1. Redistributions of source code must retain the above copyright&lt;br /&gt;
 *    notice, this list of conditions and the following disclaimer.&lt;br /&gt;
 * 2. Redistributions in binary form must reproduce the above copyright&lt;br /&gt;
 *    notice, this list of conditions and the following disclaimer in the&lt;br /&gt;
 *    documentation and/or other materials provided with the distribution.&lt;br /&gt;
 *&lt;br /&gt;
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND&lt;br /&gt;
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE&lt;br /&gt;
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE&lt;br /&gt;
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE&lt;br /&gt;
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL&lt;br /&gt;
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS&lt;br /&gt;
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)&lt;br /&gt;
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT&lt;br /&gt;
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY&lt;br /&gt;
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF&lt;br /&gt;
 * SUCH DAMAGE.&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * FastCGI constants&lt;br /&gt;
 */&lt;br /&gt;
define('FCGI_LISTENSOCK_FILENO', 0);&lt;br /&gt;
&lt;br /&gt;
define('FCGI_HEADER_LEN', 8);&lt;br /&gt;
&lt;br /&gt;
define('FCGI_VERSION_1', 1);&lt;br /&gt;
&lt;br /&gt;
define('FCGI_BEGIN_REQUEST', 1);&lt;br /&gt;
define('FCGI_ABORT_REQUEST', 2);&lt;br /&gt;
define('FCGI_END_REQUEST', 3);&lt;br /&gt;
define('FCGI_PARAMS', 4);&lt;br /&gt;
define('FCGI_STDIN', 5);&lt;br /&gt;
define('FCGI_STDOUT', 6);&lt;br /&gt;
define('FCGI_STDERR', 7);&lt;br /&gt;
define('FCGI_DATA', 8);&lt;br /&gt;
define('FCGI_GET_VALUES', 9);&lt;br /&gt;
define('FCGI_GET_VALUES_RESULT', 10);&lt;br /&gt;
define('FCGI_UNKNOWN_TYPE', 11);&lt;br /&gt;
define('FCGI_MAXTYPE', FCGI_UNKNOWN_TYPE);&lt;br /&gt;
&lt;br /&gt;
define('FCGI_NULL_REQUEST_ID', 0);&lt;br /&gt;
&lt;br /&gt;
define('FCGI_KEEP_CONN', 1);&lt;br /&gt;
&lt;br /&gt;
define('FCGI_RESPONDER', 1);&lt;br /&gt;
define('FCGI_AUTHORIZER', 2);&lt;br /&gt;
define('FCGI_FILTER', 3);&lt;br /&gt;
&lt;br /&gt;
define('FCGI_REQUEST_COMPLETE', 0);&lt;br /&gt;
define('FCGI_CANT_MPX_CONN', 1);&lt;br /&gt;
define('FCGI_OVERLOADED', 2);&lt;br /&gt;
define('FCGI_UNKNOWN_ROLE', 3);&lt;br /&gt;
&lt;br /&gt;
define('FCGI_MAX_CONNS', 'FCGI_MAX_CONNS');&lt;br /&gt;
define('FCGI_MAX_REQS', 'FCGI_MAX_REQS');&lt;br /&gt;
define('FCGI_MPXS_CONNS', 'FCGI_MPXS_CONNS');&lt;br /&gt;
&lt;br /&gt;
# SHIT: PHP needs different patterns for encode and decode&lt;br /&gt;
define('FCGI_Header', 'CCnnCx');&lt;br /&gt;
define('FCGI_Header2', 'Cversion/Ctype/nrequestId/ncontentLength/CpaddingLength/x');&lt;br /&gt;
define('FCGI_BeginRequestBody', 'nCx5');&lt;br /&gt;
define('FCGI_EndRequestBody', 'NCx3');&lt;br /&gt;
define('FCGI_UnknownTypeBody', 'Cx7');&lt;br /&gt;
&lt;br /&gt;
# SHIT: PHP has no calcsize; so we calculate by hand and hardcode the result&lt;br /&gt;
define('FCGI_BeginRequestBody_LEN', 8); # calcsize(FCGI_BeginRequestBody));&lt;br /&gt;
define('FCGI_EndRequestBody_LEN', 8); # calcsize(FCGI_EndRequestBody));&lt;br /&gt;
define('FCGI_UnknownTypeBody_LEN', 8); # calcsize(FCGI_UnknownTypeBody));&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * Decodes a name/value pair.&lt;br /&gt;
 * &lt;br /&gt;
 * The number of bytes decoded as well as the name/value pair&lt;br /&gt;
 * are returned.&lt;br /&gt;
 */&lt;br /&gt;
function decode_pair($s, $pos=0) {&lt;br /&gt;
    $nameLength = ord($s[$pos]);&lt;br /&gt;
    if($nameLength &amp;amp; 128) {&lt;br /&gt;
        $nameLength = unpack('N', substr($s, $pos, 4));&lt;br /&gt;
                $nameLength = $nameLength[0] &amp;amp; 0x7fffffff;&lt;br /&gt;
        $pos += 4;&lt;br /&gt;
        }&lt;br /&gt;
    else {&lt;br /&gt;
        $pos += 1;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
    $valueLength = ord($s[$pos]);&lt;br /&gt;
    if($valueLength &amp;amp; 128) {&lt;br /&gt;
        $valueLength = unpack('N', substr($s, $pos, 4));&lt;br /&gt;
                $valueLength = $valueLength[0] &amp;amp; 0x7fffffff;&lt;br /&gt;
        $pos += 4;&lt;br /&gt;
        }&lt;br /&gt;
    else {&lt;br /&gt;
        $pos += 1;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
    $name = substr($s, $pos, $nameLength);&lt;br /&gt;
    $pos += $nameLength;&lt;br /&gt;
    $value = substr($s, $pos, $valueLength);&lt;br /&gt;
    $pos += $valueLength;&lt;br /&gt;
&lt;br /&gt;
    return array($pos, array($name, $value));&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * Encodes a name/value pair.&lt;br /&gt;
 *&lt;br /&gt;
 * The encoded string is returned.&lt;br /&gt;
 */&lt;br /&gt;
function encode_pair($name, $value) {&lt;br /&gt;
    $nameLength = strlen($name);&lt;br /&gt;
    if($nameLength &amp;lt; 128) {&lt;br /&gt;
        $s = chr($nameLength);&lt;br /&gt;
        }&lt;br /&gt;
    else {&lt;br /&gt;
        $s = pack('N', $nameLength | 0x80000000);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
    $valueLength = strlen($value);&lt;br /&gt;
    if($valueLength &amp;lt; 128) {&lt;br /&gt;
        $s .= chr($valueLength);&lt;br /&gt;
        }&lt;br /&gt;
    else {&lt;br /&gt;
        $s .= pack('N', $valueLength | 0x80000000);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
    return $s . $name . $value;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function spawn() {&lt;br /&gt;
        #print &amp;quot;Spawning new FastCGI daemon\n&amp;quot;;&lt;br /&gt;
        $r = shell_exec(SPAWN);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * A FastCGI Record.&lt;br /&gt;
 * &lt;br /&gt;
 * Used for encoding/decoding records.&lt;br /&gt;
 */&lt;br /&gt;
class Record {&lt;br /&gt;
    function __construct($type=FCGI_UNKNOWN_TYPE, $requestId=FCGI_NULL_REQUEST_ID) {&lt;br /&gt;
        $this-&amp;gt;version = FCGI_VERSION_1;&lt;br /&gt;
        $this-&amp;gt;type = $type;&lt;br /&gt;
        $this-&amp;gt;requestId = $requestId;&lt;br /&gt;
        $this-&amp;gt;contentLength = 0;&lt;br /&gt;
        $this-&amp;gt;paddingLength = 0;&lt;br /&gt;
        $this-&amp;gt;contentData = '';&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
    /*&lt;br /&gt;
         * Attempts to receive length bytes from a socket, blocking if necessary.&lt;br /&gt;
         * (Socket may be blocking or non-blocking.)&lt;br /&gt;
     */&lt;br /&gt;
    function _recvall($sock, $length) {&lt;br /&gt;
        $dataList = array();&lt;br /&gt;
        $recvLen = 0;&lt;br /&gt;
        while($length) {&lt;br /&gt;
                        $d = socket_recv($sock, $data, $length, null);&lt;br /&gt;
                        if($d === false) {&lt;br /&gt;
                                $r = array($sock);&lt;br /&gt;
                                $w = array();&lt;br /&gt;
                                $x = array();&lt;br /&gt;
                                socket_select($r, $w, $x, NULL);&lt;br /&gt;
                                continue;&lt;br /&gt;
                        }&lt;br /&gt;
            if(!$data) {&lt;br /&gt;
                break;&lt;br /&gt;
                        }&lt;br /&gt;
            $dataList[] = $data;&lt;br /&gt;
            $dataLen = strlen($data);&lt;br /&gt;
            $recvLen += $dataLen;&lt;br /&gt;
            $length -= $dataLen;&lt;br /&gt;
                }&lt;br /&gt;
        return array(implode('', $dataList), $recvLen);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        /*&lt;br /&gt;
         * Read and decode a Record from a socket.&lt;br /&gt;
         */&lt;br /&gt;
    function read($sock) {&lt;br /&gt;
        try {&lt;br /&gt;
                        $parts = $this-&amp;gt;_recvall($sock, FCGI_HEADER_LEN);&lt;br /&gt;
            $header = $parts[0];&lt;br /&gt;
                        $length = $parts[1];&lt;br /&gt;
                }&lt;br /&gt;
        catch(Exception $e) {&lt;br /&gt;
            throw new EOFError();&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
        if($length &amp;lt; FCGI_HEADER_LEN) {&lt;br /&gt;
            throw new EOFError();&lt;br /&gt;
                }&lt;br /&gt;
        &lt;br /&gt;
                $parts = unpack(FCGI_Header2, $header);&lt;br /&gt;
        $this-&amp;gt;version = $parts['version'];&lt;br /&gt;
                $this-&amp;gt;type = $parts['type'];&lt;br /&gt;
                $this-&amp;gt;requestId = $parts['requestId'];&lt;br /&gt;
                $this-&amp;gt;contentLength = $parts['contentLength'];&lt;br /&gt;
                $this-&amp;gt;paddingLength = $parts['paddingLength'];&lt;br /&gt;
&lt;br /&gt;
        if($this-&amp;gt;contentLength) {&lt;br /&gt;
            try {&lt;br /&gt;
                                $parts = $this-&amp;gt;_recvall($sock, $this-&amp;gt;contentLength);&lt;br /&gt;
                $this-&amp;gt;contentData = $parts[0];&lt;br /&gt;
                                $length = $parts[1];&lt;br /&gt;
                        }&lt;br /&gt;
            catch(Exception $e) {&lt;br /&gt;
                throw new EOFError();&lt;br /&gt;
                        }&lt;br /&gt;
&lt;br /&gt;
            if($length &amp;lt; $this-&amp;gt;contentLength) {&lt;br /&gt;
                throw new EOFError();&lt;br /&gt;
                        }&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
        if($this-&amp;gt;paddingLength) {&lt;br /&gt;
            try {&lt;br /&gt;
                $this-&amp;gt;_recvall($sock, $this-&amp;gt;paddingLength);&lt;br /&gt;
                        }&lt;br /&gt;
            catch(Exception $e) {&lt;br /&gt;
                throw new EOFError();&lt;br /&gt;
                        }&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        /*&lt;br /&gt;
         * Writes data to a socket and does not return until all the data is sent.&lt;br /&gt;
         */&lt;br /&gt;
    function _sendall($sock, $data) {&lt;br /&gt;
        $length = strlen($data);&lt;br /&gt;
        while($length) {&lt;br /&gt;
                        $sent = socket_send($sock, $data, strlen($data), 0);&lt;br /&gt;
                        if($sent === FALSE) {&lt;br /&gt;
                                $errorcode = socket_last_error();&lt;br /&gt;
                                #if($errorcode == 107) { # ENOTCONN&lt;br /&gt;
                                #       spawn();&lt;br /&gt;
                                #       continue;&lt;br /&gt;
                                #}&lt;br /&gt;
                                #else if($e[0] == errno.EAGAIN) {&lt;br /&gt;
                                #       #select.select([], [sock], [])&lt;br /&gt;
                                #       continue;&lt;br /&gt;
                                #}&lt;br /&gt;
                                #else {&lt;br /&gt;
                                        $errormsg = socket_strerror($errorcode);&lt;br /&gt;
                                        die(&amp;quot;Couldn't write to socket: [$errorcode] $errormsg&amp;quot;);&lt;br /&gt;
                                #}&lt;br /&gt;
                        }&lt;br /&gt;
            $data = substr($data, $sent);&lt;br /&gt;
            $length -= $sent;&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        /*&lt;br /&gt;
         * Encode and write a Record to a socket.&lt;br /&gt;
         */&lt;br /&gt;
    function write($sock) {&lt;br /&gt;
        $this-&amp;gt;paddingLength = -$this-&amp;gt;contentLength &amp;amp; 7;&lt;br /&gt;
&lt;br /&gt;
        $header = pack(FCGI_Header, $this-&amp;gt;version, $this-&amp;gt;type,&lt;br /&gt;
                             $this-&amp;gt;requestId, $this-&amp;gt;contentLength,&lt;br /&gt;
                             $this-&amp;gt;paddingLength);&lt;br /&gt;
        $this-&amp;gt;_sendall($sock, $header);&lt;br /&gt;
        if($this-&amp;gt;contentLength) {&lt;br /&gt;
            $this-&amp;gt;_sendall($sock, $this-&amp;gt;contentData);&lt;br /&gt;
                }&lt;br /&gt;
        if($this-&amp;gt;paddingLength) {&lt;br /&gt;
            $this-&amp;gt;_sendall($sock, str_repeat(&amp;quot;\x00&amp;quot;, $this-&amp;gt;paddingLength));&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function _fcgiParams($sock, $requestId, $params) {&lt;br /&gt;
    $rec = new Record(FCGI_PARAMS, $requestId);&lt;br /&gt;
    $data = array();&lt;br /&gt;
    foreach($params as $name =&amp;gt; $value) {&lt;br /&gt;
        $data[] = encode_pair($name, $value);&lt;br /&gt;
        }&lt;br /&gt;
    $data = implode('', $data);&lt;br /&gt;
    $rec-&amp;gt;contentData = $data;&lt;br /&gt;
    $rec-&amp;gt;contentLength = strlen($data);&lt;br /&gt;
    $rec-&amp;gt;write($sock);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function connect() {&lt;br /&gt;
        $sock = socket_create(AF_UNIX, SOCK_STREAM, 0);&lt;br /&gt;
&lt;br /&gt;
        $connected = false;&lt;br /&gt;
        $errors = 0;&lt;br /&gt;
        while(!$connected &amp;amp;&amp;amp; $errors &amp;lt; 5) {&lt;br /&gt;
                $connected = @socket_connect($sock, SOCKET);&lt;br /&gt;
                if($connected === FALSE) {&lt;br /&gt;
                        $errorcode = socket_last_error();&lt;br /&gt;
                        # no socket, or first connection refusal&lt;br /&gt;
                        if($errorcode == 2 || ($errorcode == 111 &amp;amp;&amp;amp; $errors == 0)) {&lt;br /&gt;
                                spawn();&lt;br /&gt;
                        }&lt;br /&gt;
                        # ECONNREFUSED; we started a process but it isn't running yet&lt;br /&gt;
                        else if($errorcode == 111) {&lt;br /&gt;
                                sleep(1);&lt;br /&gt;
                                $errors++;&lt;br /&gt;
                        }&lt;br /&gt;
                        else {&lt;br /&gt;
                                $errormsg = socket_strerror($errorcode);&lt;br /&gt;
                                die(&amp;quot;Couldn't write to socket: [$errorcode] $errormsg&amp;quot;);&lt;br /&gt;
                        }&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
        if(!$connected) {&lt;br /&gt;
                die(&amp;quot;FastCGI daemon didn't start accepting connections&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        return $sock;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function pass_request() {&lt;br /&gt;
        $sock = connect();&lt;br /&gt;
&lt;br /&gt;
        $env = array();&lt;br /&gt;
        foreach($_SERVER as $k =&amp;gt; $v) {&lt;br /&gt;
                if(!is_array($v)) {&lt;br /&gt;
                        $env[$k] = $v;&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
        $env['PATH_INFO'] = @$env['REQUEST_URI'];  # for django&lt;br /&gt;
&lt;br /&gt;
        # Request IDs are supposed to be kept as small as possible&lt;br /&gt;
        # while remaining unique :S&lt;br /&gt;
    #$requestId = (int)(rand());&lt;br /&gt;
    $requestId = 1;&lt;br /&gt;
&lt;br /&gt;
    # Begin the request&lt;br /&gt;
    $rec = new Record(FCGI_BEGIN_REQUEST, $requestId);&lt;br /&gt;
    $rec-&amp;gt;contentData = pack(FCGI_BeginRequestBody, FCGI_RESPONDER, 0);&lt;br /&gt;
    $rec-&amp;gt;contentLength = FCGI_BeginRequestBody_LEN;&lt;br /&gt;
    $rec-&amp;gt;write($sock);&lt;br /&gt;
&lt;br /&gt;
    _fcgiParams($sock, $requestId, $env);&lt;br /&gt;
    _fcgiParams($sock, $requestId, array());&lt;br /&gt;
&lt;br /&gt;
    # Transfer wsgi.input to FCGI_STDIN&lt;br /&gt;
    $content_length = isset($env['CONTENT_LENGTH']) ? (int)$env['CONTENT_LENGTH'] : 0;&lt;br /&gt;
    $s = '';&lt;br /&gt;
        $fp = fopen(&amp;quot;php://input&amp;quot;, &amp;quot;r&amp;quot;);&lt;br /&gt;
    while($content_length &amp;gt; 0) {&lt;br /&gt;
        $chunk_size = min($content_length, 4096);&lt;br /&gt;
                $s = fread($fp, $chunk_size);&lt;br /&gt;
        if(!$s) {&lt;br /&gt;
                        break;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
        $content_length -= strlen($s);&lt;br /&gt;
        $rec = new Record(FCGI_STDIN, $requestId);&lt;br /&gt;
        $rec-&amp;gt;contentData = $s;&lt;br /&gt;
        $rec-&amp;gt;contentLength = strlen($s);&lt;br /&gt;
        $rec-&amp;gt;write($sock);&lt;br /&gt;
        }&lt;br /&gt;
        fclose($fp);&lt;br /&gt;
&lt;br /&gt;
    # Empty FCGI_DATA stream&lt;br /&gt;
    $rec = new Record(FCGI_DATA, $requestId);&lt;br /&gt;
    $rec-&amp;gt;write($sock);&lt;br /&gt;
&lt;br /&gt;
    # Main loop. Process FCGI_STDOUT, FCGI_STDERR, FCGI_END_REQUEST&lt;br /&gt;
    # records from the application.&lt;br /&gt;
    $result = array();&lt;br /&gt;
    $err = '';&lt;br /&gt;
    while(True) {&lt;br /&gt;
        $inrec = new Record();&lt;br /&gt;
        $inrec-&amp;gt;read($sock);&lt;br /&gt;
        if($inrec-&amp;gt;type == FCGI_STDOUT) {&lt;br /&gt;
            if($inrec-&amp;gt;contentData) {&lt;br /&gt;
                $result[] = $inrec-&amp;gt;contentData;&lt;br /&gt;
                        }&lt;br /&gt;
            else {&lt;br /&gt;
                # TODO: Should probably be pedantic and no longer&lt;br /&gt;
                # accept FCGI_STDOUT records?&amp;quot;&lt;br /&gt;
                        }&lt;br /&gt;
                }&lt;br /&gt;
        else if($inrec-&amp;gt;type == FCGI_STDERR) {&lt;br /&gt;
            # Simply forward to wsgi.errors&lt;br /&gt;
            $err .= $inrec-&amp;gt;contentData;&lt;br /&gt;
            #environ['wsgi.errors'].write(inrec.contentData)&lt;br /&gt;
                }&lt;br /&gt;
        else if($inrec-&amp;gt;type == FCGI_END_REQUEST) {&lt;br /&gt;
            # TODO: Process appStatus/protocolStatus fields?&lt;br /&gt;
            break;&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
    # Done with this transport socket, close it. (FCGI_KEEP_CONN was not&lt;br /&gt;
    # set in the FCGI_BEGIN_REQUEST record we sent above. So the&lt;br /&gt;
    # application is expected to do the same.)&lt;br /&gt;
    socket_close($sock);&lt;br /&gt;
&lt;br /&gt;
    $result = implode('', $result);&lt;br /&gt;
&lt;br /&gt;
    # Parse response headers from FCGI_STDOUT&lt;br /&gt;
    $status = '200 OK';&lt;br /&gt;
    $headers = array();&lt;br /&gt;
    $pos = 0;&lt;br /&gt;
    while(True) {&lt;br /&gt;
        $eolpos = strpos($result, &amp;quot;\n&amp;quot;, $pos);&lt;br /&gt;
        if($eolpos &amp;lt; 0) {&lt;br /&gt;
                        break;&lt;br /&gt;
                }&lt;br /&gt;
        $line = substr($result, $pos, $eolpos-$pos-1);&lt;br /&gt;
        $pos = $eolpos + 1;&lt;br /&gt;
&lt;br /&gt;
        # strip in case of CR. NB: This will also strip other&lt;br /&gt;
        # whitespace...&lt;br /&gt;
        $line = trim($line);&lt;br /&gt;
        &lt;br /&gt;
        # Empty line signifies end of headers&lt;br /&gt;
        if(trim($line) == &amp;quot;&amp;quot;) {&lt;br /&gt;
                        break;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
        # TODO: Better error handling&lt;br /&gt;
                $parts = explode(&amp;quot;:&amp;quot;, $line, 2);&lt;br /&gt;
        $header = $parts[0];&lt;br /&gt;
                $value = $parts[1];&lt;br /&gt;
        $header = strtolower(trim($header));&lt;br /&gt;
        $value = trim($value);&lt;br /&gt;
&lt;br /&gt;
        if($header == 'status') {&lt;br /&gt;
            # Special handling of Status header&lt;br /&gt;
            $status = $value;&lt;br /&gt;
            if(strpos($status, ' ') &amp;lt; 0) {&lt;br /&gt;
                # Append a dummy reason phrase if one was not provided&lt;br /&gt;
                $status .= ' FCGIApp';&lt;br /&gt;
                        }&lt;br /&gt;
                        header(&amp;quot;HTTP/1.0 &amp;quot;.$status);&lt;br /&gt;
                }&lt;br /&gt;
        else {&lt;br /&gt;
            $headers[] = array($header, $value);&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
    $result = substr($result, $pos);&lt;br /&gt;
&lt;br /&gt;
    return array($headers, $result);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
$req = pass_request();&lt;br /&gt;
&lt;br /&gt;
foreach($req[0] as $header) {&lt;br /&gt;
        header($header[0] .&amp;quot;: &amp;quot;. $header[1], false);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
print $req[1];&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sumber: https://github.com/shish/spawn-fcgi.php/blob/master/spawn-fcgi.php&lt;br /&gt;
&lt;br /&gt;
===Tambahkan .htaccess===&lt;br /&gt;
&lt;br /&gt;
Agar script dapat diakses melalui root URL, silakan tambahkan .htaccess berikut Mini:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt;&lt;br /&gt;
RewriteEngine On&lt;br /&gt;
RewriteBase /&lt;br /&gt;
RewriteCond %{REQUEST_FILENAME} !-f&lt;br /&gt;
RewriteRule ^(.*)$ spawn-fcgi.php [L]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategori:Setting_CMS]]&lt;/div&gt;</summary>
		<author><name>Docs</name></author>	</entry>

	<entry>
		<id>https://docs.indoglobal.com/wiki/Perl_Dancer</id>
		<title>Perl Dancer</title>
		<link rel="alternate" type="text/html" href="https://docs.indoglobal.com/wiki/Perl_Dancer"/>
				<updated>2020-07-29T09:22:48Z</updated>
		
		<summary type="html">&lt;p&gt;Docs: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Untuk melakukan instalasi perl Dancer, berikut adalah langkah-langkahnya:&lt;br /&gt;
&lt;br /&gt;
===Install Perl minimal versi 5.24===&lt;br /&gt;
&lt;br /&gt;
Silakan anda buka tiket untuk meminta staf kami menginstalkan paket rh-perl524 ke sistem.&lt;br /&gt;
&lt;br /&gt;
===Mengaktifkan Perl Versi Baru===&lt;br /&gt;
&lt;br /&gt;
Tambahkan baris berikut di `~/.bashrc_local`:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
source scl_source enable rh-perl524&lt;br /&gt;
export PATH=&amp;quot;$PATH:~/perl5/bin&amp;quot;&lt;br /&gt;
export PERL5LIB=$HOME/perl5/lib/perl5&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aktifkan konfigurasi tersebut dengan `source ~/.bashrc`&lt;br /&gt;
&lt;br /&gt;
===Instalasi Dancer===&lt;br /&gt;
&lt;br /&gt;
Gunakan perintah berikut untuk menginstall Dancer:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ cpanm --force Dancer2 FCGI FCGI::ProcManager`&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Membuat Skeleton Aplikasi Dancer===&lt;br /&gt;
&lt;br /&gt;
Gunakan perintah berikut untuk membuat skeleton aplikasi dancer:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ dancer2 -a MyApp &amp;amp;&amp;amp; cd MyApp`&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Menjalankan Aplikasi Dancer===&lt;br /&gt;
&lt;br /&gt;
Untuk menjalankan aplikasi Dancer tersebut, gunakan perintah:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ plackup s FCGI --listen $HOME/myapp.sock myapp.psgi&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anda juga perlu mengganti permission socket agar dapat diakses oleh webserver:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ chmod 777 $HOME/myapp.sock&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Aktifkan Extension sockets di PHP===&lt;br /&gt;
&lt;br /&gt;
Masuk ke [[Control Panel]], lalu ke menu Language - PHP. Dan edit konfigurasi untuk versi PHP yang digunakan. Tambahkan baris berikut ke konfigurasi tersebut:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
extension=sockets.so&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Buat Client FastCGI===&lt;br /&gt;
&lt;br /&gt;
Gunakan script ini untuk membuat client FastCGI:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
/*&lt;br /&gt;
 * Configure these by adding two define()s to spawn-fcgi.conf.php:&lt;br /&gt;
 *&lt;br /&gt;
 * SPAWN should be a command to spawn a fastcgi process on a socket&lt;br /&gt;
 * SOCKET should point to the socket&lt;br /&gt;
 *&lt;br /&gt;
 * the example SPAWN is a web.py app (see demo.py)&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
define(&amp;quot;SOCKET&amp;quot;, '/home/xxx/myapp.sock');&lt;br /&gt;
define(&amp;quot;SPAWN&amp;quot;, '-');&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * Spawn-FCGI.php: A script to translate PHP requests into FastCGI&lt;br /&gt;
 * requests, thus allowing hosting of FastCGI apps (good) on any&lt;br /&gt;
 * PHP-compatible web host (cheap, common).&lt;br /&gt;
 *&lt;br /&gt;
 * This is almost a direct port of Flup's FastCGI test harness,&lt;br /&gt;
 * flup_fcgi_client.py (c) 2006 Allan Saddi &amp;lt;allan@saddi.com&amp;gt; +&lt;br /&gt;
 * 2011 Vladimir Rusinov &amp;lt;vladimir@greenmice.info&amp;gt;&lt;br /&gt;
 *&lt;br /&gt;
 * Modified to take request data from the environment rather than&lt;br /&gt;
 * from function parameters.&lt;br /&gt;
 *&lt;br /&gt;
 * PHP port + modifications (c) 2012 Shish &amp;lt;webmaster@shishnet.org&amp;gt;&lt;br /&gt;
 *&lt;br /&gt;
 *&lt;br /&gt;
 * Redistribution and use in source and binary forms, with or without&lt;br /&gt;
 * modification, are permitted provided that the following conditions&lt;br /&gt;
 * are met:&lt;br /&gt;
 * 1. Redistributions of source code must retain the above copyright&lt;br /&gt;
 *    notice, this list of conditions and the following disclaimer.&lt;br /&gt;
 * 2. Redistributions in binary form must reproduce the above copyright&lt;br /&gt;
 *    notice, this list of conditions and the following disclaimer in the&lt;br /&gt;
 *    documentation and/or other materials provided with the distribution.&lt;br /&gt;
 *&lt;br /&gt;
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND&lt;br /&gt;
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE&lt;br /&gt;
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE&lt;br /&gt;
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE&lt;br /&gt;
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL&lt;br /&gt;
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS&lt;br /&gt;
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)&lt;br /&gt;
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT&lt;br /&gt;
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY&lt;br /&gt;
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF&lt;br /&gt;
 * SUCH DAMAGE.&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * FastCGI constants&lt;br /&gt;
 */&lt;br /&gt;
define('FCGI_LISTENSOCK_FILENO', 0);&lt;br /&gt;
&lt;br /&gt;
define('FCGI_HEADER_LEN', 8);&lt;br /&gt;
&lt;br /&gt;
define('FCGI_VERSION_1', 1);&lt;br /&gt;
&lt;br /&gt;
define('FCGI_BEGIN_REQUEST', 1);&lt;br /&gt;
define('FCGI_ABORT_REQUEST', 2);&lt;br /&gt;
define('FCGI_END_REQUEST', 3);&lt;br /&gt;
define('FCGI_PARAMS', 4);&lt;br /&gt;
define('FCGI_STDIN', 5);&lt;br /&gt;
define('FCGI_STDOUT', 6);&lt;br /&gt;
define('FCGI_STDERR', 7);&lt;br /&gt;
define('FCGI_DATA', 8);&lt;br /&gt;
define('FCGI_GET_VALUES', 9);&lt;br /&gt;
define('FCGI_GET_VALUES_RESULT', 10);&lt;br /&gt;
define('FCGI_UNKNOWN_TYPE', 11);&lt;br /&gt;
define('FCGI_MAXTYPE', FCGI_UNKNOWN_TYPE);&lt;br /&gt;
&lt;br /&gt;
define('FCGI_NULL_REQUEST_ID', 0);&lt;br /&gt;
&lt;br /&gt;
define('FCGI_KEEP_CONN', 1);&lt;br /&gt;
&lt;br /&gt;
define('FCGI_RESPONDER', 1);&lt;br /&gt;
define('FCGI_AUTHORIZER', 2);&lt;br /&gt;
define('FCGI_FILTER', 3);&lt;br /&gt;
&lt;br /&gt;
define('FCGI_REQUEST_COMPLETE', 0);&lt;br /&gt;
define('FCGI_CANT_MPX_CONN', 1);&lt;br /&gt;
define('FCGI_OVERLOADED', 2);&lt;br /&gt;
define('FCGI_UNKNOWN_ROLE', 3);&lt;br /&gt;
&lt;br /&gt;
define('FCGI_MAX_CONNS', 'FCGI_MAX_CONNS');&lt;br /&gt;
define('FCGI_MAX_REQS', 'FCGI_MAX_REQS');&lt;br /&gt;
define('FCGI_MPXS_CONNS', 'FCGI_MPXS_CONNS');&lt;br /&gt;
&lt;br /&gt;
# SHIT: PHP needs different patterns for encode and decode&lt;br /&gt;
define('FCGI_Header', 'CCnnCx');&lt;br /&gt;
define('FCGI_Header2', 'Cversion/Ctype/nrequestId/ncontentLength/CpaddingLength/x');&lt;br /&gt;
define('FCGI_BeginRequestBody', 'nCx5');&lt;br /&gt;
define('FCGI_EndRequestBody', 'NCx3');&lt;br /&gt;
define('FCGI_UnknownTypeBody', 'Cx7');&lt;br /&gt;
&lt;br /&gt;
# SHIT: PHP has no calcsize; so we calculate by hand and hardcode the result&lt;br /&gt;
define('FCGI_BeginRequestBody_LEN', 8); # calcsize(FCGI_BeginRequestBody));&lt;br /&gt;
define('FCGI_EndRequestBody_LEN', 8); # calcsize(FCGI_EndRequestBody));&lt;br /&gt;
define('FCGI_UnknownTypeBody_LEN', 8); # calcsize(FCGI_UnknownTypeBody));&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * Decodes a name/value pair.&lt;br /&gt;
 * &lt;br /&gt;
 * The number of bytes decoded as well as the name/value pair&lt;br /&gt;
 * are returned.&lt;br /&gt;
 */&lt;br /&gt;
function decode_pair($s, $pos=0) {&lt;br /&gt;
    $nameLength = ord($s[$pos]);&lt;br /&gt;
    if($nameLength &amp;amp; 128) {&lt;br /&gt;
        $nameLength = unpack('N', substr($s, $pos, 4));&lt;br /&gt;
                $nameLength = $nameLength[0] &amp;amp; 0x7fffffff;&lt;br /&gt;
        $pos += 4;&lt;br /&gt;
        }&lt;br /&gt;
    else {&lt;br /&gt;
        $pos += 1;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
    $valueLength = ord($s[$pos]);&lt;br /&gt;
    if($valueLength &amp;amp; 128) {&lt;br /&gt;
        $valueLength = unpack('N', substr($s, $pos, 4));&lt;br /&gt;
                $valueLength = $valueLength[0] &amp;amp; 0x7fffffff;&lt;br /&gt;
        $pos += 4;&lt;br /&gt;
        }&lt;br /&gt;
    else {&lt;br /&gt;
        $pos += 1;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
    $name = substr($s, $pos, $nameLength);&lt;br /&gt;
    $pos += $nameLength;&lt;br /&gt;
    $value = substr($s, $pos, $valueLength);&lt;br /&gt;
    $pos += $valueLength;&lt;br /&gt;
&lt;br /&gt;
    return array($pos, array($name, $value));&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * Encodes a name/value pair.&lt;br /&gt;
 *&lt;br /&gt;
 * The encoded string is returned.&lt;br /&gt;
 */&lt;br /&gt;
function encode_pair($name, $value) {&lt;br /&gt;
    $nameLength = strlen($name);&lt;br /&gt;
    if($nameLength &amp;lt; 128) {&lt;br /&gt;
        $s = chr($nameLength);&lt;br /&gt;
        }&lt;br /&gt;
    else {&lt;br /&gt;
        $s = pack('N', $nameLength | 0x80000000);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
    $valueLength = strlen($value);&lt;br /&gt;
    if($valueLength &amp;lt; 128) {&lt;br /&gt;
        $s .= chr($valueLength);&lt;br /&gt;
        }&lt;br /&gt;
    else {&lt;br /&gt;
        $s .= pack('N', $valueLength | 0x80000000);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
    return $s . $name . $value;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function spawn() {&lt;br /&gt;
        #print &amp;quot;Spawning new FastCGI daemon\n&amp;quot;;&lt;br /&gt;
        $r = shell_exec(SPAWN);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * A FastCGI Record.&lt;br /&gt;
 * &lt;br /&gt;
 * Used for encoding/decoding records.&lt;br /&gt;
 */&lt;br /&gt;
class Record {&lt;br /&gt;
    function __construct($type=FCGI_UNKNOWN_TYPE, $requestId=FCGI_NULL_REQUEST_ID) {&lt;br /&gt;
        $this-&amp;gt;version = FCGI_VERSION_1;&lt;br /&gt;
        $this-&amp;gt;type = $type;&lt;br /&gt;
        $this-&amp;gt;requestId = $requestId;&lt;br /&gt;
        $this-&amp;gt;contentLength = 0;&lt;br /&gt;
        $this-&amp;gt;paddingLength = 0;&lt;br /&gt;
        $this-&amp;gt;contentData = '';&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
    /*&lt;br /&gt;
         * Attempts to receive length bytes from a socket, blocking if necessary.&lt;br /&gt;
         * (Socket may be blocking or non-blocking.)&lt;br /&gt;
     */&lt;br /&gt;
    function _recvall($sock, $length) {&lt;br /&gt;
        $dataList = array();&lt;br /&gt;
        $recvLen = 0;&lt;br /&gt;
        while($length) {&lt;br /&gt;
                        $d = socket_recv($sock, $data, $length, null);&lt;br /&gt;
                        if($d === false) {&lt;br /&gt;
                                $r = array($sock);&lt;br /&gt;
                                $w = array();&lt;br /&gt;
                                $x = array();&lt;br /&gt;
                                socket_select($r, $w, $x, NULL);&lt;br /&gt;
                                continue;&lt;br /&gt;
                        }&lt;br /&gt;
            if(!$data) {&lt;br /&gt;
                break;&lt;br /&gt;
                        }&lt;br /&gt;
            $dataList[] = $data;&lt;br /&gt;
            $dataLen = strlen($data);&lt;br /&gt;
            $recvLen += $dataLen;&lt;br /&gt;
            $length -= $dataLen;&lt;br /&gt;
                }&lt;br /&gt;
        return array(implode('', $dataList), $recvLen);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        /*&lt;br /&gt;
         * Read and decode a Record from a socket.&lt;br /&gt;
         */&lt;br /&gt;
    function read($sock) {&lt;br /&gt;
        try {&lt;br /&gt;
                        $parts = $this-&amp;gt;_recvall($sock, FCGI_HEADER_LEN);&lt;br /&gt;
            $header = $parts[0];&lt;br /&gt;
                        $length = $parts[1];&lt;br /&gt;
                }&lt;br /&gt;
        catch(Exception $e) {&lt;br /&gt;
            throw new EOFError();&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
        if($length &amp;lt; FCGI_HEADER_LEN) {&lt;br /&gt;
            throw new EOFError();&lt;br /&gt;
                }&lt;br /&gt;
        &lt;br /&gt;
                $parts = unpack(FCGI_Header2, $header);&lt;br /&gt;
        $this-&amp;gt;version = $parts['version'];&lt;br /&gt;
                $this-&amp;gt;type = $parts['type'];&lt;br /&gt;
                $this-&amp;gt;requestId = $parts['requestId'];&lt;br /&gt;
                $this-&amp;gt;contentLength = $parts['contentLength'];&lt;br /&gt;
                $this-&amp;gt;paddingLength = $parts['paddingLength'];&lt;br /&gt;
&lt;br /&gt;
        if($this-&amp;gt;contentLength) {&lt;br /&gt;
            try {&lt;br /&gt;
                                $parts = $this-&amp;gt;_recvall($sock, $this-&amp;gt;contentLength);&lt;br /&gt;
                $this-&amp;gt;contentData = $parts[0];&lt;br /&gt;
                                $length = $parts[1];&lt;br /&gt;
                        }&lt;br /&gt;
            catch(Exception $e) {&lt;br /&gt;
                throw new EOFError();&lt;br /&gt;
                        }&lt;br /&gt;
&lt;br /&gt;
            if($length &amp;lt; $this-&amp;gt;contentLength) {&lt;br /&gt;
                throw new EOFError();&lt;br /&gt;
                        }&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
        if($this-&amp;gt;paddingLength) {&lt;br /&gt;
            try {&lt;br /&gt;
                $this-&amp;gt;_recvall($sock, $this-&amp;gt;paddingLength);&lt;br /&gt;
                        }&lt;br /&gt;
            catch(Exception $e) {&lt;br /&gt;
                throw new EOFError();&lt;br /&gt;
                        }&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        /*&lt;br /&gt;
         * Writes data to a socket and does not return until all the data is sent.&lt;br /&gt;
         */&lt;br /&gt;
    function _sendall($sock, $data) {&lt;br /&gt;
        $length = strlen($data);&lt;br /&gt;
        while($length) {&lt;br /&gt;
                        $sent = socket_send($sock, $data, strlen($data), 0);&lt;br /&gt;
                        if($sent === FALSE) {&lt;br /&gt;
                                $errorcode = socket_last_error();&lt;br /&gt;
                                #if($errorcode == 107) { # ENOTCONN&lt;br /&gt;
                                #       spawn();&lt;br /&gt;
                                #       continue;&lt;br /&gt;
                                #}&lt;br /&gt;
                                #else if($e[0] == errno.EAGAIN) {&lt;br /&gt;
                                #       #select.select([], [sock], [])&lt;br /&gt;
                                #       continue;&lt;br /&gt;
                                #}&lt;br /&gt;
                                #else {&lt;br /&gt;
                                        $errormsg = socket_strerror($errorcode);&lt;br /&gt;
                                        die(&amp;quot;Couldn't write to socket: [$errorcode] $errormsg&amp;quot;);&lt;br /&gt;
                                #}&lt;br /&gt;
                        }&lt;br /&gt;
            $data = substr($data, $sent);&lt;br /&gt;
            $length -= $sent;&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        /*&lt;br /&gt;
         * Encode and write a Record to a socket.&lt;br /&gt;
         */&lt;br /&gt;
    function write($sock) {&lt;br /&gt;
        $this-&amp;gt;paddingLength = -$this-&amp;gt;contentLength &amp;amp; 7;&lt;br /&gt;
&lt;br /&gt;
        $header = pack(FCGI_Header, $this-&amp;gt;version, $this-&amp;gt;type,&lt;br /&gt;
                             $this-&amp;gt;requestId, $this-&amp;gt;contentLength,&lt;br /&gt;
                             $this-&amp;gt;paddingLength);&lt;br /&gt;
        $this-&amp;gt;_sendall($sock, $header);&lt;br /&gt;
        if($this-&amp;gt;contentLength) {&lt;br /&gt;
            $this-&amp;gt;_sendall($sock, $this-&amp;gt;contentData);&lt;br /&gt;
                }&lt;br /&gt;
        if($this-&amp;gt;paddingLength) {&lt;br /&gt;
            $this-&amp;gt;_sendall($sock, str_repeat(&amp;quot;\x00&amp;quot;, $this-&amp;gt;paddingLength));&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function _fcgiParams($sock, $requestId, $params) {&lt;br /&gt;
    $rec = new Record(FCGI_PARAMS, $requestId);&lt;br /&gt;
    $data = array();&lt;br /&gt;
    foreach($params as $name =&amp;gt; $value) {&lt;br /&gt;
        $data[] = encode_pair($name, $value);&lt;br /&gt;
        }&lt;br /&gt;
    $data = implode('', $data);&lt;br /&gt;
    $rec-&amp;gt;contentData = $data;&lt;br /&gt;
    $rec-&amp;gt;contentLength = strlen($data);&lt;br /&gt;
    $rec-&amp;gt;write($sock);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function connect() {&lt;br /&gt;
        $sock = socket_create(AF_UNIX, SOCK_STREAM, 0);&lt;br /&gt;
&lt;br /&gt;
        $connected = false;&lt;br /&gt;
        $errors = 0;&lt;br /&gt;
        while(!$connected &amp;amp;&amp;amp; $errors &amp;lt; 5) {&lt;br /&gt;
                $connected = @socket_connect($sock, SOCKET);&lt;br /&gt;
                if($connected === FALSE) {&lt;br /&gt;
                        $errorcode = socket_last_error();&lt;br /&gt;
                        # no socket, or first connection refusal&lt;br /&gt;
                        if($errorcode == 2 || ($errorcode == 111 &amp;amp;&amp;amp; $errors == 0)) {&lt;br /&gt;
                                spawn();&lt;br /&gt;
                        }&lt;br /&gt;
                        # ECONNREFUSED; we started a process but it isn't running yet&lt;br /&gt;
                        else if($errorcode == 111) {&lt;br /&gt;
                                sleep(1);&lt;br /&gt;
                                $errors++;&lt;br /&gt;
                        }&lt;br /&gt;
                        else {&lt;br /&gt;
                                $errormsg = socket_strerror($errorcode);&lt;br /&gt;
                                die(&amp;quot;Couldn't write to socket: [$errorcode] $errormsg&amp;quot;);&lt;br /&gt;
                        }&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
        if(!$connected) {&lt;br /&gt;
                die(&amp;quot;FastCGI daemon didn't start accepting connections&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        return $sock;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function pass_request() {&lt;br /&gt;
        $sock = connect();&lt;br /&gt;
&lt;br /&gt;
        $env = array();&lt;br /&gt;
        foreach($_SERVER as $k =&amp;gt; $v) {&lt;br /&gt;
                if(!is_array($v)) {&lt;br /&gt;
                        $env[$k] = $v;&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
        $env['PATH_INFO'] = @$env['REQUEST_URI'];  # for django&lt;br /&gt;
&lt;br /&gt;
        # Request IDs are supposed to be kept as small as possible&lt;br /&gt;
        # while remaining unique :S&lt;br /&gt;
    #$requestId = (int)(rand());&lt;br /&gt;
    $requestId = 1;&lt;br /&gt;
&lt;br /&gt;
    # Begin the request&lt;br /&gt;
    $rec = new Record(FCGI_BEGIN_REQUEST, $requestId);&lt;br /&gt;
    $rec-&amp;gt;contentData = pack(FCGI_BeginRequestBody, FCGI_RESPONDER, 0);&lt;br /&gt;
    $rec-&amp;gt;contentLength = FCGI_BeginRequestBody_LEN;&lt;br /&gt;
    $rec-&amp;gt;write($sock);&lt;br /&gt;
&lt;br /&gt;
    _fcgiParams($sock, $requestId, $env);&lt;br /&gt;
    _fcgiParams($sock, $requestId, array());&lt;br /&gt;
&lt;br /&gt;
    # Transfer wsgi.input to FCGI_STDIN&lt;br /&gt;
    $content_length = isset($env['CONTENT_LENGTH']) ? (int)$env['CONTENT_LENGTH'] : 0;&lt;br /&gt;
    $s = '';&lt;br /&gt;
        $fp = fopen(&amp;quot;php://input&amp;quot;, &amp;quot;r&amp;quot;);&lt;br /&gt;
    while($content_length &amp;gt; 0) {&lt;br /&gt;
        $chunk_size = min($content_length, 4096);&lt;br /&gt;
                $s = fread($fp, $chunk_size);&lt;br /&gt;
        if(!$s) {&lt;br /&gt;
                        break;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
        $content_length -= strlen($s);&lt;br /&gt;
        $rec = new Record(FCGI_STDIN, $requestId);&lt;br /&gt;
        $rec-&amp;gt;contentData = $s;&lt;br /&gt;
        $rec-&amp;gt;contentLength = strlen($s);&lt;br /&gt;
        $rec-&amp;gt;write($sock);&lt;br /&gt;
        }&lt;br /&gt;
        fclose($fp);&lt;br /&gt;
&lt;br /&gt;
    # Empty FCGI_DATA stream&lt;br /&gt;
    $rec = new Record(FCGI_DATA, $requestId);&lt;br /&gt;
    $rec-&amp;gt;write($sock);&lt;br /&gt;
&lt;br /&gt;
    # Main loop. Process FCGI_STDOUT, FCGI_STDERR, FCGI_END_REQUEST&lt;br /&gt;
    # records from the application.&lt;br /&gt;
    $result = array();&lt;br /&gt;
    $err = '';&lt;br /&gt;
    while(True) {&lt;br /&gt;
        $inrec = new Record();&lt;br /&gt;
        $inrec-&amp;gt;read($sock);&lt;br /&gt;
        if($inrec-&amp;gt;type == FCGI_STDOUT) {&lt;br /&gt;
            if($inrec-&amp;gt;contentData) {&lt;br /&gt;
                $result[] = $inrec-&amp;gt;contentData;&lt;br /&gt;
                        }&lt;br /&gt;
            else {&lt;br /&gt;
                # TODO: Should probably be pedantic and no longer&lt;br /&gt;
                # accept FCGI_STDOUT records?&amp;quot;&lt;br /&gt;
                        }&lt;br /&gt;
                }&lt;br /&gt;
        else if($inrec-&amp;gt;type == FCGI_STDERR) {&lt;br /&gt;
            # Simply forward to wsgi.errors&lt;br /&gt;
            $err .= $inrec-&amp;gt;contentData;&lt;br /&gt;
            #environ['wsgi.errors'].write(inrec.contentData)&lt;br /&gt;
                }&lt;br /&gt;
        else if($inrec-&amp;gt;type == FCGI_END_REQUEST) {&lt;br /&gt;
            # TODO: Process appStatus/protocolStatus fields?&lt;br /&gt;
            break;&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
    # Done with this transport socket, close it. (FCGI_KEEP_CONN was not&lt;br /&gt;
    # set in the FCGI_BEGIN_REQUEST record we sent above. So the&lt;br /&gt;
    # application is expected to do the same.)&lt;br /&gt;
    socket_close($sock);&lt;br /&gt;
&lt;br /&gt;
    $result = implode('', $result);&lt;br /&gt;
&lt;br /&gt;
    # Parse response headers from FCGI_STDOUT&lt;br /&gt;
    $status = '200 OK';&lt;br /&gt;
    $headers = array();&lt;br /&gt;
    $pos = 0;&lt;br /&gt;
    while(True) {&lt;br /&gt;
        $eolpos = strpos($result, &amp;quot;\n&amp;quot;, $pos);&lt;br /&gt;
        if($eolpos &amp;lt; 0) {&lt;br /&gt;
                        break;&lt;br /&gt;
                }&lt;br /&gt;
        $line = substr($result, $pos, $eolpos-$pos-1);&lt;br /&gt;
        $pos = $eolpos + 1;&lt;br /&gt;
&lt;br /&gt;
        # strip in case of CR. NB: This will also strip other&lt;br /&gt;
        # whitespace...&lt;br /&gt;
        $line = trim($line);&lt;br /&gt;
        &lt;br /&gt;
        # Empty line signifies end of headers&lt;br /&gt;
        if(trim($line) == &amp;quot;&amp;quot;) {&lt;br /&gt;
                        break;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
        # TODO: Better error handling&lt;br /&gt;
                $parts = explode(&amp;quot;:&amp;quot;, $line, 2);&lt;br /&gt;
        $header = $parts[0];&lt;br /&gt;
                $value = $parts[1];&lt;br /&gt;
        $header = strtolower(trim($header));&lt;br /&gt;
        $value = trim($value);&lt;br /&gt;
&lt;br /&gt;
        if($header == 'status') {&lt;br /&gt;
            # Special handling of Status header&lt;br /&gt;
            $status = $value;&lt;br /&gt;
            if(strpos($status, ' ') &amp;lt; 0) {&lt;br /&gt;
                # Append a dummy reason phrase if one was not provided&lt;br /&gt;
                $status .= ' FCGIApp';&lt;br /&gt;
                        }&lt;br /&gt;
                        header(&amp;quot;HTTP/1.0 &amp;quot;.$status);&lt;br /&gt;
                }&lt;br /&gt;
        else {&lt;br /&gt;
            $headers[] = array($header, $value);&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
    $result = substr($result, $pos);&lt;br /&gt;
&lt;br /&gt;
    return array($headers, $result);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
$req = pass_request();&lt;br /&gt;
&lt;br /&gt;
foreach($req[0] as $header) {&lt;br /&gt;
        header($header[0] .&amp;quot;: &amp;quot;. $header[1], false);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
print $req[1];&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sumber: https://github.com/shish/spawn-fcgi.php/blob/master/spawn-fcgi.php&lt;br /&gt;
&lt;br /&gt;
===Tambahkan .htaccess===&lt;br /&gt;
&lt;br /&gt;
Agar script dapat diakses melalui root URL, silakan tambahkan .htaccess berikut Mini:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;htaccess&amp;quot;&amp;gt;&lt;br /&gt;
RewriteEngine On&lt;br /&gt;
RewriteBase /&lt;br /&gt;
RewriteCond %{REQUEST_FILENAME} !-f&lt;br /&gt;
RewriteRule ^(.*)$ spawn-fcgi.php [L]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategori:Setting_CMS]]&lt;/div&gt;</summary>
		<author><name>Docs</name></author>	</entry>

	<entry>
		<id>https://docs.indoglobal.com/wiki/Perl_Dancer</id>
		<title>Perl Dancer</title>
		<link rel="alternate" type="text/html" href="https://docs.indoglobal.com/wiki/Perl_Dancer"/>
				<updated>2020-07-29T09:10:25Z</updated>
		
		<summary type="html">&lt;p&gt;Docs: ←Membuat halaman berisi 'Untuk melakukan instalasi perl Dancer, berikut adalah langkah-langkahnya:  ===Install Perl minimal versi 5.24===  Silakan anda buka tiket untuk meminta staf kami mengi...'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Untuk melakukan instalasi perl Dancer, berikut adalah langkah-langkahnya:&lt;br /&gt;
&lt;br /&gt;
===Install Perl minimal versi 5.24===&lt;br /&gt;
&lt;br /&gt;
Silakan anda buka tiket untuk meminta staf kami menginstalkan paket rh-perl524 ke sistem.&lt;br /&gt;
&lt;br /&gt;
===Mengaktifkan Perl Versi Baru===&lt;br /&gt;
&lt;br /&gt;
Tambahkan baris berikut di `~/.bashrc_local`:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
source scl_source enable rh-perl524&lt;br /&gt;
export PATH=&amp;quot;$PATH:~/perl5/bin&amp;quot;&lt;br /&gt;
export PERL5LIB=$HOME/perl5/lib/perl5&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aktifkan konfigurasi tersebut dengan `source ~/.bashrc`&lt;br /&gt;
&lt;br /&gt;
===Instalasi Dancer===&lt;br /&gt;
&lt;br /&gt;
Gunakan perintah berikut untuk menginstall Dancer: `cpanm --force Dancer2 FCGI FCGI::ProcManager`&lt;br /&gt;
&lt;br /&gt;
===Membuat Skeleton Aplikasi Dancer===&lt;br /&gt;
&lt;br /&gt;
Gunakan perintah berikut untuk membuat skeleton aplikasi dancer: `dancer2 -a MyApp &amp;amp;&amp;amp; cd MyApp`&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategori:Setting_CMS]]&lt;/div&gt;</summary>
		<author><name>Docs</name></author>	</entry>

	<entry>
		<id>https://docs.indoglobal.com/wiki/Django</id>
		<title>Django</title>
		<link rel="alternate" type="text/html" href="https://docs.indoglobal.com/wiki/Django"/>
				<updated>2020-06-05T13:41:51Z</updated>
		
		<summary type="html">&lt;p&gt;Docs: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Anda dapat menggunakan virtualenv untuk menginstall Django di akun hosting {{indoglobal}}.&lt;br /&gt;
&lt;br /&gt;
==Persiapan==&lt;br /&gt;
&lt;br /&gt;
Sebelum memulai, pastikan di server tempat akun anda diletakkan sudah terinstal versi Python yang diperlukan. Untuk mengetahui versi Python yang dibutuhkan Django, silakan baca [https://docs.djangoproject.com/en/1.8/faq/install/#what-python-version-can-i-use-with-django FAQ Django]. Jika di sistem belum terinstal versi Python yang dibutuhkan, silakan hubungi tim dukungan teknis kami untuk diinstalkan.&lt;br /&gt;
&lt;br /&gt;
Tulisan ini mengasumsikan anda menggunakan Python 3.8&lt;br /&gt;
&lt;br /&gt;
==Setup virtualenv==&lt;br /&gt;
&lt;br /&gt;
Login ke akun anda melalui shell (SSH atau web based terminal kami), dan jalankan perintah berikut ini.&lt;br /&gt;
&lt;br /&gt;
Untuk Python 3.8:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir .env&lt;br /&gt;
/opt/python-3.8/bin/python3.8 -m venv .env/python-3.8&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Perintah tersebut akan membuat virtualenv di directory ~/.env/python-3.4. Sekarang anda memiliki instalasi Python 3.4 di directory tersebut.&lt;br /&gt;
&lt;br /&gt;
(informasi usang) Untuk Python 3 versi lama:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ mkdir .env&lt;br /&gt;
$ cd .env&lt;br /&gt;
$ pyvenv-3.4 python-3.4&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(informasi usang) Untuk Python 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ mkdir .env&lt;br /&gt;
$ cd .env&lt;br /&gt;
$ virtualenv python-3.4&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Perintah tersebut akan membuat virtualenv di directory ~/.env/python-3.4. Sekarang anda memiliki instalasi Python 3.4 di directory tersebut.&lt;br /&gt;
&lt;br /&gt;
==Aktifkan virtualenv Pada Sesi Login Anda==&lt;br /&gt;
&lt;br /&gt;
Sekarang aktifkan virtualenv yang telah anda buat.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
source ~/.env/python-3.8/bin/activate&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Setelah perintah tersebut dijalankan, maka sesi login anda saat itu akan menggunakan Python 3.4.&lt;br /&gt;
&lt;br /&gt;
{{alert|content=Anda perlu menjalankan perintah ini setiap kali ingin menggunakan versi Python tersebut untuk mengelola instalasi Django melalui shell}}&lt;br /&gt;
&lt;br /&gt;
==Instal Paket Yang Dibutuhkan==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ pip install flup6&lt;br /&gt;
$ pip install django&lt;br /&gt;
$ pip install django-fastcgi-server&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{alert|content=Untuk Python 2, paket yang dibutuhkan adalah 'flup', bukan 'flup6'.}}&lt;br /&gt;
&lt;br /&gt;
==Memulai Proyek Django Baru==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ mkdir ~/projects&lt;br /&gt;
$ cd ~/projects&lt;br /&gt;
$ django-admin.py startproject myproject&lt;br /&gt;
$ cd ~/env/python-3.8/lib/python3.4/site-packages/&lt;br /&gt;
$ ln -s ~/projects/myproject/myproject&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Perintah tersebut akan membuat proyek 'myproject' yang diletakkan di ~/projects/myproject.&lt;br /&gt;
&lt;br /&gt;
==Pastikan Paket Terinstal Dengan Baik==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ python&lt;br /&gt;
Python 3.8.3 (default, Jun  5 2020, 13:18:07) &lt;br /&gt;
[GCC 4.4.7 20120313 (Red Hat 4.4.7-23)] on linux&lt;br /&gt;
Type &amp;quot;help&amp;quot;, &amp;quot;copyright&amp;quot;, &amp;quot;credits&amp;quot; or &amp;quot;license&amp;quot; for more information.&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; import django&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; import flup&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; import myproject&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jika tidak ada error, maka paket seharusnya sudah terinstall dengan baik.&lt;br /&gt;
&lt;br /&gt;
==Instal Front Controller==&lt;br /&gt;
&lt;br /&gt;
Di directory web anda, buatlah file 'myproject.fcgi' dengan isi sebagai berikut:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
#!/home/username/.env/python-3.8/bin/python&lt;br /&gt;
&lt;br /&gt;
import sys, os&lt;br /&gt;
&lt;br /&gt;
sys.path.insert(0, '/home/username/.env/python-3.8/lib/python3.8/site-packages')&lt;br /&gt;
os.chdir('/home/username/projects/myproject/myproject')&lt;br /&gt;
os.environ['DJANGO_SETTINGS_MODULE'] = 'myproject.settings'&lt;br /&gt;
&lt;br /&gt;
from django_fastcgi.servers.fastcgi import runfastcgi&lt;br /&gt;
from django.core.servers.basehttp import get_internal_wsgi_application&lt;br /&gt;
&lt;br /&gt;
wsgi_application = get_internal_wsgi_application()&lt;br /&gt;
runfastcgi(wsgi_application, method=&amp;quot;threaded&amp;quot;, daemonize=&amp;quot;false&amp;quot;, minspare=1, maxspare=1, maxchildren=1)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ubah file tersebut menjadi executable dengan perintah &amp;lt;code&amp;gt;chmod +x myproject.fcgi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kemudian buatlah file .htaccess dengan isi sebagai berikut:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt;&lt;br /&gt;
AddHandler fcgid-script .fcgi&lt;br /&gt;
RewriteEngine On&lt;br /&gt;
Options +FollowSymLinks +ExecCGI&lt;br /&gt;
RewriteCond %{REQUEST_FILENAME} !-f&lt;br /&gt;
RewriteRule ^(.*)$ myproject.fcgi/$1 [QSA,L]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Selesai!==&lt;br /&gt;
&lt;br /&gt;
Pastikan Django telah terinstall dengan baik dengan menggunakan web browser.&lt;br /&gt;
&lt;br /&gt;
Untuk mengelola instalasi Django menggunakan shell, jangan lupa untuk mengikuti langkah &amp;quot;Aktifkan virtualenv Pada Sesi Login Anda&amp;quot; di atas.&lt;br /&gt;
&lt;br /&gt;
[[Kategori:Setting_CMS]]&lt;/div&gt;</summary>
		<author><name>Docs</name></author>	</entry>

	<entry>
		<id>https://docs.indoglobal.com/wiki/Django</id>
		<title>Django</title>
		<link rel="alternate" type="text/html" href="https://docs.indoglobal.com/wiki/Django"/>
				<updated>2020-06-05T13:40:17Z</updated>
		
		<summary type="html">&lt;p&gt;Docs: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Anda dapat menggunakan virtualenv untuk menginstall Django di akun hosting {{indoglobal}}.&lt;br /&gt;
&lt;br /&gt;
==Persiapan==&lt;br /&gt;
&lt;br /&gt;
Sebelum memulai, pastikan di server tempat akun anda diletakkan sudah terinstal versi Python yang diperlukan. Untuk mengetahui versi Python yang dibutuhkan Django, silakan baca [https://docs.djangoproject.com/en/1.8/faq/install/#what-python-version-can-i-use-with-django FAQ Django]. Jika di sistem belum terinstal versi Python yang dibutuhkan, silakan hubungi tim dukungan teknis kami untuk diinstalkan.&lt;br /&gt;
&lt;br /&gt;
Tulisan ini mengasumsikan anda menggunakan Python 3.8&lt;br /&gt;
&lt;br /&gt;
==Setup virtualenv==&lt;br /&gt;
&lt;br /&gt;
Login ke akun anda melalui shell (SSH atau web based terminal kami), dan jalankan perintah berikut ini.&lt;br /&gt;
&lt;br /&gt;
Untuk Python 3.8:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir .env&lt;br /&gt;
/opt/python-3.8/bin/python3.8 -m venv .env/python-3.8&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Perintah tersebut akan membuat virtualenv di directory ~/.env/python-3.4. Sekarang anda memiliki instalasi Python 3.4 di directory tersebut.&lt;br /&gt;
&lt;br /&gt;
(informasi usang) Untuk Python 3 versi lama:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ mkdir .env&lt;br /&gt;
$ cd .env&lt;br /&gt;
$ pyvenv-3.4 python-3.4&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(informasi usang) Untuk Python 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ mkdir .env&lt;br /&gt;
$ cd .env&lt;br /&gt;
$ virtualenv python-3.4&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Perintah tersebut akan membuat virtualenv di directory ~/.env/python-3.4. Sekarang anda memiliki instalasi Python 3.4 di directory tersebut.&lt;br /&gt;
&lt;br /&gt;
==Aktifkan virtualenv Pada Sesi Login Anda==&lt;br /&gt;
&lt;br /&gt;
Sekarang aktifkan virtualenv yang telah anda buat.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
source ~/.env/python-3.8/bin/activate&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Setelah perintah tersebut dijalankan, maka sesi login anda saat itu akan menggunakan Python 3.4.&lt;br /&gt;
&lt;br /&gt;
{{alert|content=Anda perlu menjalankan perintah ini setiap kali ingin menggunakan versi Python tersebut untuk mengelola instalasi Django melalui shell}}&lt;br /&gt;
&lt;br /&gt;
==Instal Paket Yang Dibutuhkan==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ pip install flup6&lt;br /&gt;
$ pip install django&lt;br /&gt;
$ pip install django-fastcgi-server&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{alert|content=Untuk Python 2, paket yang dibutuhkan adalah 'flup', bukan 'flup6'.}}&lt;br /&gt;
&lt;br /&gt;
==Memulai Proyek Django Baru==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ mkdir ~/projects&lt;br /&gt;
$ cd ~/projects&lt;br /&gt;
$ django-admin.py startproject myproject&lt;br /&gt;
$ cd ~/env/python-3.8/lib/python3.4/site-packages/&lt;br /&gt;
$ ln -s ~/projects/myproject/myproject&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Perintah tersebut akan membuat proyek 'myproject' yang diletakkan di ~/projects/myproject.&lt;br /&gt;
&lt;br /&gt;
==Pastikan Paket Terinstal Dengan Baik==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ python&lt;br /&gt;
Python 3.8.3 (default, Jun  5 2020, 13:18:07) &lt;br /&gt;
[GCC 4.4.7 20120313 (Red Hat 4.4.7-23)] on linux&lt;br /&gt;
Type &amp;quot;help&amp;quot;, &amp;quot;copyright&amp;quot;, &amp;quot;credits&amp;quot; or &amp;quot;license&amp;quot; for more information.&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; import django&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; import flup&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; import myproject&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jika tidak ada error, maka paket seharusnya sudah terinstall dengan baik.&lt;br /&gt;
&lt;br /&gt;
==Instal Front Controller==&lt;br /&gt;
&lt;br /&gt;
Di directory web anda, buatlah file 'myproject.fcgi' dengan isi sebagai berikut:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
#!/home/u12120sdu/.env/python-3.8/bin/python&lt;br /&gt;
&lt;br /&gt;
import sys, os&lt;br /&gt;
&lt;br /&gt;
sys.path.insert(0, '/home/username/.env/python-3.8/lib/python3.8/site-packages')&lt;br /&gt;
os.chdir('/home/username/projects/myproject/myproject')&lt;br /&gt;
os.environ['DJANGO_SETTINGS_MODULE'] = 'myproject.settings'&lt;br /&gt;
&lt;br /&gt;
from django_fastcgi.servers.fastcgi import runfastcgi&lt;br /&gt;
from django.core.servers.basehttp import get_internal_wsgi_application&lt;br /&gt;
&lt;br /&gt;
wsgi_application = get_internal_wsgi_application()&lt;br /&gt;
runfastcgi(wsgi_application, method=&amp;quot;threaded&amp;quot;, daemonize=&amp;quot;false&amp;quot;, minspare=1, maxspare=1, maxchildren=1)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ubah file tersebut menjadi executable dengan perintah &amp;lt;code&amp;gt;chmod +x myproject.fcgi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kemudian buatlah file .htaccess dengan isi sebagai berikut:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt;&lt;br /&gt;
AddHandler fcgid-script .fcgi&lt;br /&gt;
RewriteEngine On&lt;br /&gt;
Options +FollowSymLinks +ExecCGI&lt;br /&gt;
RewriteCond %{REQUEST_FILENAME} !-f&lt;br /&gt;
RewriteRule ^(.*)$ myproject.fcgi/$1 [QSA,L]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Selesai!==&lt;br /&gt;
&lt;br /&gt;
Pastikan Django telah terinstall dengan baik dengan menggunakan web browser.&lt;br /&gt;
&lt;br /&gt;
Untuk mengelola instalasi Django menggunakan shell, jangan lupa untuk mengikuti langkah &amp;quot;Aktifkan virtualenv Pada Sesi Login Anda&amp;quot; di atas.&lt;br /&gt;
&lt;br /&gt;
[[Kategori:Setting_CMS]]&lt;/div&gt;</summary>
		<author><name>Docs</name></author>	</entry>

	<entry>
		<id>https://docs.indoglobal.com/wiki/Django</id>
		<title>Django</title>
		<link rel="alternate" type="text/html" href="https://docs.indoglobal.com/wiki/Django"/>
				<updated>2020-06-05T13:20:45Z</updated>
		
		<summary type="html">&lt;p&gt;Docs: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Anda dapat menggunakan virtualenv untuk menginstall Django di akun hosting {{indoglobal}}.&lt;br /&gt;
&lt;br /&gt;
==Persiapan==&lt;br /&gt;
&lt;br /&gt;
Sebelum memulai, pastikan di server tempat akun anda diletakkan sudah terinstal versi Python yang diperlukan. Untuk mengetahui versi Python yang dibutuhkan Django, silakan baca [https://docs.djangoproject.com/en/1.8/faq/install/#what-python-version-can-i-use-with-django FAQ Django]. Jika di sistem belum terinstal versi Python yang dibutuhkan, silakan hubungi tim dukungan teknis kami untuk diinstalkan.&lt;br /&gt;
&lt;br /&gt;
Tulisan ini mengasumsikan anda menggunakan Python 3.8&lt;br /&gt;
&lt;br /&gt;
==Setup virtualenv==&lt;br /&gt;
&lt;br /&gt;
Login ke akun anda melalui shell (SSH atau web based terminal kami), dan jalankan perintah berikut ini.&lt;br /&gt;
&lt;br /&gt;
Untuk Python 3.8:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir .env&lt;br /&gt;
/opt/python-3.8/bin/python3.8 -m venv .env/python-3.8&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Perintah tersebut akan membuat virtualenv di directory ~/.env/python-3.4. Sekarang anda memiliki instalasi Python 3.4 di directory tersebut.&lt;br /&gt;
&lt;br /&gt;
(informasi usang) Untuk Python 3 versi lama:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ mkdir .env&lt;br /&gt;
$ cd .env&lt;br /&gt;
$ pyvenv-3.4 python-3.4&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(informasi usang) Untuk Python 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ mkdir .env&lt;br /&gt;
$ cd .env&lt;br /&gt;
$ virtualenv python-3.4&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Perintah tersebut akan membuat virtualenv di directory ~/.env/python-3.4. Sekarang anda memiliki instalasi Python 3.4 di directory tersebut.&lt;br /&gt;
&lt;br /&gt;
==Aktifkan virtualenv Pada Sesi Login Anda==&lt;br /&gt;
&lt;br /&gt;
Sekarang aktifkan virtualenv yang telah anda buat.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
source ~/.env/python-3.8/bin/activate&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Setelah perintah tersebut dijalankan, maka sesi login anda saat itu akan menggunakan Python 3.4.&lt;br /&gt;
&lt;br /&gt;
{{alert|content=Anda perlu menjalankan perintah ini setiap kali ingin menggunakan versi Python tersebut untuk mengelola instalasi Django melalui shell}}&lt;br /&gt;
&lt;br /&gt;
==Instal Paket Yang Dibutuhkan==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ pip install flup6&lt;br /&gt;
$ pip install django&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{alert|content=Untuk Python 2, paket yang dibutuhkan adalah 'flup', bukan 'flup6'.}}&lt;br /&gt;
&lt;br /&gt;
==Memulai Proyek Django Baru==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ mkdir ~/projects&lt;br /&gt;
$ cd ~/projects&lt;br /&gt;
$ django-admin.py startproject myproject&lt;br /&gt;
$ cd ~/env/python-3.8/lib/python3.4/site-packages/&lt;br /&gt;
$ ln -s ~/projects/myproject/myproject&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Perintah tersebut akan membuat proyek 'myproject' yang diletakkan di ~/projects/myproject.&lt;br /&gt;
&lt;br /&gt;
==Pastikan Paket Terinstal Dengan Baik==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ python&lt;br /&gt;
Python 3.8.3 (default, Jun  5 2020, 13:18:07) &lt;br /&gt;
[GCC 4.4.7 20120313 (Red Hat 4.4.7-23)] on linux&lt;br /&gt;
Type &amp;quot;help&amp;quot;, &amp;quot;copyright&amp;quot;, &amp;quot;credits&amp;quot; or &amp;quot;license&amp;quot; for more information.&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; import django&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; import flup&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; import myproject&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jika tidak ada error, maka paket seharusnya sudah terinstall dengan baik.&lt;br /&gt;
&lt;br /&gt;
==Instal Front Controller==&lt;br /&gt;
&lt;br /&gt;
Di directory web anda, buatlah file 'myproject.fcgi' dengan isi sebagai berikut:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
#!/home1/username/.env/python-3.4/bin/python&lt;br /&gt;
&lt;br /&gt;
import sys, os&lt;br /&gt;
sys.path.insert(0, '/home1/username/.env/python-3.4/site-packages')&lt;br /&gt;
os.environ['DJANGO_SETTINGS_MODULE'] = 'myproject.settings'&lt;br /&gt;
from django.core.servers.fastcgi import runfastcgi&lt;br /&gt;
runfastcgi(method=&amp;quot;threaded&amp;quot;, daemonize=&amp;quot;false&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ubah file tersebut menjadi executable dengan perintah &amp;lt;code&amp;gt;chmod +x myproject.fcgi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kemudian buatlah file .htaccess dengan isi sebagai berikut:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt;&lt;br /&gt;
AddHandler fcgid-script .fcgi&lt;br /&gt;
RewriteEngine On&lt;br /&gt;
Options +FollowSymLinks +ExecCGI&lt;br /&gt;
RewriteCond %{REQUEST_FILENAME} !-f&lt;br /&gt;
RewriteRule ^(.*)$ myproject.fcgi/$1 [QSA,L]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Selesai!==&lt;br /&gt;
&lt;br /&gt;
Pastikan Django telah terinstall dengan baik dengan menggunakan web browser.&lt;br /&gt;
&lt;br /&gt;
Untuk mengelola instalasi Django menggunakan shell, jangan lupa untuk mengikuti langkah &amp;quot;Aktifkan virtualenv Pada Sesi Login Anda&amp;quot; di atas.&lt;br /&gt;
&lt;br /&gt;
[[Kategori:Setting_CMS]]&lt;/div&gt;</summary>
		<author><name>Docs</name></author>	</entry>

	<entry>
		<id>https://docs.indoglobal.com/wiki/Django</id>
		<title>Django</title>
		<link rel="alternate" type="text/html" href="https://docs.indoglobal.com/wiki/Django"/>
				<updated>2020-06-05T13:07:46Z</updated>
		
		<summary type="html">&lt;p&gt;Docs: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Anda dapat menggunakan virtualenv untuk menginstall Django di akun hosting {{indoglobal}}.&lt;br /&gt;
&lt;br /&gt;
==Persiapan==&lt;br /&gt;
&lt;br /&gt;
Sebelum memulai, pastikan di server tempat akun anda diletakkan sudah terinstal versi Python yang diperlukan. Untuk mengetahui versi Python yang dibutuhkan Django, silakan baca [https://docs.djangoproject.com/en/1.8/faq/install/#what-python-version-can-i-use-with-django FAQ Django]. Jika di sistem belum terinstal versi Python yang dibutuhkan, silakan hubungi tim dukungan teknis kami untuk diinstalkan.&lt;br /&gt;
&lt;br /&gt;
Tulisan ini mengasumsikan anda menggunakan Python 3.8&lt;br /&gt;
&lt;br /&gt;
==Setup virtualenv==&lt;br /&gt;
&lt;br /&gt;
Login ke akun anda melalui shell (SSH atau web based terminal kami), dan jalankan perintah berikut ini.&lt;br /&gt;
&lt;br /&gt;
Untuk Python 3.8:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir .env&lt;br /&gt;
/opt/python-3.8/bin/python3.8 -m venv .env/python-3.8&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Perintah tersebut akan membuat virtualenv di directory ~/.env/python-3.4. Sekarang anda memiliki instalasi Python 3.4 di directory tersebut.&lt;br /&gt;
&lt;br /&gt;
(informasi usang) Untuk Python 3 versi lama:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ mkdir .env&lt;br /&gt;
$ cd .env&lt;br /&gt;
$ pyvenv-3.4 python-3.4&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(informasi usang) Untuk Python 2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ mkdir .env&lt;br /&gt;
$ cd .env&lt;br /&gt;
$ virtualenv python-3.4&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Perintah tersebut akan membuat virtualenv di directory ~/.env/python-3.4. Sekarang anda memiliki instalasi Python 3.4 di directory tersebut.&lt;br /&gt;
&lt;br /&gt;
==Aktifkan virtualenv Pada Sesi Login Anda==&lt;br /&gt;
&lt;br /&gt;
Sekarang aktifkan virtualenv yang telah anda buat.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
source ~/.env/python-3.8/bin/activate&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Setelah perintah tersebut dijalankan, maka sesi login anda saat itu akan menggunakan Python 3.4.&lt;br /&gt;
&lt;br /&gt;
{{alert|content=Anda perlu menjalankan perintah ini setiap kali ingin menggunakan versi Python tersebut untuk mengelola instalasi Django melalui shell}}&lt;br /&gt;
&lt;br /&gt;
==Instal Paket Yang Dibutuhkan==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ pip install flup6&lt;br /&gt;
$ pip install django&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{alert|content=Untuk Python 2, paket yang dibutuhkan adalah 'flup', bukan 'flup6'.}}&lt;br /&gt;
&lt;br /&gt;
==Memulai Proyek Django Baru==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ mkdir ~/projects&lt;br /&gt;
$ cd ~/projects&lt;br /&gt;
$ django-admin.py startproject myproject&lt;br /&gt;
$ cd ~/env/python-3.8/lib/python3.4/site-packages/&lt;br /&gt;
$ ln -s ~/projects/myproject/myproject&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Perintah tersebut akan membuat proyek 'myproject' yang diletakkan di ~/projects/myproject.&lt;br /&gt;
&lt;br /&gt;
==Pastikan Paket Terinstal Dengan Baik==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ python&lt;br /&gt;
Python 3.8&lt;br /&gt;
[GCC 4.4.7 20120313 (Red Hat 4.4.7-11)] on linux&lt;br /&gt;
Type &amp;quot;help&amp;quot;, &amp;quot;copyright&amp;quot;, &amp;quot;credits&amp;quot; or &amp;quot;license&amp;quot; for more information.&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; import django&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; import flup&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; import myproject&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jika tidak ada error, maka paket seharusnya sudah terinstall dengan baik.&lt;br /&gt;
&lt;br /&gt;
==Instal Front Controller==&lt;br /&gt;
&lt;br /&gt;
Di directory web anda, buatlah file 'myproject.fcgi' dengan isi sebagai berikut:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
#!/home1/username/.env/python-3.4/bin/python&lt;br /&gt;
&lt;br /&gt;
import sys, os&lt;br /&gt;
sys.path.insert(0, '/home1/username/.env/python-3.4/site-packages')&lt;br /&gt;
os.environ['DJANGO_SETTINGS_MODULE'] = 'myproject.settings'&lt;br /&gt;
from django.core.servers.fastcgi import runfastcgi&lt;br /&gt;
runfastcgi(method=&amp;quot;threaded&amp;quot;, daemonize=&amp;quot;false&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ubah file tersebut menjadi executable dengan perintah &amp;lt;code&amp;gt;chmod +x myproject.fcgi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kemudian buatlah file .htaccess dengan isi sebagai berikut:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt;&lt;br /&gt;
AddHandler fcgid-script .fcgi&lt;br /&gt;
RewriteEngine On&lt;br /&gt;
Options +FollowSymLinks +ExecCGI&lt;br /&gt;
RewriteCond %{REQUEST_FILENAME} !-f&lt;br /&gt;
RewriteRule ^(.*)$ myproject.fcgi/$1 [QSA,L]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Selesai!==&lt;br /&gt;
&lt;br /&gt;
Pastikan Django telah terinstall dengan baik dengan menggunakan web browser.&lt;br /&gt;
&lt;br /&gt;
Untuk mengelola instalasi Django menggunakan shell, jangan lupa untuk mengikuti langkah &amp;quot;Aktifkan virtualenv Pada Sesi Login Anda&amp;quot; di atas.&lt;br /&gt;
&lt;br /&gt;
[[Kategori:Setting_CMS]]&lt;/div&gt;</summary>
		<author><name>Docs</name></author>	</entry>

	<entry>
		<id>https://docs.indoglobal.com/wiki/Wordpress</id>
		<title>Wordpress</title>
		<link rel="alternate" type="text/html" href="https://docs.indoglobal.com/wiki/Wordpress"/>
				<updated>2020-01-23T08:30:32Z</updated>
		
		<summary type="html">&lt;p&gt;Docs: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Wordpress adalah CMS blog populer dan dapat didownload di [http://wordpress.org wordpress.org]. Berikut adalah beberapa hal yang berhubungan dengan instalasi Wordpress di sistem indoglobal.com&lt;br /&gt;
&lt;br /&gt;
==Rekomendasi Pasca Instalasi==&lt;br /&gt;
&lt;br /&gt;
Berikut adalah rekomendasi kami setelah melakukan instalasi Wordpress. Tujuannya adalah agar seluruh fitur yang ada di Wordpress dapat berfungsi penuh tanpa mengorbankan faktor keamanan.&lt;br /&gt;
&lt;br /&gt;
===Membuat Akun Share untuk keperluan upload===&lt;br /&gt;
&lt;br /&gt;
* Anda membutuhkan sebuah akun email yang akan diberi akses ke instalasi Wordpress anda. Anda dapat membuat akun email baru, atau menggunakan akun email yang sudah dibuat sebelumnya.&lt;br /&gt;
* Masuk ke File Manager, navigasikan ke folder instalasi Wordpress anda. Gunakan fungsi 'Share this folder'. Akan keluar menu 'Create a New Share'&lt;br /&gt;
* Ganti Email address menjadi email yang anda tentukan sebelumnya untuk diberi akses ke instalasi Wordpress.&lt;br /&gt;
* Masukkan share name misalnya 'wordpress'.&lt;br /&gt;
* Klik Create Share.&lt;br /&gt;
&lt;br /&gt;
Catat username untuk digunakan pada langkah berikutnya.&lt;br /&gt;
&lt;br /&gt;
===Konfigurasikan Wordpress untuk menggunakan FTP untuk melakukan modifikasi file===&lt;br /&gt;
&lt;br /&gt;
Sunting file wp-config.php, dan tambahkan baris berikut ini:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
define('FS_METHOD', 'ftpext');&lt;br /&gt;
define('FTP_HOST', 'localhost');&lt;br /&gt;
define('FTP_USER', 'user-wordpress@example.com');&lt;br /&gt;
define('FTP_PASS', 'password');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(ubah isi variabel sesuai konfigurasi anda)&lt;br /&gt;
&lt;br /&gt;
Anda juga dapat menghapus define FTP_PASS di atas untuk memaksimalkan keamanan. Wordpress akan secara otomatis menanyakan password FTP jika membutuhkannya.&lt;br /&gt;
&lt;br /&gt;
===Ubah permission folder wp-content===&lt;br /&gt;
&lt;br /&gt;
Dengan menggunakan [[File Manager]], ubahlah permission folder wp-content menjadi 'Read Write' (tidak perlu menggunakan fungsi recursive). Anda juga dapat melakukannya melalui FTP dengan mengganti permission folder tersebut menjadi 777 (CHMOD 777).&lt;br /&gt;
&lt;br /&gt;
==Proteksi Tambahan==&lt;br /&gt;
&lt;br /&gt;
===Menambahkan Proteksi Tambahan===&lt;br /&gt;
&lt;br /&gt;
CMS Wordpress sering mengalami serangan brute force dan hal ini adalah penyebab paling sering terjadinya masalah keamanan di situs web. Untuk mengatasinya, tambahlah baris berikut di .htaccess:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Files wp-login.php&amp;gt;&lt;br /&gt;
Require valid-user&lt;br /&gt;
&amp;lt;/Files&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Files xmlrpc.php&amp;gt;&lt;br /&gt;
Require valid-user&lt;br /&gt;
&amp;lt;/Files&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dengan perintah tersebut, Wordpress akan menanyakan password tambahan untuk login. Gunakan alamat email apa pada akun yang bersangkutan beserta passwordnya untuk melanjutkan.&lt;br /&gt;
&lt;br /&gt;
===Mematikan Proteksi Tambahan===&lt;br /&gt;
&lt;br /&gt;
Terkadang brute force Wordpress dilakukan secara masal melalui botnet dan kami sebagai pengelola server perlu mengatasinya dengan menerapkan proteksi untuk semua situs secara default.&lt;br /&gt;
&lt;br /&gt;
Jika anda ingin mematikannya, bisa dilakukan dengan perintah .htaccess berikut ini:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Files wp-login.php&amp;gt;&lt;br /&gt;
Require all granted&lt;br /&gt;
&amp;lt;/Files&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Files xmlrpc.php&amp;gt;&lt;br /&gt;
Require all granted&lt;br /&gt;
&amp;lt;/Files&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategori:Setting CMS]]&lt;/div&gt;</summary>
		<author><name>Docs</name></author>	</entry>

	<entry>
		<id>https://docs.indoglobal.com/wiki/Pindah_dari_HTTP_ke_HTTPS</id>
		<title>Pindah dari HTTP ke HTTPS</title>
		<link rel="alternate" type="text/html" href="https://docs.indoglobal.com/wiki/Pindah_dari_HTTP_ke_HTTPS"/>
				<updated>2019-11-15T12:45:54Z</updated>
		
		<summary type="html">&lt;p&gt;Docs: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Terkadang anda sudah memiliki situs yang menggunakan HTTP, namun ingin pindah ke HTTPS agar semua konten diakses melalui HTTPS secara otomatis. Untuk itu gunakan perintah [[:Kategori:.htaccess|.htaccess]] sebagai berikut.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;If &amp;quot;%{HTTPS} != 'on'&amp;quot;&amp;gt;&lt;br /&gt;
Redirect permanent &amp;quot;https://%{HTTP_HOST}%{REQUEST_URI}&amp;quot;&lt;br /&gt;
&amp;lt;/If&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Perintah di atas akan meredireksi semua request menuju HTTP untuk diarahkan ke HTTPS. Mode redireksi adalah 301 yang artinya diredireksi secara permanen. Perintah ini juga akan secara otomatis menginstruksikan search engine untuk pindah ke URL HTTPS.&lt;br /&gt;
&lt;br /&gt;
Selain setting redirect ini, kemungkinan anda juga perlu melakukan setting [[HTTP Strict Transport Security]].&lt;br /&gt;
&lt;br /&gt;
[[Kategori:Sertifikat SSL / TLS]]&lt;br /&gt;
[[Kategori:.htaccess]]&lt;br /&gt;
[[Kategori:Web]]&lt;/div&gt;</summary>
		<author><name>Docs</name></author>	</entry>

	<entry>
		<id>https://docs.indoglobal.com/wiki/Wordpress</id>
		<title>Wordpress</title>
		<link rel="alternate" type="text/html" href="https://docs.indoglobal.com/wiki/Wordpress"/>
				<updated>2017-07-05T19:20:30Z</updated>
		
		<summary type="html">&lt;p&gt;Docs: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Wordpress adalah CMS blog populer dan dapat didownload di [http://wordpress.org wordpress.org]. Berikut adalah beberapa hal yang berhubungan dengan instalasi Wordpress di sistem indoglobal.com&lt;br /&gt;
&lt;br /&gt;
==Rekomendasi Pasca Instalasi==&lt;br /&gt;
&lt;br /&gt;
Berikut adalah rekomendasi kami setelah melakukan instalasi Wordpress. Tujuannya adalah agar seluruh fitur yang ada di Wordpress dapat berfungsi penuh tanpa mengorbankan faktor keamanan.&lt;br /&gt;
&lt;br /&gt;
===Membuat Akun Share untuk keperluan upload===&lt;br /&gt;
&lt;br /&gt;
* Anda membutuhkan sebuah akun email yang akan diberi akses ke instalasi Wordpress anda. Anda dapat membuat akun email baru, atau menggunakan akun email yang sudah dibuat sebelumnya.&lt;br /&gt;
* Masuk ke File Manager, navigasikan ke folder instalasi Wordpress anda. Gunakan fungsi 'Share this folder'. Akan keluar menu 'Create a New Share'&lt;br /&gt;
* Ganti Email address menjadi email yang anda tentukan sebelumnya untuk diberi akses ke instalasi Wordpress.&lt;br /&gt;
* Masukkan share name misalnya 'wordpress'.&lt;br /&gt;
* Klik Create Share.&lt;br /&gt;
&lt;br /&gt;
Catat username untuk digunakan pada langkah berikutnya.&lt;br /&gt;
&lt;br /&gt;
===Konfigurasikan Wordpress untuk menggunakan FTP untuk melakukan modifikasi file===&lt;br /&gt;
&lt;br /&gt;
Sunting file wp-config.php, dan tambahkan baris berikut ini:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
define('FS_METHOD', 'ftpext');&lt;br /&gt;
define('FTP_HOST', 'localhost');&lt;br /&gt;
define('FTP_USER', 'user-wordpress@example.com');&lt;br /&gt;
define('FTP_PASS', 'password');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(ubah isi variabel sesuai konfigurasi anda)&lt;br /&gt;
&lt;br /&gt;
Anda juga dapat menghapus define FTP_PASS di atas untuk memaksimalkan keamanan. Wordpress akan secara otomatis menanyakan password FTP jika membutuhkannya.&lt;br /&gt;
&lt;br /&gt;
===Ubah permission folder wp-content===&lt;br /&gt;
&lt;br /&gt;
Dengan menggunakan [[File Manager]], ubahlah permission folder wp-content menjadi 'Read Write' (tidak perlu menggunakan fungsi recursive). Anda juga dapat melakukannya melalui FTP dengan mengganti permission folder tersebut menjadi 777 (CHMOD 777).&lt;br /&gt;
&lt;br /&gt;
[[Kategori:Setting CMS]]&lt;/div&gt;</summary>
		<author><name>Docs</name></author>	</entry>

	<entry>
		<id>https://docs.indoglobal.com/wiki/Web_based_email</id>
		<title>Web based email</title>
		<link rel="alternate" type="text/html" href="https://docs.indoglobal.com/wiki/Web_based_email"/>
				<updated>2017-06-03T06:35:52Z</updated>
		
		<summary type="html">&lt;p&gt;Docs: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Informasi Umum==&lt;br /&gt;
&lt;br /&gt;
Untuk dapat mengakses email berbasis web, pengguna email dapat login melalui alamat email berbasis web. Jika email anda adalah user@example.com, maka alamat email berbasis web default adalah mail.example.com.&lt;br /&gt;
&lt;br /&gt;
Pemilik akun hosting dapat mengganti alamat &amp;lt;code&amp;gt;mail.example.com&amp;lt;/code&amp;gt; melalui control panel, sehingga bisa saja alamat web based email bukan &amp;lt;code&amp;gt;mail.example.com&amp;lt;/code&amp;gt;, melainkan &amp;lt;code&amp;gt;webmail.example.com&amp;lt;/code&amp;gt; misalnya.&lt;br /&gt;
&lt;br /&gt;
==Menggunakan HTTPS Untuk Webmail==&lt;br /&gt;
&lt;br /&gt;
Untuk melakukan redirect HTTP ke HTTPS untuk webmail, silakan buat file kosong di home directory anda: &amp;lt;code&amp;gt;~/.config/azm/webmail_force_https&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Redirect berlaku untuk seluruh domain yang ada di akun tersebut.&lt;br /&gt;
&lt;br /&gt;
==Mengganti Logo Webmail==&lt;br /&gt;
&lt;br /&gt;
Untuk mengganti logo yang digunakan oleh webmail Roundcube, silakan buat file &amp;lt;code&amp;gt;~/.config/azm/webmail_logo&amp;lt;/code&amp;gt; dengan isi URL logo. Untuk logo lebih baik menggunakan URL https agar tidak terjadi kesalahan apabila webmail diakses melalui https.&lt;br /&gt;
&lt;br /&gt;
==FAQ==&lt;br /&gt;
&lt;br /&gt;
===Pesan kesalahan 'Connection to storage server failed'===&lt;br /&gt;
&lt;br /&gt;
Biasanya ini terjadi karena: 1. ada indeks di mailbox anda yang corrupt; atau 2. ada preferensi web based email anda yang corrupt. Jika pesan kesalahan ini sering terjadi, silakan hubungi dukungan teknis kami.&lt;br /&gt;
&lt;br /&gt;
===Pesan kesalahan 'Error no connection'===&lt;br /&gt;
&lt;br /&gt;
Pesan ini terjadi jika koneksi antara client dan server terputus. Biasanya ini bukan masalah serius, anda dapat langsung menggunakan kembali web based email, tentunya setelah koneksi tersambung kembali.&lt;br /&gt;
&lt;br /&gt;
===Tidak dapat menghapus email===&lt;br /&gt;
&lt;br /&gt;
Biasanya ini terjadi jika alokasi quota mailbox atau akun anda sudah terpakai semua atau nyaris terpakai semua. Pesan ini terjadi karena operasi penghapusan dilakukan dengan dua tahap: 1. menyalin email yang akan dihapus ke folder 'Trash'; dan 2. menghapus email tersebut. Pesan kesalahan terjadi karena langkah 1 tidak dapat dilakukan akibat tidak adanya ruang yang mencukupi.&lt;br /&gt;
&lt;br /&gt;
Untuk mengatasi masalah ini, gunakan Shift-Delete untuk menghapus email. Dengan cara ini, tahap penyalinan email ke folder 'Trash' tidak akan dikerjakan.&lt;br /&gt;
&lt;br /&gt;
Alternatif lain, anda dapat masuk ke Settings - Preferences - Server Settings. Kemudian menyalakan 'If moving messages to Trash fails, delete them'. Dengan opsi, inii jika web based email gagal membuat salinan di Trash, maka otomatis email akan dihapus tanpa ada pesan apapun.&lt;br /&gt;
&lt;br /&gt;
===Membuat Pesan Vacation Auto-reply===&lt;br /&gt;
&lt;br /&gt;
Silakan ikuti langkah-langkahnya di [[Vacation auto reply]].&lt;br /&gt;
&lt;br /&gt;
[[Kategori:Email]]&lt;/div&gt;</summary>
		<author><name>Docs</name></author>	</entry>

	<entry>
		<id>https://docs.indoglobal.com/wiki/Keamanan_Email</id>
		<title>Keamanan Email</title>
		<link rel="alternate" type="text/html" href="https://docs.indoglobal.com/wiki/Keamanan_Email"/>
				<updated>2017-05-29T10:08:39Z</updated>
		
		<summary type="html">&lt;p&gt;Docs: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Berikut adalah hal-hal yang dapat anda lakukan untuk meminimalkan terjadinya hal-hal yang tidak diinginkan dalam menggunakan email.&lt;br /&gt;
&lt;br /&gt;
==Menggunakan SSL==&lt;br /&gt;
&lt;br /&gt;
SSL mengenkripsi jalur data sehingga sulit disadap oleh pihak ketiga yang tidak bertanggung jawab. &lt;br /&gt;
&lt;br /&gt;
indoglobal.com mendukung SSL untuk SMTP, POP3, IMAP, Microsoft Exchange ActiveSync dan web based email. Untuk saat ini layanan-layanan tersebut mempergunakan sertifikat self-signed, dan tidak menggunakan sertifikat yang dinstal pengguna. Walaupun demikian, ini lebih baik daripada tidak sama sekali.&lt;br /&gt;
&lt;br /&gt;
Jika aplikasi client email anda mendukung SSL dan menerima sertifikat self-signed, pastikan aplikasi client anda menggunakan SSL.&lt;br /&gt;
&lt;br /&gt;
Untuk web based email, pastikan URL anda dimulai dengan https.&lt;br /&gt;
&lt;br /&gt;
==Menggunakan Otentikasi non-plaintext==&lt;br /&gt;
&lt;br /&gt;
Pada otentikasi plaintext, username dan password email anda akan dikirim tanpa penjagaan. Dengan otentikasi non-plaintext, username dan password anda akan dienkripsi sedemikian rupa sehingga tidak dapat dilihat oleh pihak tak bertanggung jawab. Walaupun jalur komunikasi tidak dilindungi (tidak menggunakan SSL), password tidak akan diketahui oleh pihak ketiga.&lt;br /&gt;
&lt;br /&gt;
Untuk keamanan maksimal, gunakan SSL dan otentikasi non-plaintext secara bersamaan.&lt;br /&gt;
&lt;br /&gt;
indoglobal.com mendukung otentikasi non-plaintext CRAM-MD5 dan DIGEST-MD5 untuk SMTP, POP3 dan IMAP.&lt;br /&gt;
&lt;br /&gt;
==Menghindari Phishing==&lt;br /&gt;
&lt;br /&gt;
Untuk menghindari phishing, silakan berikan petunjuk kepada user-user email anda untuk tidak mengetikkan username dan password email di aplikasi selain aplikasi email dan webmail. Umumnya penyerang membuat situs web berisi form login email yang menyerupai form login email sebenarnya. Kemudian mengirimkan email ke pengguna email agar pengguna email mengisikan username dan password di halaman web milik penyerang.&lt;br /&gt;
&lt;br /&gt;
==Menjaga Kesehatan Sistem Operasi Anda==&lt;br /&gt;
&lt;br /&gt;
Terkadang sistem operasi yang digunakan pengguna disusupi trojan/virus yang mencatat username dan password email yang terdapat pada sistem. Silakan baca topik [[Mengamankan Komputer dari Malware]] untuk informasi lebih lanjut.&lt;br /&gt;
&lt;br /&gt;
[[Kategori:Email]]&lt;/div&gt;</summary>
		<author><name>Docs</name></author>	</entry>

	<entry>
		<id>https://docs.indoglobal.com/wiki/CodeIgniter</id>
		<title>CodeIgniter</title>
		<link rel="alternate" type="text/html" href="https://docs.indoglobal.com/wiki/CodeIgniter"/>
				<updated>2017-03-23T16:35:38Z</updated>
		
		<summary type="html">&lt;p&gt;Docs: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;CodeIgniter adalah development framework populer untuk PHP.&lt;br /&gt;
&lt;br /&gt;
== Menyalakan Logging ==&lt;br /&gt;
&lt;br /&gt;
Jika tidak ada pesan error baik pada display maupun pada log file, silakan ikuti langkah berikut ini untuk menyalakan logging internal CodeIgniter.&lt;br /&gt;
&lt;br /&gt;
# Edit berkas config.php yang sesuai, misalnya di application/public/config/config.php&lt;br /&gt;
# Carilah setting log_threshold, dan ganti menjadi &amp;lt;code&amp;gt;$config['log_threshold'] = 4;&amp;lt;/code&amp;gt;&lt;br /&gt;
# Log file akan disimpan di direktori system/logs/&lt;br /&gt;
&lt;br /&gt;
== Mengatasi Masalah Error 404 ==&lt;br /&gt;
&lt;br /&gt;
Terkadang, instalasi CodeIgniter akan mengeluarkan pesan error 404 setelah diinstall pada sistem kami yang menggunakan FastCGI. Untuk mengatasinya:&lt;br /&gt;
&lt;br /&gt;
# Edit berkas config.php yang sesuai, misalnya di application/public/config/config.php&lt;br /&gt;
# Carilah setting uri_protocol, dan ganti menjadi &amp;lt;code&amp;gt;$config['uri_protocol'] = 'AUTO';&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jika masalah 404 terdapat hanya pada halaman utama, tetapi halaman lainnya bisa diakses dengan baik, kemungkinan ada konflik antara mod_rewrite dan DirectoryIndex. Matikan DirectoryIndex di file .htaccess dengan perintah &amp;lt;code&amp;gt;DirectoryIndex disabled&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Mengatasi Masalah Blank Page ==&lt;br /&gt;
&lt;br /&gt;
Kemungkinan besar masalah disebabkan karena kesalahan konfigurasi koneksi database. Pastikan username dan password database tercatat dengan benar di file konfigurasi (system/application/config/database.php). Selain itu pastikan extension untuk database yang digunakan sudah aktif pada konfigurasi PHP anda.&lt;br /&gt;
&lt;br /&gt;
== Pesan Error Gagal Menulis File Session ==&lt;br /&gt;
&lt;br /&gt;
Jika CodeIgniter menggunakan session driver 'files', maka ada kemungkinan terjadi pesan error sebagai berikut:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Session: Configured save path '0;0666;/home2/uxxx/var/phpsessions' is not a directory, doesn't exist or cannot be created.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pesan error terjadi karena driver 'files' pada beberapa versi CodeIgniter tidak mengerti format konfigurasi PHP [https://secure.php.net/manual/en/session.configuration.php#ini.session.save-path session.save_path] yang mengandung N atau MODE seperti konfigurasi default PHP di sistem {{indoglobal}}.&lt;br /&gt;
&lt;br /&gt;
Untuk mengatasi masalah ini, silakan edit &amp;lt;code&amp;gt;application/config/config.php&amp;lt;/code&amp;gt; dan tambahkan:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$config['sess_save_path'] = preg_replace('/^.*;/', '', session_save_path());&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategori:Setting CMS]]&lt;/div&gt;</summary>
		<author><name>Docs</name></author>	</entry>

	<entry>
		<id>https://docs.indoglobal.com/wiki/CodeIgniter</id>
		<title>CodeIgniter</title>
		<link rel="alternate" type="text/html" href="https://docs.indoglobal.com/wiki/CodeIgniter"/>
				<updated>2017-03-23T16:34:02Z</updated>
		
		<summary type="html">&lt;p&gt;Docs: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;CodeIgniter adalah development framework populer untuk PHP.&lt;br /&gt;
&lt;br /&gt;
== Menyalakan Logging ==&lt;br /&gt;
&lt;br /&gt;
Jika tidak ada pesan error baik pada display maupun pada log file, silakan ikuti langkah berikut ini untuk menyalakan logging internal CodeIgniter.&lt;br /&gt;
&lt;br /&gt;
# Edit berkas config.php yang sesuai, misalnya di application/public/config/config.php&lt;br /&gt;
# Carilah setting log_threshold, dan ganti menjadi &amp;lt;code&amp;gt;$config['log_threshold'] = 4;&amp;lt;/code&amp;gt;&lt;br /&gt;
# Log file akan disimpan di direktori system/logs/&lt;br /&gt;
&lt;br /&gt;
== Mengatasi Masalah Error 404 ==&lt;br /&gt;
&lt;br /&gt;
Terkadang, instalasi CodeIgniter akan mengeluarkan pesan error 404 setelah diinstall pada sistem kami yang menggunakan FastCGI. Untuk mengatasinya:&lt;br /&gt;
&lt;br /&gt;
# Edit berkas config.php yang sesuai, misalnya di application/public/config/config.php&lt;br /&gt;
# Carilah setting uri_protocol, dan ganti menjadi &amp;lt;code&amp;gt;$config['uri_protocol'] = 'AUTO';&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jika masalah 404 terdapat hanya pada halaman utama, tetapi halaman lainnya bisa diakses dengan baik, kemungkinan ada konflik antara mod_rewrite dan DirectoryIndex. Matikan DirectoryIndex di file .htaccess dengan perintah &amp;lt;code&amp;gt;DirectoryIndex disabled&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Mengatasi Masalah Blank Page ==&lt;br /&gt;
&lt;br /&gt;
Kemungkinan besar masalah disebabkan karena kesalahan konfigurasi koneksi database. Pastikan username dan password database tercatat dengan benar di file konfigurasi (system/application/config/database.php). Selain itu pastikan extension untuk database yang digunakan sudah aktif pada konfigurasi PHP anda.&lt;br /&gt;
&lt;br /&gt;
== Pesan Error Gagal Menulis File Session ==&lt;br /&gt;
&lt;br /&gt;
Jika CodeIgniter menggunakan session driver 'files', maka ada kemungkinan terjadi pesan error sebagai berikut:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Session: Configured save path '0;0666;/home2/uxxx/var/phpsessions' is not a directory, doesn't exist or cannot be created.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pesan error terjadi karena driver 'files' pada beberapa versi CodeIgniter tidak mengerti format konfigurasi PHP [https://secure.php.net/manual/en/session.configuration.php#ini.session.save-path session.save_path] yang mengandung N atau MODE seperti konfigurasi default PHP di sistem {{indoglobal}}.&lt;br /&gt;
&lt;br /&gt;
Untuk mengatasi masalah ini, silakan edit &amp;lt;code&amp;gt;application/config/config.php&amp;lt;/code&amp;gt; dan tambahkan:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code language=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$config['sess_save_path'] = preg_replace('/^.*;/', '', session_save_path());&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategori:Setting CMS]]&lt;/div&gt;</summary>
		<author><name>Docs</name></author>	</entry>

	<entry>
		<id>https://docs.indoglobal.com/wiki/Composer</id>
		<title>Composer</title>
		<link rel="alternate" type="text/html" href="https://docs.indoglobal.com/wiki/Composer"/>
				<updated>2017-01-28T20:05:14Z</updated>
		
		<summary type="html">&lt;p&gt;Docs: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Composer ([https://getcomposer.org/ getcomposer.org]) adalah utilitas untuk menangani instalasi aplikasi PHP pihak ketiga. Tidak seperti utilitas serupa lainnya, composer melakukan instalasi pada sebuah proyek aplikasi PHP. Sedangkan utilitas lain seperti PEAR menginstal ke system. Pada composer, proyek aplikasi yang berbeda bisa jadi memiliki dependency yang berbeda pula.&lt;br /&gt;
&lt;br /&gt;
==Menjalankan Composer yang Terinstal Global==&lt;br /&gt;
&lt;br /&gt;
Sistem kami memiliki instalasi Composer yang dapat digunakan langsung oleh pengguna, tanpa harus diinstal. Untuk menggunakannya, jalankan Composer seperti biasa:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;composer &amp;lt;perintah composer&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Perintah composer akan secara otomatis mendeteksi versi PHP yang diinginkan dari .htaccess atau konfigurasi versi default PHP di [[Control Panel]]. Jika diinginkan menggunakan versi PHP yang berbeda, tambahkan versi pada perintah composer, contoh:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;composer-5.3 &amp;lt;perintah composer&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dimana 5.3 merupakan versi PHP yang digunakan untuk menjalankan Composer.&lt;br /&gt;
&lt;br /&gt;
==Menjalankan Composer yang Diinstal Sendiri Oleh Pengguna==&lt;br /&gt;
&lt;br /&gt;
Anda juga bisa menginstal Composer sendiri, misalnya jika anda menginginkan versi Composer yang berbeda. Untuk melakukannya, pastikan extension berikut ini dalam posisi aktif:&lt;br /&gt;
&lt;br /&gt;
* ctype.so&lt;br /&gt;
* phar.so&lt;br /&gt;
* json.so&lt;br /&gt;
* xmlreader.so&lt;br /&gt;
* xmlwriter.so&lt;br /&gt;
&lt;br /&gt;
Untuk menyalakan extension PHP, silakan lihat dokumentasi [[Mengaktifkan extension PHP]].&lt;br /&gt;
&lt;br /&gt;
Untuk menjalankan Composer, gunakan perintah seperti di bawah ini.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;php composer.phar &amp;lt;perintah composer&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategori:PHP]]&lt;/div&gt;</summary>
		<author><name>Docs</name></author>	</entry>

	<entry>
		<id>https://docs.indoglobal.com/wiki/Mengganti_versi_PHP</id>
		<title>Mengganti versi PHP</title>
		<link rel="alternate" type="text/html" href="https://docs.indoglobal.com/wiki/Mengganti_versi_PHP"/>
				<updated>2017-01-28T19:58:33Z</updated>
		
		<summary type="html">&lt;p&gt;Docs: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Saat ini kami menyediakan beberapa versi PHP. Untuk informasi terkini mengenai versi-versi PHP yang kami sediakan, silakan login ke control panel dan masuk menu 'Scripting Settings' - 'PHP'.&lt;br /&gt;
&lt;br /&gt;
== Versi PHP Default ==&lt;br /&gt;
&lt;br /&gt;
Versi PHP default adalah versi PHP yang digunakan secara otomatis oleh sistem bila tidak diganti melalui .htaccess. Untuk mengganti versi default PHP, masuklah ke [[Control Panel]], kemudian masuk menu Scripting Settings dan PHP.&lt;br /&gt;
&lt;br /&gt;
== Mengganti Versi PHP ==&lt;br /&gt;
&lt;br /&gt;
Untuk mengganti versi PHP yang berlaku per directory, buatlah file &amp;lt;code&amp;gt;.htaccess&amp;lt;/code&amp;gt; yang berisi:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt;&lt;br /&gt;
AddType application/x-fastcgi-php-5.3 .php&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Perintah di atas akan mengaktifkan PHP versi 5.3 untuk direktori dimana file &amp;lt;code&amp;gt;.htaccess&amp;lt;/code&amp;gt; diletakkan.&lt;br /&gt;
&lt;br /&gt;
== Versi PHP Pada Command Line (CLI) ==&lt;br /&gt;
&lt;br /&gt;
Untuk penggunaan pada command line (CLI), sistem akan secara otomatis menggunakan versi PHP default sesuai konfigurasi pada [[Control Panel]]. Sistem juga akan juga secara otomatis membaca file .htaccess untuk mengetahui versi PHP yang diinginkan pada directory yang bersangkutan. Hal ini berlaku untuk perintah-perintah CLI sebagai berikut: php, php-cgi, phar, phar.phar, phpize, php-config dan composer.&lt;br /&gt;
&lt;br /&gt;
Jika diinginkan menjalankan versi PHP yang berbeda dari versi default atau .htaccess, silakan tambahkan versi di belakang perintah PHP. misalnya: php-5.6 atau composer-5.6. Sama seperti di atas, ini juga berlaku untuk perintah-perintah php, php-cgi, phar, phar.phar, phpize, php-config dan composer.&lt;br /&gt;
&lt;br /&gt;
== Versi PHP Pada Cron atau Task Scheduler ==&lt;br /&gt;
&lt;br /&gt;
Pada umumnya, versi yang digunakan pada [[Penjadwalan Proses]] sama seperti CLI di atas. Namun supaya .htaccess bisa terbaca, perlu dilakukan penggantian directory aktif (cd) ke directory yang sama dengan script PHP tersebut diletakkan.&lt;br /&gt;
&lt;br /&gt;
Contoh:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd ~/domain/example.org/example.org/web/ &amp;amp;&amp;amp; php script.php&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategori:PHP]]&lt;br /&gt;
[[Kategori:Web]]&lt;br /&gt;
[[Kategori:.htaccess]]&lt;/div&gt;</summary>
		<author><name>Docs</name></author>	</entry>

	<entry>
		<id>https://docs.indoglobal.com/wiki/Email_filtering</id>
		<title>Email filtering</title>
		<link rel="alternate" type="text/html" href="https://docs.indoglobal.com/wiki/Email_filtering"/>
				<updated>2016-08-01T19:15:28Z</updated>
		
		<summary type="html">&lt;p&gt;Docs: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Setiap akun email mendukung filtering. Beberapa contoh hal yang dapat dilakukan dengan email filtering adalah:&lt;br /&gt;
&lt;br /&gt;
* Otomatis memasukkan email yang masuk ke dalam folder tertentu, sesuai dengan syarat yang diberikan.&lt;br /&gt;
* Otomatis memforward email ke alamat email lain.&lt;br /&gt;
* Memberi jawaban pesan 'vacation' untuk setiap email yang masuk atau dengan syarat tertentu.&lt;br /&gt;
&lt;br /&gt;
==Mengelola Filter Melalui Web Based Email==&lt;br /&gt;
&lt;br /&gt;
Anda dapat membuat filter melalui web based email dengan cara sebagai berikut:&lt;br /&gt;
&lt;br /&gt;
* Login ke [[Web based email]]&lt;br /&gt;
* Masuk ke menu Settings (tombol di kanan atas)&lt;br /&gt;
* Klik 'Filters' (pada box sebelah kiri)&lt;br /&gt;
* Klik tanda + di kolom 'Filters'&lt;br /&gt;
* Setelah itu anda dapat membuat filter dengan mengikuti petunjuk yang diberikan.&lt;br /&gt;
&lt;br /&gt;
==Mengelola Filter Melalui ManageSieve==&lt;br /&gt;
&lt;br /&gt;
Silakan lihat halaman [[ManageSieve]] untuk informasi lebih lanjut.&lt;br /&gt;
&lt;br /&gt;
==Global Email Filtering==&lt;br /&gt;
&lt;br /&gt;
Pengguna dapat membuat instruksi filtering yang dijalankan untuk semua email yang masuk ke seluruh akun email. Silakan lihat halaman [[Email global filtering]] untuk instruksi lebih lanjut.&lt;br /&gt;
&lt;br /&gt;
[[Kategori:Email]]&lt;/div&gt;</summary>
		<author><name>Docs</name></author>	</entry>

	<entry>
		<id>https://docs.indoglobal.com/wiki/Email_global_filtering</id>
		<title>Email global filtering</title>
		<link rel="alternate" type="text/html" href="https://docs.indoglobal.com/wiki/Email_global_filtering"/>
				<updated>2016-08-01T19:13:47Z</updated>
		
		<summary type="html">&lt;p&gt;Docs: ←Membuat halaman berisi 'Dengan fitur ini, pengguna dapat melakukan filtering email yang masuk dan berlaku untuk seluruh akun email yang ada. Fitur ini mirip dengan Email filtering namun b...'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Dengan fitur ini, pengguna dapat melakukan filtering email yang masuk dan berlaku untuk seluruh akun email yang ada. Fitur ini mirip dengan [[Email filtering]] namun berlaku untuk seluruh akun email. Sistem akan menjalankan global filtering terlebih dahulu sebelum filter yang ada di masing-masing akun email.&lt;br /&gt;
&lt;br /&gt;
Cara menggunakan:&lt;br /&gt;
&lt;br /&gt;
* Buat directory ~/var/sieve.d&lt;br /&gt;
* Buat instruksi filtering dalam format SIEVE di directory tersebut.&lt;br /&gt;
&lt;br /&gt;
Nama file boleh apa saja, sistem akan melakukan filtering dengan instruksi dari seluruh file yang ada di dalam directory ~/var/sieve.d&lt;br /&gt;
&lt;br /&gt;
Untuk memudahkan pembuatan file SIEVE instruksi filtering, pengguna bisa membuat filtering melalui webmail, dan kemudian meng-copy hasilnya ke directory ini.&lt;br /&gt;
&lt;br /&gt;
[[Kategori:Email]]&lt;/div&gt;</summary>
		<author><name>Docs</name></author>	</entry>

	<entry>
		<id>https://docs.indoglobal.com/wiki/Web_Browser_Console</id>
		<title>Web Browser Console</title>
		<link rel="alternate" type="text/html" href="https://docs.indoglobal.com/wiki/Web_Browser_Console"/>
				<updated>2016-02-08T12:14:27Z</updated>
		
		<summary type="html">&lt;p&gt;Docs: ←Membuat halaman berisi 'Web browser biasanya mengirim informasi debugging ke console. Pengguna dapat melihat console jika membutuhkan informasi yang mendetail. Untuk membuka console, silakan ...'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Web browser biasanya mengirim informasi debugging ke console. Pengguna dapat melihat console jika membutuhkan informasi yang mendetail. Untuk membuka console, silakan ikuti instruksi berikut ini.&lt;br /&gt;
&lt;br /&gt;
==Google Chrome==&lt;br /&gt;
&lt;br /&gt;
Masuk ke Menu - More Tools - Developer Tools. Setelah berada di dalam Developer Tools, klik 'Console' untuk membuka console.&lt;br /&gt;
&lt;br /&gt;
==Mozilla Firefox==&lt;br /&gt;
&lt;br /&gt;
Masuk ke Menu - Developer, dan pilih Web Console.&lt;br /&gt;
&lt;br /&gt;
[[Kategori:Web]]&lt;/div&gt;</summary>
		<author><name>Docs</name></author>	</entry>

	<entry>
		<id>https://docs.indoglobal.com/wiki/Mengatasi_Masalah_HTTPS</id>
		<title>Mengatasi Masalah HTTPS</title>
		<link rel="alternate" type="text/html" href="https://docs.indoglobal.com/wiki/Mengatasi_Masalah_HTTPS"/>
				<updated>2016-02-08T12:10:38Z</updated>
		
		<summary type="html">&lt;p&gt;Docs: ←Membuat halaman berisi '==Gejala Masalah==  Icon gembok tidak aktif, berwarna merah atau ada pesan error saat mengakses situs dengan HTTPS.  ==Mencari Penyebab Masalah==  Klik icon gembok, na...'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Gejala Masalah==&lt;br /&gt;
&lt;br /&gt;
Icon gembok tidak aktif, berwarna merah atau ada pesan error saat mengakses situs dengan HTTPS.&lt;br /&gt;
&lt;br /&gt;
==Mencari Penyebab Masalah==&lt;br /&gt;
&lt;br /&gt;
Klik icon gembok, nanti akan muncul penjelasan mengapa tidak situs tidak dianggap secure.&lt;br /&gt;
&lt;br /&gt;
Alternatif lain, silakan buka [[Web Browser Console]]. Jika ada error, akan ada penjelasannya di console.&lt;br /&gt;
&lt;br /&gt;
==Penjelasan Beberapa Pesan Error==&lt;br /&gt;
&lt;br /&gt;
===Weak Signature Algorithm (SHA-1)===&lt;br /&gt;
&lt;br /&gt;
Web browser akan menganggap algoritma SHA-1 sebagai algoritma yang 'lemah'. Jika situs anda mendapatkan pesan error/warning ini, silakan untuk melakukan reissue sertifikat untuk upgrade dari SHA-1 ke SHA-256. Pada umumnya reissue karena masalah ini dapat dilakukan tanpa biaya tambahan.&lt;br /&gt;
&lt;br /&gt;
Pesan ini biasanya terjadi bagi beberapa pelanggan sertifikat SSL yang melakukan pembelian pada tahun 2014 untuk jangka waktu yang lama (2 tahun atau lebih lama).&lt;br /&gt;
&lt;br /&gt;
===Mixed Content===&lt;br /&gt;
&lt;br /&gt;
Hal ini terjadi jika situs web mencampur situs HTTPS dan HTTP. Umumnya terjadi jika situs diakses melalui HTTPS, tetapi masih ada komponen halaman yang diakses melalui HTTP (gambar, CSS, Javascript, dll).&lt;br /&gt;
&lt;br /&gt;
Untuk mengatasi masalah ini, silakan perbaiki situs anda sehingga seluruh komponen diakses melalui HTTPS.&lt;br /&gt;
&lt;br /&gt;
[[Kategori:Web]]&lt;br /&gt;
[[Kategori:Sertifikat SSL / TLS]]&lt;/div&gt;</summary>
		<author><name>Docs</name></author>	</entry>

	<entry>
		<id>https://docs.indoglobal.com/wiki/Mikrotik</id>
		<title>Mikrotik</title>
		<link rel="alternate" type="text/html" href="https://docs.indoglobal.com/wiki/Mikrotik"/>
				<updated>2016-02-08T10:57:41Z</updated>
		
		<summary type="html">&lt;p&gt;Docs: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Gunakan salah satu script berikut ini untuk supaya perangkat Mikrotik dapat melakukan update Dynamic DNS secara otomatis:&lt;br /&gt;
&lt;br /&gt;
== Alternatif Pertama ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
## Dynamic DNS script for indoglobal.com service&lt;br /&gt;
&lt;br /&gt;
## Script Settings&lt;br /&gt;
&lt;br /&gt;
# get these from usage information in control panel&lt;br /&gt;
:local dyndnsupdateurl &amp;quot;http://mail.example.net/nic/update&amp;quot;&lt;br /&gt;
:local dyndnsuser &amp;quot;your username&amp;quot;&lt;br /&gt;
:local dyndnspass &amp;quot;your password&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# the name of interface that gets dynamic IP address&lt;br /&gt;
:local dyndnsinterface &amp;quot;your interface&amp;quot;&lt;br /&gt;
&lt;br /&gt;
## do not modify after this line&lt;br /&gt;
&lt;br /&gt;
:local dyndnsdomain &amp;quot;$dyndnsuser&amp;quot;&lt;br /&gt;
:local IpCurrent [/ip address get [find interface=$dyndnsinterface] address];&lt;br /&gt;
:for i from=( [:len $IpCurrent] - 1) to=0 do={ &lt;br /&gt;
  :if ( [:pick $IpCurrent $i] = &amp;quot;/&amp;quot;) do={ &lt;br /&gt;
    :local NewIP [:pick $IpCurrent 0 $i];&lt;br /&gt;
    :if ([:resolve $dyndnsdomain] != $NewIP) do={&lt;br /&gt;
      /tool fetch mode=http user=$dyndnsuser password=$dyndnspass url=&amp;quot;$dyndnsupdateurl\3Fhostname=$dyndnsdomain&amp;amp;myip=$NewIP&amp;quot; keep-result=no&lt;br /&gt;
      :log info &amp;quot;Dynamic DNS Update: $dyndnsdomain - $NewIP&amp;quot;&lt;br /&gt;
     }&lt;br /&gt;
   } &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Script di atas adalah adaptasi dari script Dynamic DNS untuk No-IP yang ada pada [http://wiki.mikrotik.com/wiki/Dynamic_DNS_Update_Script_for_No-IP_DNS Mikrotik Wiki].&lt;br /&gt;
&lt;br /&gt;
== Alternatif Kedua ==&lt;br /&gt;
&lt;br /&gt;
Versi ini kompatibel untuk Mikrotik versi lama (3.x).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
## Dynamic DNS script for indoglobal.com services&lt;br /&gt;
&lt;br /&gt;
# User variables&lt;br /&gt;
:local dyndnsupdatehostname &amp;quot;mail.example.net&amp;quot;&lt;br /&gt;
:local dyndnsuser &amp;quot;username&amp;quot;&lt;br /&gt;
:local dyndnspass &amp;quot;password&amp;quot;&lt;br /&gt;
:local dyndnsinterface &amp;quot;interface&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Get the current IP address&lt;br /&gt;
:local curip [ /ip address get [/ip address find interface=$dyndnsinterface ] address ]&lt;br /&gt;
&lt;br /&gt;
# Strip the net mask&lt;br /&gt;
:for i from=( [:len $curip] - 1) to=0 do={&lt;br /&gt;
  :if ( [:pick $curip $i] = &amp;quot;/&amp;quot;) do={ &lt;br /&gt;
    :set curip [:pick $curip 0 $i]&lt;br /&gt;
  } &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Did we get an IP address to compare?&lt;br /&gt;
:if ([ :typeof $curip ] = nil ) do={&lt;br /&gt;
   :log info (&amp;quot;Dynamic DNS: No IP address present on &amp;quot; . $dyndnsinterface)&lt;br /&gt;
} else={&lt;br /&gt;
  :local dnsip [:resolve $dyndnsuser];&lt;br /&gt;
  :if ($curip != $dnsip) do={&lt;br /&gt;
    :log info (&amp;quot;Dynamic DNS: Sending update &amp;quot; . $dnsip)&lt;br /&gt;
    /tool fetch address=&amp;quot;dyndnsupdatehostname&amp;quot; src-path=&amp;quot;nic/update\3Fhostname=$dyndnsuser&amp;amp;myip=$curip&amp;quot; user=$dyndnsuser password=$dyndnspass keep-result=no&lt;br /&gt;
  } else={ &lt;br /&gt;
    :log info &amp;quot;Dynamic DNS: No update required&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Script di atas adalah adaptasi dari script dynamic DNS untuk No-IP dari [http://amigaprj.blogspot.com/2013/06/the-blog-is-called-amiga-projects-but.html Amiga Projects].&lt;br /&gt;
&lt;br /&gt;
==Alternatif Ketiga==&lt;br /&gt;
&lt;br /&gt;
Berikut adalah script lain yang sangat sederhana:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# Update DNS on Mikrotik Router&lt;br /&gt;
&lt;br /&gt;
:global urlupdate &amp;quot;Full Update URL&amp;quot;&lt;br /&gt;
&lt;br /&gt;
/tool fetch url=$urlupdate&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Script sumbangan dari Yusuf Ayuba dari akper-luwuk.ac.id.&lt;br /&gt;
&lt;br /&gt;
[[Kategori:Setting Aplikasi Dynamic DNS]]&lt;/div&gt;</summary>
		<author><name>Docs</name></author>	</entry>

	<entry>
		<id>https://docs.indoglobal.com/wiki/Penjadwalan_Proses</id>
		<title>Penjadwalan Proses</title>
		<link rel="alternate" type="text/html" href="https://docs.indoglobal.com/wiki/Penjadwalan_Proses"/>
				<updated>2016-02-04T17:31:36Z</updated>
		
		<summary type="html">&lt;p&gt;Docs: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Terkadang diperlukan untuk menjadwalkan sebuah proses/script untuk dijalankan secara berkala. Misalnya sehari sekali atau seminggu sekali. {{indoglobal}} menyediakan beberapa cara bagi pengguna untuk melakukan hal tersebut.&lt;br /&gt;
&lt;br /&gt;
Dengan task scheduler, pengguna dapat menjadwalkan proses melalui antarmuka yang mudah digunakan. Untuk menjadwalkan script untuk dijalankan secara berkala, lakukan salah satu dari langkah-langkah di bawah ini:&lt;br /&gt;
&lt;br /&gt;
==Melalui Menu Task  Scheduler==&lt;br /&gt;
&lt;br /&gt;
# Masuk ke [[Control Panel]], kemudian masuk ke menu Task Scheduler&lt;br /&gt;
# Klik 'Create Task', dan kemudian masukkan nama deskriptif pada 'Task Name', serta masukkan command line yang akan dieksekusi secara berkala. Klik pada 'Create Task' untuk melanjutkan.&lt;br /&gt;
# Setelah itu tentukan waktu untuk menjalankan script tersebut. Anda dapat melakukan penjadwalan setiap jam, setiap hari, setiap minggu, setiap bulan, atau setiap tahun. Anda juga dapat menjalankan proses setiap kali saat server booting.&lt;br /&gt;
&lt;br /&gt;
==Melalui File Manager==&lt;br /&gt;
&lt;br /&gt;
# Masuk ke [[File Manager]], kemudian pilih script yang ingin anda jalankan secara berkala. Kemudian klik tombol 'Schedule this script to run periodically'&lt;br /&gt;
# Setelah itu anda dapat memilih kapan script tersebut akan dieksekusi.&lt;br /&gt;
&lt;br /&gt;
{{alert|content=Penjadwalan yang dibuat melalui [[File Manager]] akan dieksekusi melalui HTTP dengan menggunakan wget, kecuali jika script dipilih melalui folder Home}}&lt;br /&gt;
&lt;br /&gt;
==Menggunakan Classic Crontab==&lt;br /&gt;
&lt;br /&gt;
Bagi pengguna mahir yang terbiasa dengan perintah cron, kami juga menyediakan antarmuka untuk menyunting crontab melalui [[Control Panel]]. Pilih menu 'Classic Crontab' untuk menyuntung crontab.&lt;br /&gt;
&lt;br /&gt;
Crontab  yang disunting di control panel merupakan crontab yang sama seandainya pengguna menggunakan perintah &amp;lt;code&amp;gt;crontab -e&amp;lt;/code&amp;gt; pada shell.&lt;br /&gt;
&lt;br /&gt;
Tips: tambahkan baris di bawah ini pada crontab supaya environment shell di dalam crontab sama dengan shell seperti biasa.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;BASH_ENV=~/.bashrc&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategori:Pengaturan &amp;amp; Upload]]&lt;/div&gt;</summary>
		<author><name>Docs</name></author>	</entry>

	<entry>
		<id>https://docs.indoglobal.com/wiki/Penjadwalan_Proses</id>
		<title>Penjadwalan Proses</title>
		<link rel="alternate" type="text/html" href="https://docs.indoglobal.com/wiki/Penjadwalan_Proses"/>
				<updated>2016-02-04T17:30:44Z</updated>
		
		<summary type="html">&lt;p&gt;Docs: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Terkadang diperlukan untuk menjadwalkan sebuah proses/script untuk dijalankan secara berkala. Misalnya sehari sekali atau seminggu sekali. {{indoglobal}} menyediakan beberapa cara bagi pengguna untuk melakukan hal tersebut.&lt;br /&gt;
&lt;br /&gt;
Dengan task scheduler, pengguna dapat menjadwalkan proses melalui antarmuka yang mudah digunakan. Untuk menjadwalkan script untuk dijalankan secara berkala, lakukan salah satu dari langkah-langkah di bawah ini:&lt;br /&gt;
&lt;br /&gt;
==Melalui Menu Task  Scheduler==&lt;br /&gt;
&lt;br /&gt;
# Masuk ke [[Control Panel]], kemudian masuk ke menu Task Scheduler&lt;br /&gt;
# Klik 'Create Task', dan kemudian masukkan nama deskriptif pada 'Task Name', serta masukkan command line yang akan dieksekusi secara berkala. Klik pada 'Create Task' untuk melanjutkan.&lt;br /&gt;
# Setelah itu tentukan waktu untuk menjalankan script tersebut. Anda dapat melakukan penjadwalan setiap jam, setiap hari, setiap minggu, setiap bulan, atau setiap tahun. Anda juga dapat menjalankan proses setiap kali saat server booting.&lt;br /&gt;
&lt;br /&gt;
==Melalui File Manager==&lt;br /&gt;
&lt;br /&gt;
# Masuk ke [[File Manager]], kemudian pilih script yang ingin anda jalankan secara berkala. Kemudian klik tombol 'Schedule this script to run periodically'&lt;br /&gt;
# Setelah itu anda dapat memilih kapan script tersebut akan dieksekusi.&lt;br /&gt;
&lt;br /&gt;
{{alert|content=Penjadwalan yang dibuat melalui [[File Manager]] akan dieksekusi melalui HTTP dengan menggunakan wget, kecuali jika script dipilih melalui folder Home}}&lt;br /&gt;
&lt;br /&gt;
==Menggunakan Classic Crontab==&lt;br /&gt;
&lt;br /&gt;
Bagi pengguna mahir yang terbiasa dengan perintah cron, kami juga menyediakan antarmuka untuk menyunting crontab melalui [[Control Panel]]. Pilih menu 'Classic Crontab' untuk menyuntung crontab.&lt;br /&gt;
&lt;br /&gt;
Crontab  yang disunting di control panel merupakan crontab yang sama seandainya pengguna menggunakan perintah &amp;lt;code&amp;gt;crontab -e&amp;lt;/code&amp;gt; pada shell.&lt;br /&gt;
&lt;br /&gt;
Tips: tambahkan baris &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;BASH_ENV=~/.bashrc&amp;lt;/source&amp;gt; di dalam crontab supaya environment shell di dalam crontab sama dengan shell seperti biasa.&lt;br /&gt;
&lt;br /&gt;
[[Kategori:Pengaturan &amp;amp; Upload]]&lt;/div&gt;</summary>
		<author><name>Docs</name></author>	</entry>

	<entry>
		<id>https://docs.indoglobal.com/wiki/chmod_777</id>
		<title>chmod 777</title>
		<link rel="alternate" type="text/html" href="https://docs.indoglobal.com/wiki/chmod_777"/>
				<updated>2016-01-02T19:47:10Z</updated>
		
		<summary type="html">&lt;p&gt;Docs: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Halaman ini kami buat karena ada banyak user yang mempertanyakan mengapa kami menginstruksikan user untuk menggunakan mode 777.&lt;br /&gt;
&lt;br /&gt;
==Ringkasan==&lt;br /&gt;
&lt;br /&gt;
Pada sistem {{indoglobal}} tidak masalah jika file/directory diberi mode 777. User lain tetap tak akan dapat mengakses file/directory tersebut.&lt;br /&gt;
&lt;br /&gt;
==Penjelasan==&lt;br /&gt;
&lt;br /&gt;
Ada bermacam-macam konfigurasi hosting. Pada kebanyakan hosting lain script biasanya dijalankan dengan username sama dengan pemilik script. Jadi jika username adalah 'user', script juga dijalankan sebagai 'user'. Jadi dengan permission 755 sudah cukup untuk bisa melakukan baca tulis, dan biasanya tanpa perlu melakukan perubahan permission pun script sudah bisa melakukan baca tulis.&lt;br /&gt;
&lt;br /&gt;
Kelemahannya adalah jika ada celah keamanan di script (misalnya Wordpress), penyerang akan memiliki akses untuk memodifikasi instalasi Wordpress dan memasang backdoor, trojan dan sebagainya. Oleh karena itu pada sistem kami, kami memikirkan bagaimana masalah ini bisa diminimalkan.&lt;br /&gt;
&lt;br /&gt;
Pada sistem kami, script dijalankan dengan username www yang khusus dibuat untuk akun yang bersangkutan. Contohnya, jika user anda adalah u777xxx, maka user www anda adalah u777xxx_www. User ini hanya menjalankan script milik u777xxx. Sedangkan user lain memiliki username www-nya masing-masing yang berbeda satu sama lainnya. Ini alasannya harus menggunakan mode 777 untuk folder dan minimal 666 untuk file supaya bisa dibaca tulis.&lt;br /&gt;
&lt;br /&gt;
Di sistem {{indoglobal}}, tidak ada kasus dimana user bisa menjalankan script sebagai user 'apache', 'www' atau 'nobody'. Dan juga tidak ada kasus dimana user bisa menjalankan script sebagai user www milik pengguna lain.&lt;br /&gt;
&lt;br /&gt;
User lain tetap tidak bisa membaca atau memodifikasi file yang anda miliki karena permission yang ada di home directory anda. Home directory masing-masing user diberi permission 750 (dengan sistem User Private Group (UPG), yaitu masing-masing user memiliki grup tersendiri). Karena itu user lain sama sekali tidak bisa masuk ke home directory anda. Di hosting lain, permission home directory biasanya adalah 755 atau 751, sehingga paling tidak user lain memiliki akses untuk masuk ke home directory orang lain. Ini sebabnya permission 777 berbahaya pada sistem tersebut. User akan bisa dengan mudah memodifikasi file milik user lain.&lt;br /&gt;
&lt;br /&gt;
Sedangkan user www 'u777xxx_www' (untuk menjalankan script) dan 'apache' (untuk mengakses file static, misalnya image dsb) di sistem kami diberi akses melalui ACL pada home directory. Jadi user-user khusus ini diberi akses secara spesifik tanpa harus memberikan akses ke seluruh user lain.&lt;br /&gt;
&lt;br /&gt;
Masalah keamanan baru akan terjadi jika user dengan sengaja mengubah permission home directory menjadi misalnya 755.&lt;br /&gt;
&lt;br /&gt;
Dengan skema seperti ini, satu-satunya serangan yang memungkinkan adalah symlink attack. Namun hal ini tidak dapat dicegah dengan permission. Sistem {{indoglobal}} menggunakan web server Apache yang sudah dimodifikasi untuk mencegah symlink attack.&lt;br /&gt;
&lt;br /&gt;
==Alternatif Dari chmod 777==&lt;br /&gt;
&lt;br /&gt;
Alternatif dari chmod 777 yang benar adalah UNIX ACL. Contoh:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
setfacl -m u:u777xxx_www:rwx namafile&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Perintah tersebut akan memberi akses baca tulis file 'namafile' kepada u777xxx_www (user www dari pengguna u777xxx). Masalahnya, cara ini hanya bisa dilakukan di shell, dan praktis tidak ada cara lain yang user friendly. Sedangkan tidak semua pengguna kami mahir menggunakan shell.&lt;br /&gt;
&lt;br /&gt;
[[Kategori:Web]]&lt;br /&gt;
[[Kategori:Pengaturan &amp;amp; Upload]]&lt;/div&gt;</summary>
		<author><name>Docs</name></author>	</entry>

	<entry>
		<id>https://docs.indoglobal.com/wiki/Permission</id>
		<title>Permission</title>
		<link rel="alternate" type="text/html" href="https://docs.indoglobal.com/wiki/Permission"/>
				<updated>2016-01-02T19:34:44Z</updated>
		
		<summary type="html">&lt;p&gt;Docs: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Model Security==&lt;br /&gt;
&lt;br /&gt;
Di sistem {{indoglobal}}, terdapat dua jenis model security yang dapat diubah melalui menu 'Web Security' di [[Control Panel]]:&lt;br /&gt;
&lt;br /&gt;
====Split web user (default)====&lt;br /&gt;
&lt;br /&gt;
Dengan [[Split web user]], script web dijalankan dengan 'user www'. Ini mirip dengan user 'nobody', 'www' atau 'apache' jika menggunakan web server Linux biasa. Perbedaannya, setiap user di sistem {{indoglobal}} memiliki 'user www' masing-masing. Contoh: jika user anda adalah u777xxx, maka 'user www' anda adalah u777xxx_www.&lt;br /&gt;
&lt;br /&gt;
Kelebihannya adalah lebih aman. Jika terjadi masalah security pada script yang digunakan, penyerang tidak memiliki permission untuk memodifikasi script. Konsekuensinya pengguna perlu mengubah permission file yang perlu ditulis oleh script web.&lt;br /&gt;
&lt;br /&gt;
====Tanpa split web user====&lt;br /&gt;
&lt;br /&gt;
Jika split web user dinonaktifkan, script web dijalankan sama dengan username pengguna. Contoh: Jika username anda u777xxx, maka script web juga dijalankan dengan username u777xxx. Ini adalah model security yang umum berlaku pada kebanyakan web hosting lain.&lt;br /&gt;
&lt;br /&gt;
Kelebihannya, pengguna tidak perlu mengubah permission file yang perlu ditulis oleh script web. Kekurangannya, jika ada masalah security, penyerang memiliki akses untuk memodifikasi file milik user.&lt;br /&gt;
&lt;br /&gt;
==Mengubah Permission File==&lt;br /&gt;
&lt;br /&gt;
Untuk mengubah permission file, dapat dilakukan melalui:&lt;br /&gt;
&lt;br /&gt;
* [[File Manager]] (melalui menu Set Permssions - Read Write)&lt;br /&gt;
* FTP/SFTP (dengan perintah chmod 777)&lt;br /&gt;
* Shell/SSH (dengan perintah chmod 777)&lt;br /&gt;
&lt;br /&gt;
==chmod 777???==&lt;br /&gt;
&lt;br /&gt;
Beberapa pihak keberatan dengan chmod 777. Untuk itu telah kami tulis penjelasan kami di dokumen [[chmod 777]].&lt;br /&gt;
&lt;br /&gt;
==Melarang Eksekusi Script Yang Dimiliki 'www user'==&lt;br /&gt;
&lt;br /&gt;
Untuk meningkatkan keamanan, pengguna juga bisa mengaktifkan opsi 'Prevent execution of scripts owned by web user'. Dengan opsi ini, script yang diupload oleh sesama script akan tidak dapat dieksekusi.&lt;br /&gt;
&lt;br /&gt;
Jika ada celah keamanan di script anda, biasanya penyerang akan menggunakan celah tersebut untuk mengupload script lain. Dengan menyalakan opsi ini, script milik penyerang tersebut menjadi tidak dapat dijalankan.&lt;br /&gt;
&lt;br /&gt;
Kelemahannya, ada beberapa CMS yang memiliki fungsi untuk mengupload software tambahan seperti plugin, theme, module, extension, dll. Terkadang ada software tambahan berupa script yang diakses dan dieksekusi langsung, dan tidak akan dapat dieksekusi jika opsi ini dinyalakan. Pada kebanyakan kasus, ini tidak menjadi masalah karena script biasanya di-include oleh script CMS, dan tidak dieksekusi langsung.&lt;br /&gt;
&lt;br /&gt;
Beberapa CMS seperti Wordpress dan Joomla memiliki fungsi untuk mengupload software tambahan melalui FTP, sehingga masalah ini dapat dihindari sepenuhnya.&lt;br /&gt;
&lt;br /&gt;
==Menjalankan Script Sebagai 'www user'==&lt;br /&gt;
&lt;br /&gt;
Terkadang ada kebutuhan untuk dapat menjalankan script sebagai 'www user' melalui shell, tanpa melalui web server. Untuk melakukannya, gunakan perintah 'wsudo'. Contoh:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wsudo /bin/id&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Perintah di atas akan menjalankan /bin/id sebagai 'www user'.&lt;br /&gt;
&lt;br /&gt;
[[Kategori:Web]]&lt;br /&gt;
[[Kategori:Pengaturan &amp;amp; Upload]]&lt;/div&gt;</summary>
		<author><name>Docs</name></author>	</entry>

	<entry>
		<id>https://docs.indoglobal.com/wiki/chmod_777</id>
		<title>chmod 777</title>
		<link rel="alternate" type="text/html" href="https://docs.indoglobal.com/wiki/chmod_777"/>
				<updated>2016-01-02T19:28:45Z</updated>
		
		<summary type="html">&lt;p&gt;Docs: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Halaman ini kami buat karena ada banyak user yang mempertanyakan mengapa kami menginstruksikan user untuk menggunakan mode 777.&lt;br /&gt;
&lt;br /&gt;
==Ringkasan==&lt;br /&gt;
&lt;br /&gt;
Pada sistem {{indoglobal}} tidak masalah jika file/directory diberi mode 777. User lain tetap tak akan dapat mengakses file/directory tersebut.&lt;br /&gt;
&lt;br /&gt;
==Penjelasan==&lt;br /&gt;
&lt;br /&gt;
Ada bermacam-macam konfigurasi hosting. Pada kebanyakan hosting lain script biasanya dijalankan dengan username sama dengan pemilik script. Jadi jika username adalah 'user', script juga dijalankan sebagai 'user'. Jadi dengan permission 755 sudah cukup untuk bisa melakukan baca tulis, dan biasanya tanpa perlu melakukan perubahan permission pun script sudah bisa melakukan baca tulis.&lt;br /&gt;
&lt;br /&gt;
Kelemahannya adalah jika ada celah keamanan di script (misalnya Wordpress), penyerang akan memiliki akses untuk memodifikasi instalasi Wordpress dan memasang backdoor, trojan dan sebagainya. Oleh karena itu pada sistem kami, kami memikirkan bagaimana masalah ini bisa diminimalkan.&lt;br /&gt;
&lt;br /&gt;
Pada sistem kami, script dijalankan dengan username www yang khusus dibuat untuk akun yang bersangkutan. Contohnya, jika user anda adalah u777xxx, maka user www anda adalah u777xxx_www. User ini hanya menjalankan script milik u777xxx. Sedangkan user lain memiliki username www-nya masing-masing yang berbeda satu sama lainnya. Ini alasannya harus menggunakan mode 777 untuk folder dan minimal 666 untuk file supaya bisa dibaca tulis.&lt;br /&gt;
&lt;br /&gt;
Di sistem {{indoglobal}}, tidak ada kasus dimana user bisa menjalankan script sebagai user 'apache', 'www' atau 'nobody'. Dan juga tidak ada kasus dimana user bisa menjalankan script sebagai user www milik pengguna lain.&lt;br /&gt;
&lt;br /&gt;
User lain tetap tidak bisa membaca atau memodifikasi file yang anda miliki karena permission yang ada di home directory anda. Home directory masing-masing user diberi permission 750 (dengan sistem User Private Group (UPG), yaitu masing-masing user memiliki grup tersendiri). Karena itu user lain sama sekali tidak bisa masuk ke home directory anda. Di hosting lain, permission home directory biasanya adalah 755 atau 751, sehingga paling tidak user lain memiliki akses untuk masuk ke home directory orang lain. Ini sebabnya permission 777 berbahaya pada sistem tersebut. User akan bisa dengan mudah memodifikasi file milik user lain.&lt;br /&gt;
&lt;br /&gt;
Sedangkan user www 'u777xxx_www' (untuk menjalankan script) dan 'apache' (untuk mengakses file static, misalnya image dsb) di sistem kami diberi akses melalui ACL pada home directory. Jadi user-user khusus ini diberi akses secara spesifik tanpa harus memberikan akses ke seluruh user lain.&lt;br /&gt;
&lt;br /&gt;
Masalah keamanan baru akan terjadi jika user dengan sengaja mengubah permission home directory menjadi misalnya 755.&lt;br /&gt;
&lt;br /&gt;
Dengan skema seperti ini, satu-satunya serangan yang memungkinkan adalah symlink attack. Namun hal ini tidak dapat dicegah dengan permission. Sistem {{indoglobal}} menggunakan web server Apache yang sudah dimodifikasi untuk mencegah symlink attack.&lt;br /&gt;
&lt;br /&gt;
[[Kategori:Web]]&lt;br /&gt;
[[Kategori:Pengaturan &amp;amp; Upload]]&lt;/div&gt;</summary>
		<author><name>Docs</name></author>	</entry>

	<entry>
		<id>https://docs.indoglobal.com/wiki/chmod_777</id>
		<title>chmod 777</title>
		<link rel="alternate" type="text/html" href="https://docs.indoglobal.com/wiki/chmod_777"/>
				<updated>2016-01-02T19:23:14Z</updated>
		
		<summary type="html">&lt;p&gt;Docs: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Halaman ini kami buat karena ada banyak user yang mempertanyakan mengapa kami menginstruksikan user untuk menggunakan mode 777.&lt;br /&gt;
&lt;br /&gt;
==Ringkasan==&lt;br /&gt;
&lt;br /&gt;
Pada sistem {{indoglobal}} tidak masalah jika file/directory diberi mode 777. User lain tetap tak akan dapat mengakses file/directory tersebut.&lt;br /&gt;
&lt;br /&gt;
==Penjelasan==&lt;br /&gt;
&lt;br /&gt;
Ada bermacam-macam konfigurasi hosting. Pada kebanyakan hosting lain script biasanya dijalankan dengan username sama dengan pemilik script. Jadi jika username adalah 'user', script juga dijalankan sebagai 'user'. Jadi dengan permission 755 sudah cukup untuk bisa melakukan baca tulis, dan biasanya tanpa perlu melakukan perubahan permission pun script sudah bisa melakukan baca tulis.&lt;br /&gt;
&lt;br /&gt;
Kelemahannya adalah jika ada celah keamanan di script (misalnya Wordpress), penyerang akan memiliki akses untuk memodifikasi instalasi Wordpress dan memasang backdoor, trojan dan sebagainya. Oleh karena itu pada sistem kami, kami memikirkan bagaimana masalah ini bisa diminimalkan.&lt;br /&gt;
&lt;br /&gt;
Pada sistem kami, script dijalankan dengan username www yang khusus dibuat untuk akun yang bersangkutan. Contohnya, jika user anda adalah u777xxx, maka user www anda adalah u777xxx_www. User ini hanya menjalankan script milik u777xxx. Sedangkan user lain memiliki username www-nya masing-masing yang berbeda satu sama lainnya. Ini alasannya harus menggunakan mode 777 untuk folder dan minimal 666 untuk file supaya bisa dibaca tulis.&lt;br /&gt;
&lt;br /&gt;
Di sistem {{indoglobal}}, tidak ada kasus dimana user bisa menjalankan script sebagai user 'apache', 'www' atau 'nobody'. Dan juga tidak ada kasus dimana user bisa menjalankan script sebagai user www milik pengguna lain.&lt;br /&gt;
&lt;br /&gt;
User lain tetap tidak bisa membaca atau memodifikasi file yang anda miliki karena permission yang ada di home directory anda. Home directory masing-masing user diberi permission 750 (dengan sistem User Private Group (UPG), yaitu masing-masing user memiliki grup tersendiri). Karena itu user lain sama sekali tidak bisa masuk ke home directory anda. Di hosting lain, permission home directory biasanya adalah 755 atau 751, sehingga paling tidak user lain memiliki akses untuk masuk ke home directory orang lain. Ini sebabnya permission 777 berbahaya pada sistem tersebut. User akan bisa dengan mudah memodifikasi file milik user lain.&lt;br /&gt;
&lt;br /&gt;
Sedangkan user www 'u777xxx_www' (untuk menjalankan script) dan 'apache' (untuk mengakses file static, misalnya image dsb) di sistem kami diberi akses melalui ACL pada home directory. Jadi user-user khusus ini diberi akses secara spesifik tanpa harus memberikan akses ke seluruh user lain.&lt;br /&gt;
&lt;br /&gt;
Masalah keamanan baru akan terjadi jika user dengan sengaja mengubah permission home directory menjadi misalnya 755.&lt;br /&gt;
&lt;br /&gt;
[[Kategori:Web]]&lt;br /&gt;
[[Kategori:Pengaturan &amp;amp; Upload]]&lt;/div&gt;</summary>
		<author><name>Docs</name></author>	</entry>

	<entry>
		<id>https://docs.indoglobal.com/wiki/chmod_777</id>
		<title>chmod 777</title>
		<link rel="alternate" type="text/html" href="https://docs.indoglobal.com/wiki/chmod_777"/>
				<updated>2016-01-02T19:20:31Z</updated>
		
		<summary type="html">&lt;p&gt;Docs: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Halaman ini kami buat karena ada banyak user yang mempertanyakan mengapa kami menginstruksikan user untuk menggunakan mode 777.&lt;br /&gt;
&lt;br /&gt;
==Ringkasan==&lt;br /&gt;
&lt;br /&gt;
Pada sistem {{indoglobal}} tidak masalah jika file/directory diberi mode 777. User lain tetap tak akan dapat mengakses file/directory tersebut.&lt;br /&gt;
&lt;br /&gt;
==Penjelasan==&lt;br /&gt;
&lt;br /&gt;
Ada bermacam-macam konfigurasi hosting. Pada kebanyakan hosting lain script biasanya dijalankan dengan username sama dengan pemilik script. Jadi jika username adalah 'user', script juga dijalankan sebagai 'user'. Jadi dengan permission 755 sudah cukup untuk bisa melakukan baca tulis, dan biasanya tanpa perlu melakukan perubahan permission pun script sudah bisa melakukan baca tulis.&lt;br /&gt;
&lt;br /&gt;
Kelemahannya adalah jika ada celah keamanan di script (misalnya Wordpress), penyerang akan memiliki akses untuk memodifikasi instalasi Wordpress dan memasang backdoor, trojan dan sebagainya. Oleh karena itu pada sistem kami, kami memikirkan bagaimana masalah ini bisa diminimalkan.&lt;br /&gt;
&lt;br /&gt;
Pada sistem kami, script dijalankan dengan username www yang khusus dibuat untuk akun yang bersangkutan. Contohnya, jika user anda adalah u777xxx, maka user www anda adalah u777xxx_www. User ini hanya menjalankan script milik u777xxx. Sedangkan user lain memiliki username www-nya masing-masing yang berbeda satu sama lainnya. Ini alasannya harus menggunakan mode 777 untuk folder dan minimal 666 untuk file supaya bisa dibaca tulis.&lt;br /&gt;
&lt;br /&gt;
Di sistem {{indoglobal}}, tidak ada kasus dimana user bisa menjalankan script sebagai user 'apache', 'www' atau 'nobody'.&lt;br /&gt;
&lt;br /&gt;
User lain tetap tidak bisa membaca atau memodifikasi file yang anda miliki karena permission yang ada di home directory anda. Home directory masing-masing user diberi permission 750 (dengan sistem User Private Group (UPG), yaitu masing-masing user memiliki grup tersendiri). Karena itu user lain sama sekali tidak bisa masuk ke home directory anda. Di hosting lain, permission home directory biasanya adalah 755 atau 751, sehingga paling tidak user lain memiliki akses untuk masuk ke home directory orang lain. Ini sebabnya permission 777 berbahaya pada sistem tersebut. User akan bisa dengan mudah memodifikasi file milik user lain.&lt;br /&gt;
&lt;br /&gt;
Sedangkan user www 'u777xxx_www' (untuk menjalankan script) dan 'apache' (untuk mengakses file static, misalnya image dsb) di sistem kami diberi akses melalui ACL pada home directory. Jadi user-user khusus ini diberi akses secara spesifik tanpa harus memberikan akses ke seluruh user lain.&lt;br /&gt;
&lt;br /&gt;
Masalah keamanan baru akan terjadi jika user dengan sengaja mengubah permission home directory menjadi misalnya 755.&lt;br /&gt;
&lt;br /&gt;
[[Kategori:Web]]&lt;br /&gt;
[[Kategori:Pengaturan &amp;amp; Upload]]&lt;/div&gt;</summary>
		<author><name>Docs</name></author>	</entry>

	<entry>
		<id>https://docs.indoglobal.com/wiki/chmod_777</id>
		<title>chmod 777</title>
		<link rel="alternate" type="text/html" href="https://docs.indoglobal.com/wiki/chmod_777"/>
				<updated>2016-01-02T19:18:01Z</updated>
		
		<summary type="html">&lt;p&gt;Docs: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Halaman ini kami buat karena ada banyak user yang mempertanyakan mengapa kami menginstruksikan user untuk menggunakan mode 777.&lt;br /&gt;
&lt;br /&gt;
==Ringkasan==&lt;br /&gt;
&lt;br /&gt;
Pada sistem {{indoglobal}} tidak masalah jika file/directory diberi mode 777. User lain tetap tak akan dapat mengakses file/directory tersebut.&lt;br /&gt;
&lt;br /&gt;
==Penjelasan==&lt;br /&gt;
&lt;br /&gt;
Ada bermacam-macam konfigurasi hosting. Pada kebanyakan hosting lain script biasanya dijalankan dengan username sama dengan pemilik script. Jadi jika username adalah 'user', script juga dijalankan sebagai 'user'. Jadi dengan permission 755 sudah cukup untuk bisa melakukan baca tulis, dan biasanya tanpa perlu melakukan perubahan permission pun script sudah bisa melakukan baca tulis.&lt;br /&gt;
&lt;br /&gt;
Kelemahannya adalah jika ada celah keamanan di script (misalnya Wordpress), penyerang akan memiliki akses untuk memodifikasi instalasi Wordpress dan memasang backdoor, trojan dan sebagainya. Oleh karena itu pada sistem kami, kami memikirkan bagaimana masalah ini bisa diminimalkan.&lt;br /&gt;
&lt;br /&gt;
Pada sistem kami, script dijalankan dengan username www yang khusus dibuat untuk akun yang bersangkutan. Contohnya, jika user anda adalah u777xxx, maka user www anda adalah u777xxx_www. User ini hanya menjalankan script milik u777xxx. Sedangkan user lain memiliki username www-nya masing-masing yang berbeda satu sama lainnya. Ini alasannya harus menggunakan mode 777 untuk folder dan minimal 666 untuk file supaya bisa dibaca tulis.&lt;br /&gt;
&lt;br /&gt;
User lain tetap tidak bisa membaca atau memodifikasi file yang anda miliki karena permission yang ada di home directory anda. Home directory masing-masing user diberi permission 750 (dengan sistem User Private Group (UPG), yaitu masing-masing user memiliki grup tersendiri). Karena itu user lain sama sekali tidak bisa masuk ke home directory anda. Di hosting lain, permission home directory biasanya adalah 755 atau 751, sehingga paling tidak user lain memiliki akses untuk masuk ke home directory orang lain. Ini sebabnya permission 777 berbahaya pada sistem tersebut. User akan bisa dengan mudah memodifikasi file milik user lain.&lt;br /&gt;
&lt;br /&gt;
Sedangkan user www 'u777xxx_www' (untuk menjalankan script) dan 'apache' (untuk mengakses file static, misalnya image dsb) di sistem kami diberi akses melalui ACL pada home directory. Jadi user-user khusus ini diberi akses secara spesifik tanpa harus memberikan akses ke seluruh user lain.&lt;br /&gt;
&lt;br /&gt;
Masalah keamanan baru akan terjadi jika user dengan sengaja mengubah permission home directory menjadi misalnya 755.&lt;br /&gt;
&lt;br /&gt;
[[Kategori:Web]]&lt;br /&gt;
[[Kategori:Pengaturan &amp;amp; Upload]]&lt;/div&gt;</summary>
		<author><name>Docs</name></author>	</entry>

	<entry>
		<id>https://docs.indoglobal.com/wiki/Permission</id>
		<title>Permission</title>
		<link rel="alternate" type="text/html" href="https://docs.indoglobal.com/wiki/Permission"/>
				<updated>2016-01-02T19:11:12Z</updated>
		
		<summary type="html">&lt;p&gt;Docs: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Model Security==&lt;br /&gt;
&lt;br /&gt;
Di sistem {{indoglobal}}, terdapat dua jenis model security yang dapat diubah melalui menu 'Web Security' di [[Control Panel]]:&lt;br /&gt;
&lt;br /&gt;
====Split web user (default)====&lt;br /&gt;
&lt;br /&gt;
Dengan [[Split web user]], script web dijalankan dengan 'user www'. Ini mirip dengan user 'nobody', 'www' atau 'apache' jika menggunakan web server Linux biasa. Perbedaannya, setiap user di sistem {{indoglobal}} memiliki 'user www' masing-masing. Contoh: jika user anda adalah u777xxx, maka 'user www' anda adalah u777xxx_www.&lt;br /&gt;
&lt;br /&gt;
Kelebihannya adalah lebih aman. Jika terjadi masalah security pada script yang digunakan, penyerang tidak memiliki permission untuk memodifikasi script. Konsekuensinya pengguna perlu mengubah permission file yang perlu ditulis oleh script web.&lt;br /&gt;
&lt;br /&gt;
====Tanpa split web user====&lt;br /&gt;
&lt;br /&gt;
Jika split web user dinonaktifkan, script web dijalankan sama dengan username pengguna. Contoh: Jika username anda u777xxx, maka script web juga dijalankan dengan username u777xxx. Ini adalah model security yang umum berlaku pada kebanyakan web hosting lain.&lt;br /&gt;
&lt;br /&gt;
Kelebihannya, pengguna tidak perlu mengubah permission file yang perlu ditulis oleh script web. Kekurangannya, jika ada masalah security, penyerang memiliki akses untuk memodifikasi file milik user.&lt;br /&gt;
&lt;br /&gt;
==Mengubah Permission File==&lt;br /&gt;
&lt;br /&gt;
Untuk mengubah permission file, dapat dilakukan melalui:&lt;br /&gt;
&lt;br /&gt;
* [[File Manager]] (melalui menu Set Permssions - Read Write)&lt;br /&gt;
* FTP/SFTP (dengan perintah chmod 777)&lt;br /&gt;
* Shell/SSH (dengan perintah chmod 777)&lt;br /&gt;
&lt;br /&gt;
==chmod 777???==&lt;br /&gt;
&lt;br /&gt;
Beberapa pihak keberatan dengan chmod 777. Untuk itu telah kami tulis penjelasan kami di dokumen [[chmod 777]].&lt;br /&gt;
&lt;br /&gt;
==Melarang Eksekusi Script Yang Dimiliki 'www user'==&lt;br /&gt;
&lt;br /&gt;
Untuk meningkatkan keamanan, pengguna juga bisa mengaktifkan opsi 'Prevent execution of scripts owned by web user'. Dengan opsi ini, script yang diupload oleh sesama script akan tidak dapat dieksekusi.&lt;br /&gt;
&lt;br /&gt;
Jika ada celah keamanan di script anda, biasanya penyerang akan menggunakan celah tersebut untuk mengupload script lain. Dengan menyalakan opsi ini, script milik penyerang tersebut menjadi tidak dapat dijalankan.&lt;br /&gt;
&lt;br /&gt;
Kelemahannya, ada beberapa CMS yang memiliki fungsi untuk mengupload software tambahan seperti plugin, theme, module, extension, dll. Terkadang ada software tambahan berupa script yang diakses dan dieksekusi langsung, dan tidak akan dapat dieksekusi jika opsi ini dinyalakan. Pada kebanyakan kasus, ini tidak menjadi masalah karena script biasanya di-include oleh script CMS, dan tidak dieksekusi langsung.&lt;br /&gt;
&lt;br /&gt;
Beberapa CMS seperti Wordpress dan Joomla memiliki fungsi untuk mengupload software tambahan melalui FTP, sehingga masalah ini dapat dihindari sepenuhnya.&lt;br /&gt;
&lt;br /&gt;
[[Kategori:Web]]&lt;br /&gt;
[[Kategori:Pengaturan &amp;amp; Upload]]&lt;/div&gt;</summary>
		<author><name>Docs</name></author>	</entry>

	<entry>
		<id>https://docs.indoglobal.com/wiki/Permission</id>
		<title>Permission</title>
		<link rel="alternate" type="text/html" href="https://docs.indoglobal.com/wiki/Permission"/>
				<updated>2016-01-02T19:10:02Z</updated>
		
		<summary type="html">&lt;p&gt;Docs: ←Membuat halaman berisi '==Model Security==  Di sistem {{indoglobal}}, terdapat dua jenis model security yang dapat diubah melalui menu 'Web Security' di Control Panel:  ====Split web user...'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Model Security==&lt;br /&gt;
&lt;br /&gt;
Di sistem {{indoglobal}}, terdapat dua jenis model security yang dapat diubah melalui menu 'Web Security' di [[Control Panel]]:&lt;br /&gt;
&lt;br /&gt;
====Split web user (default)====&lt;br /&gt;
&lt;br /&gt;
Dengan [[Split web user]], script web dijalankan dengan 'user www'. Ini mirip dengan user 'nobody', 'www' atau 'apache' jika menggunakan web server Linux biasa. Perbedaannya, setiap user di sistem {{indoglobal}} memiliki 'user www' masing-masing. Contoh: jika user anda adalah u777xxx, maka 'user www' anda adalah u777xxx_www.&lt;br /&gt;
&lt;br /&gt;
Kelebihannya adalah lebih aman. Jika terjadi masalah security pada script yang digunakan, penyerang tidak memiliki permission untuk memodifikasi script. Konsekuensinya pengguna perlu mengubah permission file yang perlu ditulis oleh script web.&lt;br /&gt;
&lt;br /&gt;
====Tanpa split web user====&lt;br /&gt;
&lt;br /&gt;
Jika split web user dinonaktifkan, script web dijalankan sama dengan username pengguna. Contoh: Jika username anda u777xxx, maka script web juga dijalankan dengan username u777xxx. Ini adalah model security yang umum berlaku pada kebanyakan web hosting lain.&lt;br /&gt;
&lt;br /&gt;
Kelebihannya, pengguna tidak perlu mengubah permission file yang perlu ditulis oleh script web. Kekurangannya, jika ada masalah security, penyerang memiliki akses untuk memodifikasi file milik user.&lt;br /&gt;
&lt;br /&gt;
==Mengubah Permission File==&lt;br /&gt;
&lt;br /&gt;
Untuk mengubah permission file, dapat dilakukan melalui:&lt;br /&gt;
&lt;br /&gt;
* [[File Manager]] (melalui menu Set Permssions - Read Write)&lt;br /&gt;
* FTP/SFTP (dengan perintah chmod 777)&lt;br /&gt;
* Shell/SSH (dengan perintah chmod 777)&lt;br /&gt;
ntu&lt;br /&gt;
==chmod 777???==&lt;br /&gt;
&lt;br /&gt;
Beberapa pihak keberatan dengan chmod 777. Untuk itu telah kami tulis penjelasan kami di dokumen [[chmod 777]].&lt;br /&gt;
&lt;br /&gt;
==Melarang Eksekusi Script Yang Dimiliki 'www user'==&lt;br /&gt;
&lt;br /&gt;
Untuk meningkatkan keamanan, pengguna juga bisa mengaktifkan opsi 'Prevent execution of scripts owned by web user'. Dengan opsi ini, script yang diupload oleh sesama script akan tidak dapat dieksekusi.&lt;br /&gt;
&lt;br /&gt;
Jika ada celah keamanan di script anda, biasanya penyerang akan menggunakan celah tersebut untuk mengupload script lain. Dengan menyalakan opsi ini, script milik penyerang tersebut menjadi tidak dapat dijalankan.&lt;br /&gt;
&lt;br /&gt;
Kelemahannya, ada beberapa CMS yang memiliki fungsi untuk mengupload software tambahan seperti plugin, theme, module, extension, dll. Terkadang ada software tambahan berupa script yang diakses dan dieksekusi langsung, dan tidak akan dapat dieksekusi jika opsi ini dinyalakan. Pada kebanyakan kasus, ini tidak menjadi masalah karena script biasanya di-include oleh script CMS, dan tidak dieksekusi langsung.&lt;br /&gt;
&lt;br /&gt;
Beberapa CMS seperti Wordpress dan Joomla memiliki fungsi untuk mengupload software tambahan melalui FTP, sehingga masalah ini dapat dihindari sepenuhnya.&lt;br /&gt;
&lt;br /&gt;
[[Kategori:Web]]&lt;br /&gt;
[[Kategori:Pengaturan &amp;amp; Upload]]&lt;/div&gt;</summary>
		<author><name>Docs</name></author>	</entry>

	<entry>
		<id>https://docs.indoglobal.com/wiki/Internationalized_Domain_Name</id>
		<title>Internationalized Domain Name</title>
		<link rel="alternate" type="text/html" href="https://docs.indoglobal.com/wiki/Internationalized_Domain_Name"/>
				<updated>2015-12-31T10:53:31Z</updated>
		
		<summary type="html">&lt;p&gt;Docs: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Dukungan IDN==&lt;br /&gt;
&lt;br /&gt;
Sistem {{indoglobal}} mendukung Internationalized Domain Name (IDN), yaitu nama domain yang mengandung karakter non latin. Contoh:&lt;br /&gt;
&lt;br /&gt;
* [http://أهلا.indoglobal.com أهلا.indoglobal.com]&lt;br /&gt;
* [http://你好.indoglobal.com 你好.indoglobal.com]&lt;br /&gt;
&lt;br /&gt;
Untuk menggunakan IDN pada subdomain silakan langsung buat subdomain dengan menginputkan nama subdomain dengan karakter non latin. Pengguna tidak perlu melakukan konversi secara manual, sistem akan secara otomatis melakukan konversi secara otomatis jika diperlukan oleh sistem.&lt;br /&gt;
&lt;br /&gt;
==Masalah URL IDN==&lt;br /&gt;
&lt;br /&gt;
Terkadang web browser akan secara otomatis mengkonversi domain IDN dari format Unicode (karakter non latin dapat terlihat) menjadi format Punycode (hasil encoding yang diawal dengan karakter 'xn--'). Hal ini dilakukan oleh web browser untuk menghindari penyalahgunaan yang berhubungan dengan URL yang mirip.&lt;br /&gt;
&lt;br /&gt;
Contohnya:&lt;br /&gt;
&lt;br /&gt;
* أهلا.indoglobal.com diubah menjadi xn--igbi0gl.indoglobal.com&lt;br /&gt;
* 你好.indoglobal.com diubah menjadi xn--6qq79v.indoglobal.com&lt;br /&gt;
&lt;br /&gt;
Hal ini dilakukan oleh web browser dan di luar kontrol {{indoglobal}}. Untuk lebih jelasnya silakan baca dokumentasi dari beberapa produsen web browser yang populer sebagai berikut:&lt;br /&gt;
&lt;br /&gt;
* [https://en.wikipedia.org/wiki/IDN_homograph_attack IDN homograph attack]&lt;br /&gt;
* [https://www.chromium.org/developers/design-documents/idn-in-google-chrome IDN in Google Chrome]&lt;br /&gt;
* [https://msdn.microsoft.com/en-us/library/dd565654(v=vs.85).aspx#allowable IDN Support (Internet Explorer) - Windows Internet Explorer and Allowable IDN Address]&lt;br /&gt;
&lt;br /&gt;
[[Kategori:Web]]&lt;br /&gt;
[[Kategori:Subdomain]]&lt;br /&gt;
[[Kategori:Pengaturan &amp;amp; Upload]]&lt;/div&gt;</summary>
		<author><name>Docs</name></author>	</entry>

	<entry>
		<id>https://docs.indoglobal.com/wiki/Internationalized_Domain_Name</id>
		<title>Internationalized Domain Name</title>
		<link rel="alternate" type="text/html" href="https://docs.indoglobal.com/wiki/Internationalized_Domain_Name"/>
				<updated>2015-12-31T10:41:32Z</updated>
		
		<summary type="html">&lt;p&gt;Docs: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sistem {{indoglobal}} mendukung Internationalized Domain Name (IDN), yaitu nama domain yang mengandung karakter non latin. Contoh:&lt;br /&gt;
&lt;br /&gt;
* [http://أهلا.indoglobal.com أهلا.indoglobal.com]&lt;br /&gt;
* [http://你好.indoglobal.com 你好.indoglobal.com]&lt;br /&gt;
&lt;br /&gt;
Untuk menggunakan IDN pada subdomain silakan langsung buat subdomain dengan menginputkan nama subdomain dengan karakter non latin. Pengguna tidak perlu melakukan konversi secara manual, sistem akan secara otomatis melakukan konversi secara otomatis jika diperlukan oleh sistem.&lt;br /&gt;
&lt;br /&gt;
[[Kategori:Web]]&lt;br /&gt;
[[Kategori:Subdomain]]&lt;br /&gt;
[[Kategori:Pengaturan &amp;amp; Upload]]&lt;/div&gt;</summary>
		<author><name>Docs</name></author>	</entry>

	</feed>