আমি কীভাবে 2 টি ডিরেক্টরিতে আবার কোনও ফাইল অন্তর্ভুক্ত করব?


96

2 টিরও বেশি ডিরেক্টরি পিছনে থাকা কোনও ফাইল আপনি কীভাবে অন্তর্ভুক্ত করবেন। আমি জানি আপনি ../index.php2 টি ডিরেক্টরি পিছনে থাকা কোনও ফাইল অন্তর্ভুক্ত করতে ব্যবহার করতে পারেন তবে আপনি কীভাবে 3 ডিরেক্টরি পিছনে এটি করবেন? এটা কোনো কিছু হলো? আমি চেষ্টা করেছি .../index.phpকিন্তু কাজ করছে না।

আমার একটি ফাইল আছে /game/forum/files/index.phpএবং এটি পিএইচপি ব্যবহার করে কোনও ফাইল অন্তর্ভুক্ত করে। যা অবস্থিত /includes/boot.inc.php; /মূল ডিরেক্টরি হচ্ছে।


chdir ('' ../ '');
maheshmnj

উত্তর:


154

..বর্তমান থেকে মূল ডিরেক্টরি নির্বাচন করে। অবশ্যই, এটি বেঁধে রাখা যেতে পারে:

../../index.php

এটি দুটি ডিরেক্টরি আপ হবে।


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

দুঃখের বিষয় এটি একটি ডিভাইসে কাজ করতে পারে এবং অন্যটি নয়, /../কাজ করতে পারে বা কাজ ../করতে পারে, বা ঠিক একই পরিবেশের সেটআপ সহ তিনটি পৃথক কম্পিউটারেও কাজ করতে পারে না
ডগলাস গ্যাসকেল

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

কনরাড, আমি এটি উল্লেখ করেছি যেহেতু আমি কোনও সহকর্মীর সাথে একটি ভিজোমারি ভাগ করে নেওয়ার পরে 10 মিনিট আগে ভিএম স্ন্যাপশট ব্যবহার করে এই সমস্যাটি সমাধান করেছি। কোনও কারণে তার পরিবেশের /../পরিবর্তে সমস্ত পথ চলতে হয়েছিল ../
ডগলাস গ্যাসকেল

@ ডগলাসগ্যাসেল এবং আমি আপনাকে আত্মবিশ্বাসের সাথে বলতে পারি যে ত্রুটিটি সম্পর্কিত নয়। প্রকৃতপক্ষে, পথটি /../কোনও সিস্টেমে সহজভাবে বোঝায় না (এটি সমতুল্য /বা ত্রুটির)। আপনি কি নিশ্চিত যে আপনি এর সামনে কিছু আটকে দিচ্ছেন না?
কনরাড রুডল্ফ

51

কোনও ফাইলকে একটি ডিরেক্টরি পিছনে অন্তর্ভুক্ত করতে, ব্যবহার করুন '../file'। দুটি ডিরেক্টরি পিছনে, ব্যবহার করুন '../../file'। ইত্যাদি।

যদিও, বাস্তবে আপনি অভিনয় করা উচিত নয় বর্তমান ডিরেক্টরি সম্পর্কিত আপেক্ষিক। আপনি যদি এই ফাইলটি সরিয়ে নিতে চান? সমস্ত লিঙ্ক ভাঙ্গতে হবে। আপনি যদি এখনও আপনার ফাইলটি সরিয়ে থাকেন তবে সেই লিঙ্কগুলি ধরে রেখে আপনি অন্য ফাইলগুলিতে লিঙ্ক করতে পারবেন তা নিশ্চিত করার একটি উপায়:

require_once($_SERVER['DOCUMENT_ROOT'] . 'directory/directory/file');

DOCUMENT_ROOT এমন একটি সার্ভার ভেরিয়েবল যা আপনার কোডের মধ্যে অবস্থিত সেই বেস ডিরেক্টরিটি উপস্থাপন করে।


