답변:
예, PHP_EOL
표면적으로는 DOS / 유닉스 문제를 처리 할 수 있도록, 크로스 플랫폼 호환 방식으로 개행 문자를 찾는 데 사용됩니다.
참고 PHP_EOL가 에 대한 endline 문자를 나타내는 현재의 시스템을. 예를 들어, 유닉스 계열 시스템에서 실행될 때 Windows 종료를 찾지 못합니다.
PHP_EOL
양식에서 게시 된 데이터 에는 사용하지 마십시오 .
에서 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 -r "echo addcslashes(PHP_EOL, PHP_EOL), PHP_EOL;"
알아 내다.
PHP_EOL
새 줄을 원할 때 사용 하고 크로스 플랫폼이 되려고합니다.
파일 시스템에 파일을 쓰는 중일 수 있습니다 (로그, 내보내기 등).
생성 된 HTML을 읽을 수있게하려면 사용할 수 있습니다. 따라서 당신 <br />
과 함께 할 수 있습니다 PHP_EOL
.
cron에서 php를 스크립트로 실행하고 무언가를 출력하고 화면에 맞게 형식화 해야하는 경우이를 사용합니다.
형식을 지정해야하는 이메일을 작성하는 경우이를 사용할 수 있습니다.
$header = "From: $from" . PHP_EOL; $header .= "Reply-To: $from" . PHP_EOL; $header .= "Return-Path: $from" . PHP_EOL;
PHP_EOL
이메일 헤더를 분리하는 데 사용해서는 안됩니다. PHP Mail 매뉴얼 에 따르면 여러 개의 추가 헤더를 CRLF (\ r \ n)로 분리해야합니다.
PHP_EOL (문자열)이 플랫폼에 대한 올바른 'End Of Line'기호. PHP 4.3.10 및 PHP 5.0.2부터 사용 가능
서버의 파일 시스템에서 텍스트 파일을 읽거나 쓸 때이 상수를 사용할 수 있습니다.
대부분의 소프트웨어는 원본 파일에 관계없이 텍스트 파일을 처리 할 수 있으므로 대부분의 경우 줄 끝은 중요하지 않습니다. 코드와 일치해야합니다.
줄 끝이 중요한 경우 상수를 사용하는 대신 줄 끝을 명시 적으로 지정하십시오. 예를 들면 다음과 같습니다.
\r\n
\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 만 사용하고 기존 버전과의 호환성을 유지하도록 기존 클라이언트 측 코드를 쉽게 변경할 수 있습니다. .
PHP_EOL의 정의는 작업중인 운영 체제의 개행 문자를 제공한다는 것입니다.
실제로는 거의 필요하지 않습니다. 몇 가지 경우를 고려하십시오.
웹에 출력 할 때는 일관성을 유지해야한다는 것을 제외하고는 아무런 규칙이 없습니다. 대부분의 서버는 Unixy이므로 "\ n"을 사용하고 싶을 것입니다.
파일로 출력하는 경우 PHP_EOL이 좋은 생각처럼 보일 수 있습니다. 그러나 파일 내부에 리터럴 줄 바꿈을 사용하면 비슷한 효과를 얻을 수 있으며 이는 기존 개행을 방해하지 않고 Unix에서 일부 CRLF 형식의 파일을 실행하려는 경우 (듀얼 부트 시스템을 가진 사람으로) 도움이 될 것입니다. , 나는 후자의 행동을 선호한다고 말할 수있다)
PHP_EOL은 엄청나게 길어서 실제로 사용할 가치가 없습니다.
작은 따옴표 문자열을 주로 사용하는 코드를 작성할 때 유용 할 수있는 분명한 장소가 있습니다. 다음에 대한 논란의 여지가 있습니다.
echo 'A $variable_literal that I have'.PHP_EOL.'looks better than'.PHP_EOL;
echo 'this other $one'."\n";
그것의 기술은 일관성이 있어야합니다. 믹스 앤 매치 ''및 ""의 문제점은 긴 문자열을 얻을 때 실제로 어떤 유형의 따옴표를 찾기 위해 갈 필요가 없다는 것입니다.
인생의 모든 것과 마찬가지로 상황에 달려 있습니다.
작은 따옴표 문자열을 주로 사용하는 코드를 작성 중입니다.
echo 'A $variable_literal that I have'.PHP_EOL.'looks better than'.PHP_EOL;
echo 'this other $one'."\n";
WebCalendar를 사용하고 있는데 xcal.php에 "\ r \ n"으로 줄 끝이 하드 코드되어 있기 때문에 생성 된 ics 파일을 가져올 때 Mac iCal barfs가 발견되었습니다. 나는 들어가서 모든 발생을 PHP_EOL로 교체했으며 이제 iCal이 행복합니다! 또한 Vista에서 파일을 테스트했으며 줄 끝 문자가 "\ n"인 경우에도 Outlook에서 파일을 가져올 수있었습니다.
\n
명시 적으로 사용하십시오.
jumi (PHP 용 jumla 플러그인)가 어떤 이유로 코드를 컴파일하면 코드에서 모든 백 슬래시가 제거됩니다. 이와 같은 $csv_output .= "\n";
것이$csv_output .= "n";
매우 성가신 버그!
대신 결과를 얻으려면 PHP_EOL을 대신 사용하십시오.
예를 들어, 이메일을 보내는 경우 PHP_EOL을 사용하여 더 많은 시스템에서 크로스 시스템 스크립트를 사용할 수 있기 때문에 일부 시스템에서는이 상수를 사용하는 것이 유용 할 수 있습니다. 최신 PHP 엔진을 사용하는 상수 정의되지 않은 현대 호스팅에는이 문제가 없지만이 상황을 저장하는 비트 코드를 작성하는 것이 좋습니다.
<?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");
}
}
?>
따라서 PHP_EOL을 문제없이 사용할 수 있습니다. PHP_EOL은 한 번에 더 많은 시스템에서 작동하는 스크립트에서 사용해야합니다. 그렇지 않으면 \ n 또는 \ r 또는 \ r \ n을 사용할 수 있습니다.
참고 : PHP_EOL은
1) on Unix LN == \n
2) on Mac CR == \r
3) on Windows CR+LN == \r\n
이 답변이 도움이 되길 바랍니다.
Windows 클라이언트로 출력 할 때이 문제가 발생했습니다. 물론 PHP_EOL은 서버 측이지만 PHP에서 출력되는 대부분의 내용은 Windows 클라이언트 용입니다. 그래서 나는 다음 사람을 위해 찾은 것을 여기에 배치해야합니다
A) echo 'My Text'. PHP_EOL; // 이것은 단지 \ n을 출력하고 대부분의 Windows 메모장 버전은 이것을 한 줄로 표시하고 대부분의 Windows 계정 소프트웨어는 이러한 유형의 줄 끝 문자를 가져올 수 없기 때문에 좋지 않습니다.
B) echo 'My Text \ r \ n'; 작은 따옴표로 묶은 PHP 문자열이 \ r \ n을 해석하지 않기 때문에 // 나쁜
C) echo "My Text \ r \ n"; // 예, 작동합니다! 메모장에서 올바르게 보이며 파일을 Windows 계정 및 Windows 제조 소프트웨어와 같은 다른 Windows 소프트웨어로 가져올 때 작동합니다.
\ n \ r을 선호합니다. 또한 나는 Windows 시스템을 사용하고 있으며 \ n 내 경험에서 잘 작동합니다.
PHP_EOL은 정규 표현식에서 작동하지 않으므로 텍스트를 처리하는 가장 유용한 방법이므로 실제로는 사용하지 않았거나 필요하지 않았습니다.