[php] PHP 상수“PHP_EOL”은 언제 사용합니까?

언제 사용하는 것이 좋 PHP_EOL습니까?

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



답변

예, PHP_EOL표면적으로는 DOS / 유닉스 문제를 처리 할 수 있도록, 크로스 플랫폼 호환 방식으로 개행 문자를 찾는 데 사용됩니다.

참고 PHP_EOL가 에 대한 endline 문자를 나타내는 현재의 시스템을. 예를 들어, 유닉스 계열 시스템에서 실행될 때 Windows 종료를 찾지 못합니다.


답변

에서 main/php.hPHP 버전 7.1.1 및 버전 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

보시다시피 (Windows 서버 또는 기타) PHP_EOL가 될 수 있습니다 . PHP 버전에서 종래 5.4.0RC8위한 제 3 값 수 있었다 : (에서라도 서버). 잘못되어 2012-03-01 버그 61193 으로 수정되었습니다 ."\r\n""\n"PHP_EOL"\r"

다른 사람들이 이미 말했듯이, 당신은 사용할 수 있습니다 PHP_EOL(출력의 어떤 종류의 모든 사용자가 통합 원하는 : – HTML, XML, 로그 …처럼이 값이 유효) 뉴 라인 . 클라이언트가 아닌 값을 결정하는 것은 서버라는 점에 유의하십시오. Windows 방문자는 때때로 불편한 Unix 서버에서 가치를 얻습니다.

PHP_EOL여기에 아직 표시되지 않았기 때문에 PHP 소스 의 지원 가능한 값을 보여주고 싶었습니다 .


답변

PHP_EOL새 줄을 원할 때 사용 하고 크로스 플랫폼이 되려고합니다.

파일 시스템에 파일을 쓰는 중일 수 있습니다 (로그, 내보내기 등).

생성 된 HTML을 읽을 수있게하려면 사용할 수 있습니다. 따라서 당신 <br />과 함께 할 수 있습니다 PHP_EOL.

cron에서 php를 스크립트로 실행하고 무언가를 출력하고 화면에 맞게 형식화 해야하는 경우이를 사용합니다.

형식을 지정해야하는 이메일을 작성하는 경우이를 사용할 수 있습니다.


답변

PHP_EOL (문자열)이 플랫폼에 대한 올바른 ‘End Of Line’기호. PHP 4.3.10 및 PHP 5.0.2부터 사용 가능

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

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

줄 끝이 중요한 경우 상수를 사용하는 대신 줄 끝을 명시 적으로 지정하십시오. 예를 들면 다음과 같습니다.

  • HTTP 헤더 해야한다 로 구분\r\n
  • CSV 파일 \r\n 행 구분 기호로 사용해야 합니다

답변

아직 다루지 않았기 때문에 “사용 하지 않을 때”를 다루는 답변을 던져보고 싶습니다. 맹목적으로 사용되고 있으며 나중에 줄까지 문제가 있음을 아무도 알지 못합니다. 이 중 일부는 기존 답변 중 일부와 다소 모순됩니다.

HTML의 웹 페이지에 출력하는 경우, 특히 텍스트 <textarea>, <pre>또는 <code>당신은 아마 항상 사용하고자 \n하지 PHP_EOL.

그 이유는 코드가 한 서버에서 잘 작동 할 수 있지만 (유닉스와 같은 플랫폼 일 수 있음) Windows 호스트 (예 : Windows Azure 플랫폼)에 배포 된 경우 일부 브라우저에서 페이지가 표시되는 방식이 변경 될 수 있기 때문입니다. (특히 Internet Explorer-일부 버전은 \ n과 \ r을 모두 볼 수 있습니다).

이것이 IE6 이후로 여전히 문제인지 여부는 확실하지 않으므로 상당히 어리석지 만 사람들이 컨텍스트에 대해 신속하게 생각하는 데 도움이되는지 언급하는 것이 좋습니다. \r일부 플랫폼 에서 갑자기 출력하는 경우 출력에 문제가 발생할 수있는 다른 경우 (예 : 엄격한 XHTML)가 있을 수 있으며, 이와 같은 다른 경우도있을 것입니다.

누군가 이미 언급했듯이 HTTP 헤더를 반환 할 때 항상 플랫폼에서 RFC를 따라야하므로 HTTP 헤더를 사용하지 않으려합니다.

나는 누군가가 제안한대로 CSV 파일의 구분 기호와 같은 것을 사용하지 않을 것입니다. 서버가 실행되는 플랫폼은 생성되거나 소비 된 파일의 줄 끝을 결정하지 않아야합니다.


답변

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은 endline 문제를 처리하지 않습니다. 상수를 사용하는 시스템은 출력을 보내는 시스템과 동일하지 않기 때문입니다.

PHP_EOL을 전혀 사용하지 않는 것이 좋습니다. 유닉스 / 리눅스 사용 \ n, MacOS / OS X도 \ r에서 \ n으로 변경되었으며 Windows에서는 많은 응용 프로그램 (특히 브라우저)에서도 올바르게 표시 할 수 있습니다. Windows에서는 \ n 만 사용하고 기존 버전과의 호환성을 유지하도록 기존 클라이언트 측 코드를 쉽게 변경할 수 있습니다. .