سؤال

أريد الحصول على محتويات ملف .php في متغير على صفحة أخرى.

عندي ملفين myfile1.php و myfile2.php.

myfile2.php

<?PHP
    $myvar="prashant"; // 
    echo $myvar;
?>

الآن أريد الحصول على القيمة المكررة بواسطة myfile2.php في متغير في myfile1.php، لقد جربت الطريقة التالية، ولكنها تأخذ جميع المحتويات بما في ذلك علامة php () أيضًا.

<?PHP
    $root_var .= file_get_contents($_SERVER['DOCUMENT_ROOT']."/myfile2.php", true);
?>

من فضلك أخبرني كيف يمكنني إرجاع المحتويات بواسطة ملف PHP واحد إلى متغير محدد في ملف PHP آخر.

شكرًا

هل كانت مفيدة؟

المحلول

يمكنك استخدام ال يشمل التوجيه للقيام بذلك.

الملف 2:

<?php
    $myvar="prashant";
?>

الملف 1:

<?php 

include('myfile2.php');
echo $myvar;

?>

نصائح أخرى

عليك أن تفرق بين أمرين:

  • هل تريد التقاط الإخراج (echo, print،...) للملف المضمن واستخدام الإخراج في متغير (سلسلة)؟
  • هل تريد إرجاع قيم معينة من الملفات المضمنة واستخدامها كمتغير في ملف يستضيف النصي؟

سيتم دائمًا نقل المتغيرات المحلية في ملفاتك المضمنة إلى النطاق الحالي لملفك يستضيف البرنامج النصي - تجدر الإشارة إلى ذلك.يمكنك دمج كل هذه الميزات في واحد:

include.php

$hello = "Hello";
echo "Hello World";
return "World";

host.php

ob_start();
$return = include 'include.php'; // (string)"World"
$output = ob_get_clean(); // (string)"Hello World"
// $hello has been moved to the current scope
echo $hello . ' ' . $return; // echos "Hello World"

ال return- الميزة مفيدة خاصة عند استخدام ملفات التكوين.

config.php

return array(
    'host' => 'localhost',
     ....
);

app.php

$config = include 'config.php'; // $config is an array

يحرر

للإجابة على سؤالك حول عقوبة الأداء عند استخدام المخازن المؤقتة للإخراج، قمت للتو بإجراء بعض الاختبارات السريعة.1,000,000 تكرار ob_start() وما يقابلها $o = ob_get_clean() يستغرق حوالي 7.5 ثانية على جهازي الذي يعمل بنظام التشغيل Windows (يمكن القول إنها ليست أفضل بيئة لـ PHP).أود أن أقول إن تأثير الأداء يجب أن يعتبر صغيرًا جدًا ...

إذا كنت تريد المحتوى فقط echo()بواسطة الصفحة المضمنة، يمكنك التفكير في استخدام التخزين المؤقت للإخراج:

ob_start();
include 'myfile2.php';
$echoed_content = ob_get_clean(); // gets content, discards buffer

يرى http://php.net/ob_start

أحاول دائما أن أتجنب ob_ المهام.بدلاً من ذلك، أستخدم:

<?php
$file = file_get_contents('/path/to/file.php');
$content = eval("?>$file");
echo $content;
?>

"في الواقع كنت أبحث فقط عما إذا كانت هناك أي طريقة لنوع الإرجاع يمكن أن تعطيني القيمة مباشرة" - لقد أجبت للتو على سؤالك.

يرى http://sg.php.net/manual/en/function.include.php, ، مثال رقم 5

ملف1.php:

<? return 'somevalue'; ?>

ملف2.php:

<?

$file1 = include 'file1.php';
echo $file1; // This outputs 'somevalue'.

?>

يمكنك استخدام المخازن المؤقتة للإخراج، والتي ستخزن كل ما تقوم بإخراجه، ولن تطبعه إلا إذا طلبت ذلك صراحةً، أو لا تنهي/تمسح المخازن المؤقتة بنهاية مسار التنفيذ.

