php রেফারেন্স-এই ত্রুটি পিএইচপি মানে কি?




mysql debugging (24)

এটা কি?

এটি পিএইচপি প্রোগ্রামিং করার সময় সতর্কতা, ত্রুটি, এবং বিজ্ঞপ্তিগুলি সম্পর্কে আপনার উত্তরগুলির একটি সংখ্যা এবং কোনও সমাধান কীভাবে সমাধান করতে পারে তা সম্পর্কে। এটি একটি কমিউনিটি উইকিও, তাই প্রত্যেককে এই তালিকায় যুক্ত ও বজায় রাখার জন্য আমন্ত্রণ জানানো হয়।

কেন?

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

আমি এখানে কি করতে হবে?

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

আপনি যদি অবদান রাখতে চান তবে দয়া করে আপনার "পছন্দের" ত্রুটি বার্তা, সতর্কতা বা বিজ্ঞপ্তি, একটি উত্তর প্রতি, একটি সংক্ষিপ্ত বিবরণ যা তার মানে (এমনকি যদি এটি শুধুমাত্র তাদের ম্যানুয়াল পৃষ্ঠাতে হাইলাইট করা হয়) যোগ করুন, একটি সম্ভাব্য সমাধান বা ডিবাগিং পদ্ধতি এবং মূল্যের বিদ্যমান Q & A এর একটি তালিকা। এছাড়াও, কোনো বিদ্যমান উত্তর উন্নত করতে বিনা দ্বিধায়।

ক্রমতালিকা

এছাড়াও, দেখুন


মারাত্মক ত্রুটি: একটি সদস্য ফাংশন কল করুন ... একটি অ-বস্তু

xyz->method() মতো কোড দিয়ে ঘটে যেখানে xyz একটি বস্তু নয় এবং সেই method বলা যাবে না।

এটি একটি মারাত্মক ত্রুটি যা স্ক্রিপ্টটি বন্ধ করবে (পরবর্তী সামঞ্জস্যের বিজ্ঞপ্তি: এটি পিএইচপি 7 দিয়ে শুরু হওয়া একটি দুর্দান্ত ত্রুটি হয়ে উঠবে)।

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

একটি typical উদাহরণ হতে হবে

// ... some code using PDO
$statement = $pdo->prepare('invalid query', ...);
$statement->execute(...);

উপরের উদাহরণে, প্রশ্নটি প্রস্তুত করা যাবে না এবং prepare() $statement false $statement বরাদ্দ করা হবে। Execute execute() পদ্ধতিটি কল করার চেষ্টা করলে পরবর্তীতে মারাত্মক ত্রুটি হবে কারণ false একটি "অ-বস্তু" কারণ মান একটি বুলিয়ান।

আপনার ফাংশন একটি বস্তুর পরিবর্তে একটি বুলিয়ান ফিরে কেন চিত্র। উদাহরণস্বরূপ, ঘটেছে এমন শেষ ত্রুটির জন্য $pdo বস্তুটি পরীক্ষা করুন। কীভাবে এটি ডিবাগ করবেন তার উপর বিস্তারিত নির্ভর করবে বিশেষ ফাংশন / বস্তু / বর্গের জন্য ত্রুটিগুলি কীভাবে পরিচালিত হয় তার উপর নির্ভর করবে।

এমনকি যদি ->prepare ব্যর্থ হয় তবে আপনার $pdo ডাটাবেস হ্যান্ডেল অবজেক্টটি বর্তমান সুযোগে পাস করে না । এটা সংজ্ঞায়িত হয়েছে যেখানে খুঁজুন। তারপর এটি একটি প্যারামিটার হিসাবে পাস করুন, এটি সম্পত্তি হিসাবে সঞ্চয় করুন, অথবা এটি বিশ্বব্যাপী সুযোগের মাধ্যমে ভাগ করুন।

আরেকটি সমস্যা শর্তসাপেক্ষে একটি বস্তু তৈরি হতে পারে এবং তারপর সেই শর্তাধীন ব্লকের বাইরে একটি পদ্ধতি কল করার চেষ্টা করা হতে পারে। উদাহরণ স্বরূপ

if ($someCondition) {
    $myObj = new MyObj();
}
// ...
$myObj->someMethod();

শর্তাধীন ব্লকের বাইরে পদ্ধতিটি চালানোর চেষ্টা করে, আপনার বস্তুটি সংজ্ঞায়িত করা যাবে না।

সম্পর্কিত প্রশ্নাবলী:

  • একটি অ-বস্তুর একটি সদস্য ফাংশন কল
  • সমস্ত পিএইচপি তালিকাভুক্ত করুন "মারাত্মক ত্রুটি: কোনও সদস্য ফাংশনে কল করুন ... একটি অ-বস্তুতে" স্ট্যাকওভারফ্লো সম্পর্কিত প্রশ্ন

বিশ্লেষণ ত্রুটি: বাক্যগঠন ত্রুটি, অপ্রত্যাশিত '['

এই ত্রুটি দুটি বৈকল্পিক মধ্যে আসে:

পরিবর্তন 1

$arr = [1, 2, 3];

এই অ্যারে ইনিশিয়েটিজার সিনট্যাক্স শুধুমাত্র পিএইচপি 5.4 চালু করা হয়েছিল; এটি আগে সংস্করণে একটি পার্সার ত্রুটি বাড়াতে হবে। যদি সম্ভব হয়, আপনার ইনস্টলেশন আপগ্রেড করুন বা পুরানো সিনট্যাক্স ব্যবহার করুন:

$arr = array(1, 2, 3);

ম্যানুয়াল থেকে এই উদাহরণ দেখুন।

পরিবর্তন 2

$suffix = explode(',', 'foo,bar')[1];

অ্যারে dereferencing ফাংশন ফলাফল এছাড়াও পিএইচপি 5.4 চালু করা হয়। আপগ্রেড করা সম্ভব না হলে আপনাকে একটি (অস্থায়ী) পরিবর্তনশীল ব্যবহার করতে হবে:

$parts = explode(',', 'foo,bar');
$suffix = $parts[1];

ম্যানুয়াল থেকে এই উদাহরণ দেখুন ।


সতর্কতা: mysql_fetch_array () প্যারামিটার 1 টি সম্পদ, বুলিয়ান প্রদত্ত প্রত্যাশা করে

প্রথমে এবং সর্বাগ্রে:

দয়া করে, নতুন কোডে mysql_* ফাংশন ব্যবহার করবেন না । তারা আর রক্ষণাবেক্ষণ করা হয় না এবং আনুষ্ঠানিকভাবে বর্জন করা হয়লাল বক্স দেখুন ? পরিবর্তে প্রস্তুত বিবৃতি সম্পর্কে জানুন, এবং PDO বা MySQLi ব্যবহার করুন - এই নিবন্ধটি আপনাকে সিদ্ধান্ত নিতে সাহায্য করবে যা। আপনি যদি PDO নির্বাচন করেন, এখানে একটি ভাল টিউটোরিয়াল

