Проблема возникла при перезаливке сайта на новый хост, изначально подключение скрипта делал через require, но оказалось что на новом хосте ( с корневым каталогом htdocs, если это конечно имеет значение) подключение проходит только через include.
Конечно можно заменить на сайте ВСЕ require на include, но возможно возникнут "баги", которые не смогу найти сразу, протестировать весь сайт сложно , проделана большая работа и есть куча закоулков, о которых уже наверняка забыл.
Хотелось бы узнать в чём возможные причины, м.б. ктонибудь сталкивался, поделитесь опытом, заранее спасибо!
Спустя 10 часов, 21 минута, 34 секунды (20.08.2010 - 08:22) linker написал(а):
А что, на require() PHP грубо ругается?
Спустя 17 минут, 23 секунды (20.08.2010 - 08:39) Basili4 написал(а):
Demjan
Отличие от require() от include() тоько в том что 1 при возникновении ошибки прекращает работу а второй нет.
Отсюда можно сделать вывод что при замене ты ничего не подлключаешь а просто игнорируешь ошибку. Это легко проверить вот так объявить в подключаемом файле константу QWREGFFDFCCCBCSZVBS или любую другую с такимже гарантированно уникальным именем
и в файле к которому ты подключаешь файл проверить isset ом существование этой константы.
если она сущ то все ок. если нет правь пути. Но дело в путях Я гарантирую это
Отличие от require() от include() тоько в том что 1 при возникновении ошибки прекращает работу а второй нет.
Отсюда можно сделать вывод что при замене ты ничего не подлключаешь а просто игнорируешь ошибку. Это легко проверить вот так объявить в подключаемом файле константу QWREGFFDFCCCBCSZVBS или любую другую с такимже гарантированно уникальным именем
и в файле к которому ты подключаешь файл проверить isset ом существование этой константы.
если она сущ то все ок. если нет правь пути. Но дело в путях Я гарантирую это
Спустя 2 дня, 2 часа, 4 минуты, 35 секунд (22.08.2010 - 10:44) Demjan написал(а):
linker : А что, на require() PHP грубо ругается?
Basili4 : Отличие от require() от include() тоько в том что 1 при возникновении ошибки прекращает работу а второй нет.
Всё понятно, - в подключаемом скрипте гарантированно есть ошибка с обращением к БД MySQL, т.к. сайт сейчас перезаливаю и настраиваю на новом хосте, с require() показывается пустая страница, только значок графический в строке адреса говорит о том что какая-то часть страницы получена,никакой ругани и сообщений о ошибке, а с include() отображается текст на странице, большое спасибо за помощь!
Basili4 : Отличие от require() от include() тоько в том что 1 при возникновении ошибки прекращает работу а второй нет.
Всё понятно, - в подключаемом скрипте гарантированно есть ошибка с обращением к БД MySQL, т.к. сайт сейчас перезаливаю и настраиваю на новом хосте, с require() показывается пустая страница, только значок графический в строке адреса говорит о том что какая-то часть страницы получена,никакой ругани и сообщений о ошибке, а с include() отображается текст на странице, большое спасибо за помощь!
Спустя 41 минута, 9 секунд (22.08.2010 - 11:25) Demjan написал(а):
Нет, поторопился я с выводом, скрипт действительно не подключается. Отпишу подробнее: этот подключаемый скрипт по идее должен находится выше корня сайта для того чтобы исключить запуск скриптов напрямую, не со страниц сайта - там выполняется проверка авторизации, обработка данных баз MySQL и тд, на прошлом хосте всё работало нормально, на этом действительно скрипт не подключается, пути проверил, подключаю в виде ../od/skript.php - это подключение из корня папки , ошибки быть не может, только если какието синтаксические варианты...((, хостинг byethost18.com, помогите !
Спустя 4 часа, 34 минуты, 45 секунд (22.08.2010 - 15:59) Alex VoDevil написал(а):
Ну может на старом хостинге директива open_basedir вас не ограничивала, а на новом по соображениям безопасности она включена. Вообще ложить скрипты выше DocumentRoot не правильно. Если хотите чтоб скрипт нельзя было вызвать на прямую то делайте проверку:
if(!defined('IN_SITE'))
{
die('Хацкер детектед!');
}
а перед подключением этого скрипта определяйте константу
define('IN_SITE', true);
Или создайте для таких файлов специальную папку, положите в нее файл .htaccess содержащий строку dany from all и файлы из этой папки нельзя будет запросить браузером напрямую.
if(!defined('IN_SITE'))
{
die('Хацкер детектед!');
}
а перед подключением этого скрипта определяйте константу
define('IN_SITE', true);
Или создайте для таких файлов специальную папку, положите в нее файл .htaccess содержащий строку dany from all и файлы из этой папки нельзя будет запросить браузером напрямую.
Спустя 7 минут, 48 секунд (22.08.2010 - 16:07) Alex VoDevil написал(а):
Ну если уж совсем нет возможности править код - попробуйте уговорить администрацию нового хоста чтоб поправили вам open_basedir
Спустя 16 часов, 25 минут, 50 секунд (23.08.2010 - 08:33) linker написал(а):
Цитата |
Вообще |
Очень даже правильно, например, где вы будете располагать скрипты, которые должны по крону запускаться? Там же где и DocumentRoot? Ерунда. У данного хостинга, скорее всего включен safe_mode и конкретно прописан safe_mode_include_dir. Если мне не изменяет память, open_basedir распространяется на файлы открываемые по fopen() и т.п.
Спустя 6 часов, 50 минут, 28 секунд (23.08.2010 - 15:24) Alex VoDevil написал(а):
Ну про крон мы ж тут не говорим... Хотя с ходу не могу придумать ни одной причины по которой нельзя было бы класть кроновские скрипты в DocumentRoot прикрыв их .htaccess. А на счет open_basedir могу ошибаться, почему то мне помнится что она и include'ы ограничивает.
Спустя 5 минут, 33 секунды (23.08.2010 - 15:29) linker написал(а):
Правильно выбранный хостинг, избавит от многих проблем.