// Create an output buffer which will take in everything written to 
// stdout(i.e. everything you `echo`ed or `print`ed)
ob_start()
// Go to the file
require_once 'file.php';
// Get what was in the file
$output = ob_get_clean();

إذا كنت ترغب في الحصول على استخدام الموقع بالكامل من خلال

<?php
$URL = 'http://www.example.com/';
$homepage = file_get_contents($URL);
echo $homepage;
?>

يرجى تجربة هذا الرمز

myfile1.php

<?php
    echo file_get_contents("http://domainname/myfile2.php");
?>

myfile2.php

<?PHP
    $myvar="prashant";
    echo $myvar;
?>

إذا كنت تريد إرجاع الإخراج من التعليمات البرمجية في ملف، فما عليك سوى إجراء استدعاء RESTful API له.بهذه الطريقة، يمكنك استخدام نفس ملف التعليمات البرمجية لاستدعاءات ajax أو REST API أو كود PHP الداخلي الخاص بك.

يتطلب تثبيت cURL ولكن لا توجد مخازن مؤقتة للإخراج أو لا يتضمن أي تضمين، فقط يتم تنفيذ الصفحة وإعادتها إلى سلسلة.

سأعطيك الرمز الذي كتبته.إنه يعمل مع كل خادم ويب REST/تقريبًا (وحتى يعمل مع Equifax):

$return = PostRestApi($url);

أو

$post = array('name' => 'Bob', 'id' => '12345');
$return = PostRestApi($url, $post, false, 6, false);

هنا هي الوظيفة:

/**
 * Calls a REST API and returns the result
 *
 * $loginRequest = json_encode(array("Code" => "somecode", "SecretKey" => "somekey"));
 * $result = CallRestApi("https://server.com/api/login", $loginRequest);
 *
 * @param string $url The URL for the request
 * @param array/string $data Input data to send to server; If array, use key/value pairs and if string use urlencode() for text values)
 * @param array $header_array Simple array of strings (i.e. array('Content-Type: application/json');
 * @param int $ssl_type Set preferred TLS/SSL version; Default is TLSv1.2
 * @param boolean $verify_ssl Whether to verify the SSL certificate or not
 * @param boolean $timeout_seconds Timeout in seconds; if zero then never time out
 * @return string Returned results
 */
function PostRestApi($url, $data = false, $header_array = false,
    $ssl_type = 6, $verify_ssl = true, $timeout_seconds = false) {

    // If cURL is not installed...
    if (! function_exists('curl_init')) {

        // Log and show the error
        $error = 'Function ' . __FUNCTION__ . ' Error: cURL is not installed.';
        error_log($error, 0);
        die($error);

    } else {

        // Initialize the cURL session
        $curl = curl_init($url);

        // Set the POST data
        $send = '';
        if ($data !== false) {
            if (is_array($data)) {
                $send = http_build_query($data);
            } else {
                $send = $data;
            }
            curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'POST');
            curl_setopt($curl, CURLOPT_POSTFIELDS, $send);
        }

        // Set the default header information
        $header = array('Content-Length: ' . strlen($send));
        if (is_array($header_array) && count($header_array) > 0) {
            $header = array_merge($header, $header_array);
        }
        curl_setopt($curl, CURLOPT_HTTPHEADER, $header);

        // Set preferred TLS/SSL version
        curl_setopt($curl, CURLOPT_SSLVERSION, $ssl_type);

        // Verify the server's security certificate?
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, ($verify_ssl) ? 1 : 0);

        // Set the time out in seconds
        curl_setopt($curl, CURLOPT_TIMEOUT, ($timeout_seconds) ? $timeout_seconds : 0);

        // Should cURL return or print out the data? (true = return, false = print)
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

        // Execute the request
        $result = curl_exec($curl);

        // Close cURL resource, and free up system resources
        curl_close($curl);
        unset($curl);

        // Return the results
        return $result;

    }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top