为了账号安全,请及时绑定邮箱和手机立即绑定

以下PHP脚本的执行流程是怎样的?

以下PHP脚本的执行流程是怎样的?

PHP
当年话下 2023-04-21 14:09:26
这是两个文件: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 passFrom this_one.php hello pass一切是如何工作的,为什么会收到这个输出?PS:不要向我解释它是如何include_once工作的。我所说的是,对于 10 个进程,脚本将从第 1 行一直运行到最后,如果我在包含的文件中打开一个到数据库的连接,这样我将创建相同的 $connection 实例 10 次,这将是一项开销。为所有这 10 个线程共享单个数据库实例的方法是什么?
查看完整描述

1 回答

?
Smart猫小萌

TA贡献1911条经验 获得超7个赞

该include指令将指定文件中的代码带入作用域。从心理上讲,您只需将 include 指令替换为该文件内的代码块,实际上并没有什么区别。知道这一点,您的代码实际上是:


    <?php 


    //include_once("other_one.php");

    $name = $_POST['name'];

    $pass = $_POST['password'];


    echo "From other_one.php".$name." ".$pass."<br>";


    $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>

编辑

有四个指令用于将代码引入当前进程/请求的范围。在我命名它们之前,请注意我说的是当前流程/请求。如果有 10 个人点击了您的登录页面,您将有 10 个进程/请求。同样,如果 1 个人点击您的登录页面 10 次,您也将有 10 个进程/请求。这是 PHP 的本质,除非您真正注意到性能问题,否则我不会为此担心。

这四个指令是includeinclude_oncerequirerequire_once以 结尾的指令_once保证所提供的文件只会被带入进程一次。其他两个指令允许每个进程多次包含一个文件。include和之间的区别require很微妙,但include如果找不到文件,基本上会生成可忽略的警告,而require会抛出致命错误。

一般来说,我个人总是建议您使用require_oncefor all include ,除非您明确有理由多次引入代码。例如,如果您有一个分页器小部件需要位于表格的顶部和底部,那么多次包含同一文件是一个很好的用途。我从来没有使用过includeorinclude_once因为我无法想象一个包含问题的场景对我来说是可以接受的。

此外,作为旁注,PHP 以一种可能令人惊讶的方式解析文件的路径。例如,如果您使用include 'file.php';它实际上并不意味着将文件包含在当前目录中。相反,有一个管理员可以设置的可选“包含路径”(就我而言,可以说是遗留原因),并使用该语法首先搜索包含路径。如果您没有包含路径,或者在该路径中找不到该文件,使用本地文件夹。出于这个原因,我建议始终使用“路径语义”来包含文件,这几乎可以归结为以句点或正斜杠或诸如__DIR__.


查看完整回答
反对 回复 2023-04-21
  • 1 回答
  • 0 关注
  • 78 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信