2014-12-30 4 views
1

Я разработал веб-сайт, который отлично работает на Linux, но когда я пытаюсь запустить его на рабочем сервере Windows, скрипт php не работает. Все это в коде после этой строки ничего не делает:PHP-сайт работает на linux, но не на окнах

require_once __DIR__ . DIRECTORY_SEPARATOR . 'lib' . DIRECTORY_SEPARATOR . 'returner.php'; 

Я думал, что proble может быть связан с путями файлов, так что я изменил код, чтобы использовать DIR и DIRECTORY_SEPARATOR, чтобы избежать любые проблемы с путями. Я тестировал, работал ли путь с использованием file_exists и файл находился, но мой код все еще ничего не делает, когда я пытаюсь запустить его на сервере Windows.

/index.php включает /lib/returner.php

/lib/returner.php включает /lib/login.php

Код:

index.php:

... 
div class="container" role="main"> 
    <?php 
     require_once __DIR__ . DIRECTORY_SEPARATOR . 'lib' . DIRECTORY_SEPARATOR . 'returner.php'; 
     echo '<div class="page-header">'; 
     echo '<h1>' . returnSede() . '</h1>'; 
     ... 

returner.php:

... 
<?php 
    require_once __DIR__ . DIRECTORY_SEPARATOR . 'login.php'; 
    $sede = $_POST['selectSede']; 
... 
+0

окна имеют разделитель dir separator '\' и linux '/' – Eugen

+5

Включите отчет об ошибках и прочитайте ваши журналы. – Chris

+3

@Eugen php переводит их, если необходимо. Обычно я просто использую '/', и он отлично работает. Кроме того, OP использует предопределенный постоянный DIRECTORY_SEPARATOR, который должен учитывать это. –

ответ

0

Кажется, что ваш код должен работать.

На всякий случай, этот answer на переполнение стека может пролить некоторый свет. Я как-то подытожу:

Если вас беспокоит только Unix-based или Windows, жесткая кодировка будет работать с косой чертой (C: /test.txt).

Там могут быть расхождения из-за того, что тип цитаты, которые вы используете:

  • , например, "\123" переводит "Q"
  • для Windows требует "C:\\test.txt" или 'C:\test.txt' или "C:/test.txt"

Другой answer на тот же вопрос предлагает сделать что-то вроде этого:

define('DS','/'); 
define('BASE_ROOT',str_replace('\\',DS,dirname(__FILE__))); 
require_once BASE_ROOT . DS . 'includes' . DS . 'init.php'; 
+0

с использованием \ __ DIR__ имеет тот же результат, что и при использовании dirname (\ _ \ _ FILE__), и мой код не использует никаких нормальных или обратных косых черт, я использую DIRECTORY_SEPARATOR, чтобы избежать беспорядка с/и \ в зависимости от платформы. – efredz

+0

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

Смежные вопросы