Есть ли в PHP функция для определения операционной системы, на которой он запущен?

StackOverflow https://stackoverflow.com/questions/623776

  •  05-07-2019
  •  | 
  •  

Вопрос

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

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

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

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

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

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

Это было полезно?

Решение

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

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

Другие советы

*"КСТАТИ, операционная система nix использует в качестве новой строки.Mac используйте , Windows - "

АРРРГХ!ПОЖАЛУЙСТА, ПРЕКРАТИТЕ УВЕКОВЕЧИВАТЬ ЭТОТ МИФ!

Mac OS 9 использовала это примерно 10 лет назад, но OS9 больше никто не использует.КОМПЬЮТЕРЫ MAC ИСПОЛЬЗУЮТ ОКОНЧАНИЯ СТРОК UNIX.\н.Используемый сегодня термин "Mac" должен относиться к современным компьютерам, точно так же, как "Windows" относится к XP или vista, если не указано иное.

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

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

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

Я использую

  

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

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

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

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

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

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

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

$isWindows = strstr($_SERVER[SERVER_SIGNATURE], "Win32") !== FALSE;

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

phpinfo();

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

$isWindows = isset($_SERVER['WINDIR']);

Ответов уже много, но вот мои 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"));
}

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

  

php_uname & # 8212; Возвращает информацию об операционной системе PHP   работает на

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

  

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

Вероятно, самое безопасное, что нужно сделать при чтении, - это определить символ (ы) конца строки из самого файла или принять все окончания строки взаимозаменяемо. Это защитит вас от вреда, если вы скопируете CSV-файл с одного компьютера на другой с другой ОС. Если вы читаете перед записью, вы можете сделать так, чтобы ваши выходные строки совпадали с окончаниями строк, которые вы определили при чтении.

Для файлов CSV php имеет некоторые библиотечные функции. Попробуйте поискать в php.net fgetcsv и fputcsv. Существует auto_detect_line_endings, который можно установить в php.ini, но я не знаю особенностей его работы.

Я всегда использую " \ n " сам по себе как на linux, так и на windows. Я использую блокнот, чтобы редактировать их в окнах, и это не нарушает окончаний. Что касается моего собственного использования csv, я обнаружил, что слишком сложно поддерживать разные концовки, но если это то, с чем пользователи должны взаимодействовать, тогда вы хотите быть безопасными, а не удобными.

$svr_os=strtolower(reset(explode(' ',php_uname('s'))));

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

$isWindows=$svr_os==='windows';
<?php
$OSList = array
(
        // Match user agent string with operating systems
        'Windows 3.11' => 'Win16',
        'Windows 95' => '(Windows 95)|(Win95)|(Windows_95)',
        'Windows 98' => '(Windows 98)|(Win98)',
        'Windows 2000' => '(Windows NT 5.0)|(Windows 2000)',
        'Windows XP' => '(Windows NT 5.1)|(Windows XP)',
        'Windows Server 2003' => '(Windows NT 5.2)',
        'Windows Vista' => '(Windows NT 6.0)',
        'Windows 7' => '(Windows NT 7.0)',
        'Windows NT 4.0' => '(Windows NT 4.0)|(WinNT4.0)|(WinNT)|(Windows NT)',
        'Windows ME' => 'Windows ME',
        'Open BSD' => 'OpenBSD',
        'Sun OS' => 'SunOS',
        'Linux' => '(Linux)|(X11)',
        'Mac OS' => '(Mac_PowerPC)|(Macintosh)',
        'QNX' => 'QNX',
        'BeOS' => 'BeOS',
        'OS/2' => 'OS/2',
        'Search Bot'=>'(nuhk)|(Googlebot)|(Yammybot)|(Openbot)|(Slurp)|(MSNBot)|(Ask Jeeves/Teoma)|(ia_archiver)'
);

// Loop through the array of user agents and matching operating systems
foreach($OSList as $CurrOS=>$Match)
{
        // Find a match
        if (eregi($Match, $_SERVER['HTTP_USER_AGENT']))
        {
                // We found the correct match
                break;
        }
}
// You are using Windows Vista
echo "You are using ".$CurrOS;
?>

Кроме того, попробуйте эту функцию:

$b = get_browser(null, true);

и в $ b ['platform'] будет ОС.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top