যখন আপনি mysql_query ফলাফল থেকে ডেটা আনতে চেষ্টা করেন তখন এটি ঘটে তবে অনুসন্ধান ব্যর্থ হয়।

এটি একটি সতর্কতা এবং স্ক্রিপ্টটি বন্ধ করবে না, তবে আপনার প্রোগ্রামটিকে ভুল করবে।

আপনি mysql_query দ্বারা ফেরত ফলাফল চেক করতে হবে

$res = mysql_query($sql);
if (!$res) {
   die(mysql_error());
}
// after checking, do the fetch

সম্পর্কিত প্রশ্নাবলী:

সম্পর্কিত ত্রুটি:

অন্যান্য mysql* ফাংশন যা একটি MySQL ফলাফল সংস্থানকে পরামিতি হিসেবে প্রত্যাশা করে একই কারণে একই ত্রুটির সৃষ্টি করবে।


সতর্কতা: শূন্য দ্বারা বিভাগ

সতর্কতা বার্তা 'শূন্য দ্বারা বিভাগ' নতুন পিএইচপি ডেভেলপারদের মধ্যে সবচেয়ে সাধারণ প্রশ্নগুলির মধ্যে একটি। এই ত্রুটিটি ব্যতিক্রমের কারণ করবে না, তাই কিছু ডেভেলপাররা মাঝে মাঝে অভিব্যক্তিটির আগে ত্রুটি স্রোত অপারেটর যুক্ত করে সতর্কতা দমন করবেন। উদাহরণ স্বরূপ:

$value = @(2 / 0);

কিন্তু, কোনও সতর্কতার সাথে, সতর্কতার কারণটি নির্ণয় করা এবং এটি সমাধান করার সর্বোত্তম পদ্ধতি হবে। সতর্কতার কারণটি যে কোন ইনস্ট্যান্স থেকে আসবে যেখানে আপনি 0 দ্বারা ভাগ করার চেষ্টা করছেন, 0 এর সমান একটি পরিবর্তনশীল, অথবা একটি পরিবর্তনশীল যা বরাদ্দ করা হয়নি (কারণ NULL == 0) কারণ ফলাফলটি 'অনির্ধারিত' হবে।

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

if ( $var1 == 0 ) { // check if var1 equals zero
    $var1 = 1; // var1 equaled zero so change var1 to equal one instead
    $var3 = ($var2 / $var1); // divide var1/var2 ie. 1/1
} else {
    $var3 = ($var2 / $var1); // if var1 does not equal zero, divide
}

সম্পর্কিত প্রশ্নাবলী:


নোটিশ: অনির্ধারিত সূচক

যখন আপনি একটি কী দ্বারা অ্যারে অ্যাক্সেস করার চেষ্টা করেন তখন অ্যারে বিদ্যমান নেই।

একটি Undefined Index বিজ্ঞপ্তি একটি আদর্শ উদাহরণ ( demo ) হবে

$data = array('foo' => '42', 'bar');
echo $data['spinach'];
echo $data[1];

উভয় spinach এবং 1 অ্যারের মধ্যে বিদ্যমান নেই, যার ফলে একটি E_WARNING ট্রিগার করা হয়।

সমাধানটি যে সূচীটি অ্যাক্সেস করার পূর্বে সূচক বা অফসেট বিদ্যমান তা নিশ্চিত করতে হয়। এর অর্থ হতে পারে যে আপনি আপনার প্রোগ্রামে একটি বাগ সংশোধন করার প্রয়োজন হলে তা নিশ্চিত করার জন্য সেই সূচীগুলি বিদ্যমান। অথবা এটির অর্থ হতে পারে যে সূচীগুলি array_key_exists ব্যবহার করে অস্তিত্ব আছে কিনা তা পরীক্ষা করতে হবে:

$data = array('foo' => '42', 'bar');
if (array_key_exists('spinach', $data)) {
    echo $data['spinach'];
}
else {
    echo 'No key spinach in the array';
}

যদি আপনার মত কোড থাকে:

<?php echo $_POST['message']; ?>
<form method="post" action="">
    <input type="text" name="message">
    ...

তারপর $_POST['message'] সেট করা হবে না যখন এই পৃষ্ঠাটি লোড করা হবে এবং আপনি উপরে ত্রুটি পাবেন। শুধুমাত্র ফর্ম জমা দেওয়া হয় এবং এই কোডটি দ্বিতীয়বার চালানো হয় তখন অ্যারে সূচী বিদ্যমান। আপনি সাধারণত এই জন্য চেক:

if ($_POST)  ..  // if the $_POST array is not empty
// or
if ($_SERVER['REQUEST_METHOD'] == 'POST') ..  // page was requested with POST

সম্পর্কিত প্রশ্নাবলী:


মারাত্মক ত্রুটি: অবজেক্ট প্রেক্ষাপটে নয় যখন এটি ব্যবহার করে

$this পিএইচপি একটি বিশেষ পরিবর্তনশীল যা বরাদ্দ করা যাবে না। যদি এটি এমন কোন প্রসঙ্গে অ্যাক্সেস করা হয় যেখানে এটি বিদ্যমান না থাকে তবে এই মারাত্মক ত্রুটি দেওয়া হয়।

এই ত্রুটি ঘটতে পারে:

  1. একটি অ স্ট্যাটিক পদ্ধতি স্ট্যাটিক্যাল বলা হয়। উদাহরণ:

    class Foo {
       protected $var;
       public function __construct($var) {
           $this->var = $var;
       }
    
       public static function bar () {
           // ^^^^^^
           echo $this->var;
           //   ^^^^^
       }
    }
    
    Foo::bar();

    কীভাবে সমাধান করবেন: আপনার কোডটি আবার পর্যালোচনা করুন, $this কেবল একটি বস্তুর প্রসঙ্গে ব্যবহার করা যেতে পারে এবং স্ট্যাটিক পদ্ধতিতে কখনই এটি ব্যবহার করা উচিত নয়। এছাড়াও, একটি স্ট্যাটিক পদ্ধতি অ স্ট্যাটিক সম্পত্তি অ্যাক্সেস করা উচিত নয়। স্ট্যাটিক সম্পত্তি অ্যাক্সেস করতে self::$static_property ব্যবহার করুন।

  2. যদি কোন ক্লাস পদ্ধতির কোডটি একটি সাধারণ ফাংশন বা কেবলমাত্র বিশ্বব্যাপী সুযোগে অনুলিপি করা হয় এবং $this বিশেষ পরিবর্তনশীল রাখা হয়।
    কিভাবে ঠিক করবেন: কোডটি পর্যালোচনা করুন এবং এটি একটি পৃথক প্রতিস্থাপন পরিবর্তনশীলের সাথে $this প্রতিস্থাপন করুন।

