PHP中跨文件和文件夹的全局变量

PHP中跨文件和文件夹的全局变量,php,variables,content-management-system,global-variables,Php,Variables,Content Management System,Global Variables,我正在构建一个PHPCMS,但是在变量方面遇到了问题。我希望能够将所有变量保存在一个外部文件vars.php中,并将该文件包含在每个需要变量的文件中。这些变量都与URL和文件夹路径有关 我遇到的问题是,如果我将变量设置为完整URL(例如:$uploadDir=”http://www.example.com/uploads/“;),脚本没有做它们应该做的事情。如果我使用绝对路径(例如:$uploadDir=“/uploads/”;或$uploadDir=“/full/server/path/upl

我正在构建一个PHPCMS,但是在变量方面遇到了问题。我希望能够将所有变量保存在一个外部文件vars.php中,并将该文件包含在每个需要变量的文件中。这些变量都与URL和文件夹路径有关

我遇到的问题是,如果我将变量设置为完整URL(例如:
$uploadDir=”http://www.example.com/uploads/“;
),脚本没有做它们应该做的事情。如果我使用绝对路径(例如:
$uploadDir=“/uploads/”;
$uploadDir=“/full/server/path/uploads/”;

如果我使用完整的URL,看起来它至少试着工作,但没有。如果我使用完整服务器路径或绝对路径,我会得到一些关于不允许该路径的错误。这些文件都存储在
/edit/
/edit/(子文件夹名称)/
中,如果这样有帮助的话

我将四处寻找一些我将使用这个的代码示例,并尽快更新这篇文章

谢谢

更新:

这个代码片段中的一些变量没有包括在内,只是我认为我不应该发布一个庞大的PHP脚本

$pageDir
示例:

// The below 2 lines are actually in vars.php, which is included in this file.
$pageDir = "http://www.example.com/edit/pages/";
$url = "http://www.example.com/";

if ($_POST["page"] && $execute == TRUE) {
    $live = $_GET["p"] . ".php";
    // The below line is how this used to be set up.
    // $handle = fopen("pages/$page", "w");
    // The below line is how the new version should be set up.
    $handle = fopen("$pageDir/$page", "w");
    fwrite($handle, $_POST["page"]);
    fclose($handle);
    // The below line is how this used to be set up.
    // echo("<p>Page successfully saved. <a href=\"../$live\" target=\"_blank\">Click here to view this page.</a></p>\n");    
    // The below line is how the new version should be set up.
    echo("<p>Page successfully saved. <a href=\"$url/$live\" target=\"_blank\">Click here to view this page.</a></p>\n");    
    $execute = FALSE;
}
//下面两行实际上位于vars.php中,它包含在这个文件中。
$pageDir=”http://www.example.com/edit/pages/";
$url=”http://www.example.com/";
如果($_POST[“page”]&&$execute==TRUE){
$live=$_GET[“p”]。“.php”;
//下一行是如何设置的。
//$handle=fopen(“页面/$page”,“w”);
//下面一行是如何设置新版本。
$handle=fopen(“$pageDir/$page”,“w”);
fwrite($handle,$_POST[“page”]);
fclose($handle);
//下一行是如何设置的。
//echo(页面已成功保存。

\n”); //下面一行是如何设置新版本。 echo(页面已成功保存。

\n”); $execute=FALSE; }
不要将URL用于文件系统功能。这将使他们执行HTTP请求,而不是从文件系统加载文件

另外,如果使用
/absolute
路径,那么它将引用文件系统根,而不是Web服务器。PHP文件系统函数不在虚拟路径名上运行,而是在真实的系统文件结构上运行

但是,您可以使用:

 $pageDir = "/edit/pages/";
 readfile("$_SERVER[DOCUMENT_ROOT]/$pageDir/$page");
那可能是你想要的


其他注意事项:尽管有模因,但全局变量没有任何问题。但是,您不应该让几十个共享范围被淹没。而是为文件夹定义一个数组,如
$dir[“page”]
。或
define()
常量。

不要将URL用于文件系统函数。这将使他们执行HTTP请求,而不是从文件系统加载文件

另外,如果使用
/absolute
路径,那么它将引用文件系统根,而不是Web服务器。PHP文件系统函数不在虚拟路径名上运行,而是在真实的系统文件结构上运行

但是,您可以使用:

 $pageDir = "/edit/pages/";
 readfile("$_SERVER[DOCUMENT_ROOT]/$pageDir/$page");
那可能是你想要的


其他注意事项:尽管有模因,但全局变量没有任何问题。但是,您不应该让几十个共享范围被淹没。而是为文件夹定义一个数组,如
$dir[“page”]
。或者
define()
常量。

在这个代码段中,您要做的是

  • 使用fopen打开URL(这在php中有效,但您的提供商可能会禁用URL\u fopen,请参阅)

  • 给它写点什么

因为它是一个HTTP URL,所以您不能向它写入任何内容(您可以通过某种方式发送POST请求,但我肯定您不希望这样)

对于文件系统操作,您必须使用实际的文件系统路径(例如在文件中存储某些内容;)

为此,您可能需要使用$\u SERVER['DOCUMENT\u ROOT']变量,或者您可以执行以下操作:

$my\u dir=dirname(\uu文件\uu)

变量
$my_dir
将包含当前脚本所在的目录名


此外,您可能希望使用一些数据库,如MySQL或MongoDB(非常非常不同的东西)来存储其中的内容。如果你不知道这些,你应该读一些例子,它们很棒

在这段代码中,您要做的是

  • 使用fopen打开URL(这在php中有效,但您的提供商可能会禁用URL\u fopen,请参阅)

  • 给它写点什么

因为它是一个HTTP URL,所以您不能向它写入任何内容(您可以通过某种方式发送POST请求,但我肯定您不希望这样)

对于文件系统操作,您必须使用实际的文件系统路径(例如在文件中存储某些内容;)

为此,您可能需要使用$\u SERVER['DOCUMENT\u ROOT']变量,或者您可以执行以下操作:

$my\u dir=dirname(\uu文件\uu)

变量
$my_dir
将包含当前脚本所在的目录名


此外,您可能希望使用一些数据库,如MySQL或MongoDB(非常非常不同的东西)来存储其中的内容。如果你不知道这些,你应该读一些例子,它们很棒

在打开和保存文件时,使用URL而不是服务器路径有点混乱。(还有这个。)在打开和保存文件时,使用URL而不是服务器路径有点混乱。(还有这个。)“谨慎使用全局变量并没有什么错。”问题不在于全局变量本身,而在于通常伴随着糟糕实现的编码实践(或缺乏编码实践)。我认为主要是所有代码都在“全局”范围内执行,以及来自多个模板(如php脚本)的不可避免的左撇子,再加上过于通用的变量名。在OPs案例中可能不是问题,但有时少就是多。如果一切都被适当地隔离,那么在全球范围内做任何事情都是完全可能的。我知道我的(越来越远)p中有一些代码