इसका उपयोग कब करना एक अच्छा विचार है PHP_EOL
?
मैं कभी-कभी इसे PHP के कोड नमूनों में देखता हूं। क्या यह डॉस / मैक / यूनिक्स एंडलाइन मुद्दों को संभालता है?
इसका उपयोग कब करना एक अच्छा विचार है PHP_EOL
?
मैं कभी-कभी इसे PHP के कोड नमूनों में देखता हूं। क्या यह डॉस / मैक / यूनिक्स एंडलाइन मुद्दों को संभालता है?
जवाबों:
हां, PHP_EOL
एक क्रॉस-प्लेटफॉर्म-संगत तरीके से न्यूलाइन वर्ण को खोजने के लिए आमतौर पर उपयोग किया जाता है, इसलिए यह डॉस / यूनिक्स मुद्दों को संभालता है।
ध्यान दें कि PHP_EOL वर्तमान प्रणाली के लिए एंडलाइन वर्ण का प्रतिनिधित्व करता है। उदाहरण के लिए, यह एक यूनिक्स जैसी प्रणाली पर निष्पादित होने पर विंडोज एंडलाइन नहीं मिलेगा।
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
जैसा कि आप देख PHP_EOL
सकते हैं "\r\n"
(विंडोज सर्वर पर) या "\n"
(किसी और चीज पर) हो सकता है। पीएचपी संस्करणों पर पहले 5.4.0RC8, वहाँ के लिए एक तिहाई मूल्य संभव थे PHP_EOL
: "\r"
(MacOSX सर्वर पर)। यह गलत था और 2012-03-01 को बग 61193 के साथ तय किया गया था ।
जैसा कि अन्य लोगों ने आपको पहले ही बताया था, आप PHP_EOL
किसी भी प्रकार के आउटपुट में उपयोग कर सकते हैं (जहाँ इनमें से कोई भी मान मान्य है - जैसे: HTML, XML, लॉग ...) जहाँ आप एकीकृत नई रूपरेखा चाहते हैं । ध्यान रखें कि यह सर्वर है कि यह मूल्य निर्धारित कर रहा है, ग्राहक नहीं। आपके विंडोज आगंतुकों को आपके यूनिक्स सर्वर से मूल्य मिलेगा जो उनके लिए कभी-कभी असुविधाजनक होता है।
मैं बस PHP_EOL
PHP स्रोतों द्वारा समर्थित के मानों को दिखाना चाहता था क्योंकि यह अभी तक यहाँ नहीं दिखाया गया है ...
php -r "echo addcslashes(PHP_EOL, PHP_EOL), PHP_EOL;"
पता लगाने के लिए।
PHP_EOL
जब आप एक नई लाइन चाहते हैं, और आप क्रॉस-प्लेटफ़ॉर्म बनना चाहते हैं, तो आप इसका उपयोग करते हैं।
यह तब हो सकता है जब आप फाइलसिस्टम (लॉग्स, एक्सपोर्ट, अन्य) को फाइल लिख रहे हैं।
यदि आप चाहते हैं कि आपका जेनरेट किया गया HTML पठनीय हो तो आप इसका उपयोग कर सकते हैं। तो आप अपने <br />
एक के साथ पालन कर सकते हैं PHP_EOL
।
यदि आप php को cron से स्क्रिप्ट के रूप में चला रहे हैं, तो आप इसका उपयोग करेंगे और आपको कुछ आउटपुट करने की आवश्यकता होगी और इसे स्क्रीन के लिए स्वरूपित किया जाएगा।
यदि आप कुछ फ़ॉर्मेटिंग की आवश्यकता के लिए ईमेल भेजने के लिए उपयोग कर रहे हैं, तो आप इसका उपयोग कर सकते हैं।
$header = "From: $from" . PHP_EOL; $header .= "Reply-To: $from" . PHP_EOL; $header .= "Return-Path: $from" . PHP_EOL;
PHP_EOL
ईमेल हेडर को अलग करने के लिए उपयोग नहीं किया जाना चाहिए। PHP मेल मैनुअल के अनुसार , कई अतिरिक्त हेडर को CRLF (\ r \ n) के साथ अलग किया जाना चाहिए।
PHP_EOL (स्ट्रिंग) इस प्लेटफ़ॉर्म के लिए सही 'एंड ऑफ़ लाइन' प्रतीक है। PHP 4.3.10 और PHP 5.0.2 के बाद से उपलब्ध है
जब आप सर्वर के फाइल सिस्टम पर टेक्स्ट फाइल पढ़ते या लिखते हैं तो आप इस स्थिरांक का उपयोग कर सकते हैं।
ज्यादातर मामलों में लाइन एंडिंग मायने नहीं रखती क्योंकि ज्यादातर सॉफ्टवेयर अपनी उत्पत्ति की परवाह किए बिना टेक्स्ट फाइलों को संभालने में सक्षम हैं। आपको अपने कोड के अनुरूप होना चाहिए।
यदि लाइन एंडिंग मायने रखती है, तो निरंतर का उपयोग करने के बजाय स्पष्ट रूप से लाइन एंडिंग निर्दिष्ट करें। उदाहरण के लिए:
\r\n
\r\n
मैं एक उत्तर में फेंकना चाहूंगा जो "जब उपयोग न करना हो तो" को संबोधित करता है क्योंकि यह अभी तक कवर नहीं किया गया है और यह कल्पना कर सकता है कि इसका उपयोग नेत्रहीन रूप से किया जा रहा है और कोई भी नोटिंग नहीं कर रहा है, बाद में लाइन के नीचे तक कोई समस्या नहीं है। इसमें से कुछ मौजूदा जवाबों में कुछ विरोधाभासी हैं।
यदि HTML में एक वेबपेज के लिए आउटपुट, विशेष रूप से पाठ में <textarea>
, <pre>
या <code>
आप शायद हमेशा उपयोग करना चाहते हैं \n
और नहीं PHP_EOL
।
इसका कारण यह है कि जब कोड एक सीरीज़ पर अच्छा प्रदर्शन कर सकता है - जो कि यूनिक्स जैसा प्लेटफ़ॉर्म होता है - अगर विंडोज होस्ट (जैसे विंडोज एज़्योर प्लेटफ़ॉर्म) पर तैनात किया जाता है, तो यह बदल सकता है कि कुछ ब्राउज़रों में पेज कैसे प्रदर्शित होते हैं (विशेष रूप से इंटरनेट एक्सप्लोरर - कुछ संस्करण जिनमें \ n और \ r दोनों दिखाई देंगे)।
मुझे यकीन नहीं है कि यह अभी भी IE6 के बाद से एक मुद्दा है या नहीं, इसलिए यह काफी मूक हो सकता है लेकिन यह ध्यान देने योग्य है कि क्या यह लोगों को संदर्भ के बारे में सोचने के लिए संकेत देने में मदद करता है। अन्य मामले (जैसे कि सख्त एक्सएचटीएमएल) हो सकते हैं, जहां \r
कुछ प्लेटफार्मों पर अचानक आउटपुट देने से आउटपुट के साथ समस्याएं हो सकती हैं, और मुझे यकीन है कि इस तरह के अन्य किनारे मामले भी हैं।
जैसा कि पहले से ही किसी ने नोट किया है, आप HTTP हेडर वापस करते समय इसका उपयोग नहीं करना चाहेंगे - क्योंकि उन्हें हमेशा किसी भी मंच पर RFC का पालन करना चाहिए।
मैं 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 एंडलाइन मुद्दों को संभालता नहीं है, क्योंकि सिस्टम जहां आप उस स्थिरांक का उपयोग करते हैं, वही सिस्टम नहीं है जहां आप आउटपुट भेजते हैं।
मैं PHP_EOL का उपयोग करने की सलाह नहीं दूंगा। Unix / Linux का उपयोग \ n, MacOS / OS X ने \ r से \ n में भी बदल दिया और Windows पर कई एप्लिकेशन (विशेष रूप से ब्राउज़र) इसे सही ढंग से भी प्रदर्शित कर सकते हैं। विंडोज़ पर, केवल \ n का उपयोग करने के लिए मौजूदा क्लाइंट-साइड कोड को बदलना आसान है और अभी भी बैकवर्ड-कम्पैटिबिलिटी बनाए रखता है: बस लाइन को ट्रिम करने के लिए सीमांकक को \ r \ n से \ n में बदलें और इसे ट्रिम () फ़ंक्शन की तरह लपेटें ।
PHP_EOL की परिभाषा यह है कि यह आपको उस ऑपरेटिंग सिस्टम की नई पंक्ति देता है, जिस पर आप काम कर रहे हैं।
व्यवहार में, आपको लगभग कभी भी इसकी आवश्यकता नहीं होनी चाहिए। कुछ मामलों पर विचार करें:
जब आप वेब पर आउटपुट कर रहे होते हैं, तो वास्तव में कोई कन्वेंशन नहीं होता है सिवाय इसके कि आप लगातार रहें। चूंकि अधिकांश सर्वर यूनिक्स हैं, आप वैसे भी "\ n" का उपयोग करना चाहेंगे।
यदि आप किसी फ़ाइल में आउटपुट कर रहे हैं, तो PHP_EOL एक अच्छे विचार की तरह लग सकता है। हालाँकि, आप अपनी फ़ाइल के अंदर एक शाब्दिक नई लाइन होने से एक समान प्रभाव प्राप्त कर सकते हैं, और यह आपकी मदद करेगा यदि आप मौजूदा newlines (एक दोहरे बूट सिस्टम वाले लड़के के रूप में) के बिना यूनिक्स पर कुछ CRLF स्वरूपित फ़ाइलों को चलाने की कोशिश कर रहे हैं , मैं कह सकता हूं कि मैं बाद के व्यवहार को पसंद करता हूं)
PHP_EOL इतनी हास्यास्पद है कि वास्तव में इसका उपयोग करने लायक नहीं है।
एक स्पष्ट स्थान है जहां यह उपयोगी हो सकता है: जब आप कोड लिख रहे हैं जो मुख्य रूप से एकल उद्धरण तार का उपयोग करता है। इसके तर्क के रूप में चाहे:
echo 'A $variable_literal that I have'.PHP_EOL.'looks better than'.PHP_EOL;
echo 'this other $one'."\n";
वहां की कला को सुसंगत बनाना है। मिक्स एंड मैचिंग '' और "" के साथ समस्या यह है कि जब आप लंबे स्ट्रिंग्स प्राप्त करते हैं, तो आप वास्तव में यह नहीं चाहते हैं कि आप किस प्रकार के उद्धरण का उपयोग करें।
जीवन में सभी चीजों के साथ, यह संदर्भ पर निर्भर करता है।
डॉस / विंडोज मानक "न्यूलाइन" CRLF (= \ r \ n) है और LFCR (\ n \ r) नहीं है। यदि हम उत्तरार्द्ध डालते हैं, तो यह कुछ अप्रत्याशित (अच्छी तरह से, वास्तव में, अपेक्षित प्रकार !: डी) व्यवहार का उत्पादन करने की संभावना है।
आजकल लगभग सभी (अच्छी तरह से लिखे गए) कार्यक्रम यूनिक्स मानक LF (\ n) को नए कोड के लिए स्वीकार करते हैं, यहां तक कि मेल भेजने वाले डेमॉन (RFC CRLF को हेडर और मैसेज बॉडी के लिए न्यूलाइन के रूप में सेट करते हैं)।
यदि आप कई पंक्तियों का उत्पादन कर रहे हैं, तो error_log () के साथ काम करें।
मैंने पाया है कि बहुत सारे डिबग स्टेटमेंट मेरी खिड़कियों पर अजीब लगते हैं क्योंकि डेवलपर्स ने स्ट्रिंग्स को तोड़ने पर यूनिक्स एंडिंग को ग्रहण किया है।
मैं कुछ कमांड लाइन लिपियों में PHP_EOL निरंतर का उपयोग करता हूं जो मुझे लिखना था। मैं अपने स्थानीय विंडोज मशीन पर विकसित करता हूं और फिर एक लिनक्स सर्वर बॉक्स पर परीक्षण करता हूं। निरंतर का उपयोग करने का मतलब है कि मुझे विभिन्न प्लेटफार्मों में से प्रत्येक के लिए सही लाइन समाप्ति का उपयोग करने के बारे में चिंता करने की ज़रूरत नहीं है।
मेरे पास एक साइट है जहां लॉगिंग-स्क्रिप्ट उपयोगकर्ता से एक कार्रवाई के बाद एक टेक्स्टफाइल को पाठ की एक नई पंक्ति लिखती है, जो किसी भी ओएस का उपयोग कर सकती है।
PHP_EOL का उपयोग इस मामले में इष्टतम नहीं लगता है। यदि उपयोगकर्ता मैक ओएस पर है और टेक्स्टफाइल को लिखता है तो यह \ n डाल देगा। विंडोज कंप्यूटर पर टेक्स्टफाइल को खोलते समय यह लाइन ब्रेक नहीं दिखाता है। इस कारण से मैं इसके बजाय "\ r \ n" का उपयोग करता हूं जो किसी भी OS पर फ़ाइल खोलने पर काम करता है।
आप कोड लिख रहे हैं जो मुख्य रूप से एकल उद्धरण स्ट्रिंग्स का उपयोग करता है।
echo 'A $variable_literal that I have'.PHP_EOL.'looks better than'.PHP_EOL;
echo 'this other $one'."\n";
मैं WebCalendar का उपयोग कर रहा हूं और पाया कि मैक iCal बार-बार उत्पन्न जनरेट फ़ाइल को आयात करने पर रोक लगाता है क्योंकि अंत-की-लाइन xcal.php में "\ r \ n" के रूप में हार्डकोड की जाती है। मैं अंदर गया और PHP_EOL के साथ सभी घटनाओं को बदल दिया और अब iCal खुश है! मैंने विस्टा पर भी इसका परीक्षण किया और आउटलुक फ़ाइल को आयात करने में सक्षम था, भले ही लाइन चरित्र का अंत "\ n" हो।
\n
, तो स्पष्ट रूप से उपयोग करें।
जब jumi (PHP के लिए जूमला प्लगइन) किसी कारण से आपके कोड को संकलित करता है तो यह आपके कोड से सभी बैकस्लैश को हटा देता है। ऐसा कि जैसे कुछ $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 ग्राहक के लिए outputting। जरूर, PHP_EOL सर्वर साइड के लिए है, लेकिन php से ज्यादातर कंटेंट आउटपुट विंडोज़ क्लाइंट्स के लिए है। इसलिए मुझे अपने निष्कर्षों को अगले व्यक्ति के लिए यहां रखना होगा।
ए) 'मेरा पाठ' प्रतिध्वनि। PHP_EOL; // खराब क्योंकि यह सिर्फ \ n आउटपुट करता है और अधिकांश वर्जन विंडोज नोटपैड इसे एक ही लाइन पर प्रदर्शित करता है, और ज्यादातर विंडो अकाउंटिंग सॉफ्टवेयर इस तरह के लाइन कैरेक्टर के अंत में आयात नहीं कर सकते हैं।
बी) गूंज 'मेरा पाठ \ r \ n'; // खराब क्योंकि एकल उद्धृत php स्ट्रिंग्स \ r \ n की व्याख्या नहीं करते हैं
ग) "मेरा पाठ \ r \ n" प्रतिध्वनि; // ये काम करता है! नोटपैड में सही दिखता है, और फ़ाइल को अन्य विंडोज़ सॉफ़्टवेयर जैसे विंडोज़ अकाउंटिंग और विंडोज़ मैन्युफैक्चरिंग सॉफ़्टवेयर में आयात करते समय काम करता है।
मैं \ n \ r का उपयोग करना पसंद करता हूं। इसके अलावा, मैं एक विंडोज़ सिस्टम पर हूँ और \ n मेरे अनुभव में ठीक काम करता है।
चूंकि PHP_EOL नियमित अभिव्यक्तियों के साथ काम नहीं करता है, और ये पाठ से निपटने का सबसे उपयोगी तरीका है, तो मैंने वास्तव में कभी भी इसका उपयोग नहीं किया या इसके लिए आवश्यक नहीं था।