সম্পর্কিত প্রশ্নাবলী:

  1. স্ট্যাটিক হিসাবে অ স্ট্যাটিক পদ্ধতি কল করুন: পিএইচপি মারাত্মক ত্রুটি: বস্তু প্রসঙ্গে না যখন এই $ ব্যবহার
  2. কোডের অনুলিপি করুন: মারাত্মক ত্রুটি: বস্তু প্রসঙ্গে না থাকলে এটি $ ব্যবহার করে
  3. সমস্ত "অবজেক্ট প্রেক্ষাপটে নয় যখন এই $ ব্যবহার করে" উপর প্রশ্ন

মারাত্মক ত্রুটি: লেখার প্রসঙ্গে ফাংশন ফিরতি মান ব্যবহার করতে পারে না

empty সঙ্গে একটি ফাংশন ব্যবহার করার সময় এটি সাধারণত ঘটে।

উদাহরণ:

if (empty(is_null(null))) {
  echo 'empty';
}

কারণ empty একটি ভাষা গঠন এবং একটি ফাংশন নয়, এটি 5.5 এর আগে পিএইচপি সংস্করণগুলিতে তার যুক্তি হিসাবে একটি এক্সপ্রেশন দিয়ে বলা যেতে পারে না। পিএইচপি 5.5 এর আগে, empty() অবশ্যই একটি পরিবর্তনশীল হতে হবে, তবে একটি নির্বিচারে অভিব্যক্তি (যেমন একটি ফাংশনের ফিরতি মান) পিএইচপি 5.5+ এ অনুমোদিত।

empty , তার নামের সত্ত্বেও, কোনও পরিবর্তনশীল "খালি" কিনা তা যাচাই করে না। পরিবর্তে, এটি একটি পরিবর্তনশীল উপস্থিত না থাকলে, অথবা == false । এক্সপ্রেশন (উদাহরণস্বরূপ is_null(null) ) সর্বদা অস্তিত্ব বলে মনে করা হবে, সুতরাং এখানে empty শুধুমাত্র মিথ্যা হিসাবে যদি এটি চেক করা হয়। আপনি এখানে empty() প্রতিস্থাপন করতে পারেন ! , উদাহরণস্বরূপ if (!is_null(null)) , অথবা স্পষ্টভাবে if (is_null(null) == false) সাথে তুলনা করুন, যেমন if (is_null(null) == false)

সম্পর্কিত প্রশ্নাবলী:


সতর্কতা: open_basedir নিষেধাজ্ঞা প্রভাব

এই সতর্কতা ফাইল এবং ডিরেক্টরি অ্যাক্সেস সম্পর্কিত বিভিন্ন ফাংশন সহ উপস্থিত হতে পারে। এটি একটি কনফিগারেশন সমস্যা সম্পর্কে সতর্ক করে।

যখন এটি প্রদর্শিত হয়, এর অর্থ হল অ্যাক্সেস কিছু ফাইল নিষিদ্ধ করা হয়েছে।

সতর্কতা নিজেই কিছু ভাঙ্গায় না, তবে ফাইল অ্যাক্সেস প্রতিরোধ করা হলে বেশিরভাগ ক্ষেত্রেই একটি স্ক্রিপ্ট সঠিকভাবে কাজ করে না।

ফিক্স সাধারণত পিএইচপি কনফিগারেশন পরিবর্তন করতে হয়, সম্পর্কিত সেটিং open_basedir বলা হয়।

কখনও কখনও ভুল ফাইল বা ডিরেক্টরি নাম ব্যবহার করা হয়, তারপর ফিক্স ডান বেশী ব্যবহার করা হয়।

সম্পর্কিত প্রশ্নাবলী:


সতর্কতা: শিরোনাম তথ্য সংশোধন করতে পারে না - শিরোনাম ইতিমধ্যে পাঠানো হয়েছে

যখন আপনার স্ক্রিপ্টটি ক্লায়েন্টকে একটি HTTP শিরোনাম পাঠানোর চেষ্টা করে তবে সেখানে ইতিমধ্যেই আউটপুট ছিল, যার ফলে হেডারগুলি ইতিমধ্যে ক্লায়েন্টে পাঠানো হয়েছিল।

এটি একটি ই- E_WARNING এবং এটি স্ক্রিপ্টটি বন্ধ করবে না।

একটি আদর্শ উদাহরণ এটির মতো একটি টেমপ্লেট ফাইল হবে:

<html>
    <?php session_start(); ?>
    <head><title>My Page</title>
</html>
...

session_start() ফাংশন ক্লায়েন্টকে সেশন কুকি দিয়ে হেডার পাঠানোর চেষ্টা করবে। কিন্তু পিএইচপি ইতিমধ্যে হেডার পাঠিয়েছে যখন এটি <html> আউটপুট প্রবাহের উপাদানটি লিখেছে। আপনি session_start() উপরের দিকে সরাতে হবে।

কোডটিকে সতর্ক করে দেওয়ার আগে আপনি লাইনগুলি দিয়ে এটি সমাধান করতে পারেন এবং এটি আউটপুট কোথায় তা পরীক্ষা করে দেখুন। যে কোড আগে কোড প্রেরণ কোন হেডার সরান।

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

যদি আপনার ফাইলটিতে একাধিক <?php ... ?> কোড ব্লক থাকে তবে আপনার মধ্যে কোনও স্থান থাকতে হবে না। (দ্রষ্টব্য: যদি আপনার কোডটি স্বয়ংক্রিয়ভাবে নির্মিত হয় তবে আপনার একাধিক ব্লক থাকতে পারে)

এছাড়াও আপনার কোডে কোনও বাইট অর্ডার চিহ্ন নেই তা নিশ্চিত করুন, উদাহরণস্বরূপ যখন স্ক্রিপ্টের এনকোডিংটি BOM এর সাথে UTF-8 হয়।

সম্পর্কিত প্রশ্নাবলী:


মারাত্মক ত্রুটি: [TraitA] এবং [TraitB] একই সম্পত্তি ([$ x]) সংজ্ঞায়িত করে [ক্লাসিক]

যখন কোন শ্রেণী useএকাধিক বৈশিষ্ট্যগুলিতে চেষ্টা করে , যেখানে দুটি বা তার বেশি বৈশিষ্ট্য একই নামের দ্বারা একটি সম্পত্তি সংজ্ঞায়িত করে এবং সম্পত্তিটির সাথে প্রাথমিক মানগুলি ভিন্ন থাকে।

উদাহরণ:

<?php
trait TraitA
{
    public $x = 'a';
}
trait TraitB
{
    public $x = 'b';
}
class ClassC
{
    use TraitA, TraitB;
}

