কেন একটি ঘনিষ্ঠ ট্যাগ বাদ দিতে হবে?


373

আমি পড়া চালিয়ে যাচ্ছি ?>ফাইলটির শেষে পিএইচপি ক্লোজ ট্যাগ ব্যবহার করা খারাপ অভ্যাস । নিম্নলিখিত প্রসঙ্গে শিরোনাম সমস্যাটি অপ্রাসঙ্গিক বলে মনে হচ্ছে (এবং এটি এখন পর্যন্ত একমাত্র ভাল যুক্তি):

পিএইচপি-র আধুনিক সংস্করণগুলি php.ini এ আউটপুট_ বাফারিং পতাকা সেট করে যদি আউটপুট বাফারিং সক্ষম করা হয়, আপনি এইচটিএমএল আউটপুট দেওয়ার পরে HTTP শিরোনাম এবং কুকিজ সেট করতে পারেন কারণ ফেরত কোডটি তাত্ক্ষণিক ব্রাউজারে প্রেরণ করা হয়নি।

প্রতিটি ভাল অনুশীলন বই এবং উইকি এই 'নিয়ম' দিয়ে শুরু হয় তবে কেউই ভাল কারণ দেয় না। শেষের পিএইচপি ট্যাগটি এড়িয়ে যাওয়ার আরও কি ভাল কারণ আছে?


3
এর সম্ভাব্য সদৃশ [কিছু স্ক্রিপ্টগুলিতে তারা সমাপনী পিএইচপি ট্যাগটি বাদ দেয় কেন?>] ( স্ট্যাকওভারফ্লো.com / প্রশ্নস / ৩১২৯৩83৩/২ )
গর্ডন

@ ক্রিশ্চিয়ান - আপনার অর্থ এই যে আউটপুট_বাফারিংটি অলস, বা ছেড়ে দেওয়া ?>অলস?
এল ইয়াবো

4
@ গর্ডন - আমি মনে করি না যে এটি কোনও দ্বিধা নয়, ওপি অপ্রচলিত কারণগুলি জানে, কেবল এটি জানতে চায় যে এটি আউটপুট বাফারিংয়ের সাথে সম্পূর্ণ সমাধান হয়েছে কিনা।
এল ইয়াবো

5
আরও ভাল প্রশ্ন হতে পারে: কেন একটি ঘনিষ্ঠ ট্যাগ অন্তর্ভুক্ত করা হবে? কোড খারাপ। সেরা কোডটি কোনও কোড নয়। কোড দিয়ে সমাধানের পরিবর্তে যদি কোনও সমস্যা দূর করা যায় তবে কোড থাকার চেয়ে এটি ভাল। এই ক্ষেত্রে, কোনও সমস্যা সমাধান করার প্রয়োজন নেই। কোডটি ট্যাগ না করে সূক্ষ্মভাবে কাজ করে।
এখনও_ড্রিমিং_1

19
ওহ godশ্বর, এটি ট্যাব বনাম স্পেসের পবিত্র যুদ্ধের জায়গা নয়, হ'ল :)
কেভিন হুইলার

উত্তর:


321

সাধারণ পাঠক্রমের আগে শিরোনাম পাঠানো সুদূরপ্রসারী পরিণতি হতে পারে। এই মুহুর্তে আমার মনে আসার মত কয়েকটি নীচে রয়েছে:

  1. বর্তমানের পিএইচপি রিলিজগুলিতে আউটপুট বাফারিং থাকতে পারে, আপনি যে কোডটি ব্যবহার করছেন প্রকৃত উত্পাদন সার্ভারগুলি কোনও বিকাশ বা পরীক্ষার মেশিনের চেয়ে অনেক বেশি গুরুত্বপূর্ণ। এবং তারা সর্বদা সর্বনিম্ন পিএইচপি ট্রেন্ডগুলি অবিলম্বে অনুসরণ করার ঝোঁক করে না।

  2. অবর্ণনীয় কার্যকারিতা হ্রাস নিয়ে আপনার মাথাব্যথা হতে পারে । বলুন, আপনি কিছু প্রকারের পেমেন্ট গেটওয়ে বাস্তবায়ন করছেন এবং পেমেন্ট প্রসেসরের সফল নিশ্চিতকরণের পরে ব্যবহারকারীকে একটি নির্দিষ্ট ইউআরএলে পুনঃনির্দেশ করুন। যদি কোনও ধরণের পিএইচপি ত্রুটি, এমনকি একটি সতর্কতা বা একটি অতিরিক্ত লাইন শেষ হয়ে যায়, অর্থ প্রদানটি অপ্রসারণযোগ্য হতে পারে এবং ব্যবহারকারী এখনও বিল বোধহয় হতে পারে। অপ্রয়োজনীয় পুনঃনির্দেশটি খারাপ কারণ এটির একটি কারণ এবং যদি পুনঃনির্দেশটি ব্যবহার করতে হয় তবে এটি অবশ্যই সাবধানতার সাথে ব্যবহার করা উচিত।

  3. এমনকি ইন্টারনেটের এক্সপ্লোরারে এমনকি "সাম্প্রতিক সংস্করণগুলিতে" পৃষ্ঠা লোডিং বাতিল করা হয়েছে type এটি কারণ যে কোনও এজেএক্স প্রতিক্রিয়া / জেসসন অন্তর্ভুক্ত এমন কিছু রয়েছে যা এতে থাকা উচিত নয়, কিছু পিএইচপি ফাইলগুলিতে অতিরিক্ত লাইন শেষ হওয়ার কারণে, যেমনটি আমি কয়েকদিন আগে মুখোমুখি হয়েছিলাম।

  4. আপনার অ্যাপ্লিকেশনটিতে যদি কিছু ফাইল ডাউনলোড থাকে তবে সেগুলিও এটি ভেঙে যেতে পারে। এবং আপনি এটি বছরের পর বছর পরেও লক্ষ্য করতে পারবেন না, যেহেতু ডাউনলোডের নির্দিষ্ট ব্রেকিং অভ্যাসটি সার্ভার, ব্রাউজার, ফাইলের ধরণ এবং বিষয়বস্তুর উপর নির্ভর করে (এবং সম্ভবত কিছু অন্যান্য কারণ যা আমি আপনাকে জাগাতে চাই না) ।

  5. পরিশেষে, সিমফনি , জেন্ড এবং লারাভেল সহ অনেকগুলি পিএইচপি ফ্রেমওয়ার্ক ( কোডিং গাইডলাইনসে এর কোনও উল্লেখ নেই তবে এটি মামলা অনুসরণ করে) এবং পিএসআর -২ স্ট্যান্ডার্ড (আইটেম ২.২) এর ক্লোজিং ট্যাগ বাদ দেওয়া দরকার। পিএইচপি ম্যানুয়াল নিজেই ( 1 , 2 ), ওয়ার্ডপ্রেস , দ্রুপাল এবং অন্যান্য অনেক পিএইচপি সফ্টওয়্যার আমার ধারণা, এটি করার পরামর্শ দেয়। যদি আপনি কেবল স্ট্যান্ডার্ড অনুসরণ করার অভ্যাস করেন (এবং আপনার কোডের জন্য পিএইচপি-সিএস-ফিক্সার সেটআপ করুন ) তবে আপনি সমস্যাটি ভুলে যেতে পারেন। অন্যথায় আপনার সমস্যাটি সবসময় আপনার মনে রাখা দরকার।

