शामिल करने के लिए PHP पास चर


84

मैं एक चर को शामिल फ़ाइल में पारित करने की कोशिश कर रहा हूं । मेरे होस्ट ने PHP संस्करण को बदल दिया है और अब मैं जो भी समाधान करने की कोशिश करता हूं वह काम नहीं करता है।

मुझे लगता है कि मैंने हर विकल्प की कोशिश की है जो मुझे मिल सकता है। मुझे यकीन है कि यह सबसे सरल बात है!

चर को कॉलिंग पहली फ़ाइल से सेट और मूल्यांकन करने की आवश्यकता है (यह वास्तव में है $_SERVER['PHP_SELF'], और उस फ़ाइल के पथ को वापस करने की आवश्यकता है, शामिल नहीं है second.php)।

विकल्प एक

पहली फ़ाइल में:

global $variable;
$variable = "apple";
include('second.php');

दूसरी फ़ाइल में:

echo $variable;

विकल्प दो

पहली फ़ाइल में:

function passvariable(){
    $variable = "apple";
    return $variable;
}
passvariable();

विकल्प तीन

$variable = "apple";
include "myfile.php?var=$variable"; // and I tried with http: and full site address too.


$variable = $_GET["var"]
echo $variable

इनमें से कोई भी मेरे लिए काम नहीं करता है। PHP संस्करण 5.2.16 है।

मैं क्या खो रहा हूँ?

धन्यवाद!


2
क्या आपने एक निरंतरता को नकारने की कोशिश की?
ओउस्मा जिलल

7
फ़ाइलों को शामिल करने के लिए आपको चर नहीं पास करने होंगे। आपका वेबसर्वर आपकी फ़ाइलों के कोड को तभी लोड करेगा जब आप उन्हें शामिल करेंगे जैसे कि आपने उस कोड को शामिल फ़ाइल से अपनी दूसरी फ़ाइल में लिखा था।
लियोन क्रेमर

क्या आप 'इनमें से कोई भी काम नहीं कर सकते' को स्पष्ट कर सकते हैं? त्रुटि संदेश भी सहायक होंगे ... और, AFAIK, शामिल कोड को एक ही संदर्भ में निष्पादित किया जाता है, इसलिए globalयह आवश्यक नहीं है; आपका पहला विकल्प ठीक चलना चाहिए।
बारिश। 10०

जैसा कि अन्य लोगों ने कहा, शामिल () कोड को वहां चिपकाए जाने की तरह है, यह उसी फ़ाइल में होने की तरह कोड के निष्पादन को जारी रखता है। आपको शामिल फ़ाइल में चर को शामिल करने का एक तरीका खोजने की ज़रूरत नहीं है, आप बस इसे शामिल करने () (यदि आवश्यक हो) से पहले लिख सकते हैं।
adrianTNT

जवाबों:


49

आप एक्स्ट्रेक्ट का उपयोग कर सकते हैं () फ़ंक्शन
Drupal इसका उपयोग, इसके थीम () फ़ंक्शन में कर सकता है।

यहाँ यह एक $variablesतर्क के साथ एक रेंडर फ़ंक्शन है।

function includeWithVariables($filePath, $variables = array(), $print = true)
{
    $output = NULL;
    if(file_exists($filePath)){
        // Extract the variables to a local namespace
        extract($variables);

        // Start output buffering
        ob_start();

        // Include the template file
        include $filePath;

        // End buffering and return its contents
        $output = ob_get_clean();
    }
    if ($print) {
        print $output;
    }
    return $output;

}


./index.php:

includeWithVariables('header.php', array('title' => 'Header Title'));

./header.php:

<h1><?php echo $title; ?></h1>

आप EXTR_REFS ध्वज को निकालने के कार्य में इस विधि का उपयोग कर सकते हैं ( php.net/manual/en/function.extract.php देखें ) ताकि जब आप संदर्भ के साथ एक चर पास करें: array( 'title' => &$title )$ शीर्षक को शामिल फ़ाइल के अंदर बदला जा सके ।
मूरो मस्किया

मुझे नहीं लगता कि यह PHP के बाद के संस्करणों में काम करता है, 7.3 का कहना है
रॉबर्ट मोस्कल

46

विकल्प 3 असंभव है - आपको .php फ़ाइल का प्रदान किया गया आउटपुट मिलेगा, ठीक वैसे ही जैसे आप अपने ब्राउज़र में उस यूआरएल को हिट करते हैं। यदि आपको इसके बजाय कच्चा PHP कोड मिला (जैसा कि आप चाहेंगे), तो आपकी साइट के सभी स्रोत कोड सामने आ जाएंगे, जो आमतौर पर अच्छी बात नहीं है।

विकल्प 2 का कोई मतलब नहीं है - आप एक फ़ंक्शन में चर को छिपाएंगे, और PHP के चर दायरे के अधीन होंगे। आपको $var = passvariable()'चर' के अंदर 'चर' को 'बाहर' में लाने के लिए भी कहीं न कहीं होना पड़ेगा , और आप एक वर्ग में वापस आ जाएंगे ।

