How to get contoller / action segments like codeigniter

Today I needed get action segments like codeigniter. I searched this  on web but didnt found any solution as I want.

normaly you can use action parameters like that ;

/yourapp/controller/action/param1/param2/param3

when you need to get this params , Yii giving  param1=param2, and param3=

class TestController extends CController
{
public function actionUriTest(){
print_r($_GET);
}
}

when we call /yiiapp/test/uritest/param1/param2/param3

Output ;
Array ( [param1] => param2 [param3] => )

but we want to get like that something;  $this->uri->segment(2) ;  return value param1.

I got CodeIgniter URI Class and changed  a few parts of code.

First of all, create URI.php under protected/components/  and copy/paste below code.

<?php

class URI extends CComponent {

/**
* List of cached uri segments
*
* @var array
* @access public
*/
var    $keyval            = array();
/**
* Current uri string
*
* @var string
* @access public
*/
var $uri_string;
/**
* List of uri segments
*
* @var array
* @access public
*/
var $segments        = array();
/**
* Re-indexed list of uri segments
* Starts at 1 instead of 0
*
* @var array
* @access public
*/
var $rsegments        = array();

var $permitted_uri_chars = "a-z 0-9~%.:_\-";

var $enable_query_strings = false;

/**
| 'AUTO'            Default - auto detects
| 'PATH_INFO'        Uses the PATH_INFO
| 'QUERY_STRING'    Uses the QUERY_STRING
| 'REQUEST_URI'        Uses the REQUEST_URI
| 'ORIG_PATH_INFO'    Uses the ORIG_PATH_INFO
*/
var $uri_protocol = "AUTO"; //

/**
* Constructor
*
* Simply globalizes the $RTR object.  The front
* loads the Router class early on so it's not available
* normally as other classes are.
*
* @access    public
*/
function init()
{
$this->uri_string = $this->_detect_uri();
$this->_explode_segments();
}

// --------------------------------------------------------------------

/**
* Get the URI String
*
* @access    private
* @return    string
*/
function _fetch_uri_string()
{
$uri = "";
if ($this->uri_protocol == 'AUTO')
{
// Is the request coming from the command line?
if (php_sapi_name() == 'cli' or defined('STDIN'))
{
$this->_set_uri_string($this->_parse_cli_args());
return;
}

// Let's try the REQUEST_URI first, this will work in most situations
if ($uri = $this->_detect_uri())
{
$this->_set_uri_string($uri);
return;
}

// Is there a PATH_INFO variable?
// Note: some servers seem to have trouble with getenv() so we'll test it two ways
$path = (isset($_SERVER['PATH_INFO'])) ? $_SERVER['PATH_INFO'] : @getenv('PATH_INFO');
if (trim($path, '/') != '' && $path != "/".SELF)
{
$this->_set_uri_string($path);
return;
}

// No PATH_INFO?... What about QUERY_STRING?
$path =  (isset($_SERVER['QUERY_STRING'])) ? $_SERVER['QUERY_STRING'] : @getenv('QUERY_STRING');
if (trim($path, '/') != '')
{
$this->_set_uri_string($path);
return;
}

// As a last ditch effort lets try using the $_GET array
if (is_array($_GET) && count($_GET) == 1 && trim(key($_GET), '/') != '')
{
$this->_set_uri_string(key($_GET));
return;
}

// We've exhausted all our options...
$this->uri_string = '';
return;
}

if ($uri == 'REQUEST_URI')
{
$this->_set_uri_string($this->_detect_uri());
return;
}

$path = (isset($_SERVER[$uri])) ? $_SERVER[$uri] : @getenv($uri);
$this->_set_uri_string($path);
}

// --------------------------------------------------------------------

/**
* Set the URI String
*
* @access    public
* @param     string
* @return    string
*/
function _set_uri_string($str)
{
// Filter out control characters
//$str = remove_invisible_characters($str, FALSE);

// If the URI contains only a slash we'll kill it
$this->uri_string = ($str == '/') ? '' : $str;
}

// --------------------------------------------------------------------

/**
* Detects the URI
*
* This function will detect the URI automatically and fix the query string
* if necessary.
*
* @access    private
* @return    string
*/
private function _detect_uri()
{
if ( ! isset($_SERVER['REQUEST_URI']) OR ! isset($_SERVER['SCRIPT_NAME']))
{
return '';
}

$uri = $_SERVER['REQUEST_URI'];
if (strpos($uri, $_SERVER['SCRIPT_NAME']) === 0)
{
$uri = substr($uri, strlen($_SERVER['SCRIPT_NAME']));
}
elseif (strpos($uri, dirname($_SERVER['SCRIPT_NAME'])) === 0)
{
$uri = substr($uri, strlen(dirname($_SERVER['SCRIPT_NAME'])));
}

// This section ensures that even on servers that require the URI to be in the query string (Nginx) a correct
// URI is found, and also fixes the QUERY_STRING server var and $_GET array.
if (strncmp($uri, '?/', 2) === 0)
{
$uri = substr($uri, 2);
}
$parts = preg_split('#\?#i', $uri, 2);
$uri = $parts[0];
if (isset($parts[1]))
{
$_SERVER['QUERY_STRING'] = $parts[1];
parse_str($_SERVER['QUERY_STRING'], $_GET);
}
else
{
$_SERVER['QUERY_STRING'] = '';
$_GET = array();
}

if ($uri == '/' || empty($uri))
{
return '/';
}

$uri = parse_url($uri, PHP_URL_PATH);

// Do some final cleaning of the URI and return it
return str_replace(array('//', '../'), '/', trim($uri, '/'));
}

// --------------------------------------------------------------------

/**
* Parse cli arguments
*
* Take each command line argument and assume it is a URI segment.
*
* @access    private
* @return    string
*/
private function _parse_cli_args()
{
$args = array_slice($_SERVER['argv'], 1);

return $args ? '/' . implode('/', $args) : '';
}

// --------------------------------------------------------------------

/**
* Filter segments for malicious characters
*
* @access    private
* @param    string
* @return    string
*/
function _filter_uri($str)
{
if ($str != '' && $this->permitted_uri_chars != '' && $this->enable_query_strings == FALSE)
{
// preg_quote() in PHP 5.3 escapes -, so the str_replace() and addition of - to preg_quote() is to maintain backwards
// compatibility as many are unaware of how characters in the permitted_uri_chars will be parsed as a regex pattern
if ( ! preg_match("|^[".str_replace(array('\\-', '\-'), '-', preg_quote($this->permitted_uri_chars, '-'))."]+$|i", $str))
{
show_error('The URI you submitted has disallowed characters.', 400);
}
}

// Convert programatic characters to entities
$bad    = array('$',        '(',        ')',        '%28',        '%29');
$good    = array('&#36;',    '&#40;',    '&#41;',    '&#40;',    '&#41;');

return str_replace($bad, $good, $str);
}

/**
* Explode the URI Segments. The individual segments will
* be stored in the $this->segments array.
*
* @access    private
* @return    void
*/
function _explode_segments()
{
foreach (explode("/", preg_replace("|/*(.+?)/*$|", "\\1", $this->uri_string)) as $val)
{
// Filter segments for security
$val = trim($this->_filter_uri($val));

if ($val != '')
{
$this->segments[] = $val;
}
}
}

// --------------------------------------------------------------------
/**
* Re-index Segments
*
* This function re-indexes the $this->segment array so that it
* starts at 1 rather than 0.  Doing so makes it simpler to
* use functions like $this->uri->segment(n) since there is
* a 1:1 relationship between the segment array and the actual segments.
*
* @access    private
* @return    void
*/
function _reindex_segments()
{
array_unshift($this->segments, NULL);
array_unshift($this->rsegments, NULL);
unset($this->segments[0]);
unset($this->rsegments[0]);
}

// --------------------------------------------------------------------

/**
* Fetch a URI Segment
*
* This function returns the URI segment based on the number provided.
*
* @access    public
* @param    integer
* @param    bool
* @return    string
*/
function segment($n, $no_result = FALSE)
{
return ( ! isset($this->segments[$n])) ? $no_result : $this->segments[$n];
}

// --------------------------------------------------------------------

/**
* Fetch a URI "routed" Segment
*
* This function returns the re-routed URI segment (assuming routing rules are used)
* based on the number provided.  If there is no routing this function returns the
* same result as $this->segment()
*
* @access    public
* @param    integer
* @param    bool
* @return    string
*/
function rsegment($n, $no_result = FALSE)
{
return ( ! isset($this->rsegments[$n])) ? $no_result : $this->rsegments[$n];
}

// --------------------------------------------------------------------

/**
* Generate a key value pair from the URI string
*
* This function generates and associative array of URI data starting
* at the supplied segment. For example, if this is your URI:
*
*    example.com/user/search/name/joe/location/UK/gender/male
*
* You can use this function to generate an array with this prototype:
*
* array (
*            name => joe
*            location => UK
*            gender => male
*         )
*
* @access    public
* @param    integer    the starting segment number
* @param    array    an array of default values
* @return    array
*/
function uri_to_assoc($n = 3, $default = array())
{
return $this->_uri_to_assoc($n, $default, 'segment');
}
/**
* Identical to above only it uses the re-routed segment array
*
* @access     public
* @param     integer    the starting segment number
* @param     array    an array of default values
* @return     array
*
*/
function ruri_to_assoc($n = 3, $default = array())
{
return $this->_uri_to_assoc($n, $default, 'rsegment');
}

// --------------------------------------------------------------------

/**
* Generate a key value pair from the URI string or Re-routed URI string
*
* @access    private
* @param    integer    the starting segment number
* @param    array    an array of default values
* @param    string    which array we should use
* @return    array
*/
function _uri_to_assoc($n = 3, $default = array(), $which = 'segment')
{
if ($which == 'segment')
{
$total_segments = 'total_segments';
$segment_array = 'segment_array';
}
else
{
$total_segments = 'total_rsegments';
$segment_array = 'rsegment_array';
}

if ( ! is_numeric($n))
{
return $default;
}

if (isset($this->keyval[$n]))
{
return $this->keyval[$n];
}

if ($this->$total_segments() < $n)
{
if (count($default) == 0)
{
return array();
}

$retval = array();
foreach ($default as $val)
{
$retval[$val] = FALSE;
}
return $retval;
}

$segments = array_slice($this->$segment_array(), ($n - 1));

$i = 0;
$lastval = '';
$retval  = array();
foreach ($segments as $seg)
{
if ($i % 2)
{
$retval[$lastval] = $seg;
}
else
{
$retval[$seg] = FALSE;
$lastval = $seg;
}

$i++;
}

if (count($default) > 0)
{
foreach ($default as $val)
{
if ( ! array_key_exists($val, $retval))
{
$retval[$val] = FALSE;
}
}
}

// Cache the array for reuse
$this->keyval[$n] = $retval;
return $retval;
}

// --------------------------------------------------------------------

/**
* Generate a URI string from an associative array
*
*
* @access    public
* @param    array    an associative array of key/values
* @return    array
*/
function assoc_to_uri($array)
{
$temp = array();
foreach ((array)$array as $key => $val)
{
$temp[] = $key;
$temp[] = $val;
}

return implode('/', $temp);
}

// --------------------------------------------------------------------

/**
* Fetch a URI Segment and add a trailing slash
*
* @access    public
* @param    integer
* @param    string
* @return    string
*/
function slash_segment($n, $where = 'trailing')
{
return $this->_slash_segment($n, $where, 'segment');
}

// --------------------------------------------------------------------

/**
* Fetch a URI Segment and add a trailing slash
*
* @access    public
* @param    integer
* @param    string
* @return    string
*/
function slash_rsegment($n, $where = 'trailing')
{
return $this->_slash_segment($n, $where, 'rsegment');
}

// --------------------------------------------------------------------

/**
* Fetch a URI Segment and add a trailing slash - helper function
*
* @access    private
* @param    integer
* @param    string
* @param    string
* @return    string
*/
function _slash_segment($n, $where = 'trailing', $which = 'segment')
{
$leading    = '/';
$trailing    = '/';

if ($where == 'trailing')
{
$leading    = '';
}
elseif ($where == 'leading')
{
$trailing    = '';
}

return $leading.$this->$which($n).$trailing;
}

// --------------------------------------------------------------------

/**
* Segment Array
*
* @access    public
* @return    array
*/
function segment_array()
{
return $this->segments;
}

// --------------------------------------------------------------------

/**
* Routed Segment Array
*
* @access    public
* @return    array
*/
function rsegment_array()
{
return $this->rsegments;
}

// --------------------------------------------------------------------

/**
* Total number of segments
*
* @access    public
* @return    integer
*/
function total_segments()
{
return count($this->segments);
}

// --------------------------------------------------------------------

/**
* Total number of routed segments
*
* @access    public
* @return    integer
*/
function total_rsegments()
{
return count($this->rsegments);
}

// --------------------------------------------------------------------

/**
* Fetch the entire URI string
*
* @access    public
* @return    string
*/
function uri_string()
{
return $this->uri_string;
}

// --------------------------------------------------------------------

/**
* Fetch the entire Re-routed URI string
*
* @access    public
* @return    string
*/
function ruri_string()
{
return '/'.implode('/', $this->rsegment_array());
}

}
// END URI Class

