Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 定义';路径';(URL)到父根上一级_Php_Security_Url_Path - Fatal编程技术网

Php 定义';路径';(URL)到父根上一级

Php 定义';路径';(URL)到父根上一级,php,security,url,path,Php,Security,Url,Path,在阅读关于保护包含数据库访问信息的PHP文档(连接到数据库)的各种意见时,有人多次建议将此PHP文件放在根目录之外(在根目录之上或与根目录处于同一级别,但不在根目录中)。虽然这对我来说似乎很有意义,但我还没有找到任何关于如何为我的“Include”语句访问此文件的参考。到目前为止,我已经使用了绝对路径名(例如,/root),但还没有找到如何描述web文档目录之外的路径。你有什么建议吗?谢谢你能提供的任何帮助 代码实现#1(来自Abronsius教授的建议) 我现在遇到了一些奇怪的事情。新的“in

在阅读关于保护包含数据库访问信息的PHP文档(连接到数据库)的各种意见时,有人多次建议将此PHP文件放在根目录之外(在根目录之上或与根目录处于同一级别,但不在根目录中)。虽然这对我来说似乎很有意义,但我还没有找到任何关于如何为我的“Include”语句访问此文件的参考。到目前为止,我已经使用了绝对路径名(例如,/root),但还没有找到如何描述web文档目录之外的路径。你有什么建议吗?谢谢你能提供的任何帮助

代码实现#1(来自Abronsius教授的建议)

我现在遇到了一些奇怪的事情。新的“include”对于第一个查询非常有效,但是第二个查询(几乎相同)失败了。我在第3179行(见下文)收到一个错误(“ErrorException:未定义变量:connection”)

以下是第一个查询(此查询有效):

下面是第二个的代码(此代码失败并出现错误):


我看不出有什么不同,所以我必须在如何使用这种方法方面有所遗漏?这个错误意味着没有定义“连接”,但为什么第一个查询也没有定义?这里的任何帮助都将不胜感激。谢谢。

也许使用
chdir
getcwd
会有所帮助

<?php
    
    $cwd=getcwd();  # current working directory...
    chdir( $_SERVER['DOCUMENT_ROOT'] );
    
    chdir('../');   #go up 1 level
    define( 'PATH', getcwd() ); #define PATH
    
    chdir( $cwd );  #go back to original working directory
    
    echo PATH.'<br>';
?>
如果根目录上方有一个特定目录,其中包含配置文件、数据库连接等:

chdir('../conn/');
define( 'PATH', getcwd() );
set_include_path( PATH );
然后,您应该能够使用以下简单调用包含文件:

require 'db.php';
如果您在自己的函数中使用db连接,则无需再次为每次函数调用重建连接。如果处理正确,一个连接就足够了。下面是伪代码

require 'db.php';
$db=new db($usr,$pwd,$host,$db);


function userfunc_1($db){
    $sql='select * from table1';
    $res=$db->query($sql);
    return $res;
}
function userfunc_2($db){
    $sql='select * from table2';
    $res=$db->query($sql);
    return $res;
}

$a=userfunc_1($db);
$b=userfunc_2($db);


在这两种情况下,使用相同的数据库连接,但要么作为参数传递,要么包含在
global

中!这正是我想要的。非常感谢。快速跟进:我已经充分测试了你的建议,效果非常好。简单而复杂。非常感谢。我很高兴它能帮上忙——祝你在剩下的编码冒险中好运,我刚刚发布了一个我遇到的问题(见原始问题)。包含的文件在第一次使用时有效,但在第二次使用时失败。你有什么想法吗?非常感谢,比我所希望的还要多。这两种解决方案有助于澄清我的错误所在以及如何纠正。感谢您的支持。两个查询是否在同一页上?您是否在运行时重新定义了
$connection
?但是我很傻。。。您已经调用了
mysqli\u close($connection)是的,当我开始收到错误时,我添加了“mysqli_close($connection);”。是的,两个查询都在同一个页面上(第一个之后的第二个页面)。我一时兴起,将第二个查询的“require_once”改为“include”,结果成功了。我不知道为什么,但我现在将探索(除非你有任何想法)。谢谢你,还是有麻烦。。。“require”可以工作,但一旦它被更改为“require_once”,它就会在第二次(现在是第三次)查询中出错。我在过去一个小时里的阅读让我觉得require_once似乎是首选,但我所读到的任何东西都不能说明为什么“连接”是未定义的。有人有什么建议吗?谢谢。一旦包含了db连接(使用任何方法
require
require\u Once
include
include\u Once
),您就不需要在该页面/脚本中再次包含它。如果您计划重新使用该页面上的连接,请不要关闭连接。。。默认情况下,当页面/脚本完成时,连接将关闭。
chdir('../conn/');
define( 'PATH', getcwd() );
set_include_path( PATH );
require 'db.php';
require 'db.php';
$db=new db($usr,$pwd,$host,$db);


function userfunc_1($db){
    $sql='select * from table1';
    $res=$db->query($sql);
    return $res;
}
function userfunc_2($db){
    $sql='select * from table2';
    $res=$db->query($sql);
    return $res;
}

$a=userfunc_1($db);
$b=userfunc_2($db);
require 'db.php';
$db=new db($usr,$pwd,$host,$db);


function userfunc_1(){
    global $db;
    $sql='select * from table1';
    $res=$db->query($sql);
    return $res;
}
function userfunc_2(){
    global $db;
    $sql='select * from table2';
    $res=$db->query($sql);
    return $res;
}

$a=userfunc_1();
$b=userfunc_2();