Hướng dẫn dùng php_eol trong PHP

answer

329

Hướng dẫn dùng php_eol trong PHP

Có, PHP_EOLdường như được sử dụng để tìm ký tự dòng mới theo cách tương thích đa nền tảng, do đó, nó xử lý các vấn đề về DOS / Unix.

Lưu ý rằng PHP_EOL đại diện cho ký tự endline cho hệ thống hiện tại . Chẳng hạn, nó sẽ không tìm thấy một dòng cuối Windows khi được thực thi trên một hệ thống giống như unix.

329 hữu ích 5 bình luận chia sẻ

answer

81

Hướng dẫn dùng php_eol trong PHP

Từ main/php.hphiên bản PHP 7.1.1 và phiên bản 5.6.30:

#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

Như bạn thấy PHP_EOLcó thể là "\r\n"(trên các máy chủ Windows) hoặc "\n"(trên bất cứ thứ gì khác). Trên các phiên bản PHP trước 5.4.0RC8, có một giá trị thứ ba có thể có PHP_EOL: "\r"(trên các máy chủ MacOSX). Nó đã sai và đã được sửa vào ngày 2012 / 03-01 với lỗi 61193 .

Như những người khác đã nói với bạn, bạn có thể sử dụng PHP_EOLtrong bất kỳ loại đầu ra nào (trong đó bất kỳ giá trị nào trong số này là hợp lệ - như: HTML, XML, nhật ký ...) trong đó bạn muốn các dòng mới thống nhất . Hãy nhớ rằng đó là máy chủ xác định giá trị chứ không phải máy khách. Khách truy cập Windows của bạn sẽ nhận được giá trị từ máy chủ Unix của bạn đôi khi gây bất tiện cho họ.

Tôi chỉ muốn hiển thị các giá trị sở hữu được PHP_EOLhỗ trợ bởi các nguồn PHP vì nó chưa được hiển thị ở đây ...

81 hữu ích 5 bình luận chia sẻ

answer

79

Hướng dẫn dùng php_eol trong PHP

Bạn sử dụng PHP_EOLkhi bạn muốn một dòng mới và bạn muốn trở thành nền tảng chéo.

Điều này có thể là khi bạn đang ghi tập tin vào hệ thống tập tin (nhật ký, xuất, khác).

Bạn có thể sử dụng nó nếu bạn muốn HTML được tạo của mình có thể đọc được. Vì vậy, bạn có thể làm theo của bạn <br />với a PHP_EOL.

Bạn sẽ sử dụng nó nếu bạn đang chạy php dưới dạng tập lệnh từ cron và bạn cần xuất ra một cái gì đó và để nó được định dạng cho màn hình.

Bạn có thể sử dụng nó nếu bạn đang xây dựng một email để gửi một số định dạng cần thiết.

79 hữu ích 5 bình luận chia sẻ

answer

19

Hướng dẫn dùng php_eol trong PHP

PHP_EOL (chuỗi) Biểu tượng 'End Of Line' chính xác cho nền tảng này. Có sẵn từ PHP 4.3.10 và PHP 5.0.2

Bạn có thể sử dụng hằng số này khi bạn đọc hoặc ghi tệp văn bản trên hệ thống tệp của máy chủ.

Kết thúc dòng không quan trọng trong hầu hết các trường hợp vì hầu hết các phần mềm có khả năng xử lý các tệp văn bản bất kể nguồn gốc của chúng. Bạn nên phù hợp với mã của bạn.

Nếu kết thúc dòng quan trọng, chỉ định rõ ràng kết thúc dòng thay vì sử dụng hằng. Ví dụ:

  • Các tiêu đề HTTP phải được phân tách bằng\r\n
  • Các tệp CSV nên sử dụng \r\nlàm dấu tách hàng

19 hữu ích 3 bình luận chia sẻ

answer

11

Hướng dẫn dùng php_eol trong PHP

Tôi muốn đưa ra một câu trả lời có nội dung "Khi nào không sử dụng nó" vì nó chưa được bảo hiểm và có thể tưởng tượng nó được sử dụng một cách mù quáng và không ai nhận thấy có vấn đề gì cho đến khi xuống dòng. Một số điều này mâu thuẫn với một số câu trả lời hiện có phần nào.

Nếu xuất ra đến một trang web dưới dạng HTML, đặc biệt là văn bản trong <textarea>, <pre>hoặc <code>bạn có thể luôn luôn muốn sử dụng \nvà không PHP_EOL.

Lý do cho điều này là vì mã có thể hoạt động tốt trên một sever - đó là một nền tảng giống Unix - nếu được triển khai trên máy chủ Windows (như nền tảng Windows Azure) thì nó có thể thay đổi cách hiển thị các trang trong một số trình duyệt (cụ thể là Internet Explorer - một số phiên bản sẽ thấy cả \ n và \ r).

Tôi không chắc liệu đây có còn là vấn đề kể từ IE6 hay không, vì vậy nó có thể khá khó khăn nhưng có vẻ đáng nói nếu nó giúp mọi người nhanh chóng nghĩ về bối cảnh. Có thể có các trường hợp khác (chẳng hạn như XHTML nghiêm ngặt) khi việc xuất hoàn toàn \rtrên một số nền tảng có thể gây ra sự cố với đầu ra và tôi chắc chắn có những trường hợp khác như thế.