Installation URI component;

copy/past below code to under components your yii config file

'uri' => array(
'class'=>'application.components.URI',
),

and be sure

'import'=>array(
'application.models.*',
'application.components.*',
),

Now you can get action segments. Example Code is below;
For this url  http://localhost/yiiapp/test/uri/param1/param2/param3


<?php

class TestController extends CController
{
public function actionUri(){
//return all segments
$segments = Yii::app()->uri->segment_array();
print_r($segments);

//For get param1
echo Yii::app()->uri->segment(2);

//For get param2
echo Yii::app()->uri->segment(3);
}
}
?>

Enjoy it.

Windows’ta JAVA_HOME Variable tanımlama

Windows’a Java Runtime Environment (JRE) kurulumu yaptıktan sonra , JAVA_HOME ortam değişkenini tanımlamamız gerekir. bu değişken java programının bilgisayar üzerindeki yolunu gösterir.

Adım 1. JAVA kurulumu yaptığımız dizin yolunu bulalım

 bu dizin yolu bende C:\Program Files (x86)\Java\jre7  şeklinde. sizde “program files” veya başka bir yere kurduysanız JAVA’nın dizin yolunu bulun.

Adım 2. JAVA_HOME Değişlenini tanımlayalım
 
1. Bilgisayarım  ikonuna sağ tıklayıp Özellikler seçeneğini açalım.
2. Advanced (İleri Düzey) seçeneğini tıklayalım.
3. Buradan  Environment Variables (Ortam Değişkeni) butonuna tıklayalım.
4. System Variables (Sistem Değişkenleri), altındaki  New(Yeni). butonuna basalım.
5. Değişken adına JAVA_HOME olarak girelim.
6. Değer (Variable Value) kısmınada birinci adımda bulmuş olduğumuz JAVA dizin yolunu girelim.
7. Tamam’a tıklayıp çıkalım.
8.Değişiklikleri Uygula butonuna basalım.
10.eğer değişiklikler aktif olmadıysa bilgisayarı yeniden başlatalım.