विकल्प 1 सबसे व्यावहारिक है। include()मूल रूप से निर्दिष्ट फ़ाइल में खराबी होगी और इसे वहीं निष्पादित करेगी, जैसे कि फ़ाइल में कोड शाब्दिक रूप से मूल पृष्ठ का हिस्सा था। यह एक वैश्विक वैरिएबल की तरह दिखता है, जिसे यहां के ज्यादातर लोग फॉलो करते हैं, लेकिन PHP के पार्सिंग शब्दार्थों के आधार पर, ये लोग ऐसे हैं:

$x = 'foo';
include('bar.php');

तथा

$x = 'foo';
// contents of bar.php pasted here

11

यह देखते हुए कि सबसे बुनियादी स्तर पर php में शामिल एक क़ानून एक फ़ाइल से कोड लेता है और इसे उस स्थान पर चिपका देता है जहां आपने इसे बुलाया था और इस तथ्य को शामिल किया गया था कि मैनुअल में निम्नलिखित शामिल हैं:

जब कोई फ़ाइल शामिल की जाती है, तो उसमें मौजूद कोड उस लाइन के चर दायरे को इनहेरिट करता है, जिस पर शामिल होता है। कॉलिंग फ़ाइल में उस लाइन पर उपलब्ध कोई भी चर उस बिंदु से आगे फ़ाइल नाम से उपलब्ध होगा।

इन बातों से मुझे लगता है कि पूरी तरह से एक अलग समस्या है। इसके अलावा विकल्प संख्या 3 कभी भी काम नहीं करेगा क्योंकि आप second.phpइसे केवल इसमें शामिल नहीं कर रहे हैं और विकल्प संख्या 2 बस एक अजीब काम है। Php में शामिल आँकड़ा का सबसे मूल उदाहरण है:

vars.php
<?php

$color = 'green';
$fruit = 'apple';

?>

test.php
<?php

echo "A $color $fruit"; // A

include 'vars.php';

echo "A $color $fruit"; // A green apple

?>

उस विकल्प को ध्यान में रखते हुए नंबर एक इस उदाहरण के सबसे करीब है (भले ही अधिक जटिल हो, फिर भी यह होना चाहिए) और यह काम नहीं कर रहा है, इसके कारण मुझे लगता है कि आपने शामिल बयान में एक गलती की है (मूल या गलत रूट के समान पथ) मुद्दा)।


शायद मैंने चीजों के क्रम को भ्रमित कर दिया है? संरचना वास्तव में है: main.php $ variable = $ _SERVER ['PHP_SELF']; शामिल हैं = ' side.com/footer.php ; footer.php: गूंज $ चर; सभी शामिल फ़ाइल में चर नहीं है, यह केवल इसके लिए कुछ करता है। मेरे द्वारा चुने गए सभी विकल्पों में, आउटपुट या तो रिक्त है, या footer.php के $ _SERVER ['PHP_SELF'] को शामिल करता है न कि main.php को। क्या यह अलग है?
user1590646

5

ओपी के प्रश्न के संबंध में, विशेष रूप से "चर को कॉलिंग पहली फ़ाइल से सेट और मूल्यांकन करने की आवश्यकता है (यह वास्तव में '$ _SERVER [' PHP_SELF '] है, और उस फ़ाइल का पथ वापस करने की आवश्यकता है, जिसमें दूसरा शामिल नहीं है। php)। "

यह आपको बताएगा कि किस फ़ाइल में फ़ाइल शामिल है। इसे शामिल फ़ाइल में रखें।

$includer = debug_backtrace();
echo $includer[0]['file'];

अपने प्रश्न में ओपी की टिप्पणियों के आधार पर "चर को पहली फ़ाइल से सेट करने और मूल्यांकन करने की आवश्यकता है (यह वास्तव में '$ _SERVER [' PHP_SELF '] है, और उस फ़ाइल का पथ वापस करने की आवश्यकता है, न कि शामिल दूसरा। php)। " उसे यह पता लगाने की आवश्यकता है कि पथ उस फ़ाइल का क्या है जिसने सेकंड.फैप शामिल किया था।
जेरेमी 1026 16

