PHP включает в себя вызов других файлов - PullRequest
0 голосов
/ 25 июля 2010

Я понял, что снова и снова использую определенную функцию в своих файлах PHP, поэтому я взял функцию из всех них, поместил в отдельный файл PHP и включил туда, где мне это нужно.

Теперь, когда я делаю обновления для функции, все файлы, которые ее используют, обновляются.Отлично.

Теперь есть только одна проблема: сама функция использует относительные URL, и когда вы включаете PHP, файлы относятся к вызывающему PHP, а не к каталогу PHP, входящему в комплект.Я знаю, что быстрый и грязный ответ - использовать абсолютные ссылки, но как я могу получить включенный PHP, чтобы ссылаться на себя, а не на PHP, который его вызвал.

Пример:

index.php включает файл с именем create_table.php ..... create_table.php перекликается с CSS и javascript в index.php.CSS и javascript находятся в том же каталоге, что и create_table.php, но при использовании src = "javascript.js" он хочет найти javascript.js, где расположен index.php, а не там, где находится create_table.php.

Редактировать: как работает структура

/ includes / create_table.php
/include/style.css
/include/javascript.js
/ ​​test / dir / 1/2/3/index.php

Поэтому, когда я пытаюсь использовать src = "javascript.js" вместо поиска / includes / javascript.js , он пытается найти / тест / реж / 1/2/3 / javascript.js * ** 1023 одна тысяча двадцать две *

Ответы [ 4 ]

2 голосов
/ 25 июля 2010

Использование абсолютных ссылок - это не "быстрое и грязное", а абсолютное необходимое.
И ваша проблема имеет очень мало общего с PHP.Это проблема HTML.Не PHP вызывает ваш CSS-файл, а браузер , после прочтения ссылки из HTML кода.

Единственная цель абсолютного пути - решить вашу проблему -найти конкретный файл из любого местоположения.
Конечно, это должен быть только путь, а не URI.Все ссылки HTML могут быть (и должны быть) сокращены до частей пути.

вместо поиска / includes / javascript.js

Bingo!
Поэтому просто скажите ему, чтобы он искал именно этот адресабсолютный - /includes/javascript.js

0 голосов
/ 25 июля 2010

Итак, вы говорите, что есть файл, который всегда требуется. В этом файле есть функция, которая сравнивает __FILE__ с SCRIPT_FILENAME. Так, например, вы знаете, includes/create_table.php путь к вашему корневому каталогу ../, поэтому он имеет разность папок 1, если путь был includes/foo/create_table.php, путь к корню будет ../../ так что разница 2 и т. д.

$dif_to_root=1;

for
(
$i=0,$path='';
$i<($dif_to_root-(count(explode('/',__FILE__))-count(explode('/',getenv('SCRIPT_FILENAME')))));
$i++
)$path.='../';

Теперь просто укажите в своем коде src="$path.includes/style.css"

0 голосов
/ 25 июля 2010

Вероятно, есть лучший способ обработать все, что вы пытаетесь сделать, вместо динамического запроса файлов из функций PHP.

По крайней мере, абсолютные пути являются ключевыми и, как правило, абсолютными от root, например: require_once ( "/ Библиотека / fileOne.php");

not: require_once ("lib / fileOne.php");

0 голосов
/ 25 июля 2010

Я думаю, вам в конечном итоге придется использовать абсолютные пути. Вопрос в том, как получить эти абсолютные пути без жесткого кодирования ...

Вы можете использовать магическую константу __FILE__, чтобы получить абсолютный путь к текущему сценарию (например, create_table.php), а затем сделать что-то вроде:

$filename = realpath(dirname(__FILE__).'/../../css/mystyles.css');

Чтобы получить абсолютный путь к файлу, который вы знаете как относительный к текущему сценарию. (т.е. вверх по двум каталогам и вниз в css /)

Или вы можете начать другой путь и использовать $_SERVER['DOCUMENT_ROOT']. Предполагая, что вы знаете все пути относительно вашего webroot. Это был бы мой предпочтительный путь.


РЕДАКТИРОВАТЬ: Я думаю, вы можете в значительной степени игнорировать вышесказанное! Я предполагал (до вашего редактирования), что вы буквально читали свои файлы CSS и JavaScript на стороне сервера и добавляли содержимое в index.php - наверное, нет!

Для повторного ответа ... Я бы никогда не использовал бы относительные пути URL для клиентского CSS и JavaScript из-за именно этой проблемы. Некоторые люди всегда используют абсолютные URL, лично я предпочитаю относящиеся к корню URL. Если вы генерируете этот URL на стороне сервера, это не имеет большого значения.

Корневой URL: /includes/style.css

Что, по вашему мнению, не так с этим? Я бы сказал, что это предпочтительнее.

...