পিএইচপি - প্রবাহ খুলতে ব্যর্থ: এ জাতীয় কোনও ফাইল বা ডিরেক্টরি নেই


166

পিএইচপি স্ক্রিপ্ট সালে কলিং কিনা include(), require(), fopen(), অথবা তাদের যেমন ডেরিভেটিভস include_once, require_once, অথবা এমনকি, move_uploaded_file()এক প্রায়ই একটি ত্রুটি বা সতর্কতা মধ্যে সঞ্চালিত:

স্ট্রিমটি খুলতে ব্যর্থ: এ জাতীয় কোনও ফাইল বা ডিরেক্টরি নেই।

সমস্যার মূল কারণটি দ্রুত খুঁজে বের করার জন্য একটি ভাল প্রক্রিয়া কী?


5
আমি এই পোস্টে অফ-টপিক মন্তব্যগুলি পরিষ্কার করেছি। মেটাতে মেটা আলোচনা রাখবেন দয়া করে। তবে, দয়া করে নোট করুন যে নীতিগত প্রশ্নাবলীর আলোচনাটি বার বার করা হয়েছে। এখানে উদাহরণ দেখুন ।
মাদারার ঘোস্ট

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

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

উত্তর:


259

এই ত্রুটিটি কারও মধ্যে চলে যেতে পারে তার অনেকগুলি কারণ রয়েছে এবং সুতরাং প্রথমে কী চেক করা উচিত তার একটি ভাল চেকলিস্ট যথেষ্ট পরিমাণে সহায়তা করে।

আসুন বিবেচনা করা যাক আমরা নিম্নলিখিত লাইনের সমস্যা সমাধান করছি:

require "/path/to/file"


চেকলিস্ট


টাইপসের জন্য ফাইলের পাথটি পরীক্ষা করুন

  • হয় ম্যানুয়ালি পরীক্ষা করুন (চাক্ষুষভাবে পথ পরীক্ষা করে)
  • বা যাকে বলা হয় require*বা include*তার নিজস্ব ভেরিয়েবলে স্থানান্তর করুন , এটি প্রতিধ্বনি করুন, অনুলিপি করুন এবং টার্মিনাল থেকে এটি অ্যাক্সেস করার চেষ্টা করুন:

    $path = "/path/to/file";
    
    echo "Path : $path";
    
    require "$path";

    তারপরে, একটি টার্মিনালে:

    cat <file path pasted>


২. পরীক্ষা করুন বনাম পরম পাথ বিবেচনার ক্ষেত্রে ফাইলের পথটি সঠিক কিনা

  • যদি এটি একটি ফরোয়ার্ড স্ল্যাশ "/" দ্বারা শুরু হয় তবে এটি আপনার ওয়েবসাইটের ফোল্ডারের (ডকুমেন্ট রুট) মূলকে নির্দেশ করে না, তবে আপনার সার্ভারের মূলকে বোঝায়।
    • উদাহরণস্বরূপ, আপনার ওয়েবসাইটের ডিরেক্টরি হতে পারে /users/tony/htdocs
  • যদি এটি কোনও ফরোয়ার্ড স্ল্যাশ দিয়ে শুরু না হয় তবে তা হয় অন্তর্ভুক্ত পাথের উপর নির্ভর করে (নীচে দেখুন) বা পথটি আপেক্ষিক। যদি এটি আপেক্ষিক হয়, তবে পিএইচপি বর্তমান কার্যক্ষম ডিরেক্টরিটির পথে তুলনামূলকভাবে গণনা করবে ।
    • সুতরাং, আপনার ওয়েবসাইটের মূলের পাথের সাথে বা আপনি যে ফাইলটি টাইপ করছেন তার সাথে সম্পর্কিত নয়
    • যে কারণে, সর্বদা নিখুঁত ফাইল পাথ ব্যবহার করুন

সেরা অনুশীলন :

