我正在构建一个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;
}
答案 0 :(得分:4)
不要将URL用于文件系统功能。这将使他们做一个HTTP请求,而不是从文件系统加载文件。
此外,如果您使用/absolute
路径,那么它将引用文件系统根目录,而不是您的网络服务器document root。 PHP文件系统函数不能在虚拟路径名上运行,而是在真实系统文件结构上运行。
但您可以使用:
$pageDir = "/edit/pages/";
readfile("$_SERVER[DOCUMENT_ROOT]/$pageDir/$page");
这可能就是你想要的。
其他警告:尽管有模因,但全球变量没有任何问题。但是,您不应该将共享范围与其中的几十个一起淹没。而是为文件夹定义类似$dir["page"]
的数组。或define()
常数。
答案 1 :(得分:1)
您在此代码段中尝试做的是
使用fopen打开一个网址(这适用于php,但您的提供商可能会禁用url_fopen,请参阅http://phpsec.org/projects/phpsecinfo/tests/allow_url_fopen.html)
写点东西。
由于它是一个HTTP URL,你不能写任何东西(你可以用某种方式发送POST请求,但我确定你不希望这样)
您必须使用实际的文件系统路径进行文件系统操作(比如在文件中存储内容;))
为此你可能想要使用$ _SERVER ['DOCUMENT_ROOT']变量,或者你可以做一个技巧:
$my_dir = dirname(__FILE__);
变量$my_dir
将包含当前脚本所在的目录名称。
另外,你可能想要使用像MySQL或MongoDB这样的数据库(非常非常不同的东西)来存储内容。如果你不知道这些,你应该阅读一些例子,它们很棒。 ;)