【发布时间】:2020-05-27 13:47:53
【问题描述】:
这是两个文件:
this_one.php
<?php
include_once("other_one.php");
$n1 = $_POST['name'];
$n2 = $_POST['password'];
echo "From this_one.php ".$n1." ".$n2."<br>";
?>
<form action="" method="POST">
<input type="text" name="name">
<input type="password" name="password">
<button type="submit" name="Submit">Login</button>
</form>
other_one.php
<?php
$name = $_POST['name'];
$pass = $_POST['password'];
echo "From other_one.php".$name." ".$pass."<br>";
?>
现在,当我在某处阅读时,如果表单操作为空,则 POST 将发送到脚本本身。另外 other_one.php 已包含在文件 this_one.php 中
但是当我在浏览器中运行时,输出是:
From other_one.php hello pass
From this_one.php hello pass
一切工作情况如何?为什么会收到此输出?
PS:不要向我解释include_once 是如何工作的。我要说的是,对于 10 个进程,脚本将从第 1 行一直运行到最后,如果我在包含的文件中打开与数据库的连接,这样我将创建相同的 $connection 实例 10 次,这将是一个开销。有什么方法可以为所有这 10 个线程共享一个数据库实例?
【问题讨论】:
-
你期望的输出是什么?
-
@u_mulder 我希望从文件 other_one.php 中未定义,因为 POST 去了 this_one.php 但现在我明白了一切。这意味着每次发生某些事情时,都会执行整个组合文件,这对性能来说是非常昂贵的。如果我打开一个数据库连接,而不是像 JAVA 那样创建一个实例并一次又一次地重用它,我会在每次包含 database.php 时创建一个连接。专业人士是如何度过这个难关的,还是我错过了什么?
-
include_once和require_once只会抓取一次文件。如果对该文件再次尝试包含/要求,它将跳过它。 -
@aynber 是的,我明白这一点,但假设我在 login.php 中有
include_once('database.php');并且我做了一个 POST,那么它将执行整个 database.php 以及 login.php。如果不是为什么?因为@chris-hass 的回答显示整个文件被复制并从上到下逐行执行 -
@GrumpyCrouton 道歉,我的评论更没有帮助。等等,为什么没有人产生 htmlentities?