সমস্যাযুক্ত: প্রতিদ্বন্দ্বী পদ্ধতিগুলির মধ্যে দ্বন্দ্বগুলি সমাধান করা সম্ভব হলেও , বর্তমানে কোনও সিনট্যাক্স নেই যা দুটি প্রতিযোগিতামূলক বৈশিষ্ট্যগুলির মধ্যে দ্বন্দ্ব সমাধান করবে। এই সময়ে একমাত্র সমাধান refactor ; অর্থাৎ, একটি মারাত্মক ত্রুটি উত্পাদিত সম্পত্তি নামের মধ্যে একটি দ্বন্দ্ব এড়াতে।

সম্পর্কিত প্রশ্নাবলী:


মারাত্মক ত্রুটি: XXX বাইটের মেমরির আকার হ্রাস (XXX বাইট বরাদ্দ করার চেষ্টা)

আপনার স্ক্রিপ্ট চালানোর জন্য যথেষ্ট মেমরি নেই। পিএইচপি মেমরি সীমা পৌঁছেছে এবং এটি নির্বাহ বন্ধ করে দেয়। এই ত্রুটি মারাত্মক, স্ক্রিপ্ট বন্ধ। মেমরি সীমা মানটি php.ini ফাইলে বা ini_set('memory_limit', '128 M'); ব্যবহার করে কনফিগার করা যেতে পারে ini_set('memory_limit', '128 M'); স্ক্রিপ্টে (যা php.ini নির্ধারিত মানটি ওভাররাইট করবে)। মেমরি সীমা উদ্দেশ্য একটি উপলব্ধ পিএইচপি স্ক্রিপ্ট সব উপলব্ধ মেমরি gobbling এবং সমগ্র ওয়েব সার্ভার আনয়ন থেকে প্রতিরোধ করা হয়।

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

যদি আপনার স্ক্রিপ্ট মেমরি-নিবিড় কাজ না করে এই ত্রুটি ঘটে তবে আপনাকে একটি মেমরি লিক আছে কিনা তা দেখতে আপনার কোডটি পরীক্ষা করতে হবে। memory_get_usage ফাংশন আপনার বন্ধু।

সম্পর্কিত প্রশ্নাবলী:

  • সমস্ত "মারাত্মক ত্রুটি: XXX বাইটের মাপের মাপের মাপ হ্রাস" স্ট্যাকওভারফ্লোতে প্রশ্ন

কঠোর মান: অ স্ট্যাটিক পদ্ধতি [<class> :: <method>] স্থিরভাবে বলা উচিত নয়

যখন আপনি স্ট্যাটিক হিসাবে একটি শ্রেণিতে একটি অ স্ট্যাটিক পদ্ধতি কল করার চেষ্টা করেন এবং আপনার সেটিংসেও E_STRICTপতাকা থাকে তখন ঘটে error_reporting()

উদাহরণ:

class HTML {
   public function br() {
      echo '<br>';
   }
}

HTML::br() অথবা $html::br()

আপনি আসলে যোগ না করে এই ত্রুটি এড়াতে E_STRICTপারেন error_reporting(), উদাহরণস্বরূপ

error_reporting(E_ALL & ~E_STRICT);

যেহেতু পিএইচপি 5.4.0 এবং তারপরে, [ ref ] E_STRICTঅন্তর্ভুক্ত করা হয়েছে । কিন্তু যে পরামর্শযোগ্য নয়। সমাধানটি আপনার উদ্দেশ্যে থাকা স্ট্যাটিক ফাংশনটিকে প্রকৃত হিসাবে সংজ্ঞায়িত করতে হয় :E_ALLrefstatic

public static function br() {
  echo '<br>';
}

অথবা প্রচলিত ফাংশন কল:

$html = new HTML();
$html->br();

সম্পর্কিত প্রশ্নাবলী :


কিছুই দেখা যায় না। পাতা খালি এবং সাদা।

মৃত্যুর হোয়াইট পেজ বা মৃত্যুর হোয়াইট স্ক্রিন হিসাবেও পরিচিত। ত্রুটি রিপোর্টিং বন্ধ করা হয় এবং একটি মারাত্মক ত্রুটি (প্রায়ই সিনট্যাক্স ত্রুটি) ঘটে যখন এটি ঘটে।

যদি আপনার ত্রুটি লগিং সক্ষম থাকে তবে আপনার ত্রুটি লগে কংক্রিট ত্রুটি বার্তা পাবেন। এটি সাধারণত "php_errors.log" নামক একটি ফাইলে থাকবে, এটি একটি কেন্দ্রীয় অবস্থানে (যেমন, অনেকগুলি Linux পরিবেশে /var/log/apache2 ) অথবা স্ক্রিপ্টের ডিরেক্টরিতে (কখনও কখনও ভাগ করা হোস্টিং পরিবেশে ব্যবহৃত হয়)।

কখনও কখনও এটি সাময়িকভাবে ত্রুটি প্রদর্শন সক্রিয় করতে আরও সহজতর হতে পারে। সাদা পাতা তারপর ত্রুটি বার্তা প্রদর্শন করবে। যত্ন নিন কারণ এই ত্রুটি ওয়েবসাইট দেখার জন্য সবার কাছে দৃশ্যমান।

এই সহজে নিম্নলিখিত পিএইচপি কোড স্ক্রিপ্ট শীর্ষে যোগ করে সম্পন্ন করা যেতে পারে:

ini_set('display_errors', 1); error_reporting(~0);

কোড ত্রুটি প্রদর্শন চালু হবে এবং সর্বোচ্চ স্তরের রিপোর্টিং সেট হবে।

যেহেতু ini_set() রানটাইম এ কার্যকর হয় তাই এটি প্যারিসিং / সিনট্যাক্স ত্রুটিগুলিতে কোন প্রভাব ফেলে না। যারা ত্রুটি লগ প্রদর্শিত হবে। আপনি যদি তাদের আউটপুটতেও প্রদর্শন করতে চান (উদাহরণস্বরূপ ব্রাউজারে) তাহলে আপনাকে display_startup_errors নির্দেশটি সত্যতে সেট করতে হবে। এটি php.ini বা একটি .htaccess বা অন্য কোনও পদ্ধতিতে যা রানটাইম আগে কনফিগারেশনকে প্রভাবিত করে

আপনি নিজের লগ ফাইল অবস্থান চয়ন করতে log_errors এবং log_errors সেট করতে একই পদ্ধতিগুলি ব্যবহার করতে পারেন।

লগ ইন বা ডিসপ্লে ব্যবহার করে, আপনি অনেক ভাল ত্রুটির বার্তা পাবেন এবং আপনার স্ক্রিপ্ট থামাতে কোডের লাইন পাবেন।

সম্পর্কিত প্রশ্নাবলী:

সম্পর্কিত ত্রুটি:


নোটিশ: অনির্ধারিত পরিবর্তনশীল

যখন আপনি এমন একটি পরিবর্তনশীল ব্যবহার করার চেষ্টা করেন যা পূর্বে সংজ্ঞায়িত করা হয় নি।

একটি আদর্শ উদাহরণ হতে হবে

foreach ($items as $item) {
    // do something with item
    $counter++;
}

