Forum Webscript.Ru

Программирование => PHP => Тема начата: FreeSpace от 19 Апреля 2003, 23:43:18

Название: Чудеса с include_path
Отправлено: FreeSpace от 19 Апреля 2003, 23:43:18
У меня такой вот вопросик по инклюдам (и рекваерам соответственно ;)):
Есть вот такик вот файлики:

index.php
GLOBALS/global.php
GLOBALS/config.php
GLOBALS/functions.php


Файл index.php:

require_once("GLOBALS/global.php");
bla-bla-bla...
?>


Файл GLOBALS/global.php:

require_once("config.php");
require_once("functions.php");
?>


Так вот, когда скрипт запускаю на своём компьютере (Apache/1.3.27 (Win32) PHP/4.3.0) всё работает отлично, но когда закачиваю на хостинг (*никсовый), начинает ругаться в global.php мол не могу реквайрить, нету таких файлов.
Немного помучался с include_path, сейчас в global.php добавил такие строчки:

$include_path = ".;g:/www/GLOBALS/";
//$include_path =".:/virt/homes/mysitename/htdocs/GLOBALS/";
//$include_path = ".:/var/htdocs/mysitename/GLOBALS/";
ini_set("include_path", $include_path);

Но как по мне, способ довольно кривой, вот я и хочу узнать нормальный.
Кстати, у меня по дефолту include_path = ".", а у хостинга include_path = "";
Подскажите нормальное решение, если оно существует.

=================================

Уже после того, как я это дописал (ещё в оффлайне), проверил на хостинге ещё пару фич:
-Установка include_path через .htaccess (php_value include_path ".:/var/htdocs/mysitename/GLOBALS/")не работает (никаких ошибок, но и никакого эффекта). Не знаю, в чем причина. Скорее всего в хостинге, потому что на локальном сервере работает отлично.
-Если рядом с index.php создать файл phpinfo.php (с понятным содержанием :)), то видно, что как-бы в директории / (в корне) include_path=".:/usr/local/lib/php", а в директории GLOBALS - include_path="". При этом никаких других файлов .htaccess, переназначающих инклюд_паз, замечено не было.
Ну не чудеса?
Название: Чудеса с include_path
Отправлено: Макс от 20 Апреля 2003, 12:43:55
а хостер разрешает переопределять настройки php через .htaccess ?
Название: Чудеса с include_path
Отправлено: FreeSpace от 20 Апреля 2003, 13:58:13
С хостером не общался, потому что хостинг фактически не мой, но платный.
Поэтому на счет настроек php через .htaccess я не уверен, но когда поставил

CharsetDisable On
CharsetRecodeMultipartForms Off

то картинки стали загружаться отлично.
Да, кстати, инфа по хостингу:

[b]System:[/b] FreeBSD ferrari.rql.net.ua 4.4-RELEASE FreeBSD 4.4-RELEASE #0: Tue Oct 30 12:33:35 EET 2001_____shark@ferrari2.rql.net.ua:/usr/src/sys/compile/MONITOR__i386
[b]SERVER_SOFTWARE:[/b] Apache/1.3.22 (Unix) PHP/4.2.1 PHP/3.0.18 AuthMySQL/2.20 rus/PL30.9
[b]Server API:[/b] CGI

Если что забыл - скажите, я добавлю.
Могу вообще линк на phpinfo.php дать... просто надоело уже решать такие задачи через задницу (простите)...
Название: Чудеса с include_path
Отправлено: Макс от 20 Апреля 2003, 14:51:16
цитата из мануала:
Цитировать
When using PHP as an Apache module, you can also change the configuration settings using directives in Apache configuration files (e.g. httpd.conf) and .htaccess files (You will need "AllowOverride Options" or "AllowOverride All" privileges)

а у тебя cgi-сборка
Название: Чудеса с include_path
Отправлено: FreeSpace от 20 Апреля 2003, 15:01:06
Так-с, тут причина ясна, спасибо!
Но есть ещё много вопросов, типа
Цитировать

Если рядом с index.php создать файл phpinfo.php (с понятным содержанием :)), то видно, что как-бы в директории / (в корне) include_path=".:/usr/local/lib/php", а в директории GLOBALS - include_path="".


