Soru PHP CLI komut dosyasından giriş dizini nasıl alınır?


Komut satırından ev dizinini şu şekilde alabilirim:

~/

PHP CLI betiğimde ev dizinini nasıl alabilirim?

#!/usr/bin/php
<?php
echo realpath(~/);
?>

50
2017-12-12 22:33


Menşei




Cevaplar:


kullanım $_SERVER['HOME']


Düzenle:

Tamamlamak için ne olduğunu görün print_r($_SERVER)bana verdi, komut satırından idam edildi:

Array
(
    [TERM_PROGRAM] => Apple_Terminal
    [TERM] => xterm-color
    [SHELL] => /bin/bash
    [TMPDIR] => /var/folders/Lb/LbowO2ALEX4JTK2MXxLGd++++TI/-Tmp-/
    [TERM_PROGRAM_VERSION] => 272
    [USER] => felix
    [COMMAND_MODE] => unix2003
    [__CF_USER_TEXT_ENCODING] => 0x1F5:0:0
    [PATH] =>/Library/Frameworks/Python.framework/Versions/Current/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/texbin:/usr/X11/bin
    [PWD] => /Users/felix/Desktop
    [LANG] => de_DE.UTF-8
    [SHLVL] => 1
    [HOME] => /Users/felix
    [LOGNAME] => felix
    [DISPLAY] => /tmp/launch-XIM6c8/:0
    [_] => ./test_php2
    [OLDPWD] => /Users/felix
    [PHP_SELF] => ./test_php2
    [SCRIPT_NAME] => ./test_php2
    [SCRIPT_FILENAME] => ./test_php2
    [PATH_TRANSLATED] => ./test_php2
    [DOCUMENT_ROOT] => 
    [REQUEST_TIME] => 1260658268
    [argv] => Array
      (
        [0] => ./test_php2
      )

    [argc] => 1
    )

Umarım ilgili güvenlik bilgilerini açığa çıkarmam;)

Windows Uyumluluğu

Bunu not et $_SERVER['HOME'] Windows'ta mevcut değildir. Bunun yerine, değişken $_SERVER['HOMEDRIVE'] ve $_SERVER['HOMEPATH'].


59
2017-12-12 22:46



+1, bu basit soruya kaç kişinin aynı yanlış cevabı vermesi şaşırtıcıydı. - o0'.
Windows uyumluluğunda yayınladığınız değişkenlerden hiçbirini kullanmıyorum. Tüm SERVER dizisini döküyorum ve mevcut profilimi almanın bir yolu yok, belki de wamp sunucusunu başlatırken kullanılan yönetici hakları nedeniyle. Herhangi bir öneri? - erm3nda
@ erm3nda: Üzgünüm, Windows kullanmıyorum. Windows uyumluluğu ile ilgili bilgiler mauris tarafından eklendi. - Felix Kling
Son olarak php komut dosyasını çalıştırmak için% PROFILE% konumunu kullanarak ve argv [1] 'i php'ye iletmek için bir toplu iş dosyası kullandım. Bu yüzden şimdi bir php dosyasını partiye sürükleyebilir ve masaüstümü kullanarak çıkış yönlendiricisi olarak çalıştırabilirim. İyi değil, ama bulduğum benzersiz bir çözüm. Teşekkür ederim. - erm3nda
Deneyin getenv("HOME")Eğer $_SERVER ve $_ENV çalışma - Andrea


$ HOME değerini çevreden alabilirsiniz:

<?php
    $home = getenv("HOME");
?>

47
2017-08-04 18:54



Pencerelerde getenv büyük / küçük harfe duyarsızdır. Linux üzerinde iken, büyük / küçük harfe duyarlıdır. - CMCDragonkai
Bu, Mac OS X 10.10 Apache yüklememin boş dizesini döndürür. - Michael


Bu işlev Drush projesi.

/**
 * Return the user's home directory.
 */
function drush_server_home() {
  // Cannot use $_SERVER superglobal since that's empty during UnitUnishTestCase
  // getenv('HOME') isn't set on Windows and generates a Notice.
  $home = getenv('HOME');
  if (!empty($home)) {
    // home should never end with a trailing slash.
    $home = rtrim($home, '/');
  }
  elseif (!empty($_SERVER['HOMEDRIVE']) && !empty($_SERVER['HOMEPATH'])) {
    // home on windows
    $home = $_SERVER['HOMEDRIVE'] . $_SERVER['HOMEPATH'];
    // If HOMEPATH is a root directory the path can end with a slash. Make sure
    // that doesn't happen.
    $home = rtrim($home, '\\/');
  }
  return empty($home) ? NULL : $home;
}