যদি আপনি আগে $counter সংজ্ঞায়িত না করেন, উপরের কোডটি বিজ্ঞপ্তিটি ট্রিগার করবে।

সঠিক উপায়টি ব্যবহার করার আগে পরিবর্তনশীল সেট করতে হবে, এমনকি যদি এটি কেবল একটি খালি স্ট্রিং থাকে

$counter = 0;
foreach ($items as $item) {
    // do something with item
    $counter++;
}

সম্পর্কিত প্রশ্নাবলী:


নোটিশ: রূপান্তর স্ট্রিং অ্যারে

আপনি যদি একটি স্ট্রিং হিসাবে একটি অ্যারে চিকিত্সা করার চেষ্টা করেন তবে এটি কেবলই ঘটবে:

$arr = array('foo', 'bar');

echo $arr;  // Notice: Array to string conversion
$str = 'Something, ' . $arr;  // Notice: Array to string conversion

একটি অ্যারে কেবল echo'd' বা একটি স্ট্রিং সহ concatenated করা যাবে না , কারণ ফলাফল ভাল সংজ্ঞায়িত করা হয় না। পিএইচপি অ্যারের পরিবর্তে "অ্যারে" স্ট্রিংটি ব্যবহার করবে এবং লক্ষ্য করে এটি লক্ষ্য করা যাবে যে সম্ভবত এর উদ্দেশ্য কি ছিল না এবং আপনার কোডটি এখানে পরীক্ষা করা উচিত। আপনি সম্ভবত পরিবর্তে এই মত কিছু চাই:

echo $arr[0];  // displays foo
$str = 'Something ' . join(', ', $arr); //displays Something, foo, bar

অথবা অ্যারে লুপ:

foreach($arr as $key => $value) {
    echo "array $key = $value";
    // displays first: array 0 = foo
    // displays next:  array 1 = bar
}

এই নোটিশ কোথাও প্রদর্শিত হয় যদি আপনি আশা করেন না, এটি একটি পরিবর্তনশীল মানে আপনি একটি স্ট্রিং আসলে একটি অ্যারে হয়। এর অর্থ হল আপনার কোডটিতে একটি বাগ রয়েছে যা আপনার পছন্দসই স্ট্রিংয়ের পরিবর্তে এই পরিবর্তনশীল অ্যারেটি তৈরি করে।


সতর্কতা: [ফাংশন] : স্ট্রিম খুলতে ব্যর্থ হয়েছে: [কারণ]

এটি যখন আপনি সাধারণত একটি ফাইল কল করে, require বা fopen দ্বারা কল করেন এবং পিএইচপি ফাইলটি খুঁজে fopen না বা ফাইলটি লোড করার জন্য পর্যাপ্ত অনুমতি নেই।

বিভিন্ন কারণে এটি ঘটতে পারে:

  • ফাইল পথ ভুল
  • ফাইল পাথ আপেক্ষিক
  • পথ অন্তর্ভুক্ত ভুল
  • অনুমতি খুব নিষেধাজ্ঞা
  • SELinux বলপূর্বক
  • এবং আরো অনেক ...

একটি সাধারণ ভুল একটি পরম পথ ব্যবহার করা হয় না। __DIR__ বা dirname(__FILE__) মতো সম্পূর্ণ পাথ বা জাদু ধ্রুবকগুলি ব্যবহার করে এটি সহজে সমাধান করা যেতে পারে:

include __DIR__ . '/inc/globals.inc.php';

বা:

require dirname(__FILE__) . '/inc/globals.inc.php';

সঠিক পথ নিশ্চিত করা এই সমস্যাগুলি সমাধান করার এক ধাপ, এটি অ-বিদ্যমান ফাইলগুলির সাথে সম্পর্কিত, ফাইল সিস্টেমগুলির অধিকারগুলি অ্যাক্সেস প্রতিরোধ বা পিএইচপি দ্বারা খোলা ভিত্তিক বিধিনিষেধগুলিও সম্পর্কিত হতে পারে।

দ্রুত এই সমস্যার সমাধান করার সেরা উপায় নীচের সমস্যা সমাধান চেকলিস্ট অনুসরণ করা হয়।

সম্পর্কিত প্রশ্নাবলী:

সম্পর্কিত ত্রুটি:


পার্স ত্রুটি: সিনট্যাক্স ত্রুটি, অপ্রত্যাশিত T_PAAMAYIM_NEKUDOTAYIM

সুযোগ রেজোলিউশন অপারেটরটিকে হিব্রু থেকে "পায়েমিম নিকুদতাইম" বলা হয়। פעמיים נקודתיים। যার অর্থ "ডবল কলোন" বা "দ্বিগুণ ডাবল"।

এই ত্রুটিটি সাধারণত ঘটে যদি আপনি অযৌক্তিকভাবে আপনার কোডে রাখেন ::

সম্পর্কিত প্রশ্নাবলী:

ডকুমেন্টেশন:


সতর্কতা: অবৈধ স্ট্রিং অফসেট 'XXX'

যখন আপনি বর্গক্ষেত্র বন্ধনী সিনট্যাক্সের সাথে একটি অ্যারে উপাদানটি অ্যাক্সেস করার চেষ্টা করেন তখন এটি ঘটে, কিন্তু আপনি এটি একটি স্ট্রিংয়ে করছেন, এবং একটি অ্যারেতে নয়, তাই অপারেশনটি স্পষ্টভাবে বুঝে না

উদাহরণ:

$var = "test";
echo $var["a_key"];

যদি আপনি ভেরিয়েবলটিকে একটি অ্যারে হিসাবে মনে করেন তবে এটি কোথা থেকে আসে তা দেখুন এবং সমস্যাটির সমাধান করুন।


নোটিশ: অ-বস্তুর ত্রুটি সম্পত্তি পেতে চেষ্টা

যখন কোন বস্তু নেই তখন আপনি কোনও বস্তুর কোনও সম্পত্তি অ্যাক্সেস করার চেষ্টা করেন।

একটি অ-বস্তু বিজ্ঞপ্তি জন্য একটি আদর্শ উদাহরণ হতে হবে

$users = json_decode('[{"name": "hakre"}]');
echo $users->name; # Notice: Trying to get property of non-object

এই ক্ষেত্রে, $usersএকটি অ্যারে (তাই একটি বস্তু নয়) এবং এটি কোন বৈশিষ্ট্য নেই।

এটি একটি অ বিদ্যমান বিদ্যমান সূচী বা একটি অ্যারের কী অ্যাক্সেসের অনুরূপ ( বিজ্ঞপ্তিটি দেখুন: অনির্ধারিত সূচী )।

