Три недели назад я написал здесь документ, который прекрасно работал, и до сегодняшнего дня в нем использовалось пять переменных PHP.
Вот вот документ:
echo <<<itemDetails_HEREDOC
<img src="$sitePath/images/logo-landing2.png" />
<form action="$thisFilename" method="post" name="arti-form" id="arti-formId">
<label style="display: inline-block; width: 140px">OWNER NAME:</label><input type="text" style="width: 300px"
id="ownerId" name="ownerName" readonly="readonly" value="$theLoggedInUser" /><br />
<label style="display: inline-block; width: 140px">THE ITEM:</label><input type="text" style="width: 300px"
readonly="readonly" id="itemNameId" name="itemName" value="$itemName" /><br />
<label style="display: inline-block; width: 140px">LINK:</label><input type="text" style="width: 300px"
readonly="readonly" id="itemLinkId" name="link" value="$theLinkID" /><br />
<label style="display: inline-block; width: 140px">ERA:</label><input type="text" style="width: 70px"
readonly="readonly" id="itemEraId" name="itemEra" value="$itemEra" /><br />
itemDetails_HEREDOC;
В приведенном выше документе есть шесть (6) переменных PHP. Первый ($sitePath) не работает. Я только сегодня добавил.
По какой-то причине сервер не заменяет '$sitePath' (первая переменная PHP в моем heredoc) правильно, потому что, когда браузер получает указанную выше страницу, генерируется ошибка:
Notice: Undefined variable: sitePath in C:\xampp\htdocs\Arti-facks\showItem.php on line 221
Вот пять переменных PHP, которые были в этом документе и отлично работали в течение трех недель — они правильно заменяются своими значениями до HTML-кода, отправленного в мой браузер:
- $thisFilename
- $ theLoggedInUser
- $itemName
- $theLinkID
- $itemEra
Откуда мне знать, что вышеуказанные переменные PHP правильно разрешаются на сервере, а связанные с ними значения помещаются в heredoc, а затем отправляются в браузер?
Просто — я делаю «просмотр исходного кода страницы» и вместо того, чтобы видеть «$ thisFilename» или «$ itemName» и т. д. в HTML-коде, отправленном сервером, — вместо этого я вижу их связанные значения в приведенном выше HTML-содержимом heredoc. .
Например, исходный код страницы показывает мне, что «$thisFilename» в этом документе правильно преобразован в «showItem.php».
Мой '$sitePath' объявлен в глобальном включаемом файле с именем "globals.php", и в этом файле $sitePath объявлен следующим образом:
$sitePath = "http://localhost/Arti-facks";
И в верхней части showItem.php у меня в течение последних трех недель был этот оператор include для извлечения globals.php:
require_once 'globals.php'; // Variables and statics used throughout
Итак, сегодня я добавил объявление $sitePath (выше) внутри globals.php.
Чтобы доказать, что showItem.php может «видеть» недавно объявленный $sitePath, который я добавил в globals.php, я повторяю эту переменную — действительно, showItem.php на 100% способен «видеть» мой недавно объявленный $ путь к сайту.
И все же -- несмотря на это -- и несмотря на три недели использования приведенного выше документа с его пятью другими PHP-переменными -- документ не получение $sitePath.
Когда я «просматриваю исходный код страницы», вот что я вижу для строки $sitePath в приведенном выше документе:
<img src="/images/logo-landing2.png" />
Вы можете видеть, что часть $sitePath перед файлом /images/logo-landing2.png пуста или отсутствует.
Почему я в течение трех недель без проблем получал пять успешно разрешенных переменных PHP в приведенном выше документе, а сегодня я добавляю шестую переменную PHP, и это как
«Боже мой, ваша квота на PHP-переменные в вашем heredoc была исчерпана до 5. И теперь мы видим, что вы пытаетесь использовать шестую PHP-переменную — о чем вы думали».
$sitePath
выходит за рамки. - person Michael Berkowski   schedule 08.03.2012