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

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

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

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

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

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

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

Ответы [ 13 ]

0 голосов
/ 28 ноября 2009
<?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;
?>
0 голосов
/ 08 марта 2009

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

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

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

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

Также попробуйте эту функцию:

$b = get_browser(null, true);

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

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

...