언제 사용하는 것이 좋 PHP_EOL
습니까?
때로는 PHP 코드 샘플에서 이것을 볼 수 있습니다. DOS / Mac / Unix 종료 문제를 처리합니까?
답변
예, PHP_EOL
표면적으로는 DOS / 유닉스 문제를 처리 할 수 있도록, 크로스 플랫폼 호환 방식으로 개행 문자를 찾는 데 사용됩니다.
참고 PHP_EOL가 에 대한 endline 문자를 나타내는 현재의 시스템을. 예를 들어, 유닉스 계열 시스템에서 실행될 때 Windows 종료를 찾지 못합니다.
답변
에서 main/php.h
PHP 버전 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 만 사용하고 기존 버전과의 호환성을 유지하도록 기존 클라이언트 측 코드를 쉽게 변경할 수 있습니다. .