ইহা কি জন্য ঘটিতেছে?
সময়ের সাথে সাথে, পিএইচপি আরও সুরক্ষা-কেন্দ্রিক ভাষাতে পরিণত হয়েছে। ডিফল্ট হিসাবে বন্ধ করা হত সেটিংস এখন ডিফল্ট দ্বারা চালু করা হয়। এর একটি নিখুঁত উদাহরণ E_STRICT
, যা পিএইচপি 5.4.0 হিসাবে ডিফল্টরূপে চালু হয়েছিল ।
তদ্ব্যতীত, পিএইচপি ডকুমেন্টেশন অনুসারে, ডিফল্টরূপে, E_NOTICE
php.ini এ অক্ষম করা হয়। পিএইচপি ডক্স এটি ডিবাগিংয়ের উদ্দেশ্যে চালু করার পরামর্শ দেয় । যাইহোক, আমি যখন উবুন্টু সংগ্রহশালা থেকে এবং বিটনামির উইন্ডোজ স্ট্যাক থেকে পিএইচপি ডাউনলোড করি তখন আমি অন্য কিছু দেখি।
; Common Values:
; E_ALL (Show all errors, warnings and notices including coding standards.)
; E_ALL & ~E_NOTICE (Show all errors, except for notices)
; E_ALL & ~E_NOTICE & ~E_STRICT (Show all errors, except for notices and coding standards warnings.)
; E_COMPILE_ERROR|E_RECOVERABLE_ERROR|E_ERROR|E_CORE_ERROR (Show only errors)
; Default Value: E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED
; Development Value: E_ALL
; Production Value: E_ALL & ~E_DEPRECATED & ~E_STRICT
; http://php.net/error-reporting
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
লক্ষ্য করুন যে error_reporting
উত্পাদিত মানটি ডিফল্টরূপে সেট করা আছে, ডিফল্টরূপে "ডিফল্ট" মান নয়। এটি কিছুটা বিভ্রান্তিকর এবং php.ini এর বাইরে নথিভুক্ত নয়, তাই আমি অন্যান্য বিতরণে এটি বৈধতা দিয়েছি না ।
আপনার প্রশ্নের উত্তর দিতে, তবে, এই ত্রুটিটি এখন পপ আপ হয় যখন এটি আগে পপ আপ হয় নি কারণ:
আপনি পিএইচপি ইনস্টল করেছেন এবং নতুন ডিফল্ট সেটিংস কিছুটা দুর্বল নথিভুক্ত তবে বাদ দিবেন না E_NOTICE
।
E_NOTICE
অপরিবর্তিত ভেরিয়েবল এবং অপরিজ্ঞাত সূচকগুলির মতো সতর্কতাগুলি আপনার কোডটিকে আরও পরিষ্কার এবং নিরাপদ করতে সহায়তা করে। আমি আপনাকে বলতে পারি যে, বছর আগে, E_NOTICE
সক্ষম রাখার ফলে আমাকে আমার ভেরিয়েবলগুলি ঘোষণা করতে বাধ্য করা হয়েছিল। এটি সি শিখতে অনেক বেশি সহজ করে দিয়েছে, ভেরিয়েবলগুলি ঘোষণা করে না যে এটি একটি উপদ্রব থেকে অনেক বড়।
আমি এটি সম্পর্কে কি করতে পারি?
E_NOTICE
"ডিফল্ট মান" অনুলিপি করে E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED
এবং সমতুল্য সাইন ইন করার পরে এটি বর্তমানে কোনও পরিস্থিতিবিহীন যা দিয়ে এটি প্রতিস্থাপন করে বন্ধ করুন error_reporting =
। সিজিআই বা এফপিএম ব্যবহার করে অ্যাপাচি, বা পিএইচপি পুনরায় চালু করুন। নিশ্চিত করুন যে আপনি "ডান" php.ini সম্পাদনা করছেন। সঠিকটি হ'ল আপনি অ্যাপাচি, পিএইচপি-এফপিএম চালিয়ে যদি পিএইচপি বা পিএইচপি-এফপিএম, পিএইচপি-এফপিএম চালাচ্ছেন, সিজিআই পিএইচপি-সিজিআই চালাচ্ছেন, ইত্যাদি। এটি প্রস্তাবিত পদ্ধতি নয়, তবে যদি আপনার লিগ্যাসি কোড থাকে তবে সম্পাদনা করা অত্যন্ত কঠিন হতে হবে, তবে এটি আপনার সেরা বাজি হতে পারে।
E_NOTICE
ফাইল বা ফোল্ডার স্তরটি বন্ধ করুন। আপনার যদি কিছু লিগ্যাসি কোড থাকে তবে এটি অন্যথায় অন্যথায় "সঠিক" উপায়ে করতে চাইলে এটি পছন্দনীয়। এটি করার জন্য, আপনার অ্যাপাচি 2, এনজিনেক্স বা আপনার পছন্দের সার্ভারটি যা-ই হোক না কেন consult অ্যাপাচে, আপনি php_value
ভিতরে ব্যবহার করবে <Directory>
।
আপনার কোডটি পরিষ্কার হওয়ার জন্য পুনরায় লিখুন। যদি আপনাকে উত্পাদনের পরিবেশে যাওয়ার সময় এটি করার দরকার হয় বা কেউ আপনার ত্রুটিগুলি দেখতে না চায় তবে নিশ্চিত করুন যে আপনি কোনও ত্রুটির প্রদর্শন অক্ষম করছেন এবং কেবল আপনার ত্রুটিগুলি লগইন করছেন (দেখুন display_errors
এবং log_errors
php.ini এবং আপনার সার্ভার সেটিংসে) ।
বিকল্প 3 এ প্রসারিত করতে: এটি আদর্শ। আপনি যদি এই রুটে যেতে পারেন তবে আপনার উচিত। আপনি যদি প্রাথমিকভাবে এই রুটটি না নিয়ে যান তবে আপনার কোডটিকে বিকাশের পরিবেশে পরীক্ষা করে অবশেষে এই রুটটি সরানোর কথা বিবেচনা করুন। আপনি যখন এদিকে আসছেন তখন এ থেকে মুক্তি পান ~E_STRICT
এবং ~E_DEPRECATED
ভবিষ্যতে কী ভুল হতে পারে তা দেখুন। আপনি প্রচুর অপরিচিত ত্রুটি দেখতে যাচ্ছেন, তবে ভবিষ্যতে যখন আপনাকে পিএইচপি আপগ্রেড করতে হবে তখন কোনও অপ্রীতিকর সমস্যা থেকে বিরত রাখতে চলেছে।
ত্রুটিগুলি অর্থ কী?
Undefined variable: my_variable_name
- এটি ঘটে যখন ব্যবহারের আগে কোনও ভেরিয়েবল সংজ্ঞায়িত করা হয় নি। পিএইচপি স্ক্রিপ্ট কার্যকর করা হয়, এটি অভ্যন্তরীণভাবে কেবল একটি নাল মান ধরে। যাইহোক, কোন দৃশ্যে কোনও পরিবর্তনকের সংজ্ঞা দেওয়ার আগে আপনাকে পরীক্ষা করতে হবে? শেষ পর্যন্ত, এটি "স্লোপি কোড" এর পক্ষে যুক্তি। বিকাশকারী হিসাবে, আমি আপনাকে বলতে পারি যে আমি এটি পছন্দ করি যখন আমি একটি ওপেন সোর্স প্রকল্প দেখি যেখানে ভেরিয়েবলগুলি তাদের স্কোপগুলিতে উচ্চতর হিসাবে সংজ্ঞায়িত করা যায় কারণ তাদের সংজ্ঞা দেওয়া যায়। ভবিষ্যতে কোন ভেরিয়েবলগুলি পপ আপ হতে চলেছে তা বলা সহজ করে তোলে এবং কোডটি পড়া / শিখতে আরও সহজ করে তোলে।
function foo()
{
$my_variable_name = '';
//....
if ($my_variable_name) {
// perform some logic
}
}
Undefined index: my_index
- আপনি যখন একটি অ্যারেতে কোনও মান অ্যাক্সেস করার চেষ্টা করেন এবং এটি বিদ্যমান না তখন এটি ঘটে। এই ত্রুটি প্রতিরোধ করতে, শর্তসাপেক্ষ চেক করুন।
// verbose way - generally better
if (isset($my_array['my_index'])) {
echo "My index value is: " . $my_array['my_index'];
}
// non-verbose ternary example - I use this sometimes for small rules.
$my_index_val = isset($my_array['my_index'])?$my_array['my_index']:'(undefined)';
echo "My index value is: " . $my_index_val;
অন্য বিকল্পটি হ'ল আপনার ফাংশনের শীর্ষে একটি ফাঁকা অ্যারে ঘোষণা করা। এই সবসময় সম্ভব হয় না।
$my_array = array(
'my_index' => ''
);
//...
$my_array['my_index'] = 'new string';
(অতিরিক্ত টিপ)
- যখন আমি এই এবং অন্যান্য সমস্যার মুখোমুখি হচ্ছিলাম , আমি নেটবিয়ান আইডিই (বিনামূল্যে) ব্যবহার করেছি এবং এটি আমাকে বেশ কয়েকটি সতর্কতা এবং নোটিশ দিয়েছে। তাদের মধ্যে কয়েকটি খুব সহায়ক টিপস সরবরাহ করে। এটি কোনও প্রয়োজন নয় এবং আমি বড় প্রকল্পগুলি বাদ দিয়ে আর আইডিই ব্যবহার করি না। আমি
vim
আজকাল একজন ব্যক্তি বেশি :)।