언제 PHP 상수 "PHP_EOL"을 사용합니까?



Answers

PHP 버전 5.6.30 및 버전 7.1.1의 main/php.h 에서 :

#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

PHP_EOL"\r\n" (Windows 서버) 또는 "\n" (다른 서버) 일 수 있습니다. 5.4.0RC8 이전의 PHP 버전에서는 PHP_EOL의 세 번째 값으로 "\r" (MacOSX 서버에서)이 가능했습니다. 버그 였고 버그 61193 으로 2012-03-01에 수정되었습니다.

이미 다른 사람들이 말했듯이, PHP_EOL 을 모든 종류의 출력에서 ​​사용할 수 있습니다 (HTML, XML, 로그 ...와 같은 유효한 값이있는 곳). 통합 된 newlines 을 원할 때 (그리고 내 생각에 이것을 원할 것입니다) .

PHP 소스가 뒷받침하는 PHP_EOL 의 가능성을 보여주고 싶었습니다. 아직 여기에 표시되지 않았기 때문에 ...

Question

PHP_EOL 을 사용하는 것이 좋은 생각은 PHP_EOL 입니까?

필자는 PHP의 코드 샘플에서 이것을 때때로 볼 수 있습니다. 이것은 DOS / Mac / Unix endline 문제를 처리합니까?




jumi (PHP 용 joomla 플러그인)가 코드를 컴파일 할 때 코드에서 모든 백 슬래시가 제거됩니다. 그러한 것은 $csv_output .= "\n"; $csv_output .= "n";

매우 짜증나는 버그!

대신 PHP_EOL을 사용하여 결과를 얻습니다.




필자는 파일 처리에 PHP_EOL이 매우 유용하다는 것을 알았습니다. 특별히 파일에 여러 줄의 내용을 쓰는 경우에 유용합니다.

예를 들어, 평범한 파일에 쓰는 동안 여러 줄로 나누기를 원하는 긴 문자열이 있습니다. \ r \ n을 사용하면 PHP_EOL을 스크립트에 넣으면 결과가 멋지게됩니다.

아래의 간단한 예제를 확인하십시오.

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



필자가 작성해야하는 일부 명령 행 스크립트에서 PHP_EOL 상수를 사용합니다. 로컬 Windows 컴퓨터에서 개발 한 다음 Linux 서버 상자에서 테스트합니다. 상수를 사용한다는 것은 각기 다른 플랫폼마다 올바른 줄 끝을 사용하는 것에 대해 걱정할 필요가 없다는 것을 의미했습니다.




PHP_EOL (string)이 플랫폼의 올바른 'End Of Line'심볼. PHP 4.3.10 및 PHP 5.0.2부터 사용 가능

서버 파일 시스템에서 텍스트 파일을 읽거나 쓸 때이 상수를 사용할 수 있습니다.

대부분의 소프트웨어는 원본 파일과 관계없이 텍스트 파일을 처리 할 수 ​​있기 때문에 대부분의 경우 줄 끝은 중요하지 않습니다. 당신은 당신의 코드와 일치해야한다.

줄 끝이 중요 할 경우 상수를 사용하는 대신 줄 끝을 명시 적으로 지정하십시오. 예 :

  • HTTP 헤더 \r\n 으로 구분 해야합니다.
  • CSV 파일 \r\n 행 구분자로 사용해야 합니다.



DOS / Windows 표준 "개행"은 LFCR (\ n \ r)이 아닌 CRLF (= \ r \ n)입니다. 후자를 넣으면 예상치 못한 (실제로는 기대되는! : D) 행동을 생성 할 가능성이 있습니다.

요즘 거의 모든 (잘 쓰여진) 프로그램은 메일 발신자 데몬 (RFC는 헤더와 메시지 본문에 대한 줄 바꿈 으로 CRLF를 설정 함)조차도 개행 코드 용 UNIX 표준 LF (\ n)를 허용합니다.




나는 로깅 스크립트가 사용자가 임의의 OS를 사용할 수있는 액션 후에 텍스트 파일에 새로운 라인의 텍스트를 쓰는 사이트를 가지고있다.

이 경우에는 PHP_EOL을 사용하는 것이 최적의 것으로 보이지 않습니다. 사용자가 Mac OS에서 텍스트 파일에 쓰면 \ n 넣습니다. Windows 컴퓨터에서 텍스트 파일을 열 때 줄 바꿈이 표시되지 않습니다. 이러한 이유로 나는 "\ r \ n"대신에 어떤 OS에서든 파일을 열 때 사용할 수 있습니다.




PHP_EOL의 정의는 작업중인 운영 체제의 개행 문자를 제공한다는 것입니다.

실제로는 거의 필요하지 않습니다. 몇 가지 경우를 생각해보십시오.

  • 웹에 출력 할 때 일관성을 유지해야한다는 것을 제외하고는 어떤 관례도 없습니다. 대부분의 서버는 Unixy이므로 어쨌든 "\ n"을 사용하는 것이 좋습니다.

  • 파일로 출력하는 경우 PHP_EOL이 좋은 생각처럼 보일 수 있습니다. 그러나 파일 내에서 문자 그대로의 개행 문자를 사용하면 비슷한 효과를 얻을 수 있습니다. 이는 기존의 개행 문자를 깨지 않고 유닉스에서 CRLF 형식의 파일을 실행하려고 할 때 도움이 될 것입니다 (이중 부팅 시스템을 가진 사람 , 나는 후자의 행동을 선호한다고 말할 수있다)

PHP_EOL은 너무 길기 때문에 실제로 사용할 가치가 없습니다.




Links



Tags

php php   eol