Forum Webscript.Ru
Программирование => PHP => Тема начата: 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, переназначающих инклюд_паз, замечено не было.
Ну не чудеса?
-
а хостер разрешает переопределять настройки php через .htaccess ?
-
С хостером не общался, потому что хостинг фактически не мой, но платный.
Поэтому на счет настроек 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 дать... просто надоело уже решать такие задачи через задницу (простите)...
-
цитата из мануала:
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-сборка
-
Так-с, тут причина ясна, спасибо!
Но есть ещё много вопросов, типа
Если рядом с index.php создать файл phpinfo.php (с понятным содержанием :)), то видно, что как-бы в директории / (в корне) include_path=".:/usr/local/lib/php", а в директории GLOBALS - include_path="".
И вообще, получается для меня единственный способ - это задавать include_path ini_set\'ом в global.php? :(
-
Кстати тоже про инклуды...
У Пирамидина написано (include()+URL)-------
Windows-версия PHP в настоящее время не поддерживает доступ к удалённым файлам с помощью этой функции, даже если allow_url_fopen включена.
А чего делать, если необходимо инклудить скрипт с другого сервака?
-
ИМХО самый простой способ - скачать его себе, записать во временный файл и его (временный файл) инклюдить. Но тут есть проблемы типа "инклюдинг инклюдов" со вложенными инклюдами и привязкой к путям (временный файл должен лежать строго в определенном месте, например в месте выполнения вызывающего его скрипта, а это бывает проблематично...).
[off]Интересно, а как пхп вообще работает с вложенными инклюдами у удаленных файлов?[/off]
Можно попробовать пропарсить скаченный файл регекспами, но по-моему это уже извращение.
Ещё можно его просто eval()\'нуть...
-
FreeSpace
то задавать include_path ini_set\'ом в global.php?
вероятно да
MrGreeN
тебе именно php-скрипт инклюдить или простой ХТМЛ ?
-
если у тебя все равно все руками прописывается, то и писал бы
require_once($include_path."functions.php");
и не парился.
-
Макс
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. Да попрописывал бы вручную так код в этом инклуде меняется постоянно (типа горячие новости, да есшо и статистика)...Вот и геморой на одно место...
-
FreeSpace
На счёт вложеныхи нклулов----
Не знаю как у кого, но у меня не работает...
-
С ini_set разобрался
Но вопрос остаётся прежний (насчёт инклуда с удалённой машины), не видно этого файлика и хоть об дорогу бейся...
Конект пытаюсь сделать через прокси причём и мой сервак и удалённый лежат в одной локальной сетке...
-
Ладно люди, всем спасибо!
Действительно, проблема у меня не настолько значительная и ручками можно прописать абсолютный путь на хостинге, но просто по-моему это не очень удобно.
MrGreeN
Вложеные инклюды в локальных скриптах должны работать нормально!
Ну а на удаленных - вообще не тестил, но похоже, что там они не работают.
Если очень надо, как я уже говорил, можешь попытаться пропарсить регекспами и скачивать все инклюдящиеся файлы к себе... геморрой, однако...
-
FreeSpace
ручками прописать - это ОЧЕНЬ удобно.
если учесть, что часто в РНР доступна переменная $DOCUMENT_ROOT, то сделать можно все полным автоматом.
Было бы жлание - сделать, а не языком чесать
-
Про $DOCUMENT_ROOT - признаю, моя вина, не обратил внимания.
Но ещё не факт, что сайт относительно $DOCUMENT_ROOT\'a у меня и у хостинга будет в одном и том же месте лежать. Но это уже совсем другая тема...
Ещё раз спасибо за помощь!
[off]
А грубить было не обязательно... Неужели для тебя, RomikChef, каждый, кто задает вопрос на этом форуме, либо "продвинутый" ламер, либо лентяй? Это я про "было бы желание..." и про твоё пренебрежительное отношение к вопрошающим практически в каждом топике...
[/off]
-
ещё не факт, что сайт относительно $DOCUMENT_ROOT\'a у меня и у хостинга будет в одном и том же месте
Ну, от кривых рук админа никто не застрахован.
и неправильный документ рут, который ОБЯЗАН вести в корень сайта - еще не самая большая проблема в этом случае.
опять же - написать его руками, и выставлять его автоматом в зависимости от окружения, или руками один раз при сетапе сайта - все равно ведь надо многие переменные прописывать - НЕ ПРОБЛЕМА.
вот это я и имел в виду, когда говорил про чесание языком.
вот и сейчас ты оправдываешься и морализуешь, вместо того, чтобы взять, да сделать.
понятное дело, что поиск по пути происходит дольше, чем поиск по абсолютному имени.
сделать с абсолютным - проще и надежнее.
я не понимаю - о чем тут вообще разговор идет.