কখন এটি ব্যবহার করা ভাল ধারণা PHP_EOL
?
আমি কখনও কখনও পিএইচপি কোড স্যাম্পল এ এটি দেখতে। এটি কি ডস / ম্যাক / ইউনিক্সের শেষ লাইনের সমস্যাগুলি পরিচালনা করে?
কখন এটি ব্যবহার করা ভাল ধারণা PHP_EOL
?
আমি কখনও কখনও পিএইচপি কোড স্যাম্পল এ এটি দেখতে। এটি কি ডস / ম্যাক / ইউনিক্সের শেষ লাইনের সমস্যাগুলি পরিচালনা করে?
উত্তর:
হ্যাঁ, PHP_EOL
ক্রস-প্ল্যাটফর্ম-সামঞ্জস্যপূর্ণ উপায়ে নিউলাইন চরিত্রটি অনুসন্ধান করার জন্য অবশ্যই ব্যবহৃত হয়, তাই এটি ডস / ইউনিক্স সমস্যাগুলি পরিচালনা করে।
নোট করুন যে PHP_EOL বর্তমান সিস্টেমের জন্য শেষ রীতিটি উপস্থাপন করে । উদাহরণস্বরূপ, ইউনিক্সের মতো সিস্টেমে চালিত হওয়ার পরে এটি কোনও উইন্ডোজ এন্ডলাইন খুঁজে পাবে না।
PHP_EOL
ফর্ম থেকে পোস্ট করা ডেটার জন্য ব্যবহার করবেন না ।
থেকে main/php.h
পিএইচপি সংস্করণ 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"
(ম্যাকোএসএক্স সার্ভারগুলিতে)। এটি ভুল ছিল এবং 2012-03-01 এ বাগ 61193 সহ স্থির করা হয়েছে ।
অন্যরা ইতিমধ্যে আপনাকে বলেছে, আপনি যে PHP_EOL
কোনও ধরণের আউটপুট (যেখানে থাকতে পারেন) ব্যবহার করতে পারেন কোনো যেখানে আপনি একীভূত চাই: - এইচটিএমএল, এক্সএমএল, লগ ... মত এই মান বৈধ হয়) নতুন লাইন । মনে রাখবেন এটি এমন একটি সার্ভার যা এটি ক্লায়েন্টকে নয়, মান নির্ধারণ করে। আপনার উইন্ডোজ দর্শকরা আপনার ইউনিক্স সার্ভার থেকে মানটি পাবেন যা তাদের জন্য মাঝে মাঝে অসুবিধে হয়।
আমি কেবল PHP_EOL
পিএইচপি উত্সগুলি দ্বারা সমর্থিত সম্ভাব্য মানগুলি দেখাতে চেয়েছিলাম কারণ এটি এখানে এখনও প্রদর্শিত হয়নি ...
php -r "echo addcslashes(PHP_EOL, PHP_EOL), PHP_EOL;"
খুঁজে বের করতে.
আপনি PHP_EOL
যখন নতুন লাইন চান তখন ব্যবহার করুন এবং আপনি ক্রস প্ল্যাটফর্ম হতে চান।
আপনি যখন ফাইল সিস্টেমে (লগ, রফতানি, অন্যান্য) ফাইল লিখছেন তখন এটি হতে পারে।
আপনি যদি উত্পন্ন এইচটিএমএলকে পঠনযোগ্য হতে চান তবে আপনি এটি ব্যবহার করতে পারেন। সুতরাং আপনি আপনার <br />
সাথে অনুসরণ করতে পারেন PHP_EOL
।
আপনি যদি ক্রোন থেকে স্ক্রিপ্ট হিসাবে পিএইচপি চালিয়ে যাচ্ছেন এবং আপনার কোনও আউটপুট তৈরি করতে হবে এবং এটি কোনও স্ক্রিনের জন্য ফর্ম্যাট করা দরকার You
আপনি এটি ব্যবহার করতে পারেন যদি আপনি কোনও ফর্ম্যাটিংয়ের প্রয়োজন হয় এমন ইমেল প্রেরণ করতে যাচ্ছেন।
$header = "From: $from" . PHP_EOL; $header .= "Reply-To: $from" . PHP_EOL; $header .= "Return-Path: $from" . PHP_EOL;
PHP_EOL
ইমেল শিরোনাম পৃথক করার জন্য ব্যবহার করা উচিত নয়। পিএইচপি মেল ম্যানুয়াল অনুসারে , একাধিক অতিরিক্ত শিরোনামকে একটি সিআরএলএফ (\ r \ n) দিয়ে পৃথক করা উচিত।
PHP_EOL (স্ট্রিং) এই প্ল্যাটফর্মের জন্য সঠিক 'শেষের লাইনের' প্রতীক। পিএইচপি 4.3.10 এবং পিএইচপি 5.0.2 থেকে উপলব্ধ
আপনি যখন এই সার্ভারের ফাইল সিস্টেমে পাঠ্য ফাইলগুলি পড়েন বা লিখেন তখন আপনি এই ধ্রুবকটি ব্যবহার করতে পারেন।
বেশিরভাগ ক্ষেত্রেই লাইন সমাপ্তি গুরুত্বপূর্ণ নয় কারণ বেশিরভাগ সফ্টওয়্যার তাদের উত্স নির্বিশেষে পাঠ্য ফাইলগুলি পরিচালনা করতে সক্ষম। আপনার কোডের সাথে সামঞ্জস্য থাকা উচিত।
লাইন সমাপ্তিগুলি যদি গুরুত্বপূর্ণ হয় তবে ধ্রুবকটি ব্যবহার না করে স্পষ্টভাবে লাইন শেষগুলি নির্দিষ্ট করুন। উদাহরণ স্বরূপ:
\r\n
\r\n
আমি এমন একটি উত্তর দিতে চাই যা "যখন কখন নয় " ঠিক করে এটি ব্যবহার করতে" হিসেবে এটা এখনো আবৃত নয় হয়েছে এবং কল্পনা করতে পারেন এটি অন্ধভাবে ব্যবহৃত হচ্ছে এবং কোন ঠাহর এক সেখানে পরে লাইন নিচে পর্যন্ত কোন সমস্যা নয়। এর মধ্যে কয়েকটি বিদ্যমান উত্তরগুলির সাথে কিছুটা বিরোধিতা করে।
যদি HTML এ একটি ওয়েব পেজ থেকে outputting, বিশেষ করে পাঠ্য <textarea>
, <pre>
অথবা <code>
আপনি সম্ভবত সবসময় ব্যবহার করতে চান \n
এবং PHP_EOL
।
এর কারণ হ'ল কোডটি যখন একটি সেভারে ভাল কাজ করতে পারে - যা ইউনিক্সের মতো প্ল্যাটফর্ম হিসাবে দেখা যায় - যদি কোনও উইন্ডোজ হোস্টে স্থাপন করা হয় (যেমন উইন্ডোজ অ্যাজুরি প্ল্যাটফর্ম) তবে কোনও ব্রাউজারে পৃষ্ঠা কীভাবে প্রদর্শিত হবে তা পরিবর্তন করতে পারে (বিশেষত ইন্টারনেট এক্সপ্লোরার - এর কয়েকটি সংস্করণ both n এবং both r উভয়ই দেখতে পাবে)।
আমি নিশ্চিত নই যে এটি এখনও আই 6 since এর পরে একটি সমস্যা আছে বা না, তাই এটি মোটামুটি মোটা হতে পারে তবে এটি প্রাসঙ্গিকতা সম্পর্কে ভাবতে জনগণকে প্রম্পট করতে সহায়তা করে কিনা তা উল্লেখযোগ্য মনে হয়। অন্যান্য ক্ষেত্রেও থাকতে পারে (যেমন কঠোর এক্সএইচটিএমএল) যেখানে খুব সহজেই আউটপুট হয়\r
কিছু প্ল্যাটফর্মে খুব আউটপুট নিয়ে সমস্যা হতে পারে এবং আমি নিশ্চিত যে এর মতো আরও প্রান্তের কেস রয়েছে।
ইতিমধ্যে কারও দ্বারা উল্লিখিত হিসাবে, আপনি HTTP শিরোনাম ফেরত দেওয়ার সময় এটি ব্যবহার করতে চাইবেন না - কারণ তাদের যে কোনও প্ল্যাটফর্মে সর্বদা আরএফসিটি অনুসরণ করা উচিত।
আমি এটিকে CSV ফাইলগুলিতে ডিলিমিটারের মতো কোনও কিছুর জন্য ব্যবহার করব না (যেমন কেউ পরামর্শ দিয়েছেন)। সেভার প্ল্যাটফর্মটি চলমান প্ল্যাটফর্মটি উত্পন্ন বা গ্রাস করা ফাইলগুলিতে লাইন শেষ নির্ধারণ করা উচিত নয়।
আমি পিএইচপি_ইএল ফাইল হ্যান্ডলিংয়ের জন্য খুব দরকারী বলে খুঁজে পেয়েছি, বিশেষত যদি আপনি কোনও ফাইলে একাধিক লাইনের বিষয়বস্তু লিখছেন।
উদাহরণস্বরূপ, আপনার একটি দীর্ঘ স্ট্রিং রয়েছে যা আপনি সরল ফাইলটিতে লেখার সময় একাধিক লাইনে বিভক্ত করতে চান। \ R \ n ব্যবহার করা সম্ভবত কাজ করতে পারে না তাই আপনার স্ক্রিপ্টে পিএইচপি_ইওল রাখুন এবং ফলাফলটি দুর্দান্ত।
নীচে এই সাধারণ উদাহরণটি দেখুন:
<?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";
}
?>
না, পিএইচপি_ইএল এন্ডলাইন সমস্যাগুলি হ্যান্ডেল করে না, কারণ আপনি যে ধরণের ধ্রুবকটি ব্যবহার করেন সেই সিস্টেমটি সেই সিস্টেম নয় যেখানে আপনি আউটপুট প্রেরণ করেন।
আমি পিএইচপি_ইএল ব্যবহার করার পরামর্শ দিই না। ইউনিক্স / লিনাক্সের ব্যবহার \ n, ম্যাকোস / ওএস এক্স \ r থেকে \ n এ পরিবর্তিত হয়েছে এবং উইন্ডোজে অনেক অ্যাপ্লিকেশন (বিশেষত ব্রাউজারগুলি) এটি সঠিকভাবে প্রদর্শন করতে পারে। উইন্ডোজে, বিদ্যমান ক্লায়েন্ট-সাইড কোডটি কেবল \ n ব্যবহারের জন্য সহজ এবং সহজেই পশ্চাদপদ-সামঞ্জস্য বজায় রাখা সহজ: কেবল লাইন ছাঁটাইয়ের জন্য ডিলিমেটারটি \ r \ n থেকে \ n এ রূপান্তর করুন এবং এটি ফাংশনের মতো একটি ট্রিম () এ মোড়ক করুন ।
PHP_EOL এর সংজ্ঞাটি হ'ল এটি আপনাকে যে অপারেটিং সিস্টেমটিতে কাজ করছে তার নতুন লাইনের চরিত্র দেয়।
অনুশীলনে, আপনার প্রায় কখনও এটি প্রয়োজন হবে না। কয়েকটি বিষয় বিবেচনা করুন:
আপনি যখন ওয়েবে আউটপুট দিচ্ছেন, সত্যিকার অর্থে কোনও কনভেনশন নেই যা আপনার সামঞ্জস্যপূর্ণ হওয়া উচিত। যেহেতু বেশিরভাগ সার্ভারগুলি ইউনিক্সি তাই আপনি যাইহোক একটি "\ n" ব্যবহার করতে চান।
আপনি যদি কোনও ফাইলে আউটপুট দিচ্ছেন, তবে PHP_EOL ভাল ধারণা বলে মনে হতে পারে। তবে, আপনি আপনার ফাইলের অভ্যন্তরে আক্ষরিক নিউলাইন রেখে একইরকম প্রভাব ফেলতে পারবেন এবং আপনি যদি ইউনিক্সে বিদ্যমান নতুন লাইনগুলি ক্লোবার্ব না করে (দ্বৈত-বুট সিস্টেম সহ লোক হিসাবে) কিছু সিআরএলএফ ফর্ম্যাট করা ফাইল চালানোর চেষ্টা করছেন তবে এটি আপনাকে সাহায্য করবে , আমি বলতে পারি যে আমি পরবর্তী আচরণটি পছন্দ করি)
পিএইচপি_ইওএল এত হাস্যকরভাবে দীর্ঘ যে এটি ব্যবহার করার পক্ষে এটি সত্যই নয়।
একটি কার্যকর জায়গা রয়েছে যেখানে এটি কার্যকর হতে পারে: আপনি যখন এমন কোড লিখছেন যা মূলত একক উদ্ধৃতি স্ট্রিং ব্যবহার করে। এটি বিতর্কযোগ্য কিনা:
echo 'A $variable_literal that I have'.PHP_EOL.'looks better than'.PHP_EOL;
echo 'this other $one'."\n";
এর শিল্পটি ধারাবাহিক হতে হবে। '' এবং '' মেশানো এবং মিলে যাওয়ার সমস্যাটি হ'ল আপনি যখন দীর্ঘ স্ট্রিং পান, তখন আপনি কী ধরণের উদ্ধৃতি ব্যবহার করেছেন তা সন্ধান করতে চাই না।
জীবনের সমস্ত জিনিসের মতো এটি প্রসঙ্গে নির্ভর করে।
ডস / উইন্ডোজ স্ট্যান্ডার্ড "নিউলাইন" হ'ল সিআরএলএফ (= \ r \ n) এবং এলএফসিআর (\ n \ r) নয়। যদি আমরা পরে রাখি তবে এটি সম্ভবত কিছু অপ্রত্যাশিত (ভাল, বাস্তবে, প্রত্যাশিত ধরণের!: ডি) আচরণ তৈরি করতে পারে।
আজকাল প্রায় সমস্ত (সুস্পষ্ট লিখিত) প্রোগ্রামগুলি নিউলাইন কোডের জন্য ইউনিক্স স্ট্যান্ডার্ড এলএফ () n) গ্রহণ করে, এমনকি মেল প্রেরক ডেমোনস (আরএফসি সিআরএলএফকে শিরোনাম এবং বার্তার মূল অংশের জন্য নতুন লাইন হিসাবে সেট করে )।
আপনি একাধিক লাইন আউটপুট দিলে ত্রুটি_লগ () সহকারে কার্যকর Hand
বিকাশকারীরা স্ট্রিংগুলি ভেঙে ফেলার সময় বিকাশকারীরা ইউনিক্স এন্ডিং ধরে নিয়েছে বলে আমার উইন্ডো ইনস্টলটিতে অনেকগুলি ডিবাগ বিবৃতি অদ্ভুত দেখাচ্ছে।
আমি লিখতে হয়েছিল এমন কয়েকটি কমান্ড লাইনের স্ক্রিপ্টগুলিতে PHP_EOL ধ্রুবক ব্যবহার করি। আমি আমার স্থানীয় উইন্ডোজ মেশিনে বিকাশ করি এবং তারপরে একটি লিনাক্স সার্ভার বাক্সে পরীক্ষা করি। ধ্রুবকটির অর্থ ব্যবহার করে আমাকে বিভিন্ন প্ল্যাটফর্মের প্রতিটিটির জন্য সঠিক লাইনটি শেষ হওয়ার বিষয়ে চিন্তা করতে হবে না।
আমার একটি সাইট রয়েছে যেখানে কোনও লগিং-স্ক্রিপ্ট ব্যবহারকারীর কাছ থেকে একটি ক্রিয়াকলাপের পরে পাঠ্যপুস্তকে একটি নতুন লাইন লেখায়, যিনি কোনও ওএস ব্যবহার করতে পারেন।
PHP_EOL ব্যবহার করা এক্ষেত্রে অনুকূল বলে মনে হয় না। যদি ব্যবহারকারী ম্যাক ওএসে থাকে এবং টেক্সটফাইলে লিখেন \ n। উইন্ডোজ কম্পিউটারে টেক্সটফিলটি খোলার সময় এটি একটি লাইন বিরতি প্রদর্শন করে না। এই কারণে আমি তার পরিবর্তে "\ r \ n" ব্যবহার করি যা কোনও ওএসে ফাইল খোলার সময় কাজ করে।
আপনি এমন কোড লিখছেন যা মূলত একক উদ্ধৃতি স্ট্রিং ব্যবহার করে।
echo 'A $variable_literal that I have'.PHP_EOL.'looks better than'.PHP_EOL;
echo 'this other $one'."\n";
আমি ওয়েবক্যালেন্ডারটি ব্যবহার করছি এবং খুঁজে পেলাম যে ম্যাক আইসিএল বার্ফগুলি একটি উত্পাদিত আইসিএস ফাইল আমদানি করতে পারে কারণ লাইনটির শেষ প্রান্তটি xcal.php এ "\ r \ n" হিসাবে হার্ডকোডযুক্ত। আমি andুকে গিয়ে সমস্ত ঘটনা পিএইচপি_ইএল দিয়ে প্রতিস্থাপন করেছি এবং এখন আইসিএল খুশি! আমি এটি ভিস্তার উপরও পরীক্ষা করেছি এবং আউটলুক ফাইলটি আমদানি করতে সক্ষম হয়েছিল, যদিও লাইন চরিত্রের শেষ "\ n" হয়।
\n
তা স্পষ্টভাবে ব্যবহার করুন।
যখন জুমি (পিএইচপি জন্য জুমলা প্লাগইন) কোনও কারণে আপনার কোডটি সংকলন করে এটি আপনার কোড থেকে সমস্ত ব্যাকস্ল্যাশ সরিয়ে দেয়। যেমন কিছু$csv_output .= "\n";
হয়ে যায়$csv_output .= "n";
খুব বিরক্তিকর বাগ!
আপনি পরে ছিলেন ফলাফল পেতে পরিবর্তে PHP_EOL ব্যবহার করুন।
কিছু ধরণের সিস্টেমে এই ধ্রুবকটি ব্যবহার করা কার্যকর হতে পারে কারণ, উদাহরণস্বরূপ, আপনি যদি কোনও ইমেল প্রেরণ করছেন, আপনি আরও সিস্টেমে ক্রস-সিস্টেম স্ক্রিপ্ট ব্যবহার করার জন্য PHP_EOL ব্যবহার করতে পারেন ... তবে এটি কার্যকর থাকলেও আপনি এটি খুঁজে পেতে পারেন ধ্রুবক অপরিজ্ঞাত, সর্বশেষ পিএইচপি ইঞ্জিন সহ আধুনিক হোস্টিংয়ের এই সমস্যাটি নেই তবে আমি মনে করি যে ভাল জিনিসটি এই পরিস্থিতিটি সংরক্ষণ করে একটি বিট কোড লিখবে:
<?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");
}
}
?>
সুতরাং আপনি সমস্যা ছাড়াই পিএইচপি_ইএল ব্যবহার করতে পারেন ... স্পষ্টতই পিএইচপি_ইএল স্ক্রিপ্টে ব্যবহার করা উচিত যা আরও একবারে আরও সিস্টেমে কাজ করা উচিত অন্যথায় আপনি \ n বা \ r বা \ r \ n ব্যবহার করতে পারেন ...
দ্রষ্টব্য: PHP_EOL হতে পারে
1) on Unix LN == \n
2) on Mac CR == \r
3) on Windows CR+LN == \r\n
এই উত্তর সাহায্য আশা করি।
উইন্ডোজ ক্লায়েন্টের কাছে আউটপুট দেওয়ার সময় আমি এই সমস্যাটি কেবল अनुभव করেছি। অবশ্যই, PHP_EOL সার্ভার সাইডের জন্য, তবে পিএইচপি থেকে বেশিরভাগ সামগ্রীর আউটপুট উইন্ডো ক্লায়েন্টদের জন্য for সুতরাং আমাকে আমার অনুসন্ধানগুলি পরবর্তী ব্যক্তির জন্য এখানে রাখতে হবে।
ক) 'আমার পাঠ্য' প্রতিধ্বনি করুন। PHP_EOL; // খারাপ কারণ এটি কেবলমাত্র আউটপুট করে \ n এবং উইন্ডোজ নোটপ্যাডের বেশিরভাগ সংস্করণ এটিকে একক লাইনে প্রদর্শন করে এবং বেশিরভাগ উইন্ডোজ অ্যাকাউন্টিং সফ্টওয়্যার এই ধরণের লাইন চরিত্রের শেষটি আমদানি করতে পারে না।
খ) 'আমার পাঠ্য \ r \ n' প্রতিধ্বনি; // খারাপ কারণ একক উদ্ধৃত পিএইচপি স্ট্রিং interpret r \ n ব্যাখ্যা করে না
গ) "আমার পাঠ্য" r \ n "প্রতিধ্বনি; // ইয়ে এটি কাজ করে! নোটপ্যাডে সঠিক দেখাচ্ছে এবং অন্য উইন্ডোজ সফ্টওয়্যার যেমন উইন্ডোজ অ্যাকাউন্টিং এবং উইন্ডোজ উত্পাদন সফ্টওয়্যারটিতে ফাইলটি আমদানি করার সময় কাজ করে।
আমি use n \ r ব্যবহার করতে পছন্দ করি। এছাড়াও আমি একটি উইন্ডোজ সিস্টেমে আছি এবং experience n আমার অভিজ্ঞতায় ঠিক কাজ করে।
যেহেতু পিএইচপি_ইএল নিয়মিত প্রকাশের সাথে কাজ করে না, এবং এগুলি পাঠ্যের সাথে ডিল করার সবচেয়ে কার্যকর উপায়, তবে আমি সত্যিই এটি কখনই ব্যবহার করি নি বা এর প্রয়োজনও নেই।