Глобальные переменные в файлах и папках в PHP - PullRequest
1 голос
/ 17 декабря 2011

Я строю 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 ]

4 голосов
/ 17 декабря 2011

Не используйте URL-адреса для функций файловой системы. Это заставит их выполнять HTTP-запрос, а не загружать файлы из файловой системы.

Также, если вы используете /absolute пути, то это будет относиться к корню файловой системы, а не к вашим веб-серверам корень документа . Функции файловой системы PHP работают не с именами виртуальных путей, а с реальной файловой структурой системы.

Однако вы можете использовать:

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

Это, вероятно, то, что вы хотите.

Другие предостережения: несмотря на мем, в глобальных переменных нет ничего плохого. Тем не менее, вы не должны забивать общую область десятками. Вместо этого определите массив как $dir["page"] для папок. Или define() константы.

1 голос
/ 17 декабря 2011

В этом фрагменте вы пытаетесь сделать

Поскольку это URL-адрес HTTP, вы ничего не можете в него записать (вы можете отправить POST-запрос каким-либо образом, но я уверен, что вы этого не хотите)

Вы должны использовать фактические пути файловой системы для операций файловой системы (например, сохранение чего-либо в файле;))

Чтобы сделать это, вы можете использовать переменную $ _SERVER ['DOCUMENT_ROOT'], или вы можете сделать трюк:

$my_dir = dirname(__FILE__);

Переменная $my_dir будет содержать имя каталога, в котором находится текущий скрипт.

Кроме того, вы можете использовать некоторые базы данных, такие как MySQL или MongoDB (очень, очень разные вещи) для хранения содержимого. Если вы этого не знаете, вам следует прочитать несколько примеров, они великолепны. ;)

...