2011-12-17 195 views
0

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

我正在运行的问题是,如果我将变量设置为完整的URL(例如:$uploadDir = "http://www.example.com/uploads/";),脚本不会做他们应该做的。如果我使用绝对路径(例如:$uploadDir = "/uploads/";$uploadDir = "/full/server/path/uploads/";),也是如此。

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

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

谢谢。

UPDATE:

一些从这个代码片断的变量不包括在内,只是没想到我应该发表一个巨大的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; 
} 
+0

您使用URL而不是服务器路径对打开和保存文件有点混淆。 (和[这可能会帮助](http://stackoverflow.com/questions/4369/how-to-include-php-files-that-require-an-absolute-path)。) – 2011-12-17 16:56:12

回答

4

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

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

但是,您可以使用:

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

这可能是你想要的。

其他注意事项:尽管模因,全球变量没有什么问题。然而,你不应该将共享范围扩大到数十个范围。相反,请为文件夹定义像$dir["page"]这样的数组。或define()常数。

+1

“全球没有错变量*谨慎使用和适当考虑*时。“问题不在于全局变量本身,而在于编码实践(或缺乏)通常伴随着较差实施。 – 2011-12-17 16:59:44

+0

我认为这主要是所有代码都在'全局'范围内执行,并且不可避免的来自多个模板式php脚本的左侧代码,与过于通用的var名称配对。在OP案件中可能不成问题,但有时候更少。 – mario 2011-12-17 17:02:54

+0

如果所有事情都被适当隔离,完全有可能在全球范围内做所有事情。我知道我已经收到了一些代码(越来越遥远),我回过头去查看,我仍然很惊讶它按预期工作,*不知何故*。有了像CMS这样的东西,希望所有事情都可以按照部署的编程风格进行适当的规划和隔离。一些实践可能比其他实践更少(显着)容易出错。 – 2011-12-17 17:12:43

1

你正在尝试在这个片段做的是

因为它是一个HTTP URL,你不能写任何东西给它(您可以发送POST请求的一些方式,但我敢肯定,你不希望出现这种情况)

你必须使用对文件系统操作实际文件系统路径(如存储在文件中的东西;))

要做到这一点,你可能要使用$ _ SERVER [“DOCUMENT_ROOT”]变量,或者你可以做一招:

$my_dir = dirname(__FILE__);

变量$my_dir然后将包含目录名当前脚本中。

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