4
আরে ড্যান দ্রুত প্রশ্ন: আপনি বলছেন " বাস্তবে আপনার সঞ্চালন করা উচিত নয় যা বর্তমান ডিরেক্টরিটির সাথে সম্পর্কিত "। বেশিরভাগ এইচটিএমএল নথি জুড়ে থাকা সমস্ত আপেক্ষিক পাথ সম্পর্কে কী বলা যায়? আমি যদি আমার ফাইলটি সরিয়ে নিয়ে যাই তবে সেগুলিও কি ব্রেক হবে না? আপেক্ষিক বনাম পরম লিঙ্কগুলি কখন ব্যবহার করবেন তার কোনও মান আছে? তুমাকে অগ্রিম ধন্যবাদ!
গোবিন্দ রাই

4
আমি মনে করি এটির একটি স্ল্যাশ অনুপস্থিত, এটি হওয়া উচিত: প্রয়োজনীয়_অনসেস (S _ সার্ভার ['DOCUMENT_ROOT']। '/ ডিরেক্টরি / ডিরেক্টরি / ফাইল');
ব্যবহারকারীর 889030

@ ব্যবহারকারীর 889030 যতদূর আমি জানি, কমপক্ষে বেশিরভাগ ক্ষেত্রে
বটমাস্টার 3000

4
@ বটমাস্টার 3000 এইচএমএম: স্যান্ডবক্স.অনলাইনপ্পফিউশনস
কোড

28
. = current directory
.. = parent directory

সুতরাং ../আপনি দুটি না একটি ডিরেক্টরি ফিরে

../2 বা ততোধিক স্তরের উপরে উঠতে যতবার প্রয়োজন চেইন করুন ।


21
include dirname(__FILE__).'/../../index.php';

এখানে আপনার সেরা বাজি, এবং এটি অন্যান্য সমাধানগুলির সাথে মোকাবিলা করতে পারে এমন বেশিরভাগ আপেক্ষিক পাথ বাগগুলি এড়িয়ে যাবে।

প্রকৃতপক্ষে, এটি অন্তর্ভুক্তিকে সর্বদা বর্তমান স্ক্রিপ্টের অবস্থানের সাথে সম্পর্কিত হতে বাধ্য করবে যেখানে এই কোডটি স্থাপন করা হয়েছে (কোন অবস্থানটি সম্ভবত স্থিতিশীল, যেহেতু আপনি আপনার অ্যাপ্লিকেশনের আর্কিটেকচারটি সংজ্ঞায়িত করেছেন)। এটি কেবল include '../../index.php' করণ থেকে পৃথক যা কার্যনির্বাহী ("কলিং" নামেও পরিচিত) স্ক্রিপ্ট এবং তারপরে তুলনামূলকভাবে বর্তমান কার্যনির্বাহী ডিরেক্টরিতে অন্তর্ভুক্ত থাকবে , যা আপনার অন্তর্ভুক্ত স্ক্রিপ্টের পথ থেকে সমাধানের পরিবর্তে মূল স্ক্রিপ্টটিতে আপনার স্ক্রিপ্টকে অন্তর্ভুক্ত করবে point ।

পিএইচপি ডকুমেন্টেশন থেকে:

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

এবং প্রাচীনতম পোস্টে আমি এই কৌতুক উদ্ধৃত পেয়েছি তারিখ 2003 ফিরে, Tapken দ্বারা

আপনি নিম্নলিখিত সেটআপ দিয়ে পরীক্ষা করতে পারেন:

এটির মতো একটি বিন্যাস তৈরি করুন:

htdocs
¦   parent.php
¦   goal.php
¦
+---sub
    ¦   included.php
    ¦   goal.php

ইন parent.php, রাখুন:

<?php
include dirname(__FILE__).'/sub/included.php';
?>

ইন sub/included.php, রাখুন:

<?php
print("WRONG : " . realpath('goal.php'));
print("GOOD : " . realpath(dirname(__FILE__).'/goal.php'));
?>

অ্যাক্সেস করার সময় ফলাফল parent.php:

WRONG : X:\htdocs\goal.php
GOOD : X:\htdocs\sub\goal.php

যেমন আমরা দেখতে পাচ্ছি, প্রথম ক্ষেত্রে, কলটি স্ক্রিপ্ট থেকে পাথটি সমাধান করা হয় parent.php, dirname(__FILE__).'/path'কৌশলটি ব্যবহার করে , অন্তর্ভুক্তটি স্ক্রিপ্ট থেকে included.phpকোডটি যেখানে রাখা হয় সেখানে করা হয়।

