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

时间:2017-08-17 13:49:30

标签: php mysql

每次我必须将我的connection.php文件与索引文件一起放入我的子文件夹中。我无法理解为什么每次都要在我的子文件夹中放入我的连接文件。

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

它不适用于require''include''include_once''

我无法在这个主题上找到很多帮助。难道没有更好的方法吗?

更新

文件结构

localhost/school/icse/index-icse

我必须将connect_mysqli.php放在每个子文件夹中,如此

代码:

<?php
include'connect_mysqli.php';
$output = '';
$sql = "SELECT * FROM city WHERE state_id = '".$_POST["stateId"]."' ORDER BY city_name";
$result = mysqli_query($link, $sql);
$output = '<option value="">Select City</option>';
while($row = mysqli_fetch_array($result))
{
    $output .= '<option value="'.$row["city_id"].'">'.$row["city_name"].'</option>';
}
echo $output;
?>

谢谢!

conSub是包含我的连接文件connect_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");

请检查这是我的数据结构

directory structure of the project

3 个答案:

答案 0 :(得分:2)

PHP包含将查看当前目录(即被调用脚本的目录),以及php.ini中定义为include_path的任何内容。您还可以使用set_include_path()添加此内容。

因此,在某些时候,您需要在脚本中引入对基本目录的引用:

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

require_once("/var/www/html/school/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";
}

有许多方法可以改善这一点,但它会给你一些骨头。

顺便说一句,在您的代码中,您通过将原始$ _POST变量放入数据库查询来打开SQL注入攻击。它至少应该被逃脱。请阅读:http://php.net/manual/en/security.database.sql-injection.php

答案 1 :(得分:0)

如果我理解,请尝试这个

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

使用require_once并使用/connection.php指定子文件夹名称 我希望它有效

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

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

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

答案 2 :(得分:0)

首先检查您是否输入了文件的corrct名称。

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

如果您的文件connect_mysqli.php和index.php(或其他)位于同一目录中,则可以使用这些选项

include_once("./connect_mysqli.php");

include_once("connect_mysqli.php");

如果您的connect_mysqli.php位于public_html/conSub且需要连接的文件位于school/icse,那么您可以像这样使用

include_once("../../conSub/connect_mysqli.php");

或者如果你的public_html目录是根目录,那么你也可以使用它

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