• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • include_once

    (PHP 4, PHP 5, PHP 7)

    include_once语句在脚本执行期间包含并运行指定文件。此行为和include语句类似,唯一区别是如果该文件中已经被包含过,则不会再次包含。如同此语句名字暗示的那样,只会包含一次。

    include_once可以用于在脚本执行期间同一个文件有可能被包含超过一次的情况下,想确保它只被包含一次以避免函数重定义,变量重新赋值等问题。

    更多信息参见include文档。

    Note:

    在 PHP 4中,_once的行为在不区分大小写字母的操作系统(例如 Windows)中有所不同,例如:

    Example #1 include_once在 PHP 4 运行于不区分大小写的操作系统中

    <?php include_once "a.php"; // 这将包含 a.php include_once "A.php"; // 这将再次包含 a.php!(仅 PHP 4) ?>

    此行为在 PHP 5 中改了,例如在 Windows 中路径先被规格化,因此C:PROGRA~1A.phpC:Program Files.php的实现一样,文件只会被包含一次。

    In response to what a user wrote 8 years ago regarding include_once being ran two times in a row on a non-existent file:
    Perhaps 8 years ago that was the case, however I have tested in PHP 5.6, and I get this:
    $result = include_once 'fakefile.php'; // $result = false
    $result = include_once 'fakefile.php'  // $result is still false
    If you include a file that does not exist with include_once, the return result will be false. 
    If you try to include that same file again with include_once the return value will be true.
    Example:
    <?php
    var_dump(include_once 'fakefile.ext'); // bool(false)
    var_dump(include_once 'fakefile.ext'); // bool(true)
    ?>
    This is because according to php the file was already included once (even though it does not exist).
    config.php
    <?php
    return array("test">1);
    -------------
    //first
    $config = include_once("config.php");
    var_dump($config);
    $config = include_once("config.php");
    var_dump($config);
    -------------------
    output will be
    array(
      "test"=>1,
    )
    nothing
    This currently (running latest PHP 7.4 NTS as of this writing, on Windows) returns as expected... false no matter how many times you include an inaccessible file, true if you include it more than once.
    i tried
    -------------------------------- index.php: 
    $out='todo 1';
    include 'file1.php';
    $out='todo 2';
    include 'file1.php';
    echo 'end';
    -------------------------------- file1.php:
    include_once 'file2.php';
    if(isset($out)){
     echo $out;
    }
    -------------------------------- file2.php:
    $out='first todo once';
    include 'file.php';
    the output is:
    first todo once
    first todo once
    todo 2
    what should i do?
    if i would replace in file2.php include with include_once, then i have following output:
    first todo once
    todo 2
    i could write
    $out='first todo once';
    include 'file1.php'
    $out='todo 1';
    include 'file1.php';
    $out='todo 2';
    include 'file1.php';
    but i don't want :-)
    please help
    once i wrote script to include multiple files at once from a given location:
    function include_load($path)
      {
      foreach(glob($path . "/*.php") as $file)
        include_once($file);
      }
    last week i modified my code and merged all include files into one single file. this results in five times faster code. i have to mention, i am talking about +100 files to include where each file includes single function and filename is equal to function-name.
    i already had a discussion with several people about "not shown errors"
    error reporting and all others in php.ini set to: "show errors" to find problems: 
    the answer i finally found:
    if you have an "@include..." instead of "include..." or "require..('somthing') in any place in your code 
    all following errors are not shown too!!!
    so, this is actually a bad idea when developing because paser errors will be droped too:
    <?php
    if(!@include_once('./somthing') ) {
      echo 'can not include';
    }
    ?>
    solution:
    <?php
    if(!@file_exists('./somthing') ) {
      echo 'can not include';
    } else {
      include('./something');
    }
    ?>
    
    Since I like to reuse a lot of code it came handy to me to begin some sort of library that I stored in a subdir
    e.g. "lib"
    The only thing that bothered me for some time was that although everything worked all IDEs reported during editing
    these useless warnings "file not found" when library files included other library files, since my path were given all relative to the corresponding document-root.
    Here is a short workaround that makes that gone:
    <?php
    // Change to your path
    if(strpos(__FILE__,'/lib/') != FALSE){
      chdir("..");
    }
    include_once ('./lib/other_lib.inc');
    // ... or any other include[_once] / require[_once]
    ?>
    just adjust the path and it will be fine - also for your IDE.
    greetings
    require_once() can check the file if once include ,or the file is wrong will tell a error and quit the script.
    For include_once a file in every paths of application we can do simply this
    include_once($_SERVER["DOCUMENT_ROOT"] . "mypath/my2ndpath/myfile.php");

    上篇:require_once

    下篇:goto