Ne zaman PHP sabiti "PHP_EOL" kullanabilirim?

14 Cevap php

Bana geldi PHP_EOL ? I sometimes see this in code samples of PHP. Does this handle DOS/Mac/Unix endline issues? Most of the PHP I write is for generating HTML, and I use <br/> yerine gerçek satırsonlarının kullanımı, bu yüzden önce bu sabit kullanmadıysanız iyi bir fikir olduğu zaman.

14 Cevap

Evet, PHP_EOL görünürde bir çapraz platform uyumlu bir şekilde satır karakteri bulmak için kullanılır, bu yüzden DOS / Mac / Unix konuları ele almaktadır.

Eğer yeni bir satır istediğiniz zaman PHP_EOL kullanmak ve çapraz platform olmak istiyorum.

Eğer dosya sistemi (diğer günlükleri, ihracat) dosyaları yazarken bu olabilir.

Eğer oluşturulan HTML okunabilir olmasını istiyorsanız bunu kullanabilirsiniz. Yani bir PHP_EOL ile <br> takip olabilir.

Nerede cron bir komut dosyası olarak php çalışan eğer bunu kullanmak istiyorum ve çıkış şey için gerekli ve bir ekran için format olmak var.

Bazı biçimlendirme gerekli göndermek için anEmail kadar bina varsa nerede bunu kullanabilirsiniz.

main/php.h PHP sürümü 5.5.6 Gönderen:

#ifdef PHP_WIN32
#   include "tsrm_win32.h"
#   include "win95nt.h"
#   ifdef PHP_EXPORTS
#       define PHPAPI __declspec(dllexport)
#   else
#       define PHPAPI __declspec(dllimport)
#   endif
#   define PHP_DIR_SEPARATOR '\\'
#   define PHP_EOL "\r\n"
#else
#   if defined(__GNUC__) && __GNUC__ >= 4
#       define PHPAPI __attribute__ ((visibility("default")))
#   else
#       define PHPAPI
#   endif
#   define THREAD_LS
#   define PHP_DIR_SEPARATOR '/'
#   define PHP_EOL "\n"
#endif

Eğer PHP_EOL (başka bir şey) veya "\n" (Windows sunucuları üzerinde) "\r\n" olabilir görebilirsiniz. PHP sürümleri prior 5.4.0RC8 üzerine, olası üçüncü bir değer vardı PHP_EOL: "\r" (MacOSX sunucularda). Bu yanlıştı ve bug 61193 ile 2012-03-01 üzerinde sabit olmuştur.

İsterseniz birleşik newlines: - Diğerleri zaten söyledim gibi, PHP_EOL çıkışı (HTML, XML, günlükler ... gibi bu değerlerin geçerli olduğu) her türlü kullanabilirsiniz (ve bence bu istesin).

Henüz burada gösterilmemiştir çünkü ben sadece PHP_EOL PHP kaynaklar tarafından desteklenmektedir possibles değerlerini göstermek istedim ...

PHP_EOL tanımı size üzerinde çalıştığınız işletim sisteminin satır karakteri vermesidir.

Uygulamada, bu ihtiyacı neredeyse asla. Birkaç olguyu göz önünde bulundurun:

  • Eğer web çıktısı zaman, gerçekten tutarlı olması gerektiğini dışında herhangi bir kuralı yoktur. Çoğu sunucular Unixy olduğundan, yine bir "\ n" kullanmak isteyeceksiniz.

  • Eğer bir dosyaya çıkış ediyorsanız, PHP_EOL iyi bir fikir gibi görünebilir. Ancak, dosya içinde değişmez bir yeni satır olan, benzer bir etkiyi elde edebilirsiniz, ve bir çift önyükleme sistemi ile bir adam olarak (mevcut satırsonlarını clobbering olmadan Unix bazı CRLF formatlı dosyaları çalıştırmak için çalışıyorsanız bu size yardımcı olacaktır , ben) ikinci davranışı tercih olduğunu söyleyebiliriz

PHP_EOL kadar gülünç uzun gerçekten bunu kullanarak değer değil olmasıdır.

PHP_EOL (string) The correct 'End Of Line' symbol for this platform. Available since PHP 4.3.10 and PHP 5.0.2

Eğer okumak veya sunucunun dosya sistemi üzerinde metin dosyalarını yazarken bu sabiti kullanabilirsiniz.

Çoğu yazılım kökenine bakılmaksızın metin dosyalarını işleme kapasitesine sahip olarak satır sonları çoğu durumda bir önemi yok. Eğer kodu ile tutarlı olmalı.

Satır sonları önemli ise, açıkça yerine sabit kullanarak satır sonlarını belirtmek. Örneğin:

  • HTTP başlıkları must \r\n ile ayrılabilir
  • CSV dosyaları should \r\n satır ayırıcı olarak kullanılacak

Ben size bir dosya içine birden çok içerik satırları yazarken, eğer özel dosya işleme için PHP_EOL çok yararlı buldum.

Örneğin, siz düz dosyasına yazarken birden çok satıra girmeye isteyen uzun bir dize var. \ R \ n kullanarak bunu basitçe komut içine PHP_EOL koymak çalışmak ve sonuç harika olmayabilir.

Aşağıda bu basit örneği inceleyin:

<?php