Như đã được lưu ý bởi ai đó, bạn sẽ không muốn sử dụng nó khi trả về các tiêu đề HTTP - vì họ phải luôn theo dõi RFC trên bất kỳ nền tảng nào.

Tôi sẽ không sử dụng nó cho những thứ như dấu phân cách trên các tệp CSV (như ai đó đã đề xuất). Nền tảng mà sever đang chạy không nên xác định các kết thúc dòng trong các tệp được tạo hoặc tiêu thụ.

11 hữu ích 0 bình luận chia sẻ

answer

10

Hướng dẫn dùng php_eol trong PHP

Không, PHP_EOL không xử lý các sự cố nội tuyến, bởi vì hệ thống nơi bạn sử dụng hằng số đó không giống với hệ thống mà bạn gửi đầu ra.

Tôi không khuyên bạn nên sử dụng PHP_EOL cả. Unix / Linux sử dụng \ n, MacOS / OS X cũng thay đổi từ \ r thành \ n và trên Windows, nhiều ứng dụng (đặc biệt là trình duyệt) cũng có thể hiển thị chính xác. Trên Windows, bạn cũng dễ dàng thay đổi mã phía máy khách hiện tại để chỉ sử dụng \ n và vẫn duy trì khả năng tương thích ngược: Chỉ cần thay đổi dấu phân cách để cắt xén dòng từ \ r \ n thành \ n và bọc nó trong một chức năng như trim () .

10 hữu ích 3 bình luận chia sẻ

answer

9

Hướng dẫn dùng php_eol trong PHP

Tôi thấy PHP_EOL rất hữu ích để xử lý tệp, đặc biệt nếu bạn đang viết nhiều dòng nội dung vào một tệp.

Ví dụ: bạn có một chuỗi dài mà bạn muốn chia thành nhiều dòng trong khi viết vào tệp đơn giản. Sử dụng \ r \ n có thể không hoạt động nên chỉ cần đưa PHP_EOL vào tập lệnh của bạn và kết quả thật tuyệt vời.

Kiểm tra ví dụ đơn giản dưới đây:

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

9 hữu ích 1 bình luận chia sẻ

answer

6

Hướng dẫn dùng php_eol trong PHP

Định nghĩa của PHP_EOL là nó cung cấp cho bạn ký tự dòng mới của hệ điều hành bạn đang làm việc.

Trong thực tế, bạn gần như không bao giờ cần điều này. Hãy xem xét một vài trường hợp:

  • Khi bạn xuất ra web, thực sự không có bất kỳ quy ước nào ngoại trừ việc bạn nên nhất quán. Vì hầu hết các máy chủ đều là Unixy, nên bạn sẽ muốn sử dụng "\ n".

  • Nếu bạn xuất ra một tệp, PHP_EOL có vẻ như là một ý tưởng tốt. Tuy nhiên, bạn có thể có được hiệu ứng tương tự bằng cách có một dòng mới bằng chữ trong tệp của mình và điều này sẽ giúp bạn biết nếu bạn đang cố chạy một số tệp được định dạng CRLF trên Unix mà không ghi đè các dòng mới hiện có (như một anh chàng có hệ thống khởi động kép , Tôi có thể nói rằng tôi thích hành vi sau)

PHP_EOL dài đến mức nực cười đến nỗi nó thực sự không đáng để sử dụng nó.

6 hữu ích 4 bình luận chia sẻ

answer

3

Hướng dẫn dùng php_eol trong PHP

Có một nơi rõ ràng có thể hữu ích: khi bạn đang viết mã chủ yếu sử dụng các chuỗi trích dẫn. Nó được tranh luận là liệu:

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

Nghệ thuật của nó là phải nhất quán. Vấn đề với sự pha trộn và kết hợp '' và "" là khi bạn nhận được chuỗi dài, bạn không thực sự muốn đi săn tìm loại trích dẫn nào bạn đã sử dụng.

Như với tất cả mọi thứ trong cuộc sống, nó phụ thuộc vào bối cảnh.

3 hữu ích 0 bình luận chia sẻ

answer

3

Hướng dẫn dùng php_eol trong PHP

"Dòng mới" của DOS / Windows là CRLF (= \ r \ n) chứ không phải LFCR (\ n \ r). Nếu chúng ta đặt cái sau, nó có khả năng tạo ra một số hành vi bất ngờ (tốt, trên thực tế, loại dự kiến ​​!: D).

Ngày nay, hầu hết tất cả các chương trình (được viết tốt) đều chấp nhận tiêu chuẩn UNIX (\ n) cho mã dòng mới, thậm chí cả trình nền của người gửi thư (RFC đặt CRLF làm dòng mới cho tiêu đề và nội dung thư).

3 hữu ích 0 bình luận chia sẻ

answer

2

Hướng dẫn dùng php_eol trong PHP