রান স্ক্রিনে এখনও কোনও পরম পথ তৈরি করার সময় আপনার জিনিসগুলি চারদিকে সরিয়ে নেওয়ার ক্ষেত্রে আপনার স্ক্রিপ্টটি শক্তিশালী করার জন্য আপনার কাছে দুটি বিকল্প রয়েছে:

  1. ব্যবহার require __DIR__ . "/relative/path/from/current/file"__DIR__জাদু ধ্রুবক বর্তমান ফাইলের ডিরেক্টরি ফেরৎ।
  2. একটি SITE_ROOTধ্রুবক নিজেকে সংজ্ঞায়িত করুন:

    • আপনার ওয়েবসাইটের ডিরেক্টরিটির মূলে একটি ফাইল তৈরি করুন, যেমন config.php
    • ইন config.php, লিখুন

      define('SITE_ROOT', __DIR__);
    • প্রতিটি ফাইলে যেখানে আপনি সাইটের মূল ফোল্ডারটি উল্লেখ করতে চান, অন্তর্ভুক্ত করুন config.phpএবং তারপরে SITE_ROOTযেখানে খুশি সেখানে ধ্রুবকটি ব্যবহার করুন :

      require_once __DIR__."/../config.php";
      ...
      require_once SITE_ROOT."/other/file.php";

এই 2 টি অনুশীলনগুলি আপনার অ্যাপ্লিকেশনটিকে আরও পোর্টেবল করে তোলে কারণ এটি অন্তর্ভুক্ত পাথের মতো আইএনআই সেটিংসে নির্ভর করে না।


৩. আপনার অন্তর্ভুক্ত পথটি পরীক্ষা করুন

ফাইলগুলি অন্তর্ভুক্ত করার আরেকটি উপায়, তুলনামূলকভাবে বা সম্পূর্ণ নিখুঁতভাবে নয়, অন্তর্ভুক্ত পথে নির্ভর করা । এটি প্রায়শই লাইব্রেরি বা ফ্রেমওয়ার্ক যেমন জেন্ড ফ্রেমওয়ার্কের ক্ষেত্রে ঘটে।

এই জাতীয় অন্তর্ভুক্তি দেখতে এটি দেখতে পাবেন:

include "Zend/Mail/Protocol/Imap.php"

সেক্ষেত্রে, আপনি নিশ্চিত করতে চাইবেন যে "ফোকাস" যেখানে ফোল্ডারটি অন্তর্ভুক্ত পথের অংশ।

আপনি এর সাথে অন্তর্ভুক্ত পথটি পরীক্ষা করতে পারেন:

echo get_include_path();

আপনি এটির সাথে একটি ফোল্ডার যুক্ত করতে পারেন:

set_include_path(get_include_path().":"."/path/to/new/folder");


৪. আপনার সার্ভারের সেই ফাইলটিতে অ্যাক্সেস রয়েছে কিনা তা পরীক্ষা করুন

এটি সমস্ত একসাথে হয়ে থাকতে পারে, সার্ভার প্রক্রিয়া চালিয়ে ব্যবহারকারীর (অ্যাপাচি বা পিএইচপি) কেবল সেই ফাইলটি থেকে পড়ার বা লেখার অনুমতি নেই।

সার্ভারটি কোন ব্যবহারকারীর দ্বারা চলছে তা পরীক্ষা করতে আপনি posix_getpwuid ব্যবহার করতে পারেন :

$user = posix_getpwuid(posix_geteuid());

var_dump($user);

ফাইলটিতে অনুমতিগুলি খুঁজতে, টার্মিনালে নিম্নলিখিত কমান্ডটি টাইপ করুন:

ls -l <path/to/file>

এবং অনুমতি প্রতীকী স্বরলিপি তাকান


৫. পিএইচপি সেটিংস পরীক্ষা করুন

যদি উপরের কোনওটি যদি কাজ না করে, তবে সমস্যাটি সম্ভবত এমন হয় যে কিছু পিএইচপি সেটিংস সেটিকে ফাইলটিতে অ্যাক্সেস করতে নিষেধ করে।