Windows 7’ye elasticsearch kurulumu

windows üzerinde elasticsearch kurulumundan önce windows üzerinde linux tarzı komutları kullanabileceğimiz bir platform kuralım. bunun için Cygwin programını kullanacağız.

Cygwin Kurulumu

kurulum için aşağıdaki adımları uygulayalım

  • Programı indirelim  Cygwin.
  • setup.exe dosyasını çalıştırıp next butonuna basalım.
  • “Install from Internet” seçeneğini seçip next’e basalım.
  • kurulacağı dizini seçelim, örneğin: C:\cygwin  daha sonra next’e basalım.
  • indirilecek olan paket dosyalarının nereye ineceğini seçip next’e basalım.
  • internet bağlantı seçeneğini işaretleyip next’e basalım.
  • listedeki mirror adreslerinden birisini seçip devam edelim.
  • şimdi şu programların kurulumunu yapabiliriz: cygutils (Utils), vim (Editors), openssh, openssl, inetutils (Net), curl (Libs, Net, Web), unzip (Archives)  next’e basarak devam edelim.
  • kurulum bittikten sonra finish düğmesine basarak işlemi bitirelim.

ElasticSearch kurulumu ve çalıştırılması

elasticsearch kurulumu için bu işlermlerde önce java.com üzerinden java’nın son sürümünü indirin. daha sonra aşağıdaki adımları uygula.

  • download sayfasından elasticsearch’ı indirelim. indir .
  • zip’li dosyayı açalım. örnek : (c:\elasticsearch\)
  • başlat menüsünden cmd yazıp windowsun command programını açalım.  c:\elasticsearch\bin\elasticsearch.bat  dosyasını çalıştıralım.
  • eğer “JAVA_HOME environment variable must be set” şeklinde bir hata aldıysanız windows’ta variable tanımlama adımlarıyla nasıl tanımlayacağınızı öğrenebilirsiniz.
  • Cygwin Programını çalıştıralım (Menu Start > All Proograms > Cygwin > Cygwin Bash Shell)
  • Cygwin bash shell üzerinden şu komutu çalıştıralım curl -X GET http://localhost:9200/
  • kurulum bittikten sonra elasticsearch servislere eklemek için ; windows komut satırını açıp şu komutu çalıştıralım  c:\elasticsearch klasörü\bin\service.bat install

