提问人:Mehul Kumar 提问时间:7/4/2023 更新时间:7/4/2023 访问量:49
值未从 Index.php 更新到 example.php
Values are not updating from Index.php to example.php
问:
包含文件时,不会传递值。即使我试过了,但没有工作global $subidone;
$subidone = $_GET['subidone'];
索引 .php 代码 :
if (isset($_GET['adgroup_id']) && $_GET['adgroup_id'] == "123") {
$subidone = "Canada";
$file = ["example.php", "sample.php"];
$randomFile = $file[array_rand($file)];
include $randomFile;
}
示例.php代码:
//global $subidone;
//$subidone = $_GET['subidone'];
$affurl="https://example.com?subid1=" . $subidone ."&subid2=123456";
echo $affurl;
我想要的输出: https://example.com?subid1=Canada&subid2=123456
我得到的输出: https://example.com?subid1=&subid2=123456
答:
1赞
hakre
7/4/2023
#1
如果不预先检查输入条件,在 PHP 中包含文件可能会导致意外效果。然后很容易直接在浏览器中打开文件(它请求它),这不是预期的。
当包含文件是公共目录 (webroot) 中的标准 PHP 文件时,此问题很常见。
你可以做的是验证前提条件,如果违反了它,那就扔掉。
在您的示例中,变量是前提条件,它必须是一个字符串:$subidone
示例.php代码:
<?php # start of file
// verify pre-condition for this include file
if (!is_string($subidone ?? null)) {
throw new ErrorException('bad file include: ' . basename(__FILE__));
}
$affurl="https://example.com?subid1=" . $subidone ."&subid2=123456";
echo $affurl;
现在,每当执行 echo 语句时,您至少知道变量 $subidone 是作为字符串传递的,这是该文件代码工作的先决条件。而且你知道什么时候不是,因为代码会抛出并提前停止。
这还可以防止您在包含或变量存在问题时在错误的位置进行搜索。
这取决于一点,但是通常包含文件不属于公共 webroot,因此您知道它们只能由另一个 php 文件包含,而不是浏览器直接请求。
评论
adgroup_id