Проблемы с функцией file на хостинге

Тема в разделе "Как сделать...", создана пользователем Uglik, 14 окт 2012.

  1. Uglik

    Uglik

    Регистр.:
    8 окт 2008
    Сообщения:
    350
    Симпатии:
    14
    Здравствуйте

    Не работает функция file() на хостинге, если путь к файлу передать в виде

    PHP:
    $file_name 'title.txt';
    $file $_SERVER[DOCUMENT_ROOT].'/'.$file_name.'.txt';
    $movie_array file($file_nameFILE_IGNORE_NEW_LINES);
    В чем может быть пробелма ?
     
  2. Extalionez

    Extalionez Клоун

    Заблокирован
    Регистр.:
    21 авг 2008
    Сообщения:
    368
    Симпатии:
    185
    Ну во-первых Элемент $_SERVER['DOCUMENT_ROOT'] содержит путь к корневой директории сервера, если скрипт выполняется в виртуальном хосте, в данном элементе указывается путь к корневой директории виртуального хоста. Т.е. в конфигурационном файле httpd.conf виртуальный хост имеет директиву DocumentRoot, которой присвоено значение "D:/main", элемент $_SERVER['DOCUMENT_ROOT'] будет содержать значение "D:main".
    Во-вторых у тебя ошибочка вышла - $file_name уже содержит .txt, а ты его ещё раз в конец засовываешь.
    В-третьих у тебя в качестве первого параметра передаётся лишь имя файла, а не путь и всё что я раньше писал не имеет смысла. В итоге он должен работать только если файл title.txt находится в той же директории что и скрипт.
     
  3. Дмитрий Кесаев

    Дмитрий Кесаев aka Zlobniy Babko

    Заблокирован
    Регистр.:
    10 май 2007
    Сообщения:
    1.332
    Симпатии:
    1.265
    Удали .txt - кажется лишнее...
    Получается у тя title.txt.txt







    Ааааааааааааа ... уже ответ есть
     
  4. Uglik

    Uglik

    Регистр.:
    8 окт 2008
    Сообщения:
    350
    Симпатии:
    14
    Вот тестовый файл что я набросал на хостинге:
    PHP:
    $file_name 'movie_title';
     
    $file $_SERVER[DOCUMENT_ROOT].'/'.$file_name.'.txt';
    $movie_array file($file_domenFILE_IGNORE_NEW_LINES);
     
    echo 
    "<pre>";
    print_r($movie_array);
    echo 
    "</pre>";
     
    Не выводит массив почему то ... Хотя если дать путь относительно папки все ОК. А вот при такой конструкцие не работает.

    К чему я это все вот у меня я писал класс и он перестал работать на хостинге:

    Код:
    class Check {
     
        public $file_logs = '';
       
        function __construct($file_name = 'movie_title') {
       
            $file = $_SERVER[DOCUMENT_ROOT].'/'.$file_name.'.txt';
           
            if(!file_exists($file)) {
           
                $f = fopen($file, "w");
                fclose($f);
           
            }
           
            $this->file_logs = $file;
           
        }
    }
     
  5. Extalionez

    Extalionez Клоун

    Заблокирован
    Регистр.:
    21 авг 2008
    Сообщения:
    368
    Симпатии:
    185
    господи, тебе же сказали - что у тебя вообще в переменной $file_domen? ничего.
     
  6. Uglik

    Uglik

    Регистр.:
    8 окт 2008
    Сообщения:
    350
    Симпатии:
    14
    Поправил, все равно не работает если функции file передавать путь динамически через суперглобальный массиы $_SERVER, если жe указать относительно папки в которой лежит txt работает. Но мне нужно диномически получать путь к файлу независимо от ОС
     
  7. Extalionez

    Extalionez Клоун

    Заблокирован
    Регистр.:
    21 авг 2008
    Сообщения:
    368
    Симпатии:
    185
    Насколько мой глупейший мозг понимает можно использовать только
    PHP:
    dirname(__FILE__)
    чтобы узнать полный путь к текущему файлу, а уже из него, используя нашу любимую константу DIRECTORY_SEPARATOR получать динамический путь к файлу, который будет работать на любом хостинге.
    $_SERVER['DOCUMENT_ROOT'] работает насколько мой не более умный чем, полчаса назад мозг, разве что на апаче если у него в httpd.conf указан DocumentRoot так что не стоит на него надеяться... вродь.
    Чтобы узнать что на данном сервере может предоставить нам этот массивчик - сделай
    PHP:
    print_r($_SERVER)
    и увидишь что данный хостинг может тебе предложить.
     
  8. NDK13

    NDK13 Создатель

    Регистр.:
    31 авг 2012
    Сообщения:
    36
    Симпатии:
    14
    тут DOCUMENT_ROOT не в кавычках
    кроме того, стоит проверить права на файл, владельца файла и проверить safe_mode параметры
    а также регистр написания самого файла: если будет title.TXT то не откроется.