বোনাস: এই 2 টি অক্ষরের সাথে সম্পর্কিত কয়েকটি গ্যাটাচস (আসলে বর্তমানে একটি):

  1. এমনকি কিছু সুপরিচিত লাইব্রেরিতে অতিরিক্ত লাইন শেষের পরে থাকতে পারে ?>। উদাহরণ হ'ল স্মার্ট, এমনকি সাম্প্রতিকতম সংস্করণ ২. * এবং ৩. * শাখায় এটি রয়েছে। সুতরাং, সর্বদা হিসাবে, তৃতীয় পক্ষের কোডের জন্য দেখুন । বোনাসে বোনাস: অযথা পিএইচপি শেষগুলি মোছার জন্য একটি রেজেক্স: পিএইচপি কোডযুক্ত (\s*\?>\s*)$সমস্ত ফাইলের খালি পাঠ্য প্রতিস্থাপন করুন ।

কিছুটা আলাদা রেইগেক্স আমি নেটবিয়ান আইডিই-র সাথে ট্যাগগুলি সন্ধান করতাম এবং প্রতিস্থাপন কথোপকথনের জন্য ব্যবহার করতাম : \?>(?s:.){0,10}\Z সংক্ষিপ্ত বিবরণ: changeset.hr/blog/miscellaneous/catch-near-eof-with-regex
frnhr

@Cek, এটা কোনো টেক্সট ক্যাচ -including code- যে 10 টি অক্ষর বা তার পরে কম ?>: যেমন মিলবে -আর delete- হবে ?> Helloমধ্যে <?php echo "test"; ?> Hello। আমরা কেবল নিকটবর্তী ট্যাগগুলি সাফ করতে চাই।
হালিল Özgür

6
সবচেয়ে খারাপ, পিএইচপি 5.4 সহ অ্যাপাচি ২.৪.। আসলে আমাদের প্রডাকশন মেশিনে ফল্টগুলি সিগ করে দেয় যখন ক্লোজিং ট্যাগের পিছনে ফাঁকা জায়গা থাকে। অবশেষে স্ট্রেসের সাহায্যে বাগটি সঙ্কুচিত না করা পর্যন্ত আমি কয়েক ঘন্টা নষ্ট করেছি। এখানে ত্রুটি যা Apache ছোঁড়ার হল: [core:notice] [pid 7842] AH00052: child pid 10218 exit signal Segmentation fault (11)
আর্টেম রাশাকোভস্কিই

3
@ আইএনটিপিএন ওহ, প্রশ্ন এবং বেশিরভাগ উত্তরই শিরোনামের বিষয়টিকে উল্লেখ করে, তাই আমি ধরে নিয়েছি যে এই থ্রেডটি যে কেউ পড়ছেন সে সম্পর্কে এটি সম্পর্কে ধারণা থাকবে। অন্তর্নিহিত ইস্যু এবং এখানে অনেক উত্তরের সমস্যার আসল কারণ হ'ল অনির্ধারিত সাদা স্থান ?>, যা (কোনও আউটপুটের মতো) আউটপুট হওয়ার সাথে সাথেই শিরোনামকে প্রেরণ করে। কোনও "এইচটিএমএল শিরোনাম" নেই (সম্পর্কযুক্ত HTML5 <header>ট্যাগ ব্যতীত)।
হালিল Özgür

2
বিশ্বব্যাপী পরিবর্তনকারী: \ s * \?> \ S * \ Z এর শেষে '\ Z' লক্ষ্য করুন এটির কাজ করা উচিত। এটি নিশ্চিত করে যে আপনি কোনও পিএইচপি ক্লোজিং ট্যাগ ক্যাপচার করছেন এবং কেবলমাত্র যদি এটি ফাইলের একেবারে শেষ অবধি সাদা-স্থান হয়।
এরুতান 409

122

আপনার পিএইচপি বন্ধ করার ট্যাগটি ( ?>) ছাড়ার কারণটি হ'ল যাতে প্রোগ্রামারটি দুর্ঘটনাক্রমে অতিরিক্ত নতুন লাইন অক্ষর না প্রেরণ করে।

পিএইচপি ক্লোজিং ট্যাগটি আপনাকে ছেড়ে না দেওয়ার কারণ হ'ল পিএইচপি ট্যাগগুলিতে ভারসাম্যহীনতা সৃষ্টি হয় এবং অর্ধেক মনযুক্ত কোনও প্রোগ্রামার অতিরিক্ত সাদা-স্থান যুক্ত না করার কথা মনে করতে পারে।

সুতরাং আপনার প্রশ্নের জন্য:

শেষের পিএইচপি ট্যাগটি এড়িয়ে যাওয়ার আরও কি ভাল কারণ আছে?

না, শেষ পিএইচপি ট্যাগগুলি এড়িয়ে যাওয়ার আরও ভাল কারণ নেই।