এই উদাহরণটি অনেক সরলীকৃত। প্রায়শই এই ধরনের বিজ্ঞপ্তি একটি অচেনা ফেরত মান সংকেত দেয়, যেমন NULLকোন বস্তু বিদ্যমান না হলে বা কোন অপ্রত্যাশিত অ-বস্তুর মান (যেমন Xpath ফলাফলে, অপ্রত্যাশিত বিন্যাস সহ JSON কাঠামো, অপ্রত্যাশিত বিন্যাস সহ এক্সএমএল ইত্যাদি) কোন লাইব্রেরি ফেরত পাঠায় । কিন্তু কোড যেমন একটি অবস্থা জন্য পরীক্ষা করে না।

যে অ-বস্তুগুলিকে প্রায়শই প্রক্রিয়া করা হয়, প্রায়শই একটি মারাত্মক-ত্রুটি পরবর্তী বস্তুটিকে অ-বস্তুতে একটি বস্তু পদ্ধতিতে কল করার বিষয়ে ঘটে। (দেখুন: মারাত্মক ত্রুটি: কোনও সদস্য ফাংশনে কল করুন ... অ-বস্তুতে কল করুন ) বন্ধ করে দেওয়া লিপি.

এটি সহজেই ত্রুটি অবস্থার জন্য এবং / অথবা একটি পরিবর্তনশীল একটি প্রত্যাশা মেলে যে পরীক্ষা করে প্রতিরোধ করা যেতে পারে। এখানে ডমক্সপ্যাথ উদাহরণ সহ এমন একটি বিজ্ঞপ্তি :

$result  = $xpath->query("//*[@id='detail-sections']/div[1]");
$divText = $result->item(0)->nodeValue; # Notice: Trying to get property of non-object

সমস্যাটির nodeValueপ্রথম আইটেমটির সম্পত্তি (ক্ষেত্র) অ্যাক্সেস করা হচ্ছে যখন এটি উপস্থিত রয়েছে নাকি এটি $resultসংগ্রহের মধ্যে নেই। পরিবর্তে কোড কোডগুলি পরিচালনা করে এমন বস্তুর ভেরিয়েবলগুলি নির্ধারণ করে কোডটিকে আরও স্পষ্ট করে তুলতে দেয়:

$result  = $xpath->query("//*[@id='detail-sections']/div[1]");
$div     = $result->item(0);
$divText = "-/-";
if ($div) {
    $divText = $div->nodeValue;
}
echo $divText;

সম্পর্কিত ত্রুটি:

  • নোটিশ: অনির্ধারিত সূচক
  • মারাত্মক ত্রুটি: একটি সদস্য ফাংশন কল করুন ... একটি অ-বস্তু

সতর্কতা: mysql_connect (): ব্যবহারকারীর নাম '@' হোস্টের জন্য অ্যাক্সেস অস্বীকৃত

