পিএইচপি ফাইলগুলি কীভাবে অন্তর্ভুক্ত করতে হবে যাতে কোনও নির্দিষ্ট পাথ প্রয়োজন?

আমি নিম্নের মত একটি ডিরেক্টরি গঠন আছে;

script.php

inc/include1.php
inc/include2.php

objects/object1.php
objects/object2.php

soap/soap.php

এখন, আমি ঐসব বস্তুগুলিকে script.php এবং /soap/soap.php উভয়ের মধ্যেই ব্যবহার করতে পারি, তবে আমি তাদের জন্য একটি নির্দিষ্ট কারণের মত ডিরেক্টরি গঠন করতে চাই । script.php চালানোর সময় inc / include.php এবং /soap/soap.php সম্পাদন করার সময় এটি .. / inc , পরম পাথ কাজ, / mnt / webdev / [project name] /inc/include1.php ... কিন্তু আমি একটি দুর্গা সমাধান যদি আমি কখনও ডিরেক্টরীটি সরাতে চাই একটি ভিন্ন অবস্থান।

তাই আপেক্ষিক পাথ ব্যবহার করার একটি উপায়, বা প্রোগ্রামিকভাবে একটি প্রোগ্রাম তৈরি করার উপায় "/ mnt / webdev / [project name] /" ?

0
ro fr hi

10 উত্তর

আপনি আপেক্ষিক পাথ ব্যবহার করতে পারেন। __ ফাইল __ </কোড> চেষ্টা করুন এটি হল একটি পিএইচপি ধ্রুবক যার সাহায্যে স্ক্রিপ্টের পাথ / ফাইলের নামটি ফিরে আসে। সুতরাং, soap.php তে, আপনি করতে পারেন:

include dirname(__FILE__).'/../inc/include.php';

পুরো পাথ এবং ফাইলের নাম   ফাইল। একটি অন্তর্ভুক্ত ভিতরে ব্যবহার করা হলে, দী   অন্তর্ভুক্ত ফাইলের নাম ফিরে এসেছে   পিএইচপি 4.0.2 থেকে, __ ফাইল __ </কোড> সবসময়   সঙ্গে একটি পরম পাথ রয়েছে   সিল্ক্পলস পুরানো যদিও তফসিল   সংস্করণ এটি আপেক্ষিক পাথ অন্তর্ভুক্ত   কিছু পরিস্থিতিতে    (উৎস)

আরেকটি সমাধান আপনার httpd.conf বা একটি .htaccess ফাইলের মধ্যে পাথ অন্তর্ভুক্ত করা সেট করা হবে।

0
যোগ
আমি মনে করি আপনি / উদ্ধৃত অভিব্যক্তি প্রারম্ভে, .. FILE নাম থেকে পৃথক করতে চান।
যোগ লেখক Dunaril, উৎস
উল্লেখ্য, পিএইচপি 5.3.0 থেকে আপনি dirname (__ ফাইল __) ব্যবহার করার পরিবর্তে জাদু ধ্রুবক __ DIR __ ব্যবহার করতে পারেন। (পিএইচপি ডক্স)
যোগ লেখক Erwin Wessels, উৎস
অন্তর্ভুক্ত dirname (__ ফাইল __)। '/ .. / inc / include.php'; "/" আপেক্ষিক পাথ আগে ভুলবেন না।
যোগ লেখক Steven Leimberg, উৎস

আপনি আপনার প্রকল্পের রুট ডিরেক্টরি পাথ সঙ্গে একটি ধ্রুবক সংজ্ঞায়িত করতে পারে, এবং তারপর পাথ প্রারম্ভে যে করা

0
যোগ

আমি মনে করি আপনার পিএইচপি মধ্যে অন্তর্ভুক্ত করা হয় সেরা উপায় পাথ অন্তর্ভুক্ত মনে হয়। আপনার সেটআপ উপর নির্ভর করে এটি করতে বিভিন্ন উপায় আছে।

তারপর আপনি কেবল পড়ুন

require_once 'inc1.php';

কোনও ফাইলের ভিতর থেকে আপনি কোনও ফাইলের ভিতরে বা আপনার ওয়েব অ্যাক্সেসযোগ্য ফাইলগুলিতে, বা নেস্টেড সাবডিরেক্টরিগুলির যেকোনো স্তরের ক্ষেত্রে তা নাও হতে পারে।

এটি আপনাকে আপনার ওয়েব সার্ভার মূলের বাইরে ফাইল অন্তর্ভুক্ত করতে দেয়, যা একটি সর্বোত্তম অনুশীলন।

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

site directory
    html (web root)
        your web-accessible files
    includes
        your include files

এছাড়াও, ক্লাস ফাইলের অলস লোডিংয়ের জন্য __আটোললোড চেক করুন

http://www.google.com/search?q=setting+ পিএইচপি + পথ অন্তর্ভুক্ত

http://www.google.com/search?q=__autoload

0
যোগ
<�ব্লককোট>     