সাবধান, অন্য কোথাও যা পড়া যায় তার বিপরীতে নিম্নলিখিত কৌশলটির সমতুল্য নয়:

include '/../../index.php';

প্রকৃতপক্ষে, প্রিপেন্ডিং /কাজ করবে, তবে এটি include ../../index.phpকলিং স্ক্রিপ্টের মতোই সমাধান হবে (পার্থক্যটি include_pathএটি ব্যর্থ হলে পরে দেখা হবে না)। পিএইচপি ডক থেকে :

যদি কোনও পথটি সংজ্ঞায়িত করা হয় - নিখুঁত (ড্রাইভ লেটার দিয়ে শুরু হওয়া বা উইন্ডোজে \, অথবা / ইউনিক্স / লিনাক্স সিস্টেমগুলিতে) বা বর্তমান ডিরেক্টরি সম্পর্কিত (। বা .. দিয়ে শুরু করে) - অন্তর্ভুক্ত_পথটি সম্পূর্ণ উপেক্ষা করা হবে।


@diEcho: আমি জানতে পারি কেন এটি "সম্পূর্ণ ভুল"? আমি এটি বেশ কয়েকটি পেশাদার-গ্রেড অ্যাপ্লিকেশনটিতে ব্যবহার করছি এবং এই পদ্ধতিটি আসলে প্রতিটি পরিস্থিতিতে কাজ করে। এটি পিএইচপি ম্যানুয়ালটিতেও বিশদ : এটি এতটা ভুল হতে পারে না।
চমত্কার

প্রথম লাইন সম্পূর্ণ ভুল। আপনি ..পথের (আপেক্ষিক / পরম) মাঝখানে যোগ করতে পারবেন না ।

@diEcho আমারও আপনাকে পিএইচপি ম্যানুয়ালটির দিকে ইঙ্গিত করা উচিত: php.net/manual/en/function.incolve.php
আবশ্যক

আমাকে একটি উদাহরণ বলুন, যেখানে ..অন্তর্ভুক্তের মাঝখানে ব্যবহৃত হয়। এটি সর্বদা অন্তর্ভুক্ত হওয়ার প্রথম অংশ হওয়া উচিত
ডায়িচো

github.com/lrq3000/dolibarr_customfields/blob/3.2/htdocs/… পেশাদার-গ্রেড ইআরপি / সিআরএমের জন্য একটি পেশাদার-গ্রেড মডিউল। আপনি কী বলছেন তা জানার সময় স্যার আপনার কথা বলা উচিত নয়।
চমত্কার

16

../একটি ডিরেক্টরি, দুটি ডিরেক্টরি ../../বা এমনকি তিনটির জন্য পুনরাবৃত্তি : ../../../এবং আরও অনেক কিছু।

স্থির সংজ্ঞাটি বিভ্রান্তি হ্রাস করতে পারে কারণ আপনি পিছনে পিছনে ডিরেক্টরি পদগুলিতে ড্রিল করবেন

আপনি যেমন কিছু ধ্রুবক সংজ্ঞায়িত করতে পারেন:

define('BD', '/home/user/public_html/example/');

define('HTMLBD', 'http://example.com/');

'বিডি' বা আমার 'বেস ডিরেক্টরি' ব্যবহার করার সময় এমনটি মনে হয়:

file(BD.'location/of/file.php');

সংজ্ঞায়িত (); রেফারেন্স



12
../../../includes/boot.inc.php

প্রতিটি ../ডিরেক্টরি একটি ডিরেক্টরি আপ / ব্যাক মানে।


9

আপনার বিভিন্ন ডিরেক্টরি অ্যাক্সেস করার উপায় নিম্নলিখিত:

./ = Your current directory
../ = One directory lower
../../ = Two directories lower
../../../ = Three directories lower

7

আপনি করতে পারেন ../../directory/file.txt- এটি দুটি ডিরেক্টরি ফিরে যায়।

../../../- এই তিনটি যায়। ইত্যাদি



6

তবে কোনও ব্যবহারকারীকে ফাইলটি নির্বাচন করতে দেওয়া সম্পর্কে খুব সতর্ক হন। আপনি তাদের সত্যিকার অর্থে কোনও ফাইল কল করার অনুমতি দিতে চান না, উদাহরণস্বরূপ,

../../../../../../../../../../etc/passwd