অবৈধ বা অনুপস্থিত প্রমাণপত্রাদি (ব্যবহারকারীর নাম / পাসওয়ার্ড) সহ একটি মাইএসকিউএল / মারিয়াডিবি সার্ভারের সাথে সংযোগ করার সময় এই সতর্কতাটি দেখায়। তাই এই সাধারণত হয় না একটি কোড সমস্যা কিন্তু কোন সার্ভার কনফিগারেশন সমস্যা।

  • উদাহরণস্বরূপ ম্যানুয়াল পৃষ্ঠা দেখুন mysql_connect("localhost", "user", "pw")

  • আপনি আসলে $usernameএবং একটি ব্যবহার করে দেখুন $password

    • এটি অস্বাভাবিক যে আপনি কোনও পাসওয়ার্ড ব্যবহার করে অ্যাক্সেস লাভ করেন - যা ঘটেছে সেটি যখন সতর্কতা: বলেছেন (using password: NO)
    • শুধুমাত্র স্থানীয় পরীক্ষা সার্ভার সাধারণত ব্যবহারকারীর নাম root, কোন পাসওয়ার্ড এবং testডাটাবেসের নাম সংযোগ করতে পারবেন ।

    • আপনি কমান্ড লাইন ক্লায়েন্ট ব্যবহার করে সত্যিই সঠিক কিনা পরীক্ষা করতে পারেন :
      mysql --user="username" --password="password" testdb

    • ব্যবহারকারী নাম এবং পাসওয়ার্ড কেস সংবেদনশীল এবং হোয়াইটস্পেস উপেক্ষা করা হয় না । যদি আপনার পাসওয়ার্ডে মেটা অক্ষর থাকে তবে $সেগুলিকে এড়িয়ে যান, বা একক উদ্ধৃতিতে পাসওয়ার্ডটি রাখুন ।

    • সর্বাধিক শেয়ার করা হোস্টিং প্রদানকারীগুলি ইউনিক্স ব্যবহারকারীর অ্যাকাউন্টের সাথে সম্পর্কিত MySQL অ্যাকাউন্টগুলি পূর্বাভাস দেয় (কখনও কখনও কেবলমাত্র পূর্বরূপ বা অতিরিক্ত সংখ্যাসূচক প্রতিক্রিয়া)। একটি প্যাটার্ন বা ডকুমেন্টেশন, এবং CPanel বা একটি পাসওয়ার্ড সেটিং জন্য যাই হোক না কেন ইন্টারফেস জন্য ডক্স দেখুন।

    • কমান্ড লাইন ব্যবহার করে ব্যবহারকারী অ্যাকাউন্ট যোগ করার জন্য MySQL ম্যানুয়াল দেখুন । অ্যাডমিন ব্যবহারকারী হিসাবে সংযুক্ত হলে আপনি একটি প্রশ্ন যেমন ইস্যু করতে পারেন:
      CREATE USER 'username'@'localhost' IDENTIFIED BY 'newpassword';

    • অথবা অ্যাকাউন্ট বিবরণ তৈরি, চেক বা সংশোধন করতে Adminer বা WorkBench বা অন্য কোনও গ্রাফিকাল সরঞ্জাম ব্যবহার করুন।

    • আপনি যদি আপনার শংসাপত্রগুলি ঠিক করতে না পারেন তবে ইন্টারনেটকে "দয়া করে সাহায্য করুন" এর কোন প্রভাব ফেলবে না। শুধু আপনি এবং আপনার হোস্টিং প্রদানকারীর অনুমতি এবং নির্ণয় এবং জিনিস ঠিক করার জন্য পর্যাপ্ত অ্যাক্সেস আছে।

  • আপনার প্রদানকারীর দেওয়া হোস্ট নামটি ব্যবহার করে আপনি ডেটাবেস সার্ভারে পৌঁছাতে পারেন তা যাচাই করুন :
    ping dbserver.hoster.example.net

    • আপনার ওয়েব সার্ভারে সরাসরি এসএসএইচ কনসোল থেকে এটি পরীক্ষা করে দেখুন। আপনার স্থানীয় ডেভেলপমেন্ট ক্লায়েন্ট থেকে আপনার ভাগ হোস্টিং সার্ভার থেকে পরীক্ষা খুব কম অর্থপূর্ণ।

    • প্রায়শই আপনি কেবলমাত্র সার্ভারের নামটি চান "localhost", যা সাধারণত উপলব্ধ স্থানীয় নামযুক্ত সকেট ব্যবহার করে। অন্য সময় আপনি "127.0.0.1"fallback হিসাবে চেষ্টা করতে পারেন ।

    • আপনার MySQL / MariaDB সার্ভার একটি ভিন্ন পোর্ট শুনতে হবে, তারপর ব্যবহার করুন "servername:3306"

    • যদি এটি ব্যর্থ হয় তবে সম্ভবত একটি ফায়ারওয়াল সমস্যা রয়েছে। (অফ-বিষয়, কোন প্রোগ্রামিং প্রশ্ন নয়। কোন দূরবর্তী অনুমান-সহায়তা সম্ভব নয়।)

  • উদাহরণস্বরূপ ধ্রুবক ব্যবহার করে DB_USERবা যখন DB_PASSWORD, তারা আসলে defined যে পরীক্ষা ।

    • যদি আপনি একটি "Warning: Access defined for 'DB_USER'@'host'"এবং একটি পেতে "Notice: use of undefined constant 'DB_PASS'", তারপর যে আপনার সমস্যা।

    • যাচাই করুন যে আপনার যেমন xy/db-config.phpআসলে অন্তর্ভুক্ত ছিল এবং whatsse।

  • সঠিকভাবে সেট GRANTঅনুমতি জন্য চেক করুন ।

    • এটি একটি username+ passwordজোড়া আছে যথেষ্ট নয় ।

    • প্রতিটি MySQL / MariaDB অ্যাকাউন্টের অনুমতিগুলির একটি সংযুক্ত সেট থাকতে পারে।

    • যে সংযোগগুলি আপনার সাথে সংযুক্ত করার অনুমতি দেওয়া হয় সেগুলি সীমাবদ্ধ করতে পারে, যার থেকে সংযোগটি ক্লায়েন্ট / সার্ভার থেকে উদ্ভূত হতে পারে এবং কোন প্রশ্নগুলি অনুমোদিত।

    • "অ্যাক্সেস অস্বীকার করা" সতর্কতা এইভাবে mysql_queryকলগুলির জন্য প্রদর্শিত হতে পারে , যদি আপনার SELECTকোন নির্দিষ্ট সারণী থেকে অনুমতি না দেওয়া হয় , অথবা INSERT/ অথবা UPDATEআরো DELETEকিছু কিছু।

    • অ্যাডমিন অ্যাকাউন্ট ব্যবহার করে একটি ক্যোয়ারী সহ কমান্ড লাইন ক্লায়েন্টের সাথে সংযোগ করার সময় আপনি অ্যাকাউন্টের অনুমতিগুলি মঞ্জুর করতে পারেন:
      GRANT ALL ON yourdb.* TO 'username'@'localhost';

  • যদি সতর্কতাটি প্রথমে দেখায় Warning: mysql_query(): Access denied for user ''@'localhost'তবে আপনার কাছে একটি php.ini- পূর্বনির্ধারিত অ্যাকাউন্ট / পাসওয়ার্ড জোড়া থাকতে পারে

    • যে চেক করুন mysql.default_user=এবং mysql.default_password=অর্থপূর্ণ মান আছে।

    • প্রায়শই এটি একটি প্রদানকারী কনফিগারেশন। সুতরাং বিচ্ছিন্নতার জন্য তাদের সমর্থন যোগাযোগ করুন।

  • আপনার ভাগ হোস্টিং প্রদানকারীর ডকুমেন্টেশন খুঁজুন:

  • উল্লেখ্য যে আপনি উপলব্ধ সংযোগ পুল হ্রাসও হতে পারে । আপনি অনেকগুলি সমবর্তী সংযোগের জন্য অ্যাক্সেস অস্বীকার সতর্কতা পাবেন। (আপনাকে সেটআপটি তদন্ত করতে হবে। এটি একটি অফ-বিষয় সার্ভার কনফিগারেশন সমস্যা, কোন প্রোগ্রামিং প্রশ্ন নয়।)

  • আপনার libmysql ক্লায়েন্ট সংস্করণ ডাটাবেস সার্ভারের সাথে সামঞ্জস্যপূর্ণ হতে পারে না । সাধারণত মাইএসকিউএল এবং মারিয়াডিবি সার্ভারগুলি ড্রাইভারের মধ্যে সংকলিত পিএইচপি সহ পৌঁছাতে পারে। আপনার যদি একটি কাস্টম সেটআপ থাকে, বা একটি পুরানো পিএইচপি সংস্করণ থাকে, এবং একটি নতুন ডাটাবেস সার্ভার, অথবা উল্লেখযোগ্যভাবে পুরনো হয় - তাহলে সংস্করণটি মিলেচেম সংযোগগুলি প্রতিরোধ করতে পারে। (না, আপনাকে নিজের তদন্ত করতে হবে। কেউ আপনার সেটআপ অনুমান করতে পারে না)।

আরো উল্লেখ:

BTW, আপনি সম্ভবত mysql_*ফাংশন ব্যবহার করতে চান না । নতুনরা প্রায়ই মাইস্ক্লিতে স্থানান্তরিত হয় , তবে এটি তীব্রতর। পরিবর্তে পিডিও এবং প্রস্তুত বিবৃতি উপর পড়তে ।
$db = new PDO("mysql:host=localhost;dbname=testdb", "username", "password");


সতর্কতা: [ফাংশন] প্যারামিটার 1 সম্পদ, বুলিয়ান দেওয়া আশা করে

( সতর্কতার আরও সাধারণ পরিবর্তন : mysql_fetch_array () পরামিতি 1 টি সম্পদ, বুলিয়ান প্রদত্ত প্রত্যাশা করে )

সম্পদ পিএইচপি একটি type (স্ট্রিং, পূর্ণসংখ্যা বা বস্তুর মত)। একটি সম্পদ একটি অলঙ্কৃত ব্লোব যার নিজস্ব স্বতঃস্ফূর্ত অর্থপূর্ণ মূল্য নেই। একটি সম্পদ পিএইচপি ফাংশন বা এক্সটেনশন নির্দিষ্ট সেট দ্বারা নির্দিষ্ট এবং সংজ্ঞায়িত করা হয়। উদাহরণস্বরূপ, মাইস্ক্ল এক্সটেনশন দুটি সংস্থান প্রকারকে সংজ্ঞায়িত করে :

MySQL মডিউলে ব্যবহৃত দুটি সংস্থান ধরন রয়েছে। প্রথমটি একটি ডাটাবেস সংযোগের জন্য লিঙ্ক সনাক্তকারী, দ্বিতীয়টি এমন একটি সংস্থান যা একটি প্রশ্নের ফলাফল ধারণ করে।

কার্ল এক্সটেনশানটি অন্য দুটি সংস্থান প্রকারকে সংজ্ঞায়িত করে :

... একটি কুলুঙ্গি হ্যান্ডেল এবং একটি curl মাল্টি হ্যান্ডেল।

