За последние 24 часа нас посетили 17797 программистов и 1678 роботов. Сейчас ищут 897 программистов ...

Как выбрать правильный путь для скрипта?

Тема в разделе "PHP для новичков", создана пользователем SV4, 28 сен 2011.

  1. SV4

    SV4 Активный пользователь

    С нами с:
    24 сен 2011
    Сообщения:
    59
    Симпатии:
    0
    Адрес:
    Красноярск
    Всем доброго времени суток!
    У меня проблема следующего характера:

    Имеется некоторый скрипт РНР, на который со всех страниц разной вложенности подключается функция include
    Раньше использовал подключение в страницах, такого вида:

    В одной странице так

    include "http://мой сайт/какая-то папка/сам скрипт.php";


    В другой так

    include "http://мой сайт/какая-то папка/какая-то папка/сам скрипт.php";

    и так далее,(понимаю теперь, что это совсем не "вариант"!)
    особенно при переносе сайта, на новый адрес.
    Скрипт, везде один и тот же.

    Прошу совет!
    Как лучше прописывать адрес к файлам, находящимся в корне сайта, но в разных папках?

    Стал про это читать и совсем окончательно запутался. В голове полная каша.
    Одни пишут, что надо указывать путь, используя переменную $_SERVER['DOCUMENT_ROOT']
    Другие, оспаривая первый вариант, предлагают использовать dirname(__FILE__)
    Я пока, вообще не вижу никакой разницы.
    Хотелось бы узнать мнение профессионалов, как поступить в данном случае.
    Буду ждать Ваших советов!
     
  2. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Да в принципе оба варианта, я думаю, тебе подойдут в большинстве случаев. Я всегда использую dirname(__FILE__);
    Просто если нужно будет запустить скрипт не через веб-сервер (например, кроном) - то массива $_SERVER в нём не будет.
     
  3. SV4

    SV4 Активный пользователь

    С нами с:
    24 сен 2011
    Сообщения:
    59
    Симпатии:
    0
    Адрес:
    Красноярск
    Хорошо, вроде за dirname(__FILE__); , положительных отзывов больше!
    Но у меня все равно, какая то проблема,с этими путями.
    Вот пример проблемы:
    В некоторой странице инклюдим скрипт

    <?php
    include dirname(__FILE__)."какая то папка/какая то папка/скрипт.php";/*подключаем скрипт*/
    ?>

    На сам скрипт инклюд идет хорошо, то есть скрипт запускается,но в скрипте есть такое место

    <? include "run.php"; ?>

    проходит он в этот run.php
    а там есть такая строка

    $lin=file("base.dat");

    как доходит до этого места, происходит ошибка и скрипт не выполняется.
    Пишет,

    Warning
    file(base.dat): failed to open stream: No such file or directory in
    /home/i/sayte.ru/WWW/papka/run.php


    файл run.php находится в одной папке с самим скриптом.
    Так же и файл base.dat то же в одной папке.
    Но почему он не может его найти не понятно!
    Кстати, если к скрипту подключится,через протокол httpто есть в инклюд страницы, с которой происходит переход к самому скрипту, указать виртуальный адрес скрипта, то все работает замечательно.
    Просто как я и писал, что везде указывать интернет адрес мне не хочется. Вдруг придется переехать, не менять же потом везде эти подключения.
     
  4. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    С моей точки зрения самое надёжное - везде прописывать абсолютный путь к файлу.
    Т.е. как-то так:
    PHP:
    1. <?php
    2. // ...
    3. $path = dirname(__FILE__);
    4. include($path . DIRECTORY_SEPARATOR . 'run.php');
    5. // ...
    6. ?>
    run.php:
    PHP:
    1. <?php
    2. // ...
    3. $lin = file($path . DIRECTORY_SEPARATOR . 'base.dat');
    4. // ...
    5. ?>
    Пример выше - это если все три файла находятся в одном каталоге. В другом случае нужно будет указывать соответствующий путь.
     
  5. SV4

    SV4 Активный пользователь

    С нами с:
    24 сен 2011
    Сообщения:
    59
    Симпатии:
    0
    Адрес:
    Красноярск
    Блин!
    Точно!
    Я уже второй день голову ломаю, а оно вот как.
    Еще раз спасибо!