5
2017-09-11 16:46





PHP, işletim sistemi kullanıcılarının herhangi birinin ev dizinini almanızı sağlar. 2 yol var.

Yöntem 1:

Her şeyden önce, OS Kullanıcı Kimliği'ni anlamanız ve bir yerde saklamanız gerekir (örneğin, veritabanı veya bir yapılandırma dosyası).

// Obviously this gotta be ran by the user which the home dir 
// folder is needed.
$uid = posix_getuid();

Bu kod biti, daha önce toplanan doğru hedef kullanıcı kimliğini geçtiğiniz sürece, herhangi bir işletim sistemi kullanıcısı, hatta normal web sunucusu www-data kullanıcısı tarafından çalıştırılabilir.

$shell_user = posix_getpwuid($uid);
print_r($shell_user);

belgeleme

2. Yöntem:

Posix_getpwuid () ile aynı mantık. Burada hedef kullanıcı adı yerine hedef işletim sistemi kullanıcı adını geçmelisiniz.

$shell_user = posix_getpwnam('johndoe');
print_r($shell_user);

belgeleme


2
2018-06-18 22:22



Benim için çalıştı. Sadece cevabına eklerim $shell_user['dir'] Ana dizin olarak konu konusu. - Hicaro


Nerede olduğunuzu ve yapmaya çalıştığınız yere bağlı.

$_SERVER Sunucu olmayan bir betik için tamamen güvenilmez, AMA $_ENV['HOME'] standart bir kabuk betiği için daha iyi olabilir. Her zaman olabilir print_r( $GLOBALS ) ve çevrenizle oynamanızı sağladığını görün. phpinfo() ayrıca bir CLI komut dosyasından çağrıldığında plaintxt dışarı çıkar ve sadece iyi ole php -i bir kabuktan yürütülürse aynısını yapacağız.


1
2017-07-26 18:42





Herhangi bir nedenle getenv('HOME') çalışmıyor veya sunucu işletim sistemi Windows, kullanabilirsiniz exec("echo ~") veya exec("echo %userprofile%") kullanıcı dizini almak için. Tabiki exec işlev mevcut olmalı (bazı hosting şirketleri güvenlik nedenlerinden dolayı bu tür fonksiyonları devre dışı bırakmaktadır, ancak bu gerçekleşmesi daha olası değildir).

Burada bir  deneyecek olan işlev $_SERVER, getenv ve sonunda exec işlevi var ve kullanıcı dizinini almak için uygun sistem komutunu kullanın:

function homeDir()
{
    if(isset($_SERVER['HOME'])) {
        $result = $_SERVER['HOME'];
    } else {
        $result = getenv("HOME");
    }

    if(empty($result) && function_exists('exec')) {
        if(strncasecmp(PHP_OS, 'WIN', 3) === 0) {
            $result = exec("echo %userprofile%");
        } else {
            $result = exec("echo ~");
        }
    }

    return $result;
}

1
2018-01-21 14:14





Bu yeni bir projede kullandığım yöntem:

exec('echo $HOME')

Bunu yaparak benim nesneme kaydettim:

$this->write_Path  = exec('echo $HOME');

Ama onu istediğin şekilde saklayabilirsin ve zaten uyuduğunu görüyorsun.


0
2018-03-08 17:40





$ _SERVER ['HOME'] ve getenv ('home') benim için çalışmadı.

Ancak, PHP 5.5+ üzerinde, bu dosyanın bulunduğu ana dizini vermek için çalıştı:

explode( '/', __FILE__ )[2]

-6
2018-03-20 18:17



Bu yaklaşımla ilgili sorun, kullanıcı giriş klasörlerinin her zaman / home / username konumunda bulunmamasıdır. Paylaşılan hosting üzerinde / home / storage / xxx / xxx / xxx / username gibi bir şey olabilir - Francisco Luz


Deneyin $_SERVER['DOCUMENT_ROOT'] ev dizininiz olarak.


-9
2017-11-29 18:39



StackOverflow'a hoş geldiniz. Lütfen bir göz atın biçimlendirme açıklaması biraz zamanın olduğunda. Teşekkür ederim. - phant0m
Bu yanlış yanlış. Hemen hemen tüm sitelerde, DocumentRoot! == $ HOME. Ancak OP, CLI'dan bahsediyor, burada $ _SERVER ['DOCUMENT_ROOT'] ayarlanamadı, çünkü alaka düzeyi yok. - spikyjt


dirname(__DIR__);

-12
2017-12-12 22:42



Bu sadece bir komut dosyası yol dizinidir. - Zebooka
Yüksek sesle gülün .. hahaha .. - Wilon