【问题标题】:How to use definitions (define variable) in include如何在包含中使用定义(定义变量)
【发布时间】:2023-04-04 13:36:01
【问题描述】:

我正在尝试创建一些“config.php”,我将在其中定义全局变量,例如项目的默认路径。如何在包含中使用这个定义的变量?

我的 config.php:

$path = $_SERVER['DOCUMENT_ROOT'] . "/docme/";

require_once "resources/scripts/pdo.php";

ini_set('display_errors', TRUE);
date_default_timezone_set( "Europe/Prague" );

//Nastavení konstant webu
define('DB_NAME', 'project');
define('DB_USER', 'root');
define('DB_PASSWORD', 'pswd');
define('DB_HOST', '127.0.0.1');
define('SITETITLE', 'DocMe!');
define('PATH', $path);

现在我需要在include中使用PATH变量,这可能吗?

<?php
   require_once "config.php";
   include_once PATH."/index.php";
?>

好的,抱歉,这是我没有意识到它实际上是其他地方的问题。在本地主机上它工作正常,在网站(现场)它不工作,因为 $path = $_SERVER['DOCUMENT_ROOT'] = 只返回我“/”。

【问题讨论】:

  • 您的代码似乎有什么问题?
  • 请说明代码的问题,以便人们帮助您
  • 是的,它在本地主机上运行,​​但为什么它在实时网站上的 $_SERVER['DOCUMENT_ROOT'] 不起作用?它只返回“/”而不是“student.sps-prosek.cz....”,使用 $path = $_SERVER['HTTP_HOST''] 更好吗?
  • 大部分$_SERVER 变量需要由您与PHP 的cgi 连接提供,因此它取决于服务器。您知道config.php 相对于您的服务器根目录的位置,所以只需执行__DIR__ . '/../../../../'

标签: php


【解决方案1】:

“是的,它在本地主机上运行,​​但为什么它不能在实时网站上运行 $_SERVER['DOCUMENT_ROOT']?它只返回“/”而不是“student.sps-prosek.cz/.... ";,使用 $path = $_SERVER['HTTP_HOST''] 更好吗?"

我了解你的问题,问题是当你部署到服务器时,url 会改变。

试试这个代码

<?php

define('PROJECT_BASE_FOLDER'    , substr($_SERVER['REQUEST_URI'], 0, 8) == '/sample/' ? '/sample/' : '');
//sample is the name of the folder. the 0 to 8 is how many char your project name has including the '/'

define('PROJECT_FOLDER'         , substr($_SERVER['REQUEST_URI'], 0, 8) == '/sample/' ? '' : '');
define('HTTP'                   , 'http://');
define('BASE_PATH'              , $_SERVER['DOCUMENT_ROOT'] . PROJECT_BASE_FOLDER . PROJECT_FOLDER);

define('SITE_URL'               , HTTP . $_SERVER['SERVER_NAME'] . str_replace($_SERVER['DOCUMENT_ROOT'] . '/', '', BASE_PATH));
// or ':8080/' is the port you are using in your local machine
define('SITE_URL'               , HTTP . $_SERVER['SERVER_NAME'] . ':8080/' . str_replace($_SERVER['DOCUMENT_ROOT'] . '/', '', BASE_PATH));

因此在您的代码中,您将使用

<?php
   require_once "config.php";
   include_once BASE_PATH ."/index.php";
?>

这应该可以工作,因为我正在使用这个逻辑,这样我就不必在每次需要部署到服务器时更改目录。

【讨论】:

  • BASE_PATH 返回“/”,SITE_URL 返回“student.sps-prosek.cz”,项目位于“student.sps-prosek.cz/~kocvaja14/projectFolder 中,我可以在 SITE_URL 之后添加一个字符串吗?
  • 基本上,BASE_PATH 是 "student.sps-prosek.cz/~kocvaja14/projectFolder/" 之后的所有内容,所以基本上在您的本地计算机中,BASE_PATH 是 localhost:8080 之后的所有内容,所以无论您使用什么服务器部署,BASE_PATH 将是您的项目文件夹的 /。如果需要,是的,您可以在站点 URL 中添加一些内容
【解决方案2】:

是的,您可以在任何包含您的 config.php 文件的文件中使用 PATH /constant/

但这对于 include index.php 来说有点奇怪

include_once PATH."/index.php";

【讨论】:

  • 是的,很抱歉它实际上在工作我没有注意到错误在 $path = $_SERVER['DOCUMENT_ROOT'] 中。它只返回“/”而不是“student.sps-prosek.cz...”,它只适用于本地主机
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-06
  • 1970-01-01
  • 2013-06-30
  • 2015-08-29
  • 2011-09-19
  • 1970-01-01
相关资源
最近更新 更多