नोट किया हुआ। (यह आपके उत्तर से स्पष्ट नहीं है, कृपया इसे स्पष्ट करें ["क्योंकि ओपी मूल फ़ाइल नाम ब्ला ब्ला ब्ला" प्राप्त करना चाहता है "])।
मदारा का भूत 16

5

मुझे यहाँ एक ही समस्या है, आप $ GLOBALS सरणी का उपयोग कर सकते हैं।

$GLOBALS["variable"] = "123";
include ("my.php");

इसे भी करना चाहिए:

$myvar = "123";
include ("my.php");

....

echo $GLOBALS["myvar"];

आपका दिन शुभ हो।


4

विकल्प 1 ने मेरे लिए, PHP 7 में, और निश्चित रूप से यह PHP 5 में भी काम किया है। और वैरिएबल एक्सेस के लिए शामिल फ़ाइल के लिए वैश्विक गुंजाइश घोषणा आवश्यक नहीं है, शामिल - या "आवश्यक" - फाइलें स्क्रिप्ट का हिस्सा हैं, केवल यह सुनिश्चित करें कि आप चर घोषणा के बाद "शामिल" करें। हो सकता है कि आपके PHP.ini में वैरिएबल ग्लोबल स्कोप के साथ कुछ गलतफहमी हो?

पहली फ़ाइल में आज़माएँ:

  <?php 
  $myvariable="from first file";
  include ("./mysecondfile.php"); // in same folder as first file LOLL
  ?>

mysecondfile.php

  <?php 
  echo "this is my variable ". $myvariable;
  ?>

यह काम करना चाहिए ... अगर यह सिर्फ PHP को पुनर्स्थापित करने की कोशिश नहीं करता है।


3

मैंने इस समस्या में भाग लिया है जहाँ मेरे पास एक फ़ाइल थी जो GET मापदंडों के आधार पर चर सेट करती है। और वह फाइल अपडेट नहीं हो सकी क्योंकि यह एक बड़ी सामग्री प्रबंधन प्रणाली के दूसरे हिस्से पर सही ढंग से काम करती थी। फिर भी मैं उस कोड को शामिल करना चाहता था जिसमें शामिल फ़ाइल के बिना पैरामीटर वास्तव में URL स्ट्रिंग में हो। सरल उपाय यह है कि आप किसी भी अन्य चर के रूप में पहली फ़ाइल में GET चर सेट कर सकते हैं।

के बजाय:

include "myfile.php?var=apple";

यह होगा:

$_GET['var'] = 'apple';
include "myfile.php";

1

Php डॉक्स ( $ _SERVER देखें ) के अनुसार $ _SERVER ['PHP_SELF'] "वर्तमान में निष्पादित स्क्रिप्ट का फ़ाइल नाम" है।

INCLUDE कथन "निर्दिष्ट फ़ाइल" और "कोड को शामिल करता है और उसका मूल्यांकन करता है, जिसमें वह कोड शामिल होता है जिस पर लाइन होती है" ( INCLUDE देखें )।

मेरा मानना ​​है कि $ _SERVER ['PHP_SELF'] 'दूसरी.php' में कोड द्वारा उपयोग किए जाने पर भी पहली फ़ाइल का फ़ाइल नाम लौटाएगा।

मैंने निम्न कोड के साथ इसका परीक्षण किया और यह उम्मीद के मुताबिक काम करता है ($ phpSelf पहली फ़ाइल का नाम है)।

// In the first.php file
// get the value of $_SERVER['PHP_SELF'] for the 1st file
$phpSelf = $_SERVER['PHP_SELF'];

// include the second file
// This slurps in the contents of second.php
include_once('second.php');

// execute $phpSelf = $_SERVER['PHP_SELF']; in the secod.php file
// echo the value of $_SERVER['PHP_SELF'] of fist file

echo $phpSelf;  // This echos the name of the First.php file.

0

आप jQuery के साथ वैरिएबल जोड़कर "second.php" में सभी निष्पादित कर सकते हैं

<div id="first"></div>

<script>
$("#first").load("second.php?a=<?php echo $var?>")
</scrpt>

0

मैं जानता हूं कि यह एक पुराना सवाल है, लेकिन अभी इस पर अडिग है और किसी ने इसका उल्लेख नहीं किया है। इसलिए इसे लिख रहा हूं।

विकल्प एक अगर इस तरह से घुमाया जाए, तो यह भी काम करना चाहिए।

असली

विकल्प एक

पहली फ़ाइल में:

global $variable; 
$variable = "apple"; 
include('second.php'); 

दूसरी फ़ाइल में:

echo $variable;

TWEAK

पहली फ़ाइल में:

$variable = "apple"; 
include('second.php');

दूसरी फ़ाइल में:

global $variable;
echo $variable;

-1

मैंने पाया कि इसमें शामिल पैरामीटर के लिए संपूर्ण फ़ाइल पथ होना चाहिए , न कि कोई सापेक्ष पथ या आंशिक पथ इसके लिए कार्य करना चाहिए।


1
नहीं, यह गलत है। सापेक्ष पथ ठीक काम करते हैं include। आपको बस यह सुनिश्चित करना है कि आप शुरुआत के अनुसार एक सही "सापेक्ष" मान रहे हैं।
पीटर बोवर्स

-3

यह करो:

$checksum = "my value"; 
header("Location: recordupdated.php?checksum=$checksum");

2
हालांकि यह इस सवाल का जवाब दे सकता है कि आप क्या कर रहे हैं, यह समझाने के लिए अपने उत्तर में कुछ पाठ डालना हमेशा अच्छा होता है। एक अच्छा उत्तर लिखने का तरीका पढ़ें ।
जोर्जेन आर

1
कुछ स्पष्टीकरण बहुत अच्छा होगा।
aton1004

-3

यह मेरे लिए काम किया: एक समारोह में दूसरी फ़ाइल की सामग्री को लपेटने के लिए, इस प्रकार है:

FirstFile.php

<?php
    include("secondFile.php");

    echoFunction("message");

secondFile.php

<?php
    function echoFunction($variable)
    {
        echo $variable;
    }
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.