সমাপনী ট্যাগ নিয়ে বিরক্ত না করার জন্য আমি কিছু যুক্তি দিয়ে শেষ করব:

  1. তারা যত স্মার্ট হোক না কেন লোকেরা সর্বদা ভুল করতে সক্ষম হয়। এমন অনুশীলনের সাথে চলা যা সম্ভাব্য ভুলের সংখ্যা হ্রাস করে (আইএমএইচও) একটি ভাল ধারণা।

  2. পিএইচপি এক্সএমএল নয়। পিএইচপি ভাল লিখিত এবং কার্যকরী হতে এক্সএমএল কঠোর মান মেনে চলতে হবে না। যদি কোনও অনুপস্থিত সমাপনী ট্যাগ আপনাকে বিরক্ত করে, আপনি একটি ক্লোজিং ট্যাগ ব্যবহার করার অনুমতি পাচ্ছেন, এটি কোনও উপায়ে বা অন্য কোনওভাবে সেট-ইন-স্টোন নিয়ম নয়।


2
> অর্ধেক মনযুক্ত যে কোনও প্রোগ্রামার অতিরিক্ত সাদা-স্থান যুক্ত না করার কথা মনে করতে পারে। আরও ভাল, মনের সাথে ১/২ জন যে কোনও বিকাশকারী এসভিসিতে একটি প্রি কমিট হুক যুক্ত করতে পারে যাতে কোনও চলমান স্থান স্বয়ংক্রিয়ভাবে মুছে ফেলা হয়: কোনও গোলমাল, কোনও গন্ধ নেই।
ব্রায়ানএইচ

6
@ ব্রায়ানএইচ, আপনার কাছে এমন কোনও ফাইল না পাওয়া পর্যন্ত যেখানে সাদা স্থানের অনুসরণ করা একেবারে প্রয়োজনীয়, তবে এটি খুব বিরল।
zzzzBov

1
আপনি ঠিক বলেছেন, অবশ্যই পরীক্ষা করে দেখুন মারিও এর উত্তর কিছু খুব শান্ত বিকল্প জন্য।
ব্রায়ানএইচ

> "পিএইচপি ক্লোজিং ট্যাগটি আপনাকে ছেড়ে না দেওয়ার কারণ হ'ল পিএইচপি ট্যাগগুলিতে ভারসাম্যহীনতা সৃষ্টি হয় এবং অর্ধেক মনযুক্ত যে কোনও প্রোগ্রামার অতিরিক্ত সাদা স্থান যুক্ত না করার কথা মনে করতে পারে" " উইন্ডোজ, সম্ভবত। ইউনিক্স-মতো সিস্টেমে সমস্ত ফাইল end n দিয়ে শেষ হয় এবং প্রোগ্রামগুলি এটি আপনার জন্য যুক্ত করে। সম্পাদনা: আহা! @ এমিরো দ্বারা নীচে উল্লিখিত হিসাবে, পিএইচপি আসলে এটি খায়।
Andrea

2
আরও তাত্পর্যপূর্ণ এটি হ'ল এমনকি মনের দ্বিগুণ দ্বিগুণ প্রোগ্রামাররাও মানুষ এবং কিছু কিছু ভুলে যায়।
সেবাস্তিয়ান মাচ

57

এটি একটি নবাগত কোডিং শৈলীর সুপারিশ , ভাল উদ্দেশ্য এবং ম্যানুয়াল দ্বারা পরামর্শ দেওয়া ।

  • এসকিউইং ইতিমধ্যে প্রেরিত সাধারণ শিরোনামগুলির (কাঁচা আউটপুট, বিওএম , নোটিশগুলি ইত্যাদি) এবং তাদের ফলো-আপ সমস্যাগুলির ?>সমাধান করে a

  • পিএইচপি আসলে ?>ক্লোজিং টোকেন পরে একক লাইনব্রেক আপ খেতে কিছু জাদু আছে । তবে এটিতে historicতিহাসিক সমস্যা রয়েছে এবং নতুন আগত ব্যক্তিরা ফ্লেকি সম্পাদকদের কাছে এখনও স্পর্শকাতর এবং অজানাভাবে অন্যান্য হোয়াইটস্পেসে পরিবর্তিত হয়ে যায় ?>

  • স্টাইলিস্টিকভাবে কিছু বিকাশকারী এসজিএমএল ট্যাগগুলি / এক্সএমএল প্রসেসিংয়ের নির্দেশাবলী হিসাবে দেখতে পছন্দ করেন <?phpএবং ?>এটি একটি পিছনের টোকেনের ব্যালেন্সের সামঞ্জস্যতা বোঝায়। (কোন বিটিডব্লিউ, নির্ভরতা-সংযুক্ত শ্রেণীর জন্য দরকারী অটল ফাইল-বাই-ফাইল অটলয়েডিং সরবরাহ করা অন্তর্ভুক্ত))

  • কিছুটা অসাধারণভাবে খোলার <?phpহিসাবে PHPs চিহ্নিত করা কুঁড়েঘর (এবং প্রতি সম্পূর্ণরূপে সম্ভবপর binfmt_misc ,) যার ফলে একটি সংশ্লিষ্ট ঘনিষ্ঠ ট্যাগের অতিরেক বৈধতা দান করে।

  • ক্লাসিক পিএইচপি সিনট্যাক্স গাইডের বাধ্যতামূলককরণ ?>\nএবং আরও সাম্প্রতিক বিষয়গুলির (পিএসআর -২) বাদ দেওয়ার বিষয়ে একমত হওয়ার মধ্যে একটি সুস্পষ্ট পরামর্শের তফাত রয়েছে ।
    (রেকর্ডের জন্য: জেন্ড ফ্রেম ওয়ার্ক একের পর এক পোস্ট করা তার সহজাত শ্রেষ্ঠত্ব বোঝায় না experts এটি একটি ভুল ধারণা যে বিশেষজ্ঞরা অনর্থক এপিআইয়ের দর্শকদের / টার্গেট করা হয়েছিল)।

  • এসসিএম এবং আধুনিক আইডিইগুলি অন্তর্নির্মিত সমাধান সরবরাহ করে যা বেশিরভাগ ক্লোজ ট্যাগ কেয়ারটেকিংকে হ্রাস করে।