Tôi có một trang web nơi tập lệnh ghi nhật ký ghi một dòng văn bản mới vào tệp văn bản sau một hành động từ người dùng, người có thể đang sử dụng bất kỳ HĐH nào.

Sử dụng PHP_EOL dường như không phải là tối ưu trong trường hợp này. Nếu người dùng ở trên Mac OS và ghi vào tệp văn bản, nó sẽ đặt \ n. Khi mở tệp văn bản trên máy tính windows, nó không hiển thị ngắt dòng. Vì lý do này, tôi sử dụng "\ r \ n" thay vì hoạt động khi mở tệp trên bất kỳ HĐH nào.

2 hữu ích 0 bình luận chia sẻ

answer

1

Hướng dẫn dùng php_eol trong PHP

Tiện dụng với error_log () nếu bạn xuất ra nhiều dòng.

Tôi đã tìm thấy rất nhiều câu lệnh gỡ lỗi trông lạ khi cài đặt windows của tôi vì các nhà phát triển đã giả sử các kết thúc unix khi chia chuỗi.

1 hữu ích 0 bình luận chia sẻ

answer

1

Hướng dẫn dùng php_eol trong PHP

Bạn đang viết mã chủ yếu sử dụng các chuỗi trích dẫn.

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

1 hữu ích 0 bình luận chia sẻ

answer

0

Hướng dẫn dùng php_eol trong PHP

Tôi sử dụng hằng số PHP_EOL trong một số tập lệnh dòng lệnh tôi phải viết. Tôi phát triển trên máy Windows cục bộ của mình và sau đó thử nghiệm trên hộp máy chủ Linux. Sử dụng hằng số có nghĩa là tôi không phải lo lắng về việc sử dụng đúng dòng kết thúc cho mỗi nền tảng khác nhau.

0 hữu ích 0 bình luận chia sẻ

answer

0

Hướng dẫn dùng php_eol trong PHP

Tôi đang sử dụng WebCalWiki và thấy rằng Mac iCal barfs khi nhập tệp ics được tạo vì dòng cuối được mã hóa cứng trong xcal.php là "\ r \ n". Tôi đã đi vào và thay thế tất cả các lần xuất hiện với PHP_EOL và bây giờ iCal rất vui! Tôi cũng đã thử nghiệm nó trên Vista và Outlook cũng có thể nhập tệp, mặc dù cuối dòng ký tự là "\ n".

0 hữu ích 1 bình luận chia sẻ

answer

0

Hướng dẫn dùng php_eol trong PHP

Khi jumi (plugin j Joomla cho PHP) biên dịch mã của bạn vì một số lý do, nó sẽ xóa tất cả các dấu gạch chéo ngược khỏi mã của bạn. Như vậy một cái gì đó như $csv_output .= "\n";trở thành$csv_output .= "n";

Lỗi rất khó chịu!

Sử dụng PHP_EOL thay thế để có được kết quả mà bạn đạt được sau đó.

0 hữu ích 1 bình luận chia sẻ

answer

0

Hướng dẫn dùng php_eol trong PHP

Trên một số hệ thống có thể hữu ích để sử dụng hằng số này bởi vì, ví dụ, nếu bạn đang gửi email, bạn có thể sử dụng PHP_EOL để tập lệnh hệ thống chéo hoạt động trên nhiều hệ thống hơn ... nhưng ngay cả khi đôi khi nó hữu ích, bạn có thể tìm thấy liên tục không xác định, lưu trữ hiện đại với công cụ php mới nhất không gặp phải vấn đề này nhưng tôi nghĩ rằng một điều tốt là viết một mã bit để cứu tình huống này:

<?php
  if (!defined('PHP_EOL')) {
    if (strtoupper(substr(PHP_OS,0,3) == 'WIN')) {
      define('PHP_EOL',"\r\n");
    } elseif (strtoupper(substr(PHP_OS,0,3) == 'MAC')) {
      define('PHP_EOL',"\r");
    } elseif (strtoupper(substr(PHP_OS,0,3) == 'DAR')) {
      define('PHP_EOL',"\n");
    } else {
      define('PHP_EOL',"\n");
    }
  }
?>

Vì vậy, bạn có thể sử dụng PHP_EOL mà không gặp vấn đề gì ... rõ ràng rằng PHP_EOL nên được sử dụng trên tập lệnh nên hoạt động trên nhiều hệ thống cùng một lúc nếu không bạn có thể sử dụng \ n hoặc \ r hoặc \ r \ n ...

Lưu ý: PHP_EOL có thể

1) on Unix    LN    == \n
2) on Mac     CR    == \r
3) on Windows CR+LN == \r\n

Mong câu trả lời này có ích.

0 hữu ích 0 bình luận chia sẻ

answer

2

Hướng dẫn dùng php_eol trong PHP

Tôi thích sử dụng \ n \ r. Ngoài ra tôi đang ở trên một hệ thống cửa sổ và \ n hoạt động tốt theo kinh nghiệm của tôi.

Vì PHP_EOL không hoạt động với các biểu thức thông thường và đây là cách xử lý văn bản hữu ích nhất, nên tôi thực sự không bao giờ sử dụng nó hoặc cần thiết.

2 hữu ích 2 bình luận chia sẻ