На основании предыдущего ответа я создал функцию, которая также может обрабатывать скобки. Но в них нет точек из-за раскола.
function get(obj, str) {
return str.split(/\.|\[/g).map(function(crumb) {
return crumb.replace(/\]$/, '').trim().replace(/^(["'])((?:(?!\1)[^\\]|\\.)*?)\1$/, (match, quote, str) => str.replace(/\\(\\)?/g, "$1"));
}).reduce(function(obj, prop) {
return obj ? obj[prop] : undefined;
}, obj);
}
Используйте функцию php_sapi_name()
.
if (php_sapi_name() == "cli") {
// In cli-mode
} else {
// Not in cli-mode
}
Вот некоторые важные примечания из документов:
php_sapi_name - возвращает тип интерфейса между веб-сервером и PHP
. Хотя это не исчерпывающее, возможные возвращаемые значения включают aolserver, apache, apache2filter, apache2handler, caudium, cgi (до PHP 5.3), cgi-fcgi, cli, cli-server , непрерывность, встраивание, isapi, litespeed, milter, nsapi, phttpd, pi3web, roxen, thttpd, tux и webjames.
blockquote>В PHP> = 4.2.0 также существует предопределенный константа,
PHP_SAPI
, которая имеет то же значение, что иphp_sapi_name()
.
На странице документации для php_sapi
_name четко указано, как это работает:
Возвращает строчную строку, описывающую тип интерфейса (API-интерфейс сервера, SAPI), который использует PHP. ..
Хотя это и не является исчерпывающим, возможные возвращаемые значения включают aolserver, apache, apache2filter, apache2handler, caudium, cgi (до PHP 5.3), cgi-fcgi, cli, непрерывность, встраивание, isapi, litespeed, milter , nsapi, phttpd, pi3web, roxen, thttpd, tux и webjames.
blockquote>Я не уверен, почему hop не думает, что PHP для серьезных программистов (я серьезно программист, и я использую PHP ежедневно), но если он хочет помочь прояснить документацию, возможно, он сможет проверить все возможные веб-серверы, на которых может работать PHP, и определять имена всех возможных типов интерфейсов для каждого сервера. Просто убедитесь, что этот список обновлен по мере добавления новых веб-серверов и интерфейсов.
Кроме того, Бобби сказал:
Я заинтригован, почему документ. пример проверяет первые 3 символа, в то время как в описании указано, что строка должна быть точно «CGI»
blockquote>В описании для примера указано:
В этом примере проверяется для подстроки cgi, поскольку она также может быть cgi-fcgi.
blockquote>
Я думаю, что
$_SERVER['REMOTE_ADDR']
не будет заполняться из CLI.
Кроме того, все ключи HTTP_ * в суперглобальном файле $ _SERVER не будут заполнены из CLI , или сделайте это правильно, как только что упомянул: -)
Это всегда будет работать. (Если версия PHP равна 4.2.0 или выше)
define('CLI', PHP_SAPI === 'cli');
, что упрощает использование в верхней части ваших скриптов:
<?php PHP_SAPI === 'cli' or die('not allowed');
CLI or die('not allowed');
– Madbreaks
9 January 2013 в 06:35
CLI or die('not allowed');
идеально.
– Xeoncross
9 January 2013 в 19:16
Which makes it easy to use at the top of your scripts
на самом деле не звучит как два отдельных использования. Да, я некромант.
– George Dimitriadis
8 June 2017 в 10:08
Вот реализация Drupal 7: drupal_is_cli () :
function drupal_is_cli() {
return (!isset($_SERVER['SERVER_SOFTWARE']) && (php_sapi_name() == 'cli' || (is_numeric($_SERVER['argc']) && $_SERVER['argc'] > 0)));
}
Однако Drupal 8 рекомендует с помощью PHP_SAPI === 'cli'