2012-05-29 5 views
1

Я передал веб-систему PHP от хостинг-провайдера Windows к сервису хостинга на базе Linux.PHP require_once не работает в Linux

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

Я пробовал оба ниже:

Попробуйте 1

require_once($_SERVER['DOCUMENT_ROOT'] . '\library\data\Dbec.php') or die("could not load file"); 

Попробуйте 2

require_once(dirname(__FILE__) . '/library/data/Dbec.php') or die("could not load file"); 

В обоих случаях текст в умереть скобка не отображается, и страница остается пустой. Сценарий, который требует вышеуказанные файлы в «/library/membership/theScript.php»

На основании показаний я сделал на линии до сих пор, может быть, это связано с изменением include_path в файле php.ini или писать пути по-другому.

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

+0

Можете ли вы взглянуть на журналы сервера? – Ansari

+0

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

+0

Ну, вторая не будет работать, потому что 'dirname (__ FILE __)' будет '/ path/to/document/root/library/membership' ... – prodigitalson

ответ

1

Проверьте свой журнал ошибок, чтобы убедиться, что что-то явно не так. Также попробуйте установить error_reporting = E_ALL и убедитесь, что в вашем php.ini установлены display_errors = On и log_errors = On.

Ваш файл вы пытаетесь включить в «/library/membership/theScript.php», попробуйте сделать:

require_once '../data/Dbec.php'; 
+0

** Неустранимая ошибка: require_once() [function.require]: Не удалось выполнить открытие '/home2/myaccount/public_html/mywebsite/library/membership/library/data/Dbec.php' (include_path = '.:/Usr/lib64/php:/usr/lib/php ') ** Имеет ли смысл include_path? – Nick

+0

Включение пути здесь не имеет значения. Если это требует выше, не работает, верните еще один уровень: 'require_once '../../ data/Dbec.php';' – David

0

Это не будет делать то, что вы хотите. Все после require_once интерпретируется как условное. Он работает ($_SERVER['DOCUMENT_ROOT'] . '\library\data\Dbec.php') or die("could not load file") и возвращается 1, а затем работает require_once 1.

Чтобы заставить его работать, как вы ожидаете, вам потребуется дополнительный набор скобок:

(require_once($_SERVER['DOCUMENT_ROOT'] . '\library\data\Dbec.php')) or die("could not load file"); 

Хотя я не уверен, die() никогда не дозвонились. Это зависит от вас, чтобы понять.

См. this related bug report, который был «не ошибкой».

+0

спасибо ... ну, я не очень доверял, что 'die (die) 'будет когда-либо выполняться. Основная проблема остается в том, что скрипт останавливается. – Nick

+0

Вы пытались включить отчет об ошибках, чтобы узнать, какова фактическая ошибка, которую вы получаете? Чистая белая страница - это классический признак скрытой фатальной ошибки. – animuson

+0

Спасибо, теперь я включил их. – Nick

0

Также проблема может быть в разрешениях файлов и имени файла. Файловая система Windows - caseinsesetive, но linux - нет. Таким образом, вы должны проверить имя файла и тот факт, что пользователь, выполняющий этот скрипт, прочитал прочтение файла, который вы пытаетесь включить, с require_once