অবিচ্ছিন্ন ?>সমস্যাগুলি রোধে কেবলমাত্র বেসিক পিএইচপি প্রক্রিয়াজাতকরণ আচরণ এবং ভাষা শব্দার্থ ব্যাখ্যা করার ক্ষেত্রে ঘনিষ্ঠ ট্যাগটির কোনও ব্যবহারকে নিরুৎসাহিত করা । অংশগ্রহণকারীদের দক্ষতার পার্থক্যের কারণে এটি এখনও সহযোগী সফ্টওয়্যার বিকাশের জন্য ব্যবহারিক

ট্যাগের বিভিন্নতা বন্ধ করুন

  • নিয়মিত ?> ঘনিষ্ঠ ট্যাগ এছাড়াও হিসাবে পরিচিত হয় T_CLOSE_TAG, অথবা এইভাবে "ঘনিষ্ঠ টোকেন"।

  • এটিতে আরও কয়েকটি অবতার রয়েছে, পিএইচপিগুলি যাদু নিউলাইন খাওয়ার কারণে :

    ?>\n (ইউনিক্স লাইনফিড)

    ?>\r (ক্যারেজ রিটার্ন, ক্লাসিক এমএসি)

    ?>\r\n (সিআর / এলএফ, ডস / উইনে)

    পিএইচপি তবে ইউনিকোড কম্বো লাইনব্রেক NEL(ইউ + 0085) সমর্থন করে না ।

    প্রারম্ভিক পিএইচপি সংস্করণগুলিতে আইআইআরসি সংকলন-ইনগুলি প্ল্যাটফর্ম-অজ্ঞানবাদকে কিছুটা সীমাবদ্ধ করেছিল (এফআই এমনকি >নিকটবর্তী চিহ্নিতকারী হিসাবে ব্যবহৃত ), এটি সম্ভবত ঘনিষ্ঠ-ট্যাগ-এড়ানোর সম্ভাব্য originতিহাসিক উত্স।

  • প্রায়শই উপেক্ষা করা হয়, তবে যতক্ষণ না পিএইচপি 7 এগুলি সরিয়ে না দেয় ততক্ষণ নিয়মিত <?phpখোলার টোকেনটি বৈষম্যভাবে ক্লোজিং টোকেন হিসাবে বিরল ব্যবহৃত ব্যবহৃত সঙ্গে বৈধভাবে যুক্ত করা যায় ।</script>

  • " হার্ড ক্লোজ ট্যাগ " এমনকি একটি নয় - সাদৃশ্যটির জন্য কেবল এই শব্দটি তৈরি করা হয়েছে। ধারণাগতভাবে এবং ব্যবহারের ভিত্তিতে __halt_compilerনিকটতম টোকেন হিসাবে স্বীকৃত হওয়া উচিত।

    __HALT_COMPILER();
    ?>

    যার মূলত টোকনাইজার এর পরে কোনও কোড বা সরল এইচটিএমএল বিভাগ বাতিল করে। বিশেষত পিএইচএআর স্টাবগুলি এটি ব্যবহার করে বা ?>চিত্রিত হিসাবে এটির অপ্রয়োজনীয় সংমিশ্রণটি করে ।

  • তেমনি একটি অকার্যকরreturn; স্ক্রিপ্ট অন্তর্ভুক্ত এর ?>অভাবনীয়ভাবে পরিবর্তিত হয়, সাদা স্থান স্পেসিফিক কিছুই সঙ্গে রেন্ডারিং ।

  • তারপরে সমস্ত ধরণের নরম / ছদ্মবেশের ক্লগ ট্যাগের বিভিন্নতা রয়েছে; কম পরিচিত এবং খুব কম ব্যবহৃত হয়, তবে সাধারণত প্রতি মন্তব্য-আউট টোকেন:

    • // ? >পিএইচপি টোকেনাইজার দ্বারা সনাক্তকরণ এড়ানোর জন্য সহজ ব্যবধান ।

    • বা অভিনব ইউনিকোড বিকল্পগুলি // ﹖﹥(ইউ + FE56 ছোট কোয়েরেশন মার্ক, ইউ + ফী 65 ছোট অ্যাঙ্গেল ব্র্যাকেট) যা একটি রেজিপেক্স বুঝতে পারে।

    উভয়ই পিএইচপি-র কিছুই বোঝায় না , তবে পিএইচপি-অজ্ঞাত বা আধা-সচেতন বাহ্যিক টুলকিটগুলির ব্যবহারিক ব্যবহার থাকতে পারে। আবার catযোগদানকারী স্ক্রিপ্টগুলি মনে আসে, ফলস্বরূপ যুক্তি দিয়ে // ? > <?phpযে প্রাক্তন ফাইল বিভাগকরণটি ইনলাইন-বজায় রাখে।

অতএব একটি অত্যাবশ্যক ক্লোজ ট্যাগ বাদ দেওয়ার জন্য প্রাসঙ্গিক নির্ভর কিন্তু ব্যবহারিক বিকল্প রয়েছে।

?>নিকটবর্তী ট্যাগগুলির ম্যানুয়াল বেবিসিটিং কোনওভাবেই খুব সমসাময়িক নয়। এর জন্য সর্বদা অটোমেশন সরঞ্জাম রয়েছে (এমনকি যদি কেবল সেড / অ্যাজক বা রেজেক্স-অনেলাইনারও থাকে)। নির্দিষ্টভাবে:

phptags ট্যাগ টিডিয়ার

https://fossil.include-once.org/phptags/

যা সাধারণত --uncloseতৃতীয় পক্ষের কোডের জন্য ট্যাগ পিএইচপি করতে ব্যবহৃত হতে পারে , বা কেবল কোনও (এবং সমস্ত) প্রকৃত সাদা স্থান / বিওএম সমস্যা সমাধান করতে পারে:

  • phptags --warn --whitespace *.php

এটি --longরানটাইম / কনফিগারেশন সামঞ্জস্যের জন্য ট্যাগ রূপান্তর ইত্যাদি পরিচালনা করে ।


