ProgramingTip

포함 할 PHP 전달 변수

bestdevel 2020. 10. 30. 08:18
반응형

포함 할 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입니다.

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

감사합니다!


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

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

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

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

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

추출 () 함수를 사용할 수 있습니다.
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>

가장 기본적인 수준에서 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

?>

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


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

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

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

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

....

echo $GLOBALS["myvar"];

좋은 하루 되세요.


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

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

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

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

대신에:

include "myfile.php?var=apple";

다음과 같습니다.

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

php 문서에 따르면 ( $ _SERVER 참조 ) $ _SERVER [ 'PHP_SELF']는 "현재 실행중인 스크립트의 파일 이름"입니다.

INCLUDE 문은 "지정된 파일을 포함 및 평가"하고 "포함 된 코드는 포함이 발생하는 줄의 변수 범위를 상속합니다"( INCLUDE 참조 ).

$ _SERVER [ 'PHP_SELF']는 'second.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.

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


include 매개 변수가 상대 경로 나 부분 경로가 아니라 전체 파일 경로 여야한다는 것을 발견했습니다 .


이것은 나를 위해 일했습니다. 두 번째 파일의 내용을 다음과 같이 함수로 래핑하려면 :

firstFile.php

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

    echoFunction("message");

secondFile.php

<?php
    function echoFunction($variable)
    {
        echo $variable;
    }

PHP 5.2.0은 추가 allow-url-include(기본값은 지시어 0로 변경해야합니다 1으로 php.ini당신이 전체 전달할 수 있습니다 의미) http:받는 URL을 include문.

이 URL에 쿼리 문자열로 변수를 추가하면 성능이 약간 저하 되더라도 변수를 포함 된 파일에 전달할 수 있습니다.

include 'http://www.myservername.com/includes/second.php?variable=apple';

물론 출력 second.php을 처리 $_GET['variable']하고 적용 하도록 설정해야 합니다 .


이 작업을 수행:

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

참고 URL : https://stackoverflow.com/questions/11905140/php-pass-variable-to-include

반응형