বা অন্যান্য সংবেদনশীল সিস্টেম ফাইল।

(দুঃখিত, আমি যখন একটি লিনাক্স সিসাদমিন ছিলাম তখন অনেকক্ষণ হয়ে গেছে, এবং আমি মনে করি এটি একটি সংবেদনশীল ফাইল is



5

আপনি যদি পিএইচপি 7 ব্যবহার করে থাকেন তবে আপনি 2 স্তরের প্যারামিটারের সাথে ডার্মনেম ফাংশনটি ব্যবহার করতে পারেন, উদাহরণস্বরূপ:

dirname("/usr/local/lib", 2);

"2" দ্বিতীয় প্যারামিটারটি কত স্তর পর্যন্ত নির্দেশ করে

রেফারেন্স



3

ওভার ডিরেক্টরি সহ প্রক্সি ফাইল দ্বারা প্রক্রিয়া করা যেতে পারে

  • রুট
  • ..... | __ ওয়েবে
  • ..... | ......... | _ প্রয়োজনীয় ডিবিসেটেটিংস.এফপি
  • ..... |
  • ..... | ___ ডিবি
  • ..... | ......... | _dbsettings.php
  • ..... |
  • ..... | _প্রক্সি.এফপি

    dbsettings.php:
    $host='localhost';
    $user='username':
    $pass='pass';
    
    proxy.php:
    include_once 'db/dbsettings.php
    
    requiredDbSettings.php:
    include_once './../proxy.php';
    

3

এটা চেষ্টা কর

এই উদাহরণ একটি ডিরেক্টরি ফিরে

require_once('../images/yourimg.png');

এই উদাহরণ দুটি ডিরেক্টরি ফিরে

require_once('../../images/yourimg.png');

এটি ঠিক একই ;-) আমার মনে হয় আপনি দ্বিতীয়টির উপরে '../../images/yourimg.png' বলতে চাইছেন?
এডউইন

এর আমার ভুলটি প্রকাশ করে
রাজপুত রেহান

2

ব্যবহার করে দেখুন ../../। আপনি এটি অনুসারে এটি সংশোধন করতে পারেন কারণ এটি আপনাকে দুটি ডিরেক্টরি ফিরিয়ে নেবে। প্রথমে রুট ডিরেক্টরিতে পৌঁছান তারপরে প্রয়োজনীয় ডিরেক্টরিটি অ্যাক্সেস করুন।

যেমন আপনি আছেন root/inc/usr/apএবং অন্য একটি ডিরেক্টরি রয়েছে root/2nd/path। আপনি pathডিরেক্টরিটি apএই জাতীয় থেকে অ্যাক্সেস করতে পারেন : ../../2nd/pathপ্রথমে পছন্দসই ডিরেক্টরি থেকে রুটে যান। কাজ না হলে শেয়ার করুন।


2

আপনি যদি অন্তর্ভুক্ত / শুরুতে অন্তর্ভুক্ত করেন তবে অন্তর্ভুক্তগুলি সাইটের মূল থেকে পথ হিসাবে নেওয়া হবে।

যদি আপনার সাইটটি http://www.example.com/game/forum/files/index.php হয় তবে আপনি /includes/boot.inc.php এ একটি অন্তর্ভুক্ত যোগ করতে পারেন যা http://www.example.com এ সমাধান করবে /includes/boot.inc.php

..কিছু ওয়েব সার্ভার এটি অক্ষম করায় আপনাকে ট্র্যাভারসাল সম্পর্কে সতর্ক থাকতে হবে; আপনি যখন নিজের সাইটটিকে একটি নতুন মেশিন / হোস্টে নিয়ে যেতে চান তখন সমস্যাও তৈরি হয় এবং কাঠামোটি কিছুটা আলাদা।


1

আমি আপনার উত্তরগুলি দেখেছি এবং আমি সিনট্যাক্স সহ পথ অন্তর্ভুক্ত করেছি

require_once '../file.php'; // server internal error 500

এবং HTTP সার্ভার (অ্যাপাচি ২.৪.৩) অভ্যন্তরীণ ত্রুটিটি 500 ফিরিয়ে দিয়েছে।

আমি যখন পথ পরিবর্তন করেছি

require_once '/../file.php'; // OK

সবকিছু ঠিক আছে.

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