7
হ্যাঁ, ভোঁতা এবং উস্কানিমূলক ফ্রেসিংগুলি ডাউনভোটগুলিকে আকর্ষণ করে। সময়ের সাথে আমি যা পড়েছি তা থেকে ক্লোজিং টোকেন ছেড়ে যাওয়া যতক্ষণ না আপনি যে সফ্টওয়্যারটি পরিচালনা করতে পারবেন না তার সাথে কাজ না করে ততক্ষণ কোনও ডাউনসাইড নেই। আপনি যদি প্রমাণ করতে না পারেন যে ক্লোজিং টোকেন বাদ দেওয়া খারাপ এবং খুব করণীয় কাজ, তবে আমার
ডাউনওয়েট রয়ে যায়

2
@ পিচান: আমি অনুমতি দেব। তবে আমি অনুমান করি আপনি এখানে কি বলা হচ্ছে তা বেশ বুঝতে পারেন নি। Escieveing ​​এবং এড়ানো দুটি পৃথক জিনিস। এবং অর্ধেক সমস্যার সমাধান হ'ল সাপের তেলের পরামর্শের ফলাফল।
মারিও

6
@ মারিও: এটি একটি নবাগত কোডিং শৈলীর প্রস্তাব । আমি একমত নই পুরো জেন্ড ফ্রেমওয়ার্কটি নিকটে থাকা ট্যাগগুলি বাদ দেয়। আমি মনে করি এটি একটি খুব ব্যক্তিগত পছন্দ, আমি আমার <? পিএইচপি খুলতে পছন্দ করি এবং আমি কোনও
নবজাতককে

1
এইচটিএমএল সম্পর্কে কি? তাহলে কি দরকার? পরীক্ষার জন্য <?php if($var): ?>Hello World<?php endif; ?>??? এটি নির্দিষ্টভাবে উল্লেখ করা হয়নি বলে আমি সত্যই কৌতূহলী।
WASasquatch

1
@ ওয়াশকাউচ হ্যাঁ যদি আপনি এইচটিএমএল এবং পিএইচপি মোডের মধ্যে স্যুইচ করেন তবে আপনার যেকোন ক্ষেত্রে ঘনিষ্ঠ টোকেনের প্রয়োজন। (এখানে মূল প্রশ্নের সাথে সত্যই প্রাসঙ্গিক নয়))
মারিও

22

এটি কোনও ট্যাগ নয় ...

তবে আপনার যদি এটি থাকে তবে আপনার পরে সাদা জায়গা থাকার ঝুঁকি রয়েছে।

তারপরে আপনি যদি এটি কোনও নথির শীর্ষে অন্তর্ভুক্ত হিসাবে ব্যবহার করেন তবে আপনি HTTP শিরোনাম প্রেরণের চেষ্টা করার আগে সাদা স্থান (অর্থাত্ সামগ্রী) সন্নিবেশ করতে পারেন ... যা অনুমোদিত নয়।


10
এটি যদি ট্যাগ না হয় তবে তা কী?
ডানিডাকর

আপনি একটি উদাহরণ প্রদান করতে পারেন? হতে পারে আমার পিএইচপি কনফিগারেশনটি ভুল, তবে আমি সমস্যাটি পুনরুত্পাদন করতে পারি না।
ডানিডাকর

2
file1.php: <?php $i = 1; ?> তারপরে file2.php:<?php include 'file1.php'; header('Location: http://www.google.com');?>
কোয়ান্টিন

1
আউটপুট বাফারিংয়ের ডাউনসাইডও রয়েছে; এটি সার্ভারে আরও মেমরি ব্যবহার করে (যেমন আউটপুট না হওয়া পর্যন্ত সমস্ত আউটপুট র‌্যামে সংরক্ষণ করতে হয়; বাফারিং ছাড়াই এটি সরাসরি চলে যায়)। এটি কখনও এত সামান্য ধীর। এগুলির কোনওটিই বেশিরভাগ ক্ষেত্রেই সমস্যা হবে না তবে আমি যাই হোক অলস, তাই কেন কেবল ক্লোজিং ট্যাগটি বন্ধ রাখবেন না? আমি phpcsনিশ্চিত হয়েছি যে ক্লোজিং ট্যাগটি আমার প্রতিটি ফাইলের মধ্যে রয়েছে এবং তারপরে আমি আউটপুট বাফারিংয়ের বিষয়ে চিন্তা করব না :)
এল ইয়োবো

1
@ উদ্দীপ: আপনি যদি পিএইচপি কনফিগারেশন ফাইলে আউটপুট_ বাফার পতাকাটি সেট করে থাকেন তবে আপনি এই সমস্যাটি পুনরুত্পাদন করতে পারবেন না।
জিচাও

16

এটি বন্ধ হতে না দেওয়া বেশ কার্যকর ?>

ফাইলটি পিএইচপি-তে বৈধ থাকে (সিনট্যাক্স ত্রুটি নয়) এবং @ ডেভিড ডরওয়ার্ড বলেছিলেন যে এটি পরে সাদা স্থান / ব্রেক-লাইন (ব্রাউজারে একটি শিরোনাম পাঠাতে পারে এমন কোনও কিছুই) এড়াতে দেয় ?>

উদাহরণ স্বরূপ,

<?
    header("Content-type: image/png");
    $img = imagecreatetruecolor ( 10, 10);
    imagepng ( $img);
?>
[space here]
[break line here]

বৈধ হবে না।

কিন্তু

<?
    header("Content-type: image/png");
    $img = imagecreatetruecolor ( 10, 10 );
    imagepng ( $img );

ইচ্ছাশক্তি.

একবারের জন্য, সুরক্ষিত হতে আপনাকে অবশ্যই অলস হতে হবে ।


3
এজন্য আমি তির্যক সুরক্ষিত রেখেছি। এটি আপনাকে ত্রুটিগুলি থেকে বাঁচায় যা আপনার পরে অযাচিত জায়গাগুলির জন্য অনেক সময় ব্যয় করতে পারে ?>সুরক্ষিত এখানে ভাল শব্দ নাও হতে পারে। যাইহোক, এটি কিছু ঠিক করে না (জিনিসগুলি প্রতিরোধের জন্য এটি আমার কাছে খারাপ কোড নয়, echoএখানে একটি খারাপ কোড হত) তবে / এবং এটি এখনও বৈধ। এই আমাকে ভুল প্রমাণ।
শিকিরিউ

