Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Системное программирование > Баг с директориями, а точнее с созданием файлов.


Автор: Graf Zeppelin 10.4.2004, 10:40
В общем у меня такой глюк. У меня сайт находится на сервере h1. И у меня проблема: я создал pl скрипт кторый должен генерить index.htm в главной директории(путь до неё я пишу http://мойсайт.h1.ru/). Но! Файл там не создаётся. У меня на домащнем всё было в порядке. А на сервере h1 этот индекс не генерится если указать не только имя файла, но и директорию. Если же просто написать open (INDEX, "> index.htm") он создаст этот индекс! Но в директории cgi-bin. В начале я подумал что фишка в том, что нужно писать адрес на файл полностью(тоесть через файловую систему сервера), но я попробовал другой скрипт, который закачивает в коренную директорию картинки и он сработал. Обьясните плиз в чём тут дело?
P.S. Файл создания index.htm подключается к главному файлу из которого и запускается. С помощью комманды require генератор.pl =)
P.P.S. Другой подключающийся скрипт с функциями работает как часы =)

Автор: korob2001 10.4.2004, 12:52
Попробуй так:
Код

#!/usr/bin/perl -w
use strict;
use warnings;
use CGI;
use CGI::Carp qw( fatalsToBrowser );
my $cgi = new CGI;
my $script = $ENV{ SCRIPT_NAME };

open(FILE, "> /home/localhost/www/index.htm") or die $!;
print FILE $cgi->start_html( -title => 'Главная страница'),
          $cgi->center( $cgi->h1("Эта странчка создана программой $script!") ),
          $cgi->end_html;
close( FILE ) or die $!;
print $cgi->header( -charset => 'Windows-1251' );
print $cgi->start_html( -title => "Создал гланую странцу" ),
     $cgi->start_center,
     $cgi->h1("Создал главную страничку!"),
     $cgi->end_center,
     $cgi->p('Посмотреть можно ' .
              $cgi->a( { -href => "/index.htm" }, "здесь" ) ),
     $cgi->end_html;

У меня работает, правда тестировал на локальном сервере.
Почитай на хостинге как правильно указывать относительный путь. Если не разберёшься, то попробуй поспользоваться такой схемой.
Допустим наша программа-CGI лежит в каталоге cgi-bin/ и называется mkpag.pl, то для того что бы выйти из данного каталога на уровень выше нужно указать примерно такой путь ../.
Кпримеру у нас такая схема:
Код

home/_
      |_www/        <- Сюда хотим создать файл index.htm
      |
      |_cgi-bin/      <- Здесь лежит наш скрипт

Для этого нам нужно прописать такой путь:
../www/index.htm
данный путь означает выйти из текущего каталога на уровень выше и зайти в каталог www/ и открыть файл index.htm

Удачи.

Автор: Graf Zeppelin 10.4.2004, 21:40
Спасибо огромное! Сработало!! Я чессно просто не знал как подняться на папку вверх =) Блин, биг сэнкс. (Сработало ../www/index.htm)

Автор: GoodBoy 12.4.2004, 10:35
Господа! Есть чудесная переменная окружения DOCUMENT_ROOT, которая указывает на корневой каталог документов сайта (т.е. тот каталог, куда мы попадаем набрав в браузере http://мойсайт.h1.ru/).
В связи с этим я могу порекомендовать открывать файл на запись вот таким методом:
Код
open(FILE, "> $ENV{DOCUMENT_ROOT}/index.htm") or die $!;

Из этого мы имеем следующие преимущества:
1) Нам не надо знать реальный физический путь к домашнему каталогу
2) При переносе сайта на другой хостинг, в случае несовпадения путей, ничего не надо менять.
:-)))))))))

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)