포함 할 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
'ProgramingTip' 카테고리의 다른 글
XmlSerializer를 사용하여 빈 xml 속성 값을 nullable int 속성으로 역화 화 (0) | 2020.10.30 |
---|---|
표준 HTML5 유효성 검사 (양식)를 트리거 하시겠습니까? (0) | 2020.10.30 |
명령 줄에서 CMake 옵션 ()을 설정하는 방법 (0) | 2020.10.30 |
IEnumerator는 왜 (0) | 2020.10.30 |
MVC 패턴에 맞게 게임 코드를 구성해야합니까? (0) | 2020.10.30 |