বিটিডব্লিউ, আমি তোমাকে হ্রাস করিনি। তবে আমার বক্তব্য আপনার সাথে সামঞ্জস্যপূর্ণ। এটি কিছুই ঠিক করে না। আমি কখনও বলিনি এটি বৈধ নয়, সুতরাং আমার কোনও প্রমাণ করার দরকার নেই।
খ্রিস্টান

1
চৌচেনোস, আমি বাজি ধরছি তুমি সুরক্ষার চেয়ে সুরক্ষিত চেয়েছিলে। আইএমএইচও এর জন্য একটি নেং খুব বেশি ছিল। আপনাকে আবার স্কোয়ারে নিয়ে এসেছি। ;-) আপনি সর্বোপরি ভুল কথা বলছিলেন না। এমনকি পিএইচপি বিকাশের নির্দেশিকাও আপনাকে এটি করতে উত্সাহিত করে। উদাহরণস্বরূপ আউটপুট বাফারিংয়ের পরিবর্তে ট্যাগ বাদ দেওয়ার উপর নির্ভর করা আরও ভাল ly পরেরটি প্রদর্শন-ত্রুটিগুলি বন্ধ করে দেওয়ার মতো হবে। খাঁটি প্রতারণা। এবং আপনার অ্যাপ্লিকেশনটি পোর্টেবল হবে না এমন একটি ভাল সুযোগ। আমি সত্যিই মনে করি যে, একটি নিয়ম হিসাবে, আউটপুট বাফারিংয়ের উপর একেবারেই নির্ভর না করাই ভাল।
মারাস্পিন

1
আমি লোকদের প্রশ্ন করতে চাই না যে ?>কেবল পিএইচপি কেবলমাত্র ফাইলের শেষে রেখে দেওয়া । তবে আপনার কি কখনও কখনও ফাঁকা জায়গাগুলির কারণে কিছু ত্রুটি ডিবাগ করার প্রয়োজন ছিল? এছাড়াও সমস্ত সার্ভার একইভাবে কনফিগার করা হয় না বিশেষত আপনি যখন অন্য হোস্টে চলে যান, ত্রুটিগুলি ধরা খুব সময় ব্যয়কারী তা ধরা পড়ে। আপনি যদি চান তবে ?>কেবল এটি করুন, যদি
আপনিও

16

ডক্স অনুসারে , নিম্নলিখিত কারণে যদি ফাইলটির শেষে থাকে তবে ক্লোজিং ট্যাগটি বাদ দেওয়া ভাল:

যদি কোনও ফাইল খাঁটি পিএইচপি কোড হয় তবে ফাইলের শেষে পিএইচপি ক্লোজিং ট্যাগ বাদ দেওয়া ভাল। এটি পিএইচপি ক্লোজিং ট্যাগের পরে আকস্মিক সাদা স্থান বা নতুন লাইন যুক্ত হওয়া রোধ করে, যা অবাঞ্ছিত প্রভাবের কারণ হতে পারে কারণ যখন প্রোগ্রামার থেকে স্ক্রিপ্টের সেই সময়ে কোনও আউটপুট প্রেরণের কোনও উদ্দেশ্য নেই তখন পিএইচপি আউটপুট বাফারিং শুরু করবে।

পিএইচপি ম্যানুয়াল> ভাষার রেফারেন্স> বেসিক সিনট্যাক্স> পিএইচপি ট্যাগ


10

ঠিক আছে, আমি কারণটি জানি, তবে আমি এটি প্রদর্শন করতে পারি না:

কেবলমাত্র পিএইচপি কোডযুক্ত ফাইলগুলির জন্য, ক্লোজিং ট্যাগ ( ?>) কখনই অনুমোদিত হয় না। এটি পিএইচপি দ্বারা প্রয়োজনীয় নয়, এবং এটি বাদ দেওয়া সাড়াতে সাদা স্থানের পিছনে দুর্ঘটনাক্রমে ইনজেকশন প্রতিরোধ করে।

সূত্র: http://framework.zend.com/manual/en/coding-standard.php-file-formatting.html


23
এই ট্যাগটি "কখনই অনুমোদিত নয়" সম্ভবত জেন্ডিং কোডিং মান, তবে এটি পিএইচপি ফাইল ফর্ম্যাটিংয়ের জন্য একটি সিনট্যাক্স নিয়ম নয়।
ম্যাট হাগিনস

9

ঠিক আছে, এটি দেখার দুটি উপায় আছে।

  1. পিএইচপি কোড এক্সএমএল প্রসেসিং নির্দেশাবলীর সেট ছাড়া আর কিছুই নয় , এবং তাই .phpএক্সটেনশন সহ যে কোনও ফাইল এক্সএমএল ফাইলের চেয়ে বেশি কিছু নয় যা ঠিক এইভাবে পিএইচপি কোডের জন্য বিশ্লেষণযোগ্য হতে পারে।
  2. পিএইচপি ঠিক এর এক্সএমএল প্রসেসিং নির্দেশের ফর্ম্যাটটি তার খোলা এবং নিকটবর্তী ট্যাগগুলির জন্য ভাগ করে নেবে। তার উপর ভিত্তি করে, .phpএক্সটেনশানযুক্ত ফাইলগুলি বৈধ এক্সএমএল ফাইল হতে পারে, তবে সেগুলি হওয়ার দরকার নেই।

যদি আপনি প্রথম রুটটিকে বিশ্বাস করেন তবে সমস্ত পিএইচপি ফাইলগুলির শেষের ট্যাগগুলি বন্ধ হওয়া দরকার। এগুলি বাদ দিতে একটি অবৈধ এক্সএমএল ফাইল তৈরি করবে। তারপরে আবার, খোলার <?xml version="1.0" charset="latin-1" ?>ঘোষণা ছাড়াই আপনার কোনও বৈধ এক্সএমএল ফাইল থাকবে না ... সুতরাং এটি কোনও বড় সমস্যা নয় ...

