【问题标题】:PHP Functions doesn't recognize includes if outside of functions [duplicate]如果在函数之外,PHP函数无法识别包含[重复]
【发布时间】:2021-12-29 00:54:12
【问题描述】:

在我的“functions.inc.php”中包含 MySQL 连接文件时遇到问题。如果我需要在我的函数中,它可以工作,但如果我包含到另一个页面中,函数将不起作用。像这样:

function AddToVoteLogs($server_ip){
    include_once 'dbh.inc.php'; // WORK

    CODE ...
}
include_once 'dbh.inc.php'; // dont work
function AddToVoteLogs($server_ip){
    CODE ...
}

我尝试使用 _ DIR _ 仍然不起作用。另一个问题。我的函数在functions.inc.php页面中有效,但在其他页面中无效。

function AddToVoteLogs($server_ip){
    include_once 'dbh.inc.php'; // WORK
    $Zip = getUserIP();
    
    $sql = "SELECT last_vote FROM votes WHERE IP = '$Zip';";
    $result = mysqli_query($conn, $sql);
    while ($row = mysqli_fetch_assoc($result)) {
        if (time() - 86400 >= $row['last_vote']) {
            $hoursIn = 1;
        }
        else {
            $hoursIn = 0;
        }
    }
    date_default_timezone_set('Europe/Vilnius');
    $dates = date("Y-m-d H:i:s");
    $ipas = getUserIP();
    $sqla = "INSERT INTO vote_log VALUES ('$dates', '$ipas', '$server_ip', $hoursIn);";
    $result = mysqli_query($conn, $sqla);
}

【问题讨论】:

  • 您问的是 JavaScript 还是 PHP?我添加了 PHP 和 MYSQL 标签,并删除了 JS/HTML
  • 为了清楚问题,请准确显示每个文件中的内容。你如何称呼它以及 dbh.inc.php 里面有什么。如果第二部分与第一个问题无关,请删除它。
  • 它是否在函数中调用通常并不重要。经常是对include path resolution的误解造成的。请记住,路径是相对于入口脚本解析的。您可以尝试“require_once”而不是“include_once”。如果找不到文件,它会抱怨。错误消息将显示它所期望的路径。然后你可以添加__DIR__来构造正确的路径。

标签: php


【解决方案1】:

它是否在函数中调用通常并不重要。经常是对include path resolution的误解造成的。

请记住,路径的解析相对于入口脚本(例如,通常是index.php)。这里不是functions.inc.php

要调试此类问题,请尝试:

  1. 使用“require_once”而不是“include_once”。如果找不到文件,它会抱怨。错误消息将显示它所期望的路径。

  2. 使用常量__DIR__ 做路径通常更可靠。常量__DIR__ 是针对当前脚本文件(在您的情况下为functions.inc.php)定义的。因此,除非您经常移动该文件,否则这会更加可靠。

  3. 如果您的dbh.inc.phpfunctions.inc.php 在同一目录中,则其路径应为:

    __DIR__ . '/dbh.inc.php'
    

【讨论】:

    【解决方案2】:

    在你的情况下(因为我不知道你的项目的结构),最好只对include_path() 使用绝对路径。 为此,您应该在项目的根目录中声明一个带有根路径的常量,并在将来在include_path() 中使用它。

    例如:

    // index.php
    define('DEFINED_ROOT_PATH', __DIR__.'/your-project-root-dir/'); // or $_SERVER[DOCUMENT_ROOT] or any other way
    ...
    
    // Your custom .php file
    include_once(DEFINED_ROOT_PATH. '/lib/dbh.inc.php');
    ...
    

    【讨论】:

      【解决方案3】:

      使用全局变量

      试试这个

      function AddToVoteLogs($server_ip){
      //include_once 'dbh.inc.php'; // NOT WORK
      global $conn; // WORK
      $Zip = getUserIP();
      
      $sql = "SELECT last_vote FROM votes WHERE IP = '$Zip';";
      $result = mysqli_query($conn, $sql);
      while ($row = mysqli_fetch_assoc($result)) {
          if (time() - 86400 >= $row['last_vote']) {
              $hoursIn = 1;
          }
          else {
              $hoursIn = 0;
          }
      }
      date_default_timezone_set('Europe/Vilnius');
      $dates = date("Y-m-d H:i:s");
      $ipas = getUserIP();
      $sqla = "INSERT INTO vote_log VALUES ('$dates', '$ipas', '$server_ip', $hoursIn);";
      $result = mysqli_query($conn, $sqla);
      

      }

      【讨论】:

        猜你喜欢
        • 2014-05-31
        • 2019-10-13
        • 1970-01-01
        • 1970-01-01
        • 2014-01-02
        • 1970-01-01
        • 2023-01-31
        • 2017-12-01
        • 1970-01-01
        相关资源
        最近更新 更多