2013-05-16 3 views
0

Я просто наткнулся на (по крайней мере для меня) новое странное поведение путей при использовании php-функций с чистыми вызовами php или ajax.php-пути различаются между использованием ajax и использованием php

Если я использую только PHP путь в функции PHP, как:

require_once('wp-content/themes/xxx/tcpdf/tcpdf.php'); 

, но если я использую ту же самую функцию, с помощью AJAX вызова, путь должен быть таким, чтобы заставить его работать:

require_once('../tcpdf/tcpdf.php'); 

Не могли бы вы объяснить мне, почему это так? Большое спасибо!

+1

'Можете ли вы объяснить мне, почему это так?' Нет! Не зная намного больше о вашем коде –

+0

Является ли файл, содержащий «require_once ('../ tcpdf/tcpdf.php»); будучи «включенными» разными файлами в зависимости от типа вызова? И если да, то являются ли эти родительские файлы в разных каталогах? – user1020317

ответ

2

Причина, по которой вы получаете это поведение, состоит в том, что все входящие события происходят из корня wordpress install, поэтому вы говорите, что перед структурой файла несколько слоев, прежде чем перейти к файлу. Разрушая это, он делает это.

wp-content/ Go down one directory level from the file i'm in 
themes/  Then go down into the themes directory 
xxx/   Then go to the xxx directory 
tcpdf/  Then go to the tcpdf directory 
tcpdf.php This is the file you want 

Когда вы делаете второй включает вы находитесь в директории, которая разделяет родитель с wp-content/themes/xxx/tcpdf/ так, что вы говорите

../  Go up one directory level 
tcpdf/  Go into the tcpdf directory 
tcpdf.php This is the file you want 
+0

Да, я думаю, это и есть причина. Спасибо. – Sebsemillia

2

Я думаю, что, когда вы используете его без вызова AJAX, вы включаете его из другого файла, который может изменить ситуацию. Однако я рекомендую хранить корневой каталог приложения в константе (например, ROOT), а затем включать все, что связано с ROOT.

+0

Так я всегда это делал. Таким образом, файл всегда включается из одного и того же каталога независимо от того, куда вы направляетесь. – MatthewMcGovern

1

Переопределить путь включения к set_include_path (APP_ROOT). Таким образом, ALL includes/require будет относиться к корню приложения, который вы определите в константе APP_ROOT.

PHP обычно имеет текущий каталог, включающий путь, что может привести к таким проблемам, как у вас.

+0

@Downvoter, комментарий ума? –

Смежные вопросы