আপনি যদি দ্বিতীয় রুটকে বিশ্বাস করেন তবে এটি দুটি ধরণের .phpফাইলের জন্য দরজা উন্মুক্ত করে :

  • যে ফাইলগুলিতে কেবল কোড থাকে (উদাহরণস্বরূপ গ্রন্থাগার ফাইল)
  • যে ফাইলগুলিতে নেটিভ এক্সএমএল এবং কোড রয়েছে (উদাহরণস্বরূপ টেমপ্লেট ফাইলগুলি)

তার উপর ভিত্তি করে, কেবল-কোড ফাইলগুলি ক্লোজিং ?>ট্যাগ ছাড়াই শেষ করা ঠিক । তবে এক্সএমএল-কোড ফাইলগুলি বন্ধ না করেই শেষ করা ঠিক নয় ?>কারণ এটি এক্সএমএলকে অকার্যকর করে দেবে।

তবে আমি জানি আপনি কী ভাবছেন। আপনি যা ভাবছেন তা কি ভাবছে, আপনি কখনই সরাসরি কোনও পিএইচপি ফাইল রেন্ডার করতে যাবেন না, সুতরাং এটি বৈধ এক্সএমএল হলে কে কে চিন্তা করে। ঠিক আছে, আপনি কোনও টেমপ্লেট ডিজাইন করছেন কিনা তাতে কিছু আসে যায় না। যদি এটি বৈধ এক্সএমএল / এইচটিএমএল হয়, তবে একটি সাধারণ ব্রাউজার পিএইচপি কোডটি প্রদর্শন করবে না (এটি একটি মন্তব্যের মতো আচরণ করা হবে)। সুতরাং আপনি মধ্যে পিএইচপি কোড চালানোর প্রয়োজন ছাড়াই টেম্পলেট উপহাস করতে পারেন ...

আমি বলছি না এটি গুরুত্বপূর্ণ। এটি কেবল এমন একটি দৃষ্টিভঙ্গি যা আমি প্রায়শই প্রকাশিত হতে দেখি না, তাই এটির ভাগ করে নেওয়ার জন্য এর চেয়ে ভাল আর কী জায়গা ...

ব্যক্তিগতভাবে, আমি লাইব্রেরি ফাইলগুলিতে ট্যাগগুলি বন্ধ করি না, তবে টেমপ্লেট ফাইলগুলিতে করি ... আমি মনে করি এটি ব্যক্তিগত কোনও পছন্দ (এবং কোডিং গাইডলাইন) কোনও কিছুর চেয়ে বেশি ভিত্তিক ...


1
এটি সম্পূর্ণ মিথ্যা। পিএইচপি এই ট্যাগগুলিকে এক্সএমএলে অনুবাদ করে না এবং এইভাবে কোনও ভারসাম্যহুলি তৈরি হচ্ছে না।
Drachenkatze

7
@ ফেলিসিটাস: আমি অনুমান করি যে আপনি যে অংশটি বলেছেন তা হারিয়ে ফেলেছি "আমি এটি গুরুত্বপূর্ণ বলছি না। এটি এমন একটি দৃষ্টিভঙ্গি যা আমি প্রায়শই প্রকাশিত দেখি না, তাই ভাগ করে নেওয়ার জন্য আরও ভাল জায়গা কী ..." এটি পিএইচপি সম্পর্কে নয় এক্সএমএলে ট্যাগ অনুবাদ করা। কোনও ফাইলের এক্সএমএল প্রসঙ্গে (যেমন এইচটিএমএল বা সম্পাদকগণ ইত্যাদি) ব্যাখ্যা করা হয় তখন কী হয় ... তবে বিন্দুটি মিস হয়েছে ...
ircmaxell

7

ইতিমধ্যে যা বলা হয়েছে তার সবকটি ছাড়াও, আমি অন্য কারণটি ছুঁড়ে ফেলছি যা আমাদের ডিবাগ করার জন্য বিশাল ব্যথা ছিল।

ক্লোজিং phpট্যাগের পিছনে ফাঁকা জায়গা থাকলেই পিএইচপি 5.4 সহ অ্যাপাচি ২.৪. actually আসলে আমাদের উত্পাদন মেশিনে বিভাজন ত্রুটি করে । আমি শুধু ঘণ্টা পর্যন্ত পরিশেষে আমি সঙ্গে বাগ নিচে narrowed বরবাদ strace,

অ্যাপাচি যে ত্রুটিটি এখানে ফেলেছে তা এখানে:

[core:notice] [pid 7842] AH00052: child pid 10218 exit signal Segmentation fault (11)

6

"শেষ পিএইচপি ট্যাগটি এড়িয়ে যাওয়ার আরও কোনও ভাল কারণ (শিরোনাম সমস্যা ব্যতীত) আছে কি?"

বাইনারি আউটপুট, সিএসভি ডেটা বা অন্যান্য নন-এইচটিএমএল আউটপুট জেনারেট করার সময় আপনি অজান্তে অবিচ্ছিন্নভাবে হোয়াইটস্পেস অক্ষরগুলি আউটপুট করতে চান না ।


1
আমার ক্লায়েন্টের অভিযোগ ছিল কারণ যখন তাদের শুরুতে অতিরিক্ত ফাঁকা রেখা ছিল তখন XML পার্সার আমাদের আউটপুট প্রত্যাখ্যান করে। সবচেয়ে খারাপটি, এটি কোনও অপ্রকাশিত কনফিগারেশন ফাইলের ক্লোজিং ট্যাগের পরে অতিরিক্ত লাইন দিয়ে কেবল সাতটির মধ্যে একটি সার্ভারে ঘটেছিল।
eswald

5

পেশাদাররা

কনস

উপসংহার

আমি বলব যে ট্যাগটি বাদ দেওয়ার পক্ষে যুক্তিগুলি দৃ .় দেখায় ( হেডারের সাথে বড় মাথাব্যথা এড়াতে সহায়তা করে ) ( এটি পিএইচপি / জেন্ড "সুপারিশ")। আমি স্বীকার করি যে সিনট্যাক্সের ধারাবাহিকতার দিক থেকে আমি এটি দেখেছি এটি সবচেয়ে বেশি "সুন্দর" সমাধান নয় তবে এর থেকে ভাল আর কী হতে পারে?