যখন var_dumpED, মানগুলি এইরকম দেখায়:

$resource = curl_init();
var_dump($resource);

resource(1) of type (curl)

এটি সমস্ত সর্বাধিক সংস্থান, (1)একটি নির্দিষ্ট ধরণের ( (curl)) এর সংখ্যাসূচক সনাক্তকারী ( )।

আপনি এই সংস্থানগুলি বহন করেন এবং বিভিন্ন ফাংশনে তাদের পাস করেন যার জন্য এমন একটি সংস্থার অর্থ কিছু। সাধারণত এই ফাংশনগুলি পটভূমিতে নির্দিষ্ট তথ্য বরাদ্দ করে এবং একটি সংস্থান কেবলমাত্র একটি রেফারেন্স যা তারা অভ্যন্তরীণভাবে এই তথ্যটি ট্র্যাক রাখতে ব্যবহার করে।

" ... অনুমান করে প্যারামিটার 1 সম্পদ হতে পারে, বুলিয়ান দেওয়া " ত্রুটিটি সাধারণত একটি অনির্ধারিত ক্রিয়াকলাপের ফলাফল যা একটি সংস্থান তৈরি করতে অনুমিত হয়, তবে falseপরিবর্তে এটি ফেরত দেয় । উদাহরণস্বরূপ, fopenফাংশন এই বিবরণ আছে:

ফেরত মান

সাফল্য, অথবা FALSEত্রুটি উপর একটি ফাইল পয়েন্টার রিসোর্স প্রদান করে ।

সুতরাং এই কোডে, $fpহয় একটি resource(x) of type (stream)বা হবে false:

$fp = fopen(...);

fopenঅপারেশনটি সফল বা ব্যর্থ হয়েছে কিনা তা যাচাই না করে এবং $fpযদি কোনও বৈধ সংস্থান হয় বা কোনও সংস্থানের প্রত্যাশা করে এমন অন্য ফাংশনে falseপাস $fpহয় তবে আপনি উপরের ত্রুটিটি পেতে পারেন:

$fp   = fopen(...);
$data = fread($fp, 1024);

Warning: fread() expects parameter 1 to be resource, boolean given

কোনও সংস্থান বরাদ্দ করার চেষ্টা করছেন এমন ফাংশনের ফিরতি মূল্য যাচাই করতে আপনাকে সর্বদা ত্রুটি করতে হবে এবং ব্যর্থ হতে পারে :

$fp = fopen(...);

if (!$fp) {
    trigger_error('Failed to allocate resource');
    exit;
}

$data = fread($fp, 1024);

সম্পর্কিত ত্রুটি:


লক্ষ্য করুন: অনির্ধারিত ধ্রুবক XXX ব্যবহার করুন - অনুমান করা হয়েছে 'XXX'

অথবা, পিএইচপি 7.2 বা পরবর্তীতে:

সতর্কতা: অনির্ধারিত ধ্রুবক XXX- অনুমিত 'XXX' ব্যবহার করুন (এটি পিএইচপি এর ভবিষ্যতের সংস্করণে একটি ত্রুটি ফেলে দেবে)

এই নোটিশটি ঘটে যখন কোডটিতে একটি টোকেন ব্যবহার করা হয় এবং ধ্রুবক বলে মনে হয়, তবে সেই নামের দ্বারা একটি ধ্রুবক সংজ্ঞায়িত করা হয় না।

এই নোটিশের সবচেয়ে সাধারণ কারণগুলির মধ্যে একটি হল অ্যাসোসিয়েটেভ অ্যারে কী হিসাবে ব্যবহৃত একটি স্ট্রিংটি উদ্ধৃত করার ব্যর্থতা।

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

// Wrong
echo $array[key];

// Right
echo $array['key'];

আরেকটি সাধারণ কারণ একটি পরিবর্তনশীল নাম সামনে $ (ডলার) সাইন অনুপস্থিত:

// Wrong
echo varName;

// Right
echo $varName;

অথবা সম্ভবত আপনি অন্য কিছু ধ্রুবক বা কীওয়ার্ড ভুল বানান করেছেন:

// Wrong
$foo = fasle;

// Right
$foo = false;

এটি এমন একটি চিহ্ন হতে পারে যে যখন আপনি সেই লাইব্রেরির দ্বারা সংজ্ঞায়িত ধ্রুবক অ্যাক্সেস করার চেষ্টা করেন তখন একটি প্রয়োজনীয় পিএইচপি এক্সটেনশন বা লাইব্রেরি অনুপস্থিত।

সম্পর্কিত প্রশ্নাবলী:


পার্স ত্রুটি: সিনট্যাক্স ত্রুটি, অপ্রত্যাশিত T_XXX

যখন আপনার কাছে অপ্রত্যাশিত স্থানে T_XXX টোকেন থাকে, তখন অসম্পূর্ণ (অত্যধিক) বন্ধনী, php.ini এ এটি সক্রিয় না করে ছোট ট্যাগ ব্যবহার করুন এবং আরও অনেক কিছু।

সম্পর্কিত প্রশ্নাবলী:

আরও সহায়তার জন্য দেখুন:

  • http://phpcodechecker.com/ - যা আপনার সিনট্যাক্স ক্ষতিকারক কিছু আরও সহায়ক ব্যাখ্যা প্রদান করে।

কোড চালানো / আমার পিএইচপি কোড অংশ মত দেখাচ্ছে কি আউটপুট হয়

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

আসলে আপনার পিএইচপি স্ক্রিপ্ট চালানো, আপনি প্রয়োজন:

  • একটি ওয়েব সার্ভার যা আপনার স্ক্রিপ্ট চালায়
  • ফাইল এক্সটেনশানটি .php এ সেট করতে, অন্যথায় ওয়েব সার্ভার এটি যেমন ব্যাখ্যা করবে না *
  • ওয়েব সার্ভারের মাধ্যমে আপনার .php ফাইল অ্যাক্সেস করতে

* আপনি এটি পুনর্গঠন না করা পর্যন্ত, সবকিছু কনফিগার করা যাবে।

এই শেষ এক বিশেষ গুরুত্বপূর্ণ। ফাইলটিতে দুবার ক্লিক করলে সম্ভবত এটি আপনার ব্রাউজারে একটি ঠিকানা ব্যবহার করে এটি খুলবে:

file://C:/path/to/my/file.php

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

http://localhost/my/file.php

আপনি এর <?পরিবর্তে শর্ট ওপেন ট্যাগগুলি ব্যবহার করছেন কিনা তা পরীক্ষা করতে পারেন <?phpএবং আপনার পিএইচপি কনফিগারেশন ছোট খোলা ট্যাগগুলি বন্ধ করে দিয়েছে।

এছাড়াও দেখুন পিএইচপি কোডটি কার্যকর হচ্ছে না, পরিবর্তে পৃষ্ঠাটিতে কোড দেখায়





warnings