PHP 5.4.31 Released

Çeşitli Sorular

Burada, belli bir sınıfa dahil edilemeyen sorulara yer verilmiştir.

.bz2 uzantılı kılavuzları Windows üzerinde nasıl açabilirim?

bz2 dosyalarla çalışabilen bir arşivleme aracına sahip değilseniz komut satırı araçlarını » indirebilirsiniz (ayrıntılar için aşağıya bakınız).

Bir komut satırı aracı kullanmak istemezseniz, » Stuffit Expander, » UltimateZip, » 7-Zip, » Quick Zip gibi özgür araçları deneyebilirsiniz. » WinRAR veya » Power Archiver gibi araçlara sahipseniz onlar da bz2 dosyaları açabilmektedir. Total Commander (eskisi: Windows Commander) kullanıyorsanız, bz2 eklentisini » Total Commander sitesinden ücretsiz edinebilirsiniz.

Red Hat'in bzip2 komut satırı aracı:

Win2k Sp2 kullanıcıları için en son sürüm 1.0.2, tüm diğer Windows kullanıcıları için 1.00'dır. İndirdikten sonra çalıştırılabilirin ismini bzip2.exe yapın ve C harfi Windows'un kurulu olduğu sürücüyü belirtmek üzere C:\Windows dizinine koyun.

php_manual_dil.x.bz2 (dil: sizin diliniz, x: istenen biçim, chm gibi) arşiv dosyasının sıkıştırmasını açmak için şu talimatları izleyin:

  • Bir komut istemi penceresi açın.
  • İndirdiğiniz php_manual_dil.x.bz2 dosyasının bulunduğu dizine geçin.
  • php_manual_dil.x.bz2 arşiv dosyasının içeriğini genişletmek için şu komutu verin: bzip2 -d php_manual_dil.x.bz2

İndirdiğiniz php_manual_dil.x.bz2 dosyasının çok sayıda HTML sayfası içermesi durumunda bu işlem sonucunda php_manual_dil.tar adında bir dosya elde edeceksiniz. Tar biçemi » WinZip gibi pek çok Windows arşivleme aracı tarafından bilinmektedir.

asort() gibi bazı işlev bildirimlerinde değiştirgenin başındaki & neyin nesidir?

Bu, değiştirgenin gönderimli aktarıldığı anlamına gelir ve ilgili belgelerde de açıklandığı gibi işlev bunu değiştirecektir. Bu yolla sadece değişkenleri aktarabilirsiniz ve işlev çağrısında değiştirgenin başına & yerleştirmenize gerek yoktur (ve bu artık önerilmemektedir).

register_globals ile nasıl çalışacağım?

register_globals ile ilgili güvenlik kaygıları hakkında bilgi edinmek için güvenlik kısmında bulunan register_globals kullanımı bölümüne bakınız.

register_globals yerine süper küreselleri kullanmanız önerilir.

Eğer register_globals'in kapalı olduğu bir paylaşımlı konak üzerindeyseniz ve bu seçeneğin etkin olmasını gerektiren bazı eski uygulamaları kullanmanız gerekiyorsa veya bu özelliğin etkin olduğu bir barındırma sunucusundaysanız fakat güvenlikle ilgili riske girmek istemiyorsanız PHP ile zıt ayarları taklit etmeniz gerekebilir. PHP'nin yapılandırmasını değiştirmenin mümkün olup olmadığını önce bir sormanızda fayda var. Eğer mümkün değilse, aşağıdaki uyumluluk kodlarını kullanabilirsiniz:

Örnek 1 register_globals'in taklit edilmesi

Bu örnekte register_globals=On durumu taklit edilmektedir. Eğer variables_order yönergenizde değişiklik yaparsanız değişikliği $superglobals değişkenine de yansıtmalısınız.

<?php
// register_globals=on'u taklit edelim
if (!ini_get('register_globals')) {
    
$superglobals = array($_SERVER$_ENV,
        
$_FILES$_COOKIE$_POST$_GET);
    if (isset(
$_SESSION)) {
        
array_unshift($superglobals$_SESSION);
    }
    foreach (
$superglobals as $superglobal) {
        
extract($superglobalEXTR_SKIP);
    }
}
?>

Bu örnekte ise register_globals=Off durumu taklit edilmektedir. Bu kodu betiğinizin oldukça baş taraflarına veya oturum başlatmak için kullandığınız session_start() çağrısından sonra yerleştirmeniz gerektiğini aklınızdan çıkarmayın.