@ ফ্লাব্বা, এটি কি আমার অন্তর্ভূক্ত ডিরেক্টরির মধ্যে ফোল্ডার আছে? ফ্ল্যাট অন্তর্ভুক্ত ডিরেক্টরি আমাকে দুঃস্বপ্ন আমাকে দাও। হিসাবে সমগ্র অবজেক্ট ডিরেক্টরি ইনকর্পোরেটেড ডিরেক্টরি হতে হবে।

  </ব্লককোট>

ওহ হ্যাঁ, একেবারে সুতরাং উদাহরণস্বরূপ, আমরা একটি একক স্তর subfolders ব্যবহার, সাধারণত:

require_once('library/string.class.php')

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

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

'model/user.class'
'controllers/front.php'

বা যাই হোক না কেন.

কিন্তু সাধারণভাবে বলতে গেলে, এটি আপনাকে আপনার পিএইচপিতে সত্যিই ছোট পাথ দিয়ে কাজ করতে দেয় যা যে কোনও জায়গা থেকে কাজ করে এবং এটি যে সমস্ত প্রকৃতপথ নথি রুট মালারকে

যারা স্ক্রিপ্ট-ভিত্তিক বিকল্পগুলির উপকারের কথা তারা প্রস্তাব করেছে যে তারা কোথাও কাজ করে, এমনকি ভাগ করা বাক্সেও; অন্তর্ভুক্ত পথ সেট করার জন্য একটু বেশি চিন্তা এবং প্রচেষ্টা প্রয়োজন কিন্তু হিসাবে আমি আপনাকে __autoload যা শুধু শীতল ব্যবহার শুরু করতে দেয়

0
যোগ

এই কাজ করা উচিত

$root = realpath($_SERVER["DOCUMENT_ROOT"]);

include "$root/inc/include1.php";

Edit: added imporvement by aussieviking

0
যোগ
শুধু একটি প্রশ্ন, কেন realpath() $ _SERVER ["DOCUMENT_ROOT"] জন্য? এই সর্বদা ক্যানোনিকাল পথ আউটপুট হবে না?
যোগ লেখক João Pimentel Ferreira, উৎস
সতর্কতা অবলম্বন করুন, এটি শুধুমাত্র তখনই কাজ করবে যদি আপনি একটি ওয়েব সার্ভারের মাধ্যমে স্ক্রিপ্টটি চালান যা DOCUMENT_ROOT
যোগ লেখক Phil, উৎস

আরেকটি বিকল্প, কেভিনের সাথে সম্পর্কিত, __ ফাইল __ ব্যবহার করা হয়, তবে এর পরিবর্তে PHP ফাইলের নামের পরিবর্তে এটি প্রতিস্থাপন করুন:

<?php

$docRoot = str_replace($_SERVER['SCRIPT_NAME'], '', __FILE__);
require_once($docRoot . '/lib/include.php');

?>

আমি একটি সময় জন্য এই ব্যবহার করা হয়েছে। একমাত্র সমস্যাটি মাঝে মাঝে আপনার কাছে $ _ SERVER ['SCRIPT_NAME'] নেই, তবে মাঝে মাঝে আরেকটি অনুরূপ অনুরূপ।

0
যোগ

have a look at http://au.php.net/reserved.variables

I think the variable you are looking for is: $_SERVER["DOCUMENT_ROOT"]

0
যোগ

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

function __autoload($class_name) {
    require_once $class_name . '.php';
}

$obj  = new MyClass1();
$obj2 = new MyClass2(); 

যতক্ষণ পর্যন্ত আপনি আপনার in_path ভেরিয়েবলটি সেট করেন ততক্ষণ, আপনাকে আবার একটি ক্লাস ফাইল অন্তর্ভুক্ত করতে হবে না।

0
যোগ

আমি এটা খুব ভাল কাজ পাওয়া!

function findRoot() { 
    return(substr($_SERVER["SCRIPT_FILENAME"], 0, (stripos($_SERVER["SCRIPT_FILENAME"], $_SERVER["SCRIPT_NAME"])+1)));
}

ব্যবহার করুন:

<?php

function findRoot() {
    return(substr($_SERVER["SCRIPT_FILENAME"], 0, (stripos($_SERVER["SCRIPT_FILENAME"], $_SERVER["SCRIPT_NAME"])+1)));
}

include(findRoot() . 'Post.php');
$posts = getPosts(findRoot() . 'posts_content');

include(findRoot() . 'includes/head.php');

for ($i=(sizeof($posts)-1); 0 <= $i; $i--) {
    $posts[$i]->displayArticle();
}

include(findRoot() . 'includes/footer.php');

?>
0
যোগ

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

define("APPLICATION_PATH", realpath(dirname(__FILE__) . '/../app'));
or 
define("APPLICATION_PATH", realpath(DIR(__FILE__) . '/../app'));

এখন এই গ্লোবাল ভেরিয়েবল " APPLICATION_PATH " ব্যবহার করা যেতে পারে সব ফাইলগুলিকে প্রকৃতপথ কল করার পরিবর্তে প্রতিটি নতুন ফাইল অন্তর্ভুক্ত করার জন্য।

গো EX:

include(APPLICATION_PATH ."/config/config.ini";

আশা করি এটা সাহায্য করবে ;-)

0
যোগ