zend framework 1.12 menjalankan di folder localhost dan menghilangkan nama folder public

Alhamdulilah bagi-bagi ilmu gan, menjalankan web dengan framework zf 1 dengan memanggil folder project localhost tanpa tulisan public, adapun pengaturan yang perlu di sesuaikan yakni file index.php dan htaccess yang berada di direktori public, di pindahkan ke folder root.

Kemudian sesuaikan isi file-file tersebut menjadi seperti dibawah.

index.php

<?php

// Define path to application directory
defined('APPLICATION_PATH')
|| define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/application'));

// Define application environment
defined('APPLICATION_ENV')
|| define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'production'));

// Ensure library/ is on include_path
set_include_path(implode(PATH_SEPARATOR, array(
realpath(APPLICATION_PATH . '/../library'),
get_include_path(),
)));

/** Zend_Application */
require_once 'Zend/Application.php';

//
require_once 'Zend/Config/Ini.php';
require_once 'Zend/Registry.php';
require_once 'Zend/Db.php';
require_once 'Zend/Db/Table/Abstract.php';
require_once 'Zend/Filter/Input.php';

// get params db from application.ini
$config = new Zend_Config_Ini('application/configs/application.ini', 'db');

// set database configuration parameters
$adapter = $config->db->adapter;
$params = $config->db->params;

// initialize database
$db = Zend_Db::factory($adapter, $params);

// set database as default
Zend_Db_Table_Abstract::setDefaultAdapter($db);

// save database object in Zend_Registry
Zend_Registry::set('db', $db);

// get params db1 from application.ini
$config = new Zend_Config_Ini('application/configs/application.ini', 'db1');

// set database configuration parameters
$adapter = $config->db1->adapter;
$params = $config->db1->params;

// initialize database
$db1 = Zend_Db::factory($adapter, $params);

// set database as default
Zend_Db_Table_Abstract::setDefaultAdapter($db1);

// save database object in Zend_Registry
Zend_Registry::set('db1', $db1);

// Create application, bootstrap, and run
$application = new Zend_Application(
APPLICATION_ENV,
APPLICATION_PATH . '/configs/application.ini'
);

$application->bootstrap()
->run();