<?php
// register_globals=off'u taklit edelim
function unregister_GLOBALS()
{
    if (!
ini_get('register_globals')) {
        return;
    }

    
// Daha hoş hatalar almak için bunu değiştirebilirsiniz
    
if (isset($_REQUEST['GLOBALS']) || isset($_FILES['GLOBALS'])) {
        die(
'GLOBALS geçersizleştirme çabası algılandı');
    }

    
// unset edilmemesi gereken değişkenler
    
$noUnset = array('GLOBALS',  '_GET',
                     
'_POST',    '_COOKIE',
                     
'_REQUEST''_SERVER',
                     
'_ENV',     '_FILES');

    
$input array_merge($_GET,    $_POST,
                         
$_COOKIE$_SERVER,
                         
$_ENV,    $_FILES,
                         isset(
$_SESSION) && is_array($_SESSION) ? $_SESSION : array());

    foreach (
$input as $k => $v) {
        if (!
in_array($k$noUnset) && isset($GLOBALS[$k])) {
            unset(
$GLOBALS[$k]);
        }
    }
}

unregister_GLOBALS();

?>

add a note add a note

User Contributed Notes 3 notes

up
1
doerr at apkk dot de
3 years ago
If you only needed register_globals for get/post variables, the effictive solution for 5.3 is:
  import_request_variables("GPC", "");

But if the skripts relied on session_register() you'll have to do more:
- Replace all variables that appeared after session_register with _SESSION equivalents - so $myvar becomes $_SESSION['myvar']
- Take care if your variables appeared inside strings - 'Hello $user !' works, but 'Hello $_SESSION['user'] !' not - so you have to concatenate the string: 'Hello '.$_SESSION['user'] .' !'
- Session variables in function declarations (for whatever purpose) will not work - keeping the old (local) names will work in most cases.
- Finally, replace the session_register(..) line with session_start()
up
1
php at REMOVEMEkennel17 dot co dot uk
9 years ago
Regarding simulating register_globals = off, note that it is impossible to adequately prevent $_SESSION variables from being globalised, as the array (and thus the globals) are created on a call to session_start().  You would therefore have to 'undo' this when you start a session as using it at the start of your script will have no effect.

To avoid potential problems, use a prefix that is unique for all session variables (e.g. 'SESS_'), and only access them via the $_SESSION array.  The prefix ensures that you don't have a naming clash (and therefore a security risk) with any non-session globals.
up
0
markus
9 years ago
Considering the comment below. I think there's a way to avoid that "problem":

<?php
//
// $starttime is an example of a variable that we might need to define,
// even before, running the "register_globals OFF" emulator below.
//
list($msec, $sec) = explode(' ', microtime());
$starttime = ((float)$msec + (float)$sec);

//
// If register_globals is ON, ensure no unexpected globals are defined.
// ie. We'll try to emulate a register_globals OFF environment.
//
if( (bool)@ini_get('register_globals') )
{
   
$superglobals = array($_ENV, $_GET, $_POST, $_COOKIE, $_FILES, $_SERVER);
    if( isset(
$_SESSION) )
    {
       
array_unshift($superglobals, $_SESSION);
    }
   
$knownglobals = array(
       
//
        // Known PHP Reserved globals and superglobals:
        //
       
'_ENV',        'HTTP_ENV_VARS',
       
'_GET',        'HTTP_GET_VARS',
       
'_POST',    'HTTP_POST_VARS',
       
'_COOKIE',    'HTTP_COOKIE_VARS',
       
'_FILES',    'HTTP_FILES_VARS',
       
'_SERVER',    'HTTP_SERVER_VARS',
       
'_SESSION',    'HTTP_SESSION_VARS',
       
'_REQUEST',

       
//
        // Global variables used by this code snippet:
        //
       
'superglobals',
       
'knownglobals',
       
'superglobal',
       
'global',
       
'void',

       
//
        // Known global variables defined before this code snippet is reached.
        //
       
'starttime',
    );
    foreach(
$superglobals as $superglobal )
    {
        foreach(
$superglobal as $global => $void )
        {
            if( !
in_array($global, $knownglobals) )
            {
                unset(
$GLOBALS[$global]);
            }
        }
    }
}
?>

Note the stuff related to the $_SESSION array depends on whether the PHP session has been started or not. You might want to call session_start() before this point (or set session.auto_start ON).

HTH+ :)
To Top