$output = 'This is line 1' . PHP_EOL .
          'This is line 2' . PHP_EOL .
          'This is line 3';

$file = "filename.txt";

if (is_writable($file)) {
    // In our example we're opening $file in append mode.
    // The file pointer is at the bottom of the file hence
    // that's where $output will go when we fwrite() it.
    if (!$handle = fopen($file, 'a')) {
         echo "Cannot open file ($file)";
         exit;
    }
    // Write $output to our opened file.
    if (fwrite($handle, $output) === FALSE) {
        echo "Cannot write to file ($file)";
        exit;
    }
    echo "Success, content ($output) wrote to file ($file)";
    fclose($handle);
} else {
    echo "The file $file is not writable";
}
?>

Yararlı olabilecek bir açık yer var: Eğer kod yazarken o ağırlıklı tek tırnak dizeleri kullanır. Onun gibi tartışılabilir olsun:

echo 'A $variable_literal that I have'.PHP_EOL.'looks better than'.PHP_EOL;  
echo 'this other $one'."\n";

Bunun sanat tutarlı olmaktır. Karışımı ve eşleştirme ile sorun'' ve "" uzun dizeleri olsun, sen gerçekten kullanılan alıntı ne tür için avcılık gitmek zorunda istemiyorum olmasıdır.

Hayatta her şey gibi, bu bağlamda bağlıdır.

DOS / Windows standart "satır" (= \ r \ n) olup LFCR (\ n \ r) CRLF. Davranışları: Biz ikincisi koyarsanız, bazı (! D de, aslında, bir tür beklenen) beklenmeyen üretmek olasıdır.

Günümüzde hemen hemen tüm (iyi yazılmış) programları bile gönderen cinleri (RFC newline başlıkları ve mesaj gövdesi gibi CRLF'yi setleri) gönder, satır kod için UNIX standardı LF (\ n) kabul.

Ben henüz kapalı olmamıştır ve tahmin edebileceğiniz gibi körü körüne kullanılan ve hiç kimse orada fark ediliyor bir sorun kadar sonra ise "not Ne zaman kullanılır" gideren bir cevap atmak istiyorum satır aşağı. Bu bazıları biraz mevcut bazı yanıtları çelişmektedir.

HTML, <textarea> özellikle metinde bir web sayfasına çıktısı ise, <pre> veya <code> Muhtemelen her zaman {\n kullanmak istemiyorsanız [(4)]}.

Bunun nedeni, kod bir sever üzerinde iyi performans çalışabilir süre - bir Windows ana (örneğin, Windows Azure platformu) üzerinde konuşlanmış eğer o sayfalar bazı tarayıcılarda nasıl görüntülendiğini değiştirebilir - Unix-benzeri bir platform olması umulur (özellikle Internet Explorer - Bazı sürümleri hangi \ n ve \ r hem de göreceksiniz).

Bu hala IE6 veya beri bir sorun olup olmadığından emin değilim, bu yüzden oldukça tartışmalı olabilir ama istemi insanların bağlamında düşünmeye yardımcı olur kayda değer görünüyor. Orada suddently bazı platformlarda \r 'nin çıktısı çıkışı ile sorunlara neden olabilir (örneğin sıkı XHTML gibi) diğer durumlar olabilir, ve ben gibi diğer kenar durumlarda vardır eminim olabilir.

Onlar her zaman her platformda RFC takip gerektiği gibi - zaten birisi tarafından belirtildiği gibi, HTTP başlıklarını iade ederken kullanmak istemem.

(Birisi önerdi gibi) CSV dosyaları sınırlayıcı gibi bir şey için kullanmak olmaz. Sever üzerinde çalıştığı platformu oluşturulan veya tüketilen dosyalarında satır sonlarını belirlemek gerekir.

Error_log () Birden çok çizgi çıktısı eğer kullanışlı.

Ben hata ayıklama ifadeleri bir sürü dizeleri kesiliyor zaman geliştiriciler unix sonlar kabul beri yüklemek benim pencerelerde garip bakmak buldum.

Ben yazmak zorunda kaldım bazı komut satırı betikleri PHP_EOL sabitini kullanın. Benim yerel Windows makine geliştirmek ve daha sonra bir Linux sunucu kutusunda test edin. Demek sabiti kullanılarak Ben farklı platformlarda her biri için bitiş doğru satırını kullanarak hakkında endişelenmenize gerek yoktu.

Jumi (PHP için joomla eklentisi) bu kod tüm backslash'lar kaldırır nedense kodunuzu derler zaman. Öyle ki $csv_output .= "\n"; olur $csv_output .= "n"; gibi bir şey

Çok sinir bozucu hata!

Bütün bunlardan sonra sonuç almak yerine PHP_EOL kullanın.

Siz ağırlıklı olarak tek tırnak dizeleri kullanan bir kod yazıyoruz.

echo 'A $variable_literal that I have'.PHP_EOL.'looks better than'.PHP_EOL;  
echo 'this other $one'."\n";

Ben \ n \ r kullanmayı tercih. Ayrıca ben bir pencere sistemi duyuyorum ve \ n benim deneyim gayet güzel çalışıyor.

PHP_EOL düzenli ifadeler ile çalışmak değildir, ve bu metin ile ilgili en yararlı yoldur beri, o zaman ben gerçekten kullanılmış veya hiç ihtiyacım yoktu.