Есть ли у PHP функция обнаружения ОС, на которой она работает?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

я использую

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

Информацию о серверной операционной системе можно получить с php_uname() функции 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, чтобы посмотреть на многие параметры конфигурации в настройках PHP, код прост:

 phpinfo(); 

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

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

Много ответов aleady, но вот мои 2cents:

 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 – возвращает информацию об операционной системе, на которой работает 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'] будет ОС.

BTW, * nix OS использует \ n как новую строку. Mac использует \ r, Windows – \ r \ n