هل لدى PHP وظيفة لاكتشاف نظام التشغيل الذي يعمل عليه؟

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

  •  05-07-2019
  •  | 
  •  

سؤال

لا أعرف تحت الكلمة الرئيسية التي يجب البحث عنها في قاعدة بيانات PHP ، لذلك أسأل هنا.

السبب الذي أريد معرفته هو كيفية التعامل مع أنظمة التشغيل المختلفة مع خطوط جديدة في تدوينات النص.

أنا أستخدم ملف 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, ، على افتراض أن الخادم الخاص بك لديه محدث prowscap.ini

نصائح أخرى

*"بالمناسبة، NIX OS استخدام n كخط جديد. Mac use r ، windows - r n "

arrrgh! من فضلك توقف عن إدامة هذه الأسطورة!

استخدم Mac OS 9 ذلك منذ 10 سنوات ، لكن لم يعد أحد يستخدم OS9. Macs تستخدم نهايات خط يونيكس. ن. يجب أن تشير "MAC" المستخدم اليوم إلى أجهزة الكمبيوتر المعاصرة ، تمامًا كما يشير "Windows" إلى XP أو Vista ما لم يتم تأهيلها على خلاف ذلك.

إن قول Macs use 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 لإلقاء نظرة على الكثير من إعدادات التكوين في إعداد PHP الخاص بك ، رمز بسيط:

phpinfo();

على حد علمي ، إذا كان PHP يعمل على Windows ، فسيكون هناك متغير البيئة المسمى Windir. أعتقد أنه يمكنك القيام بذلك:

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

الكثير من الإجابات aleady ، ولكن هنا هو 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 - إرجاع معلومات حول نظام التشغيل الذي يعمل عليه PHP

لقد أحببت اقتراح PHP_OS أعلاه ، ولكن كن حذرا ، لكل ملاحظة من المستندات:

فكر في استخدام ثابت PHP_OS ، ولكن ضع في اعتبارك أن هذا الثابت سيحتوي على نظام التشغيل PHP كان مبني على.

من المحتمل أن يكون الشيء الأكثر أمانًا عند القراءة هو تحديد الخطوط (أحرف) إنهاء الخط من الملف نفسه ، أو قبول جميع نهايات الأسطر بالتبادل. هذا يحميك من الأذى إذا قمت بنسخ ملف CSV من جهاز إلى آخر مع نظام تشغيل مختلف. إذا قرأت قبل الكتابة ، يمكنك جعل نهايات خط الإخراج تتطابق مع نهايات الخط التي حددتها عند القراءة.

بالنسبة لملفات CSV ، لدى PHP بعض وظائف المكتبة. حاول البحث php.net عن fgetcsv و fputcsv. هناك Auto_detect_line_endings التي يمكن تعيينها في php.ini ، لكنني لا أعرف تفاصيل كيفية عملها.

أستخدم دائمًا " n" بنفسه على كل من Linux و Windows. أستخدم Notepad لتحريرها في 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 use r ، windows - r n

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top