2017-02-12 122 views
0

我目前正在嘗試將文件包含到另一個文件中,它們位於兩個單獨的目錄中,看起來像這樣。php文件包含不同目錄下的文件

public_html 
    \includes 
     \check_login_status.php 
     \db_connect.php 
     \users 
      \users.php 

我想包括check_login_status.phpuser.php

我這樣做,包括它include_once("/public_html/includes/check_login_status.php");

我覺得這應該工作,但是在調試的時候都依賴於包括變量返回null。是否有另一種方法可以將目錄中的文件包含在與目錄相同的級別中?

check_login_status.php

<?php 
session_start(); 
include_once("/db_connnect.php"); 
// Files that inculde this file at the very top would NOT require 
// connection to database or session_start(), be careful. 
// Initialize some vars 
$user_ok = false; 
$log_id = ""; 
$log_username = ""; 
$log_password = ""; 
// User Verify function 
function evalLoggedUser($conx,$id,$u,$p){ 
    $sql = "SELECT ip FROM users WHERE id='$id' AND username='$u' AND password='$p' AND activated='1' LIMIT 1"; 
    $query = mysqli_query($conx, $sql); 
    $numrows = mysqli_num_rows($query); 
    if($numrows > 0){ 
     return true; 
    } 
} 
if(isset($_SESSION["userid"]) && isset($_SESSION["username"]) && isset($_SESSION["password"])) { 
    $log_id = preg_replace('#[^0-9]#', '', $_SESSION['userid']); 
    $log_username = preg_replace('#[^a-z0-9]#i', '', $_SESSION['username']); 
    $log_password = preg_replace('#[^a-z0-9]#i', '', $_SESSION['password']); 
    // Verify the user 
    $user_ok = evalLoggedUser($db_connect,$log_id,$log_username,$log_password); 
} else if(isset($_COOKIE["id"]) && isset($_COOKIE["user"]) && isset($_COOKIE["pass"])){ 
    $_SESSION['userid'] = preg_replace('#[^0-9]#', '', $_COOKIE['id']); 
    $_SESSION['username'] = preg_replace('#[^a-z0-9]#i', '', $_COOKIE['user']); 
    $_SESSION['password'] = preg_replace('#[^a-z0-9]#i', '', $_COOKIE['pass']); 
    $log_id = $_SESSION['userid']; 
    $log_username = $_SESSION['username']; 
    $log_password = $_SESSION['password']; 
    // Verify the user 
    $user_ok = evalLoggedUser($db_connect,$log_id,$log_username,$log_password); 
    if($user_ok == true){ 
     // Update their lastlogin datetime field 
     $sql = "UPDATE users SET lastlogin=now() WHERE id='$log_id' LIMIT 1"; 
     $query = mysqli_query($db_connnect, $sql); 
    } 
} 
?> 

db_connect.php

<?php 
$db_connect = mysqli_connect("localhost", "formfitdata", "**********", "formfit_users"); 
//check if connection error 
if (mysqli_connect_errno()){ 
    echo mysqli_connect_error(); 
    exit(); 
} 


?> 

回答

1

試試這個:

include_once("../includes/check_login_status.php"); 

這有可能是的public_html不在的根文件夾SE rver。

+0

我試過了,在調試過程中變量仍然返回null。 – sbowde4

+0

我認爲那麼錯誤不在包含而是在目標文件中。如果你嘗試require_once,它會返回一個錯誤嗎?如果不是的話,那麼include就是可以工作的,它必須是代碼中的東西。 –

+0

需要一次,不會返回錯誤,但該文件包含在同一目錄中的其他文件中,並且它正常執行其功能。由於某些原因,變量返回null。 – sbowde4

-1

我認爲你正在尋找的可能是什麼:

include "/path/to/my/file.php"; 
+0

我意識到這一點,但路徑無法正常工作。 – sbowde4

0
// users.php 
include_once __DIR__ ."/../includes/check_login_status.php" 

嘗試用魔法不斷__DIR__使它成爲絕對路徑。

相對路徑將相對於調用腳本進行評估;如果你 - 例如 - 在index.php中包含users.php,它可能會導致意外的行爲:

E.g.

public_html 
    index.php // include "https://stackoverflow.com/users/users.php" 
    \includes 
    check_login_status.php 
    \users 
    users.php // include "../includes/check_login_status.php" 

將使的index.php從有 「的public_html /../包括/ check_login ......」,這不存在。