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

Uglik

Старатель
Регистрация
8 Окт 2008
Сообщения
350
Реакции
14
Здравствуйте

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

PHP:
$file_name = 'title.txt';
$file = $_SERVER[DOCUMENT_ROOT].'/'.$file_name.'.txt';
$movie_array = file($file_name, FILE_IGNORE_NEW_LINES);

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

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

PHP:
$file_name = 'title.txt';
$file = $_SERVER[DOCUMENT_ROOT].'/'.$file_name.'.txt';
$movie_array = file($file_name, FILE_IGNORE_NEW_LINES);

В чем может быть пробелма ?
Удали .txt - кажется лишнее...
Получается у тя title.txt.txt







Ааааааааааааа ... уже ответ есть
 
Вот тестовый файл что я набросал на хостинге:
PHP:
$file_name = 'movie_title';
 
$file = $_SERVER[DOCUMENT_ROOT].'/'.$file_name.'.txt';
$movie_array = file($file_domen, FILE_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
господи, тебе же сказали - что у тебя вообще в переменной $file_domen? ничего.
 
господи, тебе же сказали - что у тебя вообще в переменной $file_domen? ничего.
Поправил, все равно не работает если функции file передавать путь динамически через суперглобальный массиы $_SERVER, если жe указать относительно папки в которой лежит txt работает. Но мне нужно диномически получать путь к файлу независимо от ОС
 
  • Заблокирован
  • #7
независимо от ОС
Насколько мой глупейший мозг понимает можно использовать только
PHP:
dirname(__FILE__)
чтобы узнать полный путь к текущему файлу, а уже из него, используя нашу любимую константу DIRECTORY_SEPARATOR получать динамический путь к файлу, который будет работать на любом хостинге.
$_SERVER['DOCUMENT_ROOT'] работает насколько мой не более умный чем, полчаса назад мозг, разве что на апаче если у него в httpd.conf указан DocumentRoot так что не стоит на него надеяться... вродь.
Чтобы узнать что на данном сервере может предоставить нам этот массивчик - сделай
PHP:
print_r($_SERVER)
и увидишь что данный хостинг может тебе предложить.
 
Здравствуйте

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

PHP:
$file_name = 'title.txt';
$file = $_SERVER[DOCUMENT_ROOT].'/'.$file_name.'.txt';
$movie_array = file($file_name, FILE_IGNORE_NEW_LINES);

В чем может быть пробелма ?
тут DOCUMENT_ROOT не в кавычках
кроме того, стоит проверить права на файл, владельца файла и проверить safe_mode параметры
а также регистр написания самого файла: если будет title.TXT то не откроется.
 
Назад
Сверху