Centos 6 SVN Sürümünü 1.6 dan 1.7’ye yükseltme

Centos 6 64bit sunucuda denenmiştir.

1-  Dag Wieers key import edelim:

rpm --import http://dag.wieers.com/rpm/packages/RPM-GPG-KEY.dag.txt

2- rpmforge repo kurulumunu yapalım:
rpm -Uvh http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm

3- subversion (SVN) kurulumunu gerçekleştirelim:
yum install --enablerepo=rpmforge,rpmforge-extras subversion

svnserve –version   komutulu ile versiyonu görebiliriz.

Virtual Memory Size LFD Alerts Hatası

Time:         Tue Feb 11 01:13:27 2014 +0200
Account:      ellerime
Resource:     Virtual Memory Size
Exceeded:     219 > 200 (MB)
Executable:   /usr/bin/php
Command Line: /usr/bin/php /home/yoursite/public_html/index.php
PID:          5729 (Parent PID:5655)
Killed:       No
Sizede böyle uyarı mesajları alıyorsanız ve mail kuyruğunuzda bu tarz içerikli e-postalar ile dolduysa şu işlemleri yapınız,
Whm ye giriş yapın
CSF de Firewall Configuration ‘a gir. 
PT_USERMEM değeri var bu değeri bul 200 ise 400 yap/yükselt yada 0 değeri vererek kapatabilirsin.
Sonra CSF + LFD restart yaparak işlemi tamamlıyoruz.