.htaccess

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} -s [OR] 
RewriteCond %{REQUEST_FILENAME} -l [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule ^.*$ - [NC,L] 
RewriteCond %{REQUEST_URI}::$1 ^(/.+)(.+)::\2$ 
RewriteRule ^(.*)$ - [E=BASE:%1] 
RewriteRule ^(.*)$ %{ENV:BASE}index.php [NC,L]

untuk mendefinisikan alamat utama agar dapat digunakan untuk tautan dan penglokasian asset. tambahkan helper mainUrl(); untuk mendefinisikan lokasi utama.

<?php
class Zend_View_Helper_MainUrl extends Zend_View_Helper_Abstract
{

function __construct()
{
$fc = Zend_Controller_Front::getInstance();
}

function MainUrl()
{
$str = "http://" . $_SERVER['SERVER_NAME'] . "/fingercenter-test/";
return $str;
}

}

kemudian coba panggil alamat url localhost/namafolder/, tanpa menuliskan nama folder public.

semoga bermanfaat wassalam.

Multiple Database Adapter di Zendframework

Zendframework memfasilitasi untuk penggunaan lebih dari satu database dengan beda jenis. penjelasan koding supaya bisa akses koneksi ke banyak database caranya seperti dibawah ini.

Edit file application.ini menjadi seperti berikut.

[db]
db.adapter = "mysqli"
db.params.host = "localhost"
db.params.username = "root"
db.params.password = ""
db.params.dbname = "hello"

[db1]
db1.adapter = "mysqli"
db1.params.host = "localhost"
db1.params.username = "root"
db1.params.password = ""
db1.params.dbname = "world"

Pada file index.php di folder public tambahkan script berikut.

// get params db1 from application.ini
$config = new Zend_Config_Ini('../application/configs/application.ini', 'db1');

// set database configuration parameters
$adapter = $config->db1->adapter;
$params = $config->db1->params;

// initialize database
$db1 = Zend_Db::factory($adapter, $params);

// set database as default
Zend_Db_Table_Abstract::setDefaultAdapter($db1);

// save database object in Zend_Registry
Zend_Registry::set('db1', $db1);

 

Untuk selanjutnya pemanggilan fungsi database seperti peggunaan biasanya. semoga bermanfaat wassalam.

Tutorial Zendframework 3

using-zf3

 

Zendframework 3 saat ini merupakan versi terbarunya dari zend. sudah barang tentu akan ada banyak perubahan dan perbaikan dari versi sebelumnya. bagi yang berminat untuk belajar untuk menggunakan ini. sebagai referensi anda bisa mengujungi alamat website.

https://olegkrivtsov.github.io/using-zend-framework-3-book/html/.

walaupun masih berupa web html, cukup lumayan buat referensi bacaan ketika perlu. semoga bermanfaat.  wassalam.

ZF 1 – erorr Captcha font tidak muncul

Disana jalan kok disini ga jalan? hampir semua mahluk yang bergelut dalam pemrograman php pernah mengalaminya.

Ketika selesai di instal dan buka halaman login muncul seperti normal tapi tulisan captcha nya kok jadi ga keluar.

zf-captcha-text-tidak-muncul

Terkejut dan heran, perasaan sudah bener. sehingga curiga pada kode berikut.

include_once(“Zend/Captcha/image.php”);
include_once(“Zend/loader.php”);

$captcha = new Zend_Captcha_Image();
$captcha->setWordLen(‘4′)
->setHeight(’60’)
->setFont(‘arial.ttf’)
->setImgDir(‘captcha’)
->setDotNoiseLevel(‘5’)
->setLineNoiseLevel(‘5’);

dan kemudian setelah di telusuri, ketemu lah solusi permasalahnnya. yakni dengan merubah kodenya menjadi seperti ini.

include_once(“Zend/Captcha/image.php”);
include_once(“Zend/loader.php”);

$captcha = new Zend_Captcha_Image();
$captcha->setWordLen(‘4′)
->setHeight(’60’)
->setFont(APPLICATION_PATH . ‘/../public/arial.ttf’)
->setImgDir(‘captcha’)
->setDotNoiseLevel(‘5’)
->setLineNoiseLevel(‘5’);

dan selesailah masalah diatas.

zf-captcha-text-muncul

semoga bermanfaat. wassalam.

 

Solusi zend warning: is_readable(): open_basedir restriction in effect.

Jika menemukan error zend warning: is_readable(): open_basedir restriction in effect. maka solusinya adalah dengan merubah kode terkait.

public static function isReadable($filename)
{
if (is_readable($filename)) {
// Return early if the filename is readable without needing the
// include_path
return true;
}

//added the if, basically to skip any absolute filename path
if(!is_readable(dirname($filename)))
foreach (self::explodeIncludePath() as $path) {
if ($path == ‘.’) {
if (is_readable($filename)) {
return true;
}
continue;
}
$file = $path . ‘/’ . $filename;
if (is_readable($file)) {
return true;
}
}

return false;
}

 

Seketika error tersebut pun hilang…

Membuat htaccess dengan multi nama domain untuk satu dokumen website

Pada umumnya sebuah domain memiliki satu dokumen website, namun beberapa kasus ada beberapa domain hanya memiliki satu dokumen, untuk pilihan solusi mari kita pelajari bersama.

Sebagai contoh, saya asumsikan sebuah perusahaan memiliki dua buah domain yakni

http://endangcahyapermana.com

dan

http://endangcahyapermana.net

kedua alamat tersebut mengacu pada sebuah dokumen website, bisa jadi kondisinya adalah satu yang asli, satunya lagi alias.

maka kode di htaccess agar dapat mengakses pada satu dokumen website adalah seperti contoh berikut.

RewriteEngine on

RewriteCond %{HTTP_HOST} ^endangcahyapermana.com/$ [NC,OR]
RewriteCond %{HTTP_HOST} ^endangcahyapermana.com$
RewriteCond %{REQUEST_URI} !public/
RewriteRule (.*) /public/$1 [L]

RewriteCond %{HTTP_HOST} ^endangcahyapermana.net/$ [NC,OR]
RewriteCond %{HTTP_HOST} ^endangcahyapermana.net$
RewriteCond %{REQUEST_URI} !public/
RewriteRule (.*) /public/$1 [L]

dengan demikian anda bisa memiliki dua nama domain untuk sebuah dokumen website.

semoga bermanfaat, wassalam.

 

 

Upload multi file dengan menggunakan zend framework 1

Upload file merupakan salah satu proses di dalam dunia web, berikut merupakan contoh script php untuk upload multi file dengan menggunakan framework zend 1. bagi yang tidak menggunakan framework ini, anda bisa skip.

// init upload file value
$file_1 = ”;
$file_2 = ”;
$file_3 = ”;
$file_4 = ”;

$upload = new Zend_File_Transfer_Adapter_Http();
// Limit the extensions to jpg and png files but use array notation
$upload->addValidator(‘Extension’, false, array(‘png’, ‘jpg’, ‘bmp’, ‘pdf’, ‘zip’, ‘rar’));
$adapter->addValidator(‘Size’, false, 3024000); // limit to 3 Mb

// set dest
$upload->setDestination(APPLICATION_PATH. “/../public/uploads/”);
$files = $upload->getFileInfo();

// init array info name
$arrInfoNames = array();

foreach($files as $file => $fileInfo) {

if ($upload->isUploaded($file)) {

if ($upload->isValid($file)) {
//
$info = $upload->getFileInfo($file);

// jika nama file sama dengan nama sebelumnya
// file akan dianggap sama dengan file sebelumnya
if(!in_array($info[$file][‘name’], $arrInfoNames)) {

// rename
$arrFileName = explode(‘.’,$info[$file][‘name’]);
$file_name = $this->view->SetToURI(
strtolower($arrFileName[0])) . ‘.’ . $arrFileName[1];
$file_name = date(“Ymdhis”) . rand() . “-” . $file_name;
$upload->addFilter(‘Rename’,
APPLICATION_PATH . “/../public/uploads/” . $file_name);

// And then we call receive manually
$upload->receive($file);

// simpan nama file di array info
// untuk pengecekan duplikasi nama file
$arrInfoNames[] = $info[‘name’];

// set value table
if(array_key_exists(‘file_1’, $info))
$file_1 = $file_name;
if(array_key_exists(‘file_2’, $info))
$file_2 = $file_name;
if(array_key_exists(‘file_3’, $info))
$file_3 = $file_name;
if(array_key_exists(‘file_4’, $info))
$file_4 = $file_name;

}

}
}
}

pada contoh di atas, file yang bisa diupload adalah 4 file, jika ingin lebih banyak lagi file yang akan diupload anda bisa edit kode diatas dan tambahkan file uploadnya. wassalam.

Menangani application.ini tidak terpanggil di Zendframework 1.12

Pada beberapa layanan hosting fungsi untuk pemanggilan file ini tidak izinkan alias di disabled dengan alasan keamanan atau belum tersetting. Akibatnya, zendframework tidak bisa berjalan karena konfigurasi ini tidak terpanggil seperti bawaan seharusnya.

Untuk itu beberapa jurus alternatif harus di keluarkan, caranya adalah dengan melakukan suntikan langsung pada library/zend/config/ini.php di zend untuk file ini. sehingga mengalami perubahan kode menjadi berikut.

protected function _parseIniFile($filename)
{
set_error_handler(array($this, ‘_loadFileErrorHandler’));
// $iniArray = parse_ini_file($filename, true); // Warnings and errors are suppressed
$iniArray = array
(
“production” => array (
“phpSettings.display_startup_errors” => 1,
“phpSettings.display_errors” => 1,
“includePaths.library” => APPLICATION_PATH . “../library”,
“bootstrap.path” => APPLICATION_PATH . “/Bootstrap.php”,
“bootstrap.class” => “Bootstrap”,
“appnamespace” => “Application”,
“resources.frontController.controllerDirectory” => APPLICATION_PATH . “/controllers”,
“resources.frontController.params.displayExceptions” => 1,
“phpSettings.date.timezone” => “Asia/Jakarta”,
“resources.layout.layoutPath” => APPLICATION_PATH . “/layouts/scripts”,
“resources.view” => array
(
0 => “”
)

),
“staging : production” => array
(
),
“testing : production” => array
(
“phpSettings.display_startup_errors” => 1,
“phpSettings.display_errors” => 1
),
“development : production” => array
(
“phpSettings.display_startup_errors” => 1,
“phpSettings.display_errors” => 1,
“resources.frontController.params.displayExceptions” => 1
),
“db” => array
(
“db.adapter” => “mysql”,
“db.params.host” => “localhost”,
“db.params.username” => “root”,
“db.params.password” => “”,
“db.params.dbname” => “mydb”
)

);

restore_error_handler();

Memang agak terlihat kurang rapih, tapi ini berhasil untuk di jalankan.

Wassalam.

Menjalankan Zendframework 1 Didalam Sub Folder

Secara default zendframework di operasikan dalam domain atau subdomain.
Namun, kadang kebutuhan bisa di panggil dalam sub folder. Agar dapat dijalankan dalam sub folder salah satu jalan adalah dengan melakukan konfigurasi pada htaccess pada direktory public seperti pada kode berikut.

RewriteCond %{REQUEST_FILENAME} !project/public/.*
RewriteRule ^project/(.*)$ project/public/$1 [NC,L]

RewriteCond %{REQUEST_FILENAME} !-s
RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ /project/public/index.php [NC,L]

semoga bermanfaat, wassalam.