И вообще, получается для меня единственный способ - это задавать include_path ini_set\'ом в global.php? :(
Название: Чудеса с include_path
Отправлено: MrGreeN от 22 Апреля 2003, 17:23:19
Кстати тоже про инклуды...
У Пирамидина написано (include()+URL)-------
Windows-версия PHP в настоящее время не поддерживает доступ к удалённым файлам с помощью этой функции, даже если allow_url_fopen включена.
А чего делать, если необходимо инклудить скрипт с другого сервака?
Название: Чудеса с include_path
Отправлено: FreeSpace от 22 Апреля 2003, 19:18:51
ИМХО самый простой способ - скачать его себе, записать во временный файл и его (временный файл) инклюдить. Но тут есть проблемы типа "инклюдинг инклюдов" со вложенными инклюдами и привязкой к путям (временный файл должен лежать строго в определенном месте, например в месте выполнения вызывающего его скрипта, а это бывает проблематично...).
[off]Интересно, а как пхп вообще работает с вложенными инклюдами у удаленных файлов?[/off]
Можно попробовать пропарсить скаченный файл регекспами, но по-моему это уже извращение.
Ещё можно его просто eval()\'нуть...
Название: Чудеса с include_path
Отправлено: Макс от 22 Апреля 2003, 19:57:04
FreeSpace
Цитировать
то задавать include_path ini_set\'ом в global.php?
вероятно да

MrGreeN
тебе именно php-скрипт инклюдить или простой ХТМЛ ?
Название: Чудеса с include_path
Отправлено: Меняздесьдавнонет от 23 Апреля 2003, 10:42:23
если у тебя все равно все руками прописывается, то и писал бы
require_once($include_path."functions.php");
и не парился.
Название: Чудеса с include_path
Отправлено: MrGreeN от 23 Апреля 2003, 13:18:20
Макс
PHP
RomikChef
тогда получиться проблемка как у
FreeSpace\'a, но с приколом поприкольнее...
$include_path = ".;path";
ini_set("include_path", $include_path);
 require_once($include_path."инклуд.php");
?>
Выводит-----
Parse error: parse error, unexpected T_STRING in путь_к_странице_из_которой_вызываю on line там_где_ini_set

P.S. Да попрописывал бы вручную так код в этом инклуде меняется постоянно (типа горячие новости, да есшо и статистика)...Вот и геморой на одно место...
Название: Чудеса с include_path
Отправлено: MrGreeN от 23 Апреля 2003, 13:21:18
FreeSpace
На счёт вложеныхи нклулов----
Не знаю как у кого, но у меня не работает...
Название: Чудеса с include_path
Отправлено: MrGreeN от 23 Апреля 2003, 13:57:59
С ini_set разобрался
Но вопрос остаётся прежний (насчёт инклуда с удалённой машины), не видно этого файлика и хоть об дорогу бейся...
Конект пытаюсь сделать через прокси причём и мой сервак и удалённый лежат в одной локальной сетке...
Название: Чудеса с include_path
Отправлено: FreeSpace от 23 Апреля 2003, 19:41:03
Ладно люди, всем спасибо!
Действительно, проблема у меня не настолько значительная и ручками можно прописать абсолютный путь на хостинге, но просто по-моему это не очень удобно.

MrGreeN
Вложеные инклюды в локальных скриптах должны работать нормально!
Ну а на удаленных - вообще не тестил, но похоже, что там они не работают.
Если очень надо, как я уже говорил, можешь попытаться пропарсить регекспами и скачивать все инклюдящиеся файлы к себе... геморрой, однако...
Название: Чудеса с include_path
Отправлено: Меняздесьдавнонет от 23 Апреля 2003, 19:51:02
FreeSpace
ручками прописать - это ОЧЕНЬ удобно.
если учесть, что часто в РНР доступна переменная $DOCUMENT_ROOT, то сделать можно все полным автоматом.
Было бы жлание - сделать, а не языком чесать
Название: Чудеса с include_path
Отправлено: FreeSpace от 23 Апреля 2003, 20:06:21
Про $DOCUMENT_ROOT - признаю, моя вина, не обратил внимания.
Но ещё не факт, что сайт относительно $DOCUMENT_ROOT\'a у меня и у хостинга будет в одном и том же месте лежать. Но это уже совсем другая тема...
Ещё раз спасибо за помощь!

[off]
А грубить было не обязательно... Неужели для тебя, RomikChef, каждый, кто задает вопрос на этом форуме, либо "продвинутый" ламер, либо лентяй? Это я про "было бы желание..." и про твоё пренебрежительное отношение к вопрошающим практически в каждом топике...
[/off]
Название: Чудеса с include_path
Отправлено: Меняздесьдавнонет от 24 Апреля 2003, 14:00:37
Цитировать
ещё не факт, что сайт относительно $DOCUMENT_ROOT\'a у меня и у хостинга будет в одном и том же месте

Ну, от кривых рук админа никто не застрахован.
и неправильный документ рут, который ОБЯЗАН вести в корень сайта - еще не самая большая проблема в этом случае.

опять же - написать его руками, и выставлять его автоматом в зависимости от окружения, или руками один раз при сетапе сайта - все равно ведь надо многие переменные прописывать - НЕ ПРОБЛЕМА.

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