Cpanel / WHM 2082 – 2083 default portalarını değiştirmek

cpanel portunu değiştirmek için  dosyasını nano yada vi ile eçıp /var/cpanel/cpanel.config file. şu satırı bulun
--------------------
port=2082
----------------------
kullanmak istediğiniz portu yazıp değişikliğin aktif olması için aşağıdaki komutu çalıştırın:

# /usr/local/cpanel/whostmgr/bin/whostmgr2 --updatetweaksettings
# /etc/init.d/httpd restart

WHM/Cpanel – Apache – MySQL hata (error) log’larının yolu

WHM/Cpanel Kurulumunda Apache – MySQL hata (error) log’larının yolu ;

 

Apache Logs

General Error and Auditing Logs:
Dosya : /usr/local/apache/logs/error_log

Site Erişim Log Dosyası:
Dosya : /usr/local/apache/domlogs/domain.com
Açıklama : bütün domainlerin loglarını bu şekilde bulabilirsiniz.

Apache Erişim Log Dosyası:
Dosya : /usr/local/apache/logs/access_log
Açıklama : Web Sunucusuna gelen bütün isteklerin(Request) log larına buradan ulaşılabilir.

MySQL Logs

MySQL Error Logs:
Dosya : /var/lib/mysql/$(hostname).err
Açıklama : MySQL yolu genelde şu şekildedir: /var/lib/mysql. log dosyası:  /var/log/mysqld.log

Mac OS X mysql’e bağlanamama hatası

Warning: mysql_connect(): No such file or directory in /Library/WebServer/Documents/wall/includes/db.php on line 6 Hata:No such file or directory  şeklinde bir hata alıyorsanız php mysql i görmüyor demektir.

sorunun çözümü için phpinfo(); komutunu index.php gibi bir dosya içerisine atıp http://localhost/index.php  şeklinde çalıştırıp PHP bilgilerine ulaşalım.  mysql.default_socket ibaresini arayıp karşısında yazan datayı not edelim(ör: /var/mysql/mysql.sock). buradaki mysql.sock dosyası belirtilen path’de olmadığı için bu hatayı alıyoruz. Okumaya devam et