Php 是否可以将我的连接文件放在根目录中并从子目录中获取数据?

Php 是否可以将我的连接文件放在根目录中并从子目录中获取数据?,php,mysql,Php,Mysql,每次我都必须将connection.php文件与索引文件一起放入子文件夹。我不明白为什么每次都要将连接文件放在子文件夹中 我还尝试将我的连接文件放在根文件夹中,并按路径名/connection.php包含它,但它不获取Mysql数据 它不适用于要求“”,包含“”,包含一次“” 在这个话题上我找不到什么帮助。难道没有更好的办法吗 更新: 文件结构 localhost/school/icse/index-icse 我必须把我的connect_mysqli.php放在这样的每个子文件夹中 inclu

每次我都必须将
connection.php
文件与索引文件一起放入子文件夹。我不明白为什么每次都要将连接文件放在子文件夹中

我还尝试将我的连接文件放在根文件夹中,并按路径名
/connection.php
包含它,但它不获取Mysql数据

它不适用于
要求“”
包含“”
包含一次“”

在这个话题上我找不到什么帮助。难道没有更好的办法吗

更新:

文件结构

localhost/school/icse/index-icse
我必须把我的
connect_mysqli.php
放在这样的每个子文件夹中

include_once("../../conSub/connect_mysqli.php");
代码:


谢谢大家!

conSub
是包含我的连接文件的文件夹
connect\u mysqli.php
第二个红色圆圈表示我们现在在这个子文件夹中

正常情况下,它应该能工作。我不知道,有什么问题。。。 我试过了

  • include(“/conSub/connect_mysqli.php”)
  • include(“conSub/connect_mysqli.php”)
  • include_once(“/conSub/connect_mysqli.php”)
  • include_once(“conSub/connect_mysqli.php”)
  • require(“/conSub/connect_mysqli.php”)
  • require(“conSub/connect_mysqli.php”)
请检查这是我的数据结构


如果我理解,请试试这个

<?php require_once("../../conSub/connect_mysqli.php");?>

使用require_一次并用/connection.php指定子文件夹名称 我希望它能起作用

以“/”开头返回根目录并从那里开始

以“./”开头向后移动一个目录并从那里开始


以“./../”开头向后移动两个目录并从那里开始(以此类推)

如果我理解,请尝试此操作

<?php require_once("../../conSub/connect_mysqli.php");?>

使用require_一次并用/connection.php指定子文件夹名称 我希望它能起作用

以“/”开头返回根目录并从那里开始

以“./”开头向后移动一个目录并从那里开始


从“./../”开始向后移动两个目录并从那里开始(以此类推)

PHP include将查找当前目录(即调用的脚本目录),以及PHP.ini中定义为include\u路径的任何内容。您还可以使用
set\u include\u path()
将其添加到该列表中

因此,在某个时刻,您需要在脚本中输入对基目录的引用,或者:

set_include_path('/var/www/html/school');
require_once("connect_mysqli.php");

这两种方法都不理想,因为您正在将站点的位置硬编码到代码中——这不是很好移植

更好的做法(以及大多数PHP框架的做法)是通过单个index.PHP文件运行所有内容。假设您使用Apache,您可以使用mod_rewrite和.htaccess文件使URL友好,例如:

RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?page=$1 [L,QSA]
那么index.php应该有全局包含和一些路由逻辑,如下所示:

require_once "connect_mysqli.php";
if(file_exists($_GET['page'] . '.php') {
  require_once ($_GET['page'] . '.php');
}
else {
  require_once "error.php";
}
有很多方法可以改进这一点,但它会让你一目了然


另一方面,在代码中,通过将原始$\u POST变量放入数据库查询,您将面临SQL注入攻击。它至少应该逃脱。请阅读以下内容:

PHP include将查找当前目录(即调用的脚本目录),以及PHP.ini中定义为include_路径的内容。您还可以使用
set\u include\u path()
将其添加到该列表中

因此,在某个时刻,您需要在脚本中输入对基目录的引用,或者:

set_include_path('/var/www/html/school');
require_once("connect_mysqli.php");

这两种方法都不理想,因为您正在将站点的位置硬编码到代码中——这不是很好移植

更好的做法(以及大多数PHP框架的做法)是通过单个index.PHP文件运行所有内容。假设您使用Apache,您可以使用mod_rewrite和.htaccess文件使URL友好,例如:

RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?page=$1 [L,QSA]
那么index.php应该有全局包含和一些路由逻辑,如下所示:

require_once "connect_mysqli.php";
if(file_exists($_GET['page'] . '.php') {
  require_once ($_GET['page'] . '.php');
}
else {
  require_once "error.php";
}
有很多方法可以改进这一点,但它会让你一目了然


另一方面,在代码中,通过将原始$\u POST变量放入数据库查询,您将面临SQL注入攻击。它至少应该逃脱。请阅读以下内容:

首先检查您是否键入了正确的文件名

其他一些可能的解决方案:

如果您的文件
connect\u mysqli.php
和index.php(或其他)在同一目录中,您可以使用这些选项

include_once("./connect_mysqli.php");

如果您的
connect\u mysqli.php
位于
public\u html/conSub
中,并且需要连接的文件位于
school/icse
,那么您可以这样使用

include_once("../../conSub/connect_mysqli.php");
或者,如果您的public_html dir是根目录,那么您也可以使用它

include_once("/conSub/connect_mysqli.php"); //only if public_html is root dir

首先,检查是否键入了正确的文件名

其他一些可能的解决方案:

如果您的文件
connect\u mysqli.php
和index.php(或其他)在同一目录中,您可以使用这些选项

include_once("./connect_mysqli.php");

如果您的
connect\u mysqli.php
位于
public\u html/conSub
中,并且需要连接的文件位于
school/icse
,那么您可以这样使用

include_once("../../conSub/connect_mysqli.php");
或者,如果您的public_html dir是根目录,那么您也可以使用它

include_once("/conSub/connect_mysqli.php"); //only if public_html is root dir

@请看一看。这是一样的,包括一个文件在不同文件夹中的多个脚本中使用同一行代码。@请看一看。这是关于同样的事情,包括在不同文件夹中的多个脚本中使用同一行代码的文件。谢谢@james geldart,我从来不知道我们也可以使用.htaccess文件。我熟悉.htaccess文件。我一定会试试这个。请详细说明最后一行“^(.*)$index.php?page=$1[L,QSA]”是的,这将通过