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

时间:2011-12-17 16:41:11

标签: php variables content-management-system global-variables

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

我遇到的问题是,如果我将变量设置为完整的URL(例如:$uploadDir = "http://www.example.com/uploads/";),则脚本不会执行它们应该执行的操作。如果我使用绝对路径(例如:$uploadDir = "/uploads/";$uploadDir = "/full/server/path/uploads/";)。

如果我使用完整的URL,它似乎至少尝试工作,但不是。如果我使用完整的服务器路径或绝对路径,我会收到一些关于该路径不允许的错误。如果有帮助,这些文件都存储在/edit//edit/(sub-folder-name)/中。

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

感谢。

更新:

此代码段中的某些变量未包含在内,只是不认为我应该发布一个庞大的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;
}

2 个答案:

答案 0 :(得分:4)

不要将URL用于文件系统功能。这将使他们做一个HTTP请求,而不是从文件系统加载文件。

此外,如果您使用/absolute路径,那么它将引用文件系统根目录,而不是您的网络服务器document root。 PHP文件系统函数不能在虚拟路径名上运行,而是在真实系统文件结构上运行。

但您可以使用:

 $pageDir = "/edit/pages/";
 readfile("$_SERVER[DOCUMENT_ROOT]/$pageDir/$page");

这可能就是你想要的。

其他警告:尽管有模因,但全球变量没有任何问题。但是,您不应该将共享范围与其中的几十个一起淹没。而是为文件夹定义类似$dir["page"]的数组。或define()常数。

答案 1 :(得分:1)

您在此代码段中尝试做的是

由于它是一个HTTP URL,你不能写任何东西(你可以用某种方式发送POST请求,但我确定你不希望这样)

您必须使用实际的文件系统路径进行文件系统操作(比如在文件中存储内容;))

为此你可能想要使用$ _SERVER ['DOCUMENT_ROOT']变量,或者你可以做一个技巧:

$my_dir = dirname(__FILE__);

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

另外,你可能想要使用像MySQL或MongoDB这样的数据库(非常非常不同的东西)来存储内容。如果你不知道这些,你应该阅读一些例子,它们很棒。 ;)