[php] 포함 할 PHP 전달 변수

포함 파일에 변수를 전달하려고 합니다. 내 호스트가 PHP 버전을 변경했는데 이제 시도한 솔루션이 작동하지 않습니다.

내가 찾을 수있는 모든 옵션을 시도했다고 생각합니다. 나는 그것이 가장 간단한 것이라고 확신합니다!

변수는 호출하는 첫 번째 파일에서 설정하고 평가해야합니다 (실제로 $_SERVER['PHP_SELF']는이며 포함 된 파일이 아닌 해당 파일의 경로를 반환해야 함 second.php).

옵션 1

첫 번째 파일에서 :

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

두 번째 파일에서 :

echo $variable;

옵션 2

첫 번째 파일에서 :

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

옵션 3

$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입니다.

내가 무엇을 놓치고 있습니까?

감사!



답변

extract () 함수를 사용할 수 있습니다.
Drupal은 theme () 함수에서 사용할 수 있습니다.

여기에 $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>


답변

옵션 3은 불가능합니다. 브라우저에서 해당 URL을 입력했을 때와 똑같이 .php 파일의 렌더링 된 출력을 얻을 수 있습니다. (원하는대로) 원시 PHP 코드를 대신 받으면 사이트의 모든 소스 코드가 노출 될 것입니다. 이는 일반적으로 좋지 않습니다.

옵션 2는별로 의미가 없습니다. 함수에서 변수를 숨기고 PHP의 변수 범위에 따라야합니다. 또한 $var = passvariable()‘내부’변수를 ‘외부’로 가져올 어딘가 가 있어야하며 다시 원점으로 돌아갑니다.

옵션 1이 가장 실용적입니다. include()기본적으로 파일의 코드가 말 그대로 상위 페이지의 일부인 것처럼 지정된 파일에서 바로 실행됩니다. 대부분의 사람들이 눈살을 찌푸리는 전역 변수처럼 보이지만 PHP의 구문 분석 의미론에 따르면이 두 가지는 동일합니다.

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

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


답변

가장 기본적인 수준에서 PHP의 include 구문이 파일에서 코드를 가져 와서 파일을 호출 한 위치에 붙여넣고 include의 매뉴얼에 다음과 같은 내용이 명시되어 있음을 고려하십시오.

파일이 포함되면 포함 된 코드는 포함이 발생하는 행의 변수 범위를 상속합니다. 호출 파일의 해당 줄에서 사용할 수있는 모든 변수는 해당 지점부터 호출 된 파일 내에서 사용할 수 있습니다.

이러한 것들은 모두 다른 문제가 있다고 생각하게 만듭니다. 또한 옵션 번호 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

?>

옵션 번호 1이이 예제에 가장 가깝고 (더 복잡해야하지만) 작동하지 않는다는 점을 고려하면 include 문에서 실수를했다고 생각하게됩니다 (루트 또는 이와 유사한 경로에 대한 잘못된 경로). 발행물).


답변

OP의 질문과 관련하여 특히 “변수는 호출하는 첫 번째 파일 (실제로는 ‘$ _SERVER [‘PHP_SELF ‘])에서 설정하고 평가해야하며 포함 된 두 번째 파일이 아닌 해당 파일의 경로를 반환해야합니다. php). ”

파일이 포함 된 파일을 알려줍니다. 이것을 포함 된 파일에 넣으십시오.

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


답변

여기에도 같은 문제가 있습니다. $ GLOBALS 배열을 사용할 수 있습니다.

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

다음과 같이 실행해야합니다.

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

....

echo $GLOBALS["myvar"];

좋은 하루 되세요.


답변

OPTION 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를 다시 설치하지 않으면 작동합니다.


답변

GET 매개 변수를 기반으로 변수를 설정하는 파일이있는이 문제가 발생했습니다. 그리고이 파일은 대규모 콘텐츠 관리 시스템의 다른 부분에서 올바르게 작동하기 때문에 업데이트 할 수 없습니다. 그러나 매개 변수가 실제로 URL 문자열에없는 포함 파일을 통해 해당 코드를 실행하고 싶었습니다. 간단한 해결책은 다른 변수와 마찬가지로 첫 번째 파일에서 GET 변수를 설정할 수 있다는 것입니다.

대신에:

include "myfile.php?var=apple";

다음과 같습니다.

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