PHP - nasıl geçerli çağırma CLI veya web sunucusu olup olmadığını belirlemek için en iyi?

9 Cevap php

Ben PHP geçerli çağırma komut satırından (CLI) veya web sunucusu (mod_php ile benim durumumda, Apache) olup olmadığını belirlemek gerekir.

Herhangi önerilen yöntemler?

9 Cevap

php_sapi_name bunu arayüz tipi bir küçük dize döndürür olarak kullanmak isteyeceksiniz fonksiyonudur. Buna ek olarak, PHP sabit PHP_SAPI yoktur.

Belgeler burada bulunabilir: http://php.net/php_sapi_name

Örneğin, PHP CLI çalıştırmak olup olmadığını belirlemek için bu işlevi kullanabilirsiniz:

function isCommandLineInterface()
{
    return (php_sapi_name() === 'cli');
}

i bir web isteği bir yanıt ise PHP CLI çağrılan veya ediliyor eğer o demektir düşünüyorum. En iyi yolu kullanmak olacaktır

php_sapi_name()

which if it was running a web request would echo apache if that is what it was running. a list of a few:

*  aolserver
* apache
* apache2filter
* apache2handler
* caudium
* cgi
* cgi-fcgi
* cli
* Continuity
* embed
* isapi
* milter
* nsapi
* phttpd
* pi3web
* roxen
* thttpd
* tux
* webjames

Bu kullanmış:

php_sapi_name() == 'cli' || (is_numeric($_SERVER['argc']) && $_SERVER['argc'] > 0)

Bu drush kod temeli dan, environment.inc yaptıkları benzer çek var burada.

Denemek

isset($_SERVER['REQUEST_METHOD'])

Bu set eğer, bir tarayıcıda demektir.

Alternatlely, kontrol eğer

isset($_SERVER['argv'])

ama bu pencere CLI doğru olmayabilir, IDK.

http://jp2.php.net/manual/en/features.commandline.php göre CLI çalışan sadece set sabitleri vardır. Bu sabitler STDIN, STDOUT ve STDERR vardır. Bu cli modunda ise onlardan biri için test anlatacağım

Benim tercih yöntemi:

if (array_key_exists('SHELL', $_ENV)) {
  echo "Console invocation";
}
else {
  echo "HTTP invocation";
}

Ben $_SERVER dizisinin girdilerden bazıları ayarlanmış olup olmadığını kontrol etmek öneririz.

Örneğin:

if (isset($_SERVER['REQUEST_METHOD'])) {
        print "HTTP request\n";
} else {
        print "CLI invocation\n";
}

Bu (php-cgi dahil) tüm davalarını gerekir

return (php_sapi_name() === 'cli' OR defined('STDIN'));

Ben denemek istiyorum:

echo exec('whoami');

Genellikle websunucu farklı bir kullanıcı adıyla işletilmektedir, böylece söylüyorum olmalıdır.