তিনটি সেটিংস প্রাসঙ্গিক হতে পারে:

  1. open_basedir
    • যদি এটি সেট করা থাকে তবে পিএইচপি নির্দিষ্ট ডিরেক্টরিের বাইরে কোনও ফাইল অ্যাক্সেস করতে সক্ষম হবে না (এমনকি প্রতীকী লিঙ্কের মাধ্যমেও নয়)।
    • যাইহোক, ডিফল্ট আচরণ এটি নির্ধারণ না করা হয় যে ক্ষেত্রে কোনও সীমাবদ্ধতা নেই
    • এটি ফোন করে phpinfo()বা ব্যবহার করে চেক করা যেতে পারেini_get("open_basedir")
    • আপনি আপনার php.ini ফাইল বা আপনার httpd.conf ফাইল সম্পাদনা করে সেটিংস পরিবর্তন করতে পারেন
  2. নিরাপদ ভাবে
    • এটি নিষ্ক্রিয় করা থাকলে এটি প্রয়োগ হতে পারে। তবে এটি পিএইচপি 5.4 এ সরানো হয়েছে। আপনি যদি এখনও এমন কোনও সংস্করণে থাকেন যা কোনও পিএইচপি সংস্করণে নিরাপদ মোড আপগ্রেড সমর্থন করে যা এখনও সমর্থনযোগ্য
  3. اجازه_url_fopen এবং অনুমতি_url_ সহ অন্তর্ভুক্ত
    • এটি কেবলমাত্র স্থানীয় নেটওয়ার্ক সিস্টেমে ফাইল অন্তর্ভুক্ত করার চেষ্টা করার সময় নয়: HTTP: // এর মতো নেটওয়ার্ক প্রক্রিয়ার মাধ্যমে ফাইলগুলি অন্তর্ভুক্ত বা খোলার ক্ষেত্রে প্রযোজ্য
    • এটি দিয়ে চেক করা যায় ini_get("allow_url_include")এবং সেট করা যায়ini_set("allow_url_include", "1")


কর্নার কেস

উপরের কোনওটি যদি সমস্যা নির্ণয়ের জন্য সক্ষম না হয় তবে এখানে কিছু বিশেষ পরিস্থিতি রয়েছে যা ঘটতে পারে:


1. পাঠাগারে অন্তর্ভুক্ত লাইব্রেরি অন্তর্ভুক্তি

এটি ঘটতে পারে যে আপনি একটি লাইব্রেরি অন্তর্ভুক্ত করেন, উদাহরণস্বরূপ, জেন্ড ফ্রেমওয়ার্ক, আপেক্ষিক বা পরম পথ ব্যবহার করে। উদাহরণ স্বরূপ :

require "/usr/share/php/libzend-framework-php/Zend/Mail/Protocol/Imap.php"

তবে তারপরেও আপনি একই ধরণের ত্রুটি পান।

এটি ঘটতে পারে কারণ আপনি যে ফাইলটি (সাফল্যের সাথে) অন্তর্ভুক্ত করেছেন সেটির অন্য একটি ফাইলের নিজেই একটি অন্তর্ভুক্ত বিবৃতি রয়েছে এবং দ্বিতীয়টিতে বিবৃতিটি অন্তর্ভুক্ত করে ধরে নেওয়া হয় যে আপনি সেই লাইব্রেরির পথটি অন্তর্ভুক্ত করার পথে যুক্ত করেছেন।

উদাহরণস্বরূপ, পূর্বে উল্লিখিত জেন্ড ফ্রেমওয়ার্ক ফাইলে নিম্নলিখিতগুলির মধ্যে অন্তর্ভুক্ত থাকতে পারে:

include "Zend/Mail/Protocol/Exception.php" 

যা না কোনও আপেক্ষিক পথ দ্বারা অন্তর্ভুক্ত নয়, না পরম পথ দ্বারা। এটি ধরে নেওয়া হচ্ছে যে জেন্ড ফ্রেমওয়ার্ক ডিরেক্টরিটি অন্তর্ভুক্তের পথে যুক্ত করা হয়েছে।

এই জাতীয় ক্ষেত্রে, কেবলমাত্র কার্যকর সমাধান হ'ল ডিরেক্টরিটি আপনার অন্তর্ভুক্ত পথে যুক্ত করা add


2. সেলিনাক্স

আপনি যদি সুরক্ষা-বর্ধিত লিনাক্স চালাচ্ছেন তবে সার্ভার থেকে ফাইল অ্যাক্সেসকে অস্বীকার করে সমস্যাটির কারণ হতে পারে।

