প্রয়োজনীয়_অন্সে-তে আপেক্ষিক পথ কাজ করে না


103

আমি নিম্নলিখিত কাঠামো আছে

otsg
 > class
   > authentication.php
   > database.php
   > user.php
 > include
   > config.inc.php
   > encryption.php
   > include.php
   > session.php
 > index.php
 > registration.php

অন্তর্ভুক্ত.এফপি ফাইলের নিম্নলিখিতটি রয়েছে

ini_set('display_errors', 1);
error_reporting(E_ALL);

ini_set('include_path',ini_get('include_path').':/Applications/MAMP/htdocs/otsg/:');
require_once 'config.inc.php';
require_once '../class/database.php';
require_once '../class/user.php';
require_once 'encryption.php';
require_once 'session.php';
require_once '../class/authentication.php';

এবং index.php পৃষ্ঠায় আমি অন্তর্ভুক্ত ছিল

require_once 'include/include.php';

আমি পৃষ্ঠাটি সূচক.ফ.পি খুললে আমি নিম্নলিখিত সতর্কতা এবং মারাত্মক ত্রুটি পাই। এই ত্রুটির কারণ কী তা আমি বুঝতে পারি না। যখন আমি পরম পথটি দিয়েছি এটি কাজ করে। তবে পরম পথটি আমি বিশ্বাস করি এটি ভাল ধারণা নয়।

Warning: require_once(../class/database.php) [function.require-once]: failed to open stream: No such file or directory in /Applications/MAMP/htdocs/otsg/include/include.php on line 9

Fatal error: require_once() [function.require]: Failed opening required '../class/database.php' (include_path='.:/Applications/MAMP/bin/php5.3/lib/php:/Applications/MAMP/htdocs/otsg/include/:') in /Applications/MAMP/htdocs/otsg/include/include.php on line 9

আগাম ধন্যবাদ


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

একটি প্রায়শই এই ত্রুটিতে
দৌড়ে যায়

উত্তর:


216

ব্যবহার

__DIR__

স্ক্রিপ্টের বর্তমান পাথটি পেতে এবং এটি আপনার সমস্যার সমাধান করতে পারে।

তাই:

require_once(__DIR__.'/../class/user.php');

এটি এমন ক্ষেত্রে প্রতিরোধ করবে যেখানে আপনি কোনও আলাদা ফোল্ডার থেকে পিএইচপি স্ক্রিপ্ট চালাতে পারেন এবং সেইজন্য আত্মীয়দের পাথ কাজ করবে না।

সম্পাদনা: স্ল্যাশ সমস্যা স্থির


42
সতর্ক থেকো! __DIR__পিএইচপি 5.3 এ নতুন। পিএইচপি-র পূর্ববর্তী সংস্করণগুলিতে চালনার জন্য আপনার যদি এই স্ক্রিপ্টটির প্রয়োজন হয় তবে আপনার dirname(__FILE__)পরিবর্তে এটি ব্যবহার করা উচিত ।
চার্লস

27
মনে রাখবেন যে আপনাকে পরে অনুসরণকারী স্ল্যাশটি ম্যানুয়ালি অন্তর্ভুক্ত করতে হবে __DIR__। তাই: require_once(__DIR__.'/../class/user.php'); প্রতি ডকুমেন্টেশন , trailing স্ল্যাশ রুট ডিরেক্টরিটি ছাড়া বাদ দেওয়া হয়।
অ্যারিয়েল অ্যালন

9
সহায়তার জন্য ধন্যবাদ, তবে কেন __DIR__প্রয়োজনীয় তা আমি এখনও বুঝতে পারি না । পিএইচপি ডক্স বলে মনে হচ্ছে যে পিএইচপি বর্তমান স্ক্রিপ্টের ডিরেক্টরিটি ডিফল্টরূপে অনুসন্ধান করবে। কেউ কি কিছু আলোকপাত করতে পারে?
ডেভিড

1
@ ডেভিড আমার মনে হয় আপনি যখন একই সাথে 2 টি জায়গা থেকে কোনও ফাইল আমদানি করেন তখন এটি প্রয়োজন। উদাহরণস্বরূপ, আপনার সাথে একটি ফাইল রয়েছে require "../a.php"। এই ফাইলের মধ্যে অন্য ফাইল (x) এর থেকে আমদানি করা হয়, তাহলে dir1/dir2/x.phpফাইল অন্তর্ভুক্ত করা হবে dir1/a.php, কিন্তু যদি এক্স হয় dir1/dir2/dir3/x.php, ফাইল অন্তর্ভুক্ত করা হবে dir1/dir2/a.php, ইত্যাদি আমি কি ভুল বলেছি?
হোসে রামেন

1
আছে: এখন এই ঘন ত্রুটি এখানে একটি সমস্যা সমাধান চেকলিস্ট হয় stackoverflow.com/a/36577021/2873507
ভিক Seedoubleyew

17

পিএইচপি সংস্করণ 5.2.17 এর জন্য __DIR__ কাজ করবে না এটি কেবল পিএইচপি 5.3 এর সাথে কাজ করবে

কিন্তু পিএইচপি এর পুরানো সংস্করণের জন্য dirname(__FILE__) পুরোপুরি

যেমন লিখুন

require_once dirname(__FILE__) . '/db_config.php';

1

আমার ক্ষেত্রে এটি সঙ্গে কাজ করে না, এমনকি নেই __DIR__বা getcwd()এটা ভুল পথ অবচয় রাখে, আমি প্রতি ফাইল আমি প্রকল্পের পরম বেস পাথ দিয়ে প্রয়োজন একটি costant সংজ্ঞা দ্বারা মীমাংসিত:

if(!defined('THISBASEPATH')){ define('THISBASEPATH', '/mypath/'); }
require_once THISBASEPATH.'cache/crud.php';
/*every other require_once you need*/

আমার পিএইচপি 5.4.10 এর সাথে এমএএমপি রয়েছে এবং আমার ফোল্ডার স্তরক্রমটি বেসিলার:

q.php 
w.php 
e.php 
r.php 
cache/a.php 
cache/b.php 
setting/a.php 
setting/b.php

....


0

আমি ঠিক এই একই সমস্যাটি পেরিয়ে এসেছি, যেখানে এটি ঠিকঠাক কাজ করেছিল, যতক্ষণ না আমার পয়েন্টের মধ্যে অন্যটির মধ্যে অন্তর্ভুক্ত ছিল।

require_once '../script/pdocrud.php';  //This worked fine up until I had an includes within another includes, then I got this error:
Fatal error: require_once() [function.require]: Failed opening required '../script/pdocrud.php' (include_path='.:/opt/php52/lib/php')

সমাধান ১. (আমার সর্বজনীন এইচটিএমএল ফোল্ডারের নামটির অনাকাঙ্ক্ষিত হার্ডকোডিং, তবে এটি কার্যকর হয়):

require_once $_SERVER["DOCUMENT_ROOT"] . '/orders.simplystyles.com/script/pdocrud.php';

সমাধান ২ (ডিআইআর সম্পর্কে উপরে অনাকাঙ্ক্ষিত মন্তব্য কেবল পিএইচপি ৫.৩ থেকে কাজ করে তবে এটি কার্যকর হয়):

require_once __DIR__. '/../script/pdocrud.php';

সমাধান 3. (আমি কোনও ডাউনসাইড দেখতে পাচ্ছি না, এবং এটি আমার পিএইচপি 5.3-এ পুরোপুরি কাজ করে):

require_once dirname(__FILE__). '/../script/pdocrud.php';
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.