PHP 상수“PHP_EOL”은 언제 사용합니까?
언제 사용하는 것이 좋 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 값 수 있었다 : (에서라도 서버). 그것은 잘못되었고 버그 61193 과 함께 2012-03-01에 수정되었습니다 ."\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 (string)이 플랫폼에 대한 올바른 '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은 endline 문제를 처리하지 않습니다. 상수를 사용하는 시스템은 출력을 보내는 시스템과 동일하지 않기 때문입니다.
PHP_EOL을 전혀 사용하지 않는 것이 좋습니다. 유닉스 / 리눅스 사용 \ n, MacOS / OS X도 \ r에서 \ n으로 변경되었으며 Windows에서는 많은 응용 프로그램 (특히 브라우저)에서도 올바르게 표시 할 수 있습니다. Windows에서는 \ n 만 사용하고 기존 버전과의 호환성을 유지하도록 기존 클라이언트 측 코드를 쉽게 변경할 수 있습니다. .
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의 정의는 작업중인 운영 체제의 개행 문자를 제공한다는 것입니다.
실제로는 거의 필요하지 않습니다. 몇 가지 경우를 고려하십시오.
웹에 출력 할 때는 일관성을 유지해야한다는 것을 제외하고는 아무런 규칙이 없습니다. 대부분의 서버는 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";
그것의 기술은 일관성이 있어야합니다. 믹스 앤 매치 ''및 ""의 문제점은 긴 문자열을 얻을 때 실제로 어떤 유형의 따옴표를 찾기 위해 사냥을 할 필요가 없다는 것입니다.
인생의 모든 것들과 마찬가지로 상황에 달려 있습니다.
DOS / Windows 표준 "줄 바꾸기"는 CRLF (= \ r \ n)이며 LFCR (\ n \ r)이 아닙니다. 후자를 넣으면 예기치 않은 (사실, 예상되는 종류 : : D) 동작이 발생할 수 있습니다.
요즘 거의 모든 (잘 작성된) 프로그램은 줄 바꿈 코드에 대해 UNIX 표준 LF (\ n), 메일 보낸 사람 데몬 (RFC가 CRLF 를 헤더 및 메시지 본문의 줄 바꿈으로 설정 )을 허용합니다.
사용자가 OS를 사용할 수있는 작업 후 로깅 스크립트가 새로운 텍스트 줄을 텍스트 파일에 쓰는 사이트가 있습니다.
이 경우 PHP_EOL을 사용하는 것이 최적이 아닌 것 같습니다. 사용자가 Mac OS에 있고 텍스트 파일에 쓰면 \ n이됩니다. Windows 컴퓨터에서 텍스트 파일을 열면 줄 바꿈이 표시되지 않습니다. 이런 이유로 어떤 OS에서 파일을 열 때 작동하는 대신 "\ r \ n"을 사용합니다.
여러 줄을 출력하는 경우 error_log ()를 사용하십시오.
개발자가 문자열을 분해 할 때 유닉스 엔딩을 가정했기 때문에 Windows 설치에서 많은 디버그 문이 이상하게 보입니다.
작은 따옴표 문자열을 주로 사용하는 코드를 작성 중입니다.
echo 'A $variable_literal that I have'.PHP_EOL.'looks better than'.PHP_EOL;
echo 'this other $one'."\n";
필자는 작성해야하는 일부 명령 줄 스크립트에서 PHP_EOL 상수를 사용합니다. 로컬 Windows 컴퓨터에서 개발 한 다음 Linux 서버 상자에서 테스트합니다. 상수를 사용한다는 것은 서로 다른 플랫폼 각각에 대해 올바른 줄 끝을 사용하는 것에 대해 걱정할 필요가 없음을 의미했습니다.
WebCalendar를 사용하고 있는데 xcal.php에 "\ r \ n"으로 줄 끝이 하드 코드되어 있기 때문에 생성 된 ics 파일을 가져올 때 Mac iCal barfs가 발견되었습니다. 나는 들어가서 모든 발생을 PHP_EOL로 교체했으며 이제 iCal이 행복합니다! 또한 Vista에서 파일을 테스트했으며 줄 끝 문자가 "\ n"인 경우에도 Outlook에서 파일을 가져올 수있었습니다.
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
이 답변이 도움이 되길 바랍니다.
\ n \ r을 선호합니다. 또한 나는 Windows 시스템을 사용하고 있으며 \ n 내 경험에서 잘 작동합니다.
PHP_EOL은 정규 표현식에서 작동하지 않으므로 텍스트를 처리하는 가장 유용한 방법이므로 실제로는 사용하지 않았거나 필요하지 않았습니다.
참고 URL : https://stackoverflow.com/questions/128560/when-do-i-use-the-php-constant-php-eol
'Programming' 카테고리의 다른 글
마크 다운의 위첨자 (Github 맛)? (0) | 2020.03.02 |
---|---|
'YTowOnt9'는 무엇입니까? (0) | 2020.03.02 |
JSON : 슬래시가 이스케이프 처리되는 이유는 무엇입니까? (0) | 2020.03.01 |
Java를위한 최고의 모의 프레임 워크는 무엇입니까? (0) | 2020.03.01 |
클릭 이벤트 리스너에 'return false'를 추가하면 어떤 효과가 있습니까? (0) | 2020.03.01 |