আপনার সিস্টেমে SELinux সক্ষম আছে কিনা তা পরীক্ষা করতেsestatus একটি টার্মিনালে কমান্ডটি চালান । যদি কমান্ডটি উপস্থিত না থাকে, তবে SELinux আপনার সিস্টেমে নেই। যদি এটি বিদ্যমান থাকে, তবে এটি প্রয়োগ করা হবে কি না তা আপনাকে জানানো উচিত।

SELinux নীতিগুলি সমস্যার কারণ কিনা তা যাচাই করতে আপনি এটি অস্থায়ীভাবে বন্ধ করার চেষ্টা করতে পারেন। তবে সাবধান থাকুন, কারণ এটি পুরোপুরি সুরক্ষা অক্ষম করবে। আপনার প্রোডাকশন সার্ভারে এটি করবেন না।

setenforce 0

আপনার যদি আর সেলইনাক্স বন্ধ হওয়ার সমস্যা না থেকে থাকে তবে এটির মূল কারণ।

এটি সমাধান করতে , আপনাকে সে অনুযায়ী সেলইনাক্স কনফিগার করতে হবে।

নিম্নলিখিত প্রসঙ্গে প্রকারের প্রয়োজন হবে:

  • httpd_sys_content_t আপনার সার্ভারটি পড়তে সক্ষম হতে চান এমন ফাইলগুলির জন্য
  • httpd_sys_rw_content_t যে ফাইলগুলিতে আপনি পড়তে এবং লেখার অ্যাক্সেস চান তার জন্য
  • httpd_log_t লগ ফাইলের জন্য
  • httpd_cache_t ক্যাশে ডিরেক্টরি জন্য

উদাহরণস্বরূপ, httpd_sys_content_tআপনার ওয়েবসাইটের মূল ডিরেক্টরিতে প্রসঙ্গের প্রকারটি নির্ধারণ করতে , চালান:

semanage fcontext -a -t httpd_sys_content_t "/path/to/root(/.*)?"
restorecon -Rv /path/to/root

যদি আপনার ফাইলটি কোনও হোম ডিরেক্টরিতে থাকে তবে আপনাকে httpd_enable_homedirsবুলিয়ানও চালু করতে হবে :

setsebool -P httpd_enable_homedirs 1

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


3. সিমফনি

আপনি যদি সিমফনি ব্যবহার করছেন এবং কোনও সার্ভারে আপলোড করার সময় এই ত্রুটিটি অনুভব করছেন, তবে এটি এমন হতে পারে যে অ্যাপ্লিকেশনটির ক্যাশে পুনরায় সেট করা হয়নি, হয় app/cacheআপলোড হয়ে গেছে বা ক্যাশে সাফ করা হয়নি।

আপনি নিম্নলিখিত কনসোল কমান্ডটি চালিয়ে এটি পরীক্ষা করে ঠিক করতে পারেন:

cache:clear


৪. জিপ ফাইলের মধ্যে নন এসিএসআইআই অক্ষর

স্পষ্টতই, zip->close()জিপের অভ্যন্তরে কিছু ফাইলের "é" এর মতো ফাইলের নামগুলিতে অ-এএসসিআইআই অক্ষর না থাকলে কল করার সময়ও এই ত্রুটি ঘটতে পারে ।

একটি সম্ভাব্য সমাধান হ'ল utf8_decode()লক্ষ্য ফাইলটি তৈরি করার আগে ফাইলটির নাম মোড়ানো ।

এই সমস্যার সমাধান সনাক্তকরণ এবং পরামর্শ দেওয়ার জন্য ফ্র্যান ক্যানোকে ক্রেডিট


4
আমি মনে করি উল্লেখ selinuxএখানে একটি ভাল ধারণা হতে পারে। অন্তত httpd_sys_content_tঅন্তর্ভুক্ত ফাইলগুলিতে আপনাকে কমপক্ষে প্রয়োজন (কেবল পঠনযোগ্য ডিরেক্টরি এবং অ্যাপাচি দ্বারা ব্যবহৃত ফাইলগুলি) অনুমতি লাগবে ।
বনসী

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

chconঅস্থায়ী এবং একটি restoreconবা রিবুট টিকবে না । আপনার semanageফাইলের প্রসঙ্গে পরিবর্তনটি ব্যবহার করতে হতে পারে । এখানে ওয়েব সাইটের জন্য
বনসী

যুক্ত করার আরেকটি সম্ভাবনা: রিয়েলপথ ক্যাচিং: lyte.id.au/2014/05/01/
কি- এই হেল-

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

16

বিদ্যমান উত্তরটি যুক্ত করতে (সত্যিই ভাল)

শেয়ার্ড হোস্টিং সফটওয়্যার

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

Plesk, তারা ওভাররাইড দেওয়া একটি জায়গা প্রদান httpd.confনামক vhost.conf। কেবল সার্ভার প্রশাসকই এই ফাইলটি লিখতে পারেন। অ্যাপাচি এর জন্য কনফিগারেশনটি দেখতে এমন কিছু দেখাচ্ছে

<Directory /var/www/vhosts/domain.com>
    <IfModule mod_php5.c>
        php_admin_flag engine on
        php_admin_flag safe_mode off
        php_admin_value open_basedir "/var/www/vhosts/domain.com:/tmp:/usr/share/pear:/local/PEAR"
    </IfModule>
</Directory>

আপনার ব্যবহারকারীর হোস্টিং এবং ওয়েব সার্ভার সফ্টওয়্যারটির জন্য ম্যানুয়ালটি আপনার সার্ভার প্রশাসককে পরামর্শ করুন Have

ফাইল অনুমতি

আপনার ওয়েব সার্ভারের মাধ্যমে কোনও ফাইল সম্পাদন করা কমান্ড লাইন বা ক্রোন জব এক্সিকিউশন থেকে খুব আলাদা এটি লক্ষ্য করা গুরুত্বপূর্ণ। বড় পার্থক্যটি হ'ল আপনার ওয়েব সার্ভারটির নিজস্ব ব্যবহারকারী এবং অনুমতি রয়েছে। সুরক্ষার কারণে যে ব্যবহারকারী বেশ সীমাবদ্ধ। উদাহরণস্বরূপ, অ্যাপাচি প্রায়ই হয় apache, www-dataবা httpd(আপনার সার্ভারের উপর নির্ভর করে)। ক্রোন জব বা সি এল এল এক্সিকিউশনটিতে ব্যবহারকারী যা চালায় তার যে কোনও অনুমতি রয়েছে (যেমন রুট হিসাবে পিএইচপি স্ক্রিপ্ট চালানো রুটের অনুমতি নিয়ে কার্যকর হবে)।

অনেক সময় লোকেরা নিম্নলিখিত ব্যবহার করে কোনও অনুমতি সমস্যার সমাধান করবে (লিনাক্স উদাহরণ)

chmod 777 /path/to/file

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

আপনাকে যা করতে হবে তা হ'ল ব্যবহারকারী (গুলি) যা অ্যাক্সেসের প্রয়োজন তা নির্ধারণ এবং কেবল তাদেরই অ্যাক্সেস দেওয়া। একবার আপনি কোন ব্যবহারকারীদের অ্যাক্সেস প্রয়োজন তা জানতে হলে আপনি এটি নিশ্চিত করতে চাইবেন

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

     chown apache:apache /path/to/file
  2. ব্যবহারকারীর এবং শুধুমাত্র সেই ব্যবহারকারীর অ্যাক্সেস রয়েছে। লিনাক্সে, একটি ভাল অনুশীলন হবে chmod 600(কেবল মালিকই পড়তে এবং লিখতে পারে) বা chmod 644(মালিক লিখতে পারে তবে সবাই পড়তে পারে)

আপনি লিনাক্স / ইউনিক্স অনুমতি এবং ব্যবহারকারীদের আরও বর্ধিত আলোচনা পড়তে পারেন


7
  1. সঠিক ত্রুটি

আমার কোডটি সমস্ত মেশিনে সূক্ষ্মভাবে কাজ করেছিল তবে কেবলমাত্র এটির জন্যই সমস্যা দেওয়া শুরু হয়েছিল (যা আমার অনুমানের জন্য কাজ করতে ব্যবহৃত হয়েছিল)। ডিবাগ করার জন্য ইকো "ডকুমেন্ট_রোট" ব্যবহার করা হয়েছে এবং ত্রুটিটি ঘনিষ্ঠভাবে দেখেছি এটি এটির সন্ধান করেছে

সতর্কতা: অন্তর্ভুক্ত করুন ( ডি: / মাইপ্রজেক্টস / টেস্টপ্রজেক্ট//funifications/connections.php ): স্ট্রিমটি খুলতে ব্যর্থ হয়েছে:

সমস্যাগুলি কোথায় রয়েছে তা আপনি সহজেই দেখতে পারবেন। সমস্যাগুলি // ফাংশনের আগে //

$document_root = $_SERVER['DOCUMENT_ROOT'];
echo "root: $document_root";
include($document_root.'/functions/connections.php');

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

  1. ব্রাউজারে ফাইলের উপস্থিতিটি নিশ্চিত হয়ে নিন যে ফাইলটি বিদ্যমান আছে। কখনও কখনও ফাইলগুলি অপ্রত্যাশিতভাবে মুছে ফেলা হয় (আমার সাথে ঘটেছিল) এবং এটি আমার ক্ষেত্রেও সমস্যা ছিল।

নীচের চেকলিস্টের প্রথম ধাপ থেকে এটি কীভাবে আলাদা?
ভিক সিডুবলিয়েউ

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

2

কোয়েরি পরামিতিগুলির সাথে স্ক্রিপ্ট যুক্ত করুন

এটা আমার কেস ছিল। এটি আসলে # 4485874 প্রশ্নের সাথে লিঙ্ক করেছে তবে আমি খুব শীঘ্রই এখানে এটি ব্যাখ্যা করতে যাচ্ছি।
যখন আপনি প্রয়োজনীয়তার চেষ্টা করেন path/to/script.php?parameter=value, পিএইচপি নামকৃত ফাইলের সন্ধান করে script.php?parameter=value, কারণ ইউনিক্স আপনাকে এই জাতীয় পাথ রাখতে দেয়।
আপনার যদি অন্তর্ভুক্ত স্ক্রিপ্টে সত্যিই কিছু ডেটা পাস করার প্রয়োজন হয় তবে কেবল এটি $variable=...বা $GLOBALS[]=...আপনার পছন্দ মতো অন্যভাবে ঘোষণা করুন ।


2

সাম্বা শেয়ার

আপনার যদি একটি লিনাক্স পরীক্ষা সার্ভার থাকে এবং আপনি উইন্ডোজ ক্লায়েন্ট থেকে কাজ করেন তবে সাম্বা শেয়ারটি chmod কমান্ডের সাথে হস্তক্ষেপ করে । সুতরাং, এমনকি যদি আপনি ব্যবহার:

chmod -R 777 myfolder

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


1

আর একটি সম্ভাব্য কারণ: পাঠ্য সম্পাদক এ থাকা অবস্থায় পুনরায় নামকরণ এবং / অথবা ফাইলগুলি সরানো। আমি উপরের সমস্ত পদক্ষেপগুলি সাফল্য ছাড়াই অতিক্রম করেছি যতক্ষণ না আমি এই ত্রুটিটি ছুঁড়ে ফেলা ফাইলটিকে মুছে ফেলেছি এবং একটি নতুন তৈরি করেছি, যা সমস্যাটি স্থির করেছে।


1
আপনি যদি সঠিকভাবে বুঝতে চান তা যদি আমি বুঝতে পারি তবে এই তালিকার প্রথম চেকটি তাত্ক্ষণিকভাবে সমস্যার সমাধান হয়ে
উঠবে

# 1 সম্ভাব্য কারণগুলি সম্পর্কে স্পষ্ট নয়
zMeadz

হ্যাঁ, তবে আপনি কারণগুলির বিষয়ে চিন্তা করেন না, আপনি সমস্যাটি সমাধানের উপায় অনুসন্ধান করার বিষয়ে যত্নশীল। আরও গুরুত্বপূর্ণ বিষয়, 1
ম পদক্ষেপটি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.