PHP üzerinde çalıştığı işletim sistemi algılamak için bir işlevi var mı?

11 Cevap php

Ben PHP veritabanında bu ne aramak için anahtar kelime altında bilemeyiz, bu yüzden burada soruyorum.

Bilmek istiyorum nedeni farklı İşletim Sistemleri textdocuments yeni hatları ele nasıl olduğunu.

Ben pencerelerinde bir CSV dosyası kullanıyorum ama ben gerçekten ne yeni bir satır eklemek düşünmek her zaman yeni hat son hattının arkasına yapıştırılan alır olduğunu.

Reason is, in windows, a new line is this: \r\n And the CSVHandler.class.php file I'm using only adds \n

Ancak, MAC OS X bu pencerelerden farklı yeni hat, bu.

Yani bu kadar basit bir if() deyimi uygulamak ve bu çözebilir Bu arıyorum. Şu anda \r\n kodlanmış ettik, ama hayır, basit olmalıdır?

11 Cevap

PHP üzerinde çalıştığı sunucu için uygun bir uç-of-line dizisi içerir - PHP kullanılabilir PHP_EOL Eğer yüz sorunun çözümü için sabit, php 4.3.10 ve PHP 5.0.2 'den beri dahil etmiştir.

Belirli bir müşteri için uygun olan farklı bir sonu-line dizisi kullanmak istiyorsanız, o zaman bu kodu kendiniz gerekecek. Istemci işletim sistemi belirlemek için bir yolu sunucu bir up-to-date browscap.ini var varsayarak, get_browser kullanmak için

*"BTW, nix OS use \n as new line. Mac usees \r, Windows - \r\n"

Arrrgh! BU MİT DEVAM DUR LÜTFEN!

Mac OS 9 10 yıl önce olduğu gibi bu kullanılır, ama hiç kimse artık OS9 kullanır. MACS KULLANIM Unix satır sonları. \ N. Bugün kullanılan "Mac" "Windows" XP veya vista aksi nitelikli sürece başvurduğu gibi, çağdaş bilgisayarlara bakmalıdır.

Mac'ler r \ kullanmak söyleyerek söyleyerek gibi yaklaşık olarak doğru "Windows, MS-DOS üzerinde çalışan sadece FAT16 dosya sistemini destekler ve 64-bit desteği vardır."

Kimse şimdiye kadar herhangi bir koşulda herhangi bir şey için \ r kullanmalısınız. Onlar eski-ass Mac'ler hedefleme sürece.

Sen önceden tanımlanmış sabit PHP_OS kullanabilirsiniz.

I istimal

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

Sunucu işletim sistemi hakkında bilgi php_uname() fonksiyonu ile elde edilebilir:

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

Ayrıca sürümüne tam bilgi almak için izin verir.

$ _SERVER Değişkeni.

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

Daha sonra Windows üzerinde olup olmadığını kontrol etmek strstr (veya herhangi bir dize karşılaştırma işlevini) kullanabilirsiniz. Bu örnekte, ben SERVER_SIGNATURE kontrol ama sen istersen tuş kullanabilirsiniz.

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

Ayrıca PHP kurulumunda yapılandırma ayarlarının bir sürü bakmak için bir php info arama yapmak isteyebilirsiniz, kod basittir:

phpinfo();

PHP Windows üzerinde çalışıyorsa, bildiğim kadarıyla, WINDIR adında bir ortam değişkeni olacaktır. Bunu yapabileceğini düşünüyorum:

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

Burada aleady cevaplar bir sürü, ama 2cents olduğunu:

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"));
}

Ben tavsiye ederim php_uname. Sadece docs açıklamayı okuyun:

php_uname — Returns information about the operating system PHP is running on

I PHP_OS Yukarıdaki öneri gibi yaptım, ama dokümanlar bu notu başına, dikkatli olun:

consider using the PHP_OS constant, but keep in mind this constant will contain the operating system PHP was built on.

Muhtemelen okurken yapılacak en güvenli şey dosyanın kendisi bir karakter (ler) biten hat belirlemek, ya da birbirlerinin yerine tüm satır sonlarını kabul etmektir. Eğer bir makineden farklı bir işletim sistemi ile başka csv dosyayı kopyalamak bu kötülüklerden korur. Eğer yazmadan önce okursanız, size çıkış satır sonları okurken tespit satır sonları maç yapabilirsiniz.

CSV dosyaları için, php bazı kütüphane işlevleri vardır. Fgetcsv ve fputcsv için php.net arama yapmayı deneyin. Orada php.ini ayarlanabilir auto_detect_line_endings, ama nasıl çalıştığını özelliklerini bilmiyorum.

Ben her zaman hem Linux ve Windows üzerinde tek başına "\ n" kullanabilirsiniz. Ben windows bunları düzenlemek için not defteri kullanmak ve sonlar sonu yok. Csv benim kendi kullanımı için bunu farklı sonlar desteklemek için çok güçlük olduğunu bulmak, ama bir şey eğer kullanıcılar daha sonra yerine uygun daha güvenli olmak istiyorum ile etkileşim var.

Ayrıca, bu işlevi deneyin:

$b = get_browser(null, true);

ve $ b ['platform'] OS olacaktır.

BTW, * yeni bir satır olarak nix OS use \ n. Mac usees \ r Windows - \ r \ n