Есть ли в PHP функция для определения ОС, на которой он работает? - PullRequest
9 голосов
/ 08 марта 2009

Я не знаю, по какому ключевому слову искать это в базе данных PHP, поэтому я спрашиваю здесь.

Причина, которую я хочу знать, заключается в том, что разные операционные системы обрабатывают новые строки в текстовых документах.

Я использую CSV-файл в Windows, но каждый раз, когда я думаю, что добавляю новую строку, в действительности происходит вставка новой строки в конец последней строки.

Причина в том, что в Windows новая строка такая: \r\n И файл CSVHandler.class.php, который я использую, добавляет только \n

Однако в MAC OS X это новая строка, которая отличается от Windows.

Итак, я ищу это, чтобы я мог реализовать простое утверждение if() и решить это. В настоящее время я жестко закодировал \r\n, но это должно быть проще, нет?

Ответы [ 13 ]

35 голосов
/ 18 марта 2009

* "Кстати, nix OS использует \ n в качестве новой строки. Mac использует \ r, Windows - \ r \ n "

ARRRGH! ПОЖАЛУЙСТА, ОСТАНОВИТЕСЬ, ЧТОБЫ ПРОДЕЛАТЬ ЭТОТ МИФ!

Mac OS 9 использовала это, как и 10 лет назад, но никто больше не использует OS9. MACS USE UNIX LINE ENDINGS. \ П. «Mac», используемый сегодня, должен относиться к современным компьютерам, так же как «Windows» относится к XP или Vista, если не указано иное.

Говорить о том, что Mac используют \ r, почти так же правильно, как и говорить, что «Windows работает поверх MS-DOS, поддерживает только файловую систему FAT16 и не поддерживает 64-битную версию».

Никто никогда не должен использовать \ r для чего-либо ни при каких обстоятельствах. Если только они не нацелены на старых маков.

14 голосов
/ 08 марта 2009

PHP включил константу PHP_EOL для решения стоящей перед вами проблемы, доступную с php 4.3.10 и PHP 5.0.2 - он содержит подходящую последовательность конца строки для сервера, которым является PHP работает на.

Если вы хотите использовать другую последовательность конца строки, подходящую для конкретного клиента, вам придется кодировать ее самостоятельно. Один из способов определения клиентской ОС - использовать get_browser , предполагая, что на вашем сервере установлена ​​последняя версия browscap.ini

12 голосов
/ 08 ноября 2010

Вы можете использовать предопределенную константу PHP_OS .

Я использую

if (PHP_OS === 'WINNT') {...}

5 голосов
/ 18 марта 2009

Информация об операционной системе сервера может быть получена с помощью функции php_uname():

echo 'I have been run on '.php_uname('s');

Также позволяет получить полную информацию о версии.

2 голосов
/ 19 ноября 2011

Насколько я знаю, если PHP работает в Windows, будет переменная окружения с именем WINDIR. Я думаю, что вы могли бы сделать это:

$isWindows = isset($_SERVER['WINDIR']);
2 голосов
/ 08 марта 2009

Вы также можете сделать вызов php info, чтобы взглянуть на многие параметры конфигурации в настройке PHP, код прост:

phpinfo();
2 голосов
/ 08 марта 2009

Проверьте переменную $ _SERVER.

echo "<pre>";
print_r($_SERVER);

Затем вы можете использовать strstr (или любую функцию сравнения строк), чтобы проверить, работаете ли вы в Windows. В этом примере я проверил SERVER_SIGNATURE, но вы можете использовать любой ключ, который вы хотите.

$isWindows = strstr($_SERVER[SERVER_SIGNATURE], "Win32") !== FALSE;
1 голос
/ 08 октября 2011

Я бы порекомендовал php_uname . Просто прочитайте объяснение из документов:

php_uname - возвращает информацию об операционной системе PHP работает на

Мне понравилось предложение PHP_OS выше, но будьте осторожны, согласно этой заметке из документов:

рассмотрите возможность использования константы PHP_OS, но имейте в виду эту константу будет содержать операционную систему PHP была встроенная вкл.

1 голос
/ 06 июля 2011

Очень много ответов, но вот мои 2цента:

function windows_server()
#   Purpose:    Check if server is Windows
{
    return in_array(strtolower(PHP_OS), array("win32", "windows", "winnt"));
}

## --------------------------------------------------------

function linux_server()
#   Purpose:    Check if server is Linux
{
    return in_array(strtolower(PHP_OS), array("linux", "superior operating system"));
}
0 голосов
/ 01 февраля 2010
$svr_os=strtolower(reset(explode(' ',php_uname('s'))));

$isLinux=$svr_os==='linux';

$isWindows=$svr_os==='windows';
...