2

যেহেতু আমার প্রশ্নটিকে এটির সদৃশ হিসাবে চিহ্নিত করা হয়েছে, আমি কেন ক্লোজিং ট্যাগ বাদ না দেওয়া?> কিছু কারণে কাঙ্ক্ষিত হতে পারে তা পোস্ট করা ঠিক মনে হয় ।

  • সম্পূর্ণ প্রসেসিংয়ের নির্দেশাবলীর সাথে সিনট্যাক্স ( <?php ... ?>) পিএইচপি উত্সটি বৈধ এসজিএমএল ডকুমেন্ট, যা এসজিএমএল পার্সার নিয়ে সমস্যা ছাড়াই পার্স এবং প্রক্রিয়া করা যায়। অতিরিক্ত বিধিনিষেধের সাথে এটি বৈধ এক্সএমএল / এক্সএইচটিএমএলও হতে পারে।

কোনও কিছুই আপনাকে বৈধ এক্সএমএল / এইচটিএমএল / এসজিএমএল কোড লিখতে বাধা দেয় না। পিএইচপি ডকুমেন্টেশন এ সম্পর্কে সচেতন। উদ্ধৃতাংশ:

দ্রষ্টব্য: এছাড়াও নোট করুন যে আপনি যদি এক্সএমএল বা এক্সএইচটিএমএল এর মধ্যে পিএইচপি এম্বেড করে থাকেন তবে মানগুলির সাথে সম্মতি বজায় রাখতে আপনার <? পিএইচপি?> ট্যাগ ব্যবহার করতে হবে।

অবশ্যই পিএইচপি সিনট্যাক্স কঠোর এসজিএমএল / এক্সএমএল / এইচটিএমএল নয় এবং আপনি একটি ডকুমেন্ট তৈরি করেন যা এসজিএমএল / এক্সএমএল / এইচটিএমএল নয়, ঠিক যেমন আপনি এইচটিএমএলকে এক্সএইচটিএমএলকে এক্সএমএল অনুবর্তী হতে পারেন বা না করতে পারেন।

  • এক পর্যায়ে আপনি উত্সকে একত্রিত করতে চাইতে পারেন। cat source1.php source2.phpক্লোজিং ?>ট্যাগ বাদ দিয়ে যদি আপনার অসঙ্গতি পরিচয় করানো হয় তবে এটি করা সহজ হবে না ।

  • ?>ডকুমেন্টটি পিএইচপি এস্কেপ মোডে রেখেছিল বা পিএইচপি উপেক্ষা মোডে (পিআই ট্যাগটি <?phpখোলা থাকতে পারে বা নাও হতে পারে) রেখে দেওয়া কঠিন Without আপনি যদি অবিচ্ছিন্নভাবে আপনার ডকুমেন্টগুলিকে পিএইচপি উপেক্ষা করে মোডে রেখে যান তবে জীবন সহজ। এটি ঠিক যেমন ফর্ম্যাট করা এইচটিএমএল ডকুমেন্টগুলির সাথে কাজ যেমন অনাবৃত, খারাপভাবে বাসা বাঁধার ট্যাগ ইত্যাদির সাথে ডকুমেন্টের তুলনায় compared

  • দেখে মনে হচ্ছে ড্রিমউইভারের মতো কিছু সম্পাদকের পিআই খোলা থাকতে সমস্যা হতে পারে [1]


0

যদি আমি প্রশ্নটি সঠিকভাবে বুঝতে পারি, তবে এটির ফলাফল আউটপুট বাফারিংয়ের সাথে করতে হবে এবং ট্যাগগুলি বন্ধ করার / শেষ করার ক্ষেত্রে এটির প্রভাব। আমি নিশ্চিত নই যে এটি সম্পূর্ণ বৈধ প্রশ্ন। সমস্যাটি হ'ল আউটপুট বাফারের অর্থ ক্লায়েন্টের কাছে পাঠানোর আগে সমস্ত সামগ্রী মেমরির মধ্যে রাখা হয় না in এর অর্থ কিছু সামগ্রী রয়েছে।

প্রোগ্রামার ইচ্ছাকৃতভাবে বাফারটি ফ্লাশ করতে পারে, বা আউটপুট বাফার তাই পিএইচপি-র আউটপুট বাফার বিকল্পটি কী সত্যিই পরিবর্তন করে যে কীভাবে ক্লোজিং ট্যাগ কোডিংকে প্রভাবিত করে? আমি তর্ক করব যে এটি না।

এবং সম্ভবত সে কারণেই বেশিরভাগ উত্তরগুলি ব্যক্তিগত স্টাইল এবং বাক্য গঠনতে ফিরে গিয়েছিল।


0

পিএইচপি কোডের 2 ব্যবহারের সম্ভাবনা রয়েছে:

  1. শ্রেণি সংজ্ঞা বা ফাংশন সংজ্ঞা হিসাবে পিএইচপি কোড
  2. টেমপ্লেট ভাষা হিসাবে পিএইচপি ব্যবহার করুন (উদাহরণে দর্শনীয়)

ক্ষেত্রে ১. সমাপ্তি ট্যাগটি সম্পূর্ণ অপ্রয়োজনীয়, এছাড়াও আমি কেবল 1 (এক) পিএইচপি ওপেন ট্যাগ এবং কোনও ক্ষেত্রে (শূন্য) ক্লোজিং ট্যাগটি দেখতে চাই। কোডটি পরিষ্কার এবং উপস্থাপনা থেকে পৃথক যুক্তি তৈরি করার কারণে এটি একটি ভাল অনুশীলন। উপস্থাপনের ক্ষেত্রে (২.) কেউ কেউ দেখেছেন যে সমস্ত ট্যাগ (এমনকি পিএইচপি-প্রক্রিয়াজাতকরণগুলি) বন্ধ করা স্বাভাবিক, এটি বিভ্রান্তির দিকে নিয়ে যায়, যেমন পিএইচপি আসলে 2 পৃথক ব্যবহারের ক্ষেত্রে মিশ্রিত করা উচিত নয়: যুক্তি / ক্যালকুলাস এবং উপস্থাপনা

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.