escape — PHP include_path получает \ -escape обработанный & quot; позже & quot; в Windows

Я знаю, как это исправить с помощью предотвращения грубой силы (я думаю), но мне интересно, сталкивался ли кто-нибудь с этим и / или предлагал какие-нибудь хорошие идеи для выявления истинной причины.

Я на Windows XP с php 5.4.31, Я установил мой include_path так, чтобы с xdebug Я вижу результат get_include_path() быть:

C:/xampp1826/htdocs/OSH2/application/../library;C:\xampp1826\htdocs\OSH2\library;.;C:\xampp1826\php\PEAR

Это ZF1 приложение, которое использует Zend автозагрузчик классов, и вот что include_path() возвращается, поскольку различные вещи автоматически загружаются. Затем «внезапно», непосредственно перед попыткой автозагрузки одного конкретного класса, для которого он правильно вычислил имя файла относительно include_path, Я могу увидеть это get_include_path() возвращает эту строку с каждой последовательностью \ xa, преобразованной в перевод строки (ascii decimal 10), вызывая автозагрузчик include_once терпеть неудачу.

Я провел исчерпывающий поиск дополнительных звонков set_include_path() (включая все php библиотеки я использую), а есть только пара. И я установил на них контрольные точки и показал результат get_include_path() после каждого. Делая это, я не смог найти php код, который действительно вносит изменения! Я полагаю, что я мог пропустить место, и я еще раз проверим все после некоторого сна, но, как сейчас обстоят дела, это выглядит как ошибка в php, На самом деле, когда правильные символы находятся в include_path строка, я даже не представляю, как php код может легко / случайно выполнить обработку escape. И хотя я не могу легко переключиться обратно сейчас, у меня не было этой проблемы, используя php 5.3.1 на что я на 99% уверен, был точно такой же исходный код. Были ли какие-то изменения в php 5.4 что может объяснить это?

Кто-нибудь еще видел что-то подобное, и если да, то как вы обнаружили первопричину?

Поскольку php на windows совершенно рад принимать прямые косые черты в именах путей, а не обратные косые черты, моя стратегия предотвращения перебора заключается в том, чтобы гарантировать, что никакие обратные косые черты никогда не попадут в путь включения, с помощью кода следующего содержания:

define('APPLICATION_PATH', str_replace('\\', '/', realpath(str_replace('\\', '/', realpath(dirname(__FILE__) . '/../application')))));

0

Решение

Я не знаю правильной процедуры для этого, должен ли вопрос быть удален или помечен как-то иначе, чтобы люди не тратили на него больше времени …

Но конкретная проблема, как я описал, похоже, была своего рода артефактом в комбинации с xdebug (php_xdebug-2.2.5-5.4-vc9.dll скачано с http://xdebug.org/download.php) а также Netbeans 7.4 что решил преобразовать \xa последовательность символов для символа перевода строки при отображении строки, возвращаемой get_include_path(), Фактически, это происходило только «иногда», поскольку повторяющиеся сеансы в отладчике отображали его по-разному в одной и той же точке кода.

Я пошел дальше и изменил код, чтобы принудительный путь включения использовал косые черты исключительно для устранения этой красной сельди. Но я все еще вижу ту же самую проблему, в той же самой точке кода, где вызов include_once() с действительным именем файла для действительного файла php, который существует и доступен для чтения при добавлении в первый каталог в include_path просто убивает мой сценарий без регистрации или сообщения об ошибке или предупреждении. Я опубликую другой вопрос с подробностями о том, что если он останется неразрешимым сейчас, когда я не гонюсь за красной сельдью. У меня плохое предчувствие php 5.4.31

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector