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


Автор: Гость_Артем 31.8.2005, 15:22
Написал скрипт на перле которая ходит по пакпкам на сервере удаляет все ненужные файлы и соответсвенно удаляет ссылки на них из индекса, удаляет все исправно , открывает индекс исправно исправляет тоже нормально( в массиве куда я закинул содержимое файла), но в итоге не записывает в файл, я пробовал в index.html и index.htm то есть index.htm существует а index.html нет, открывать и закравать файл не забывал, може это проблемы с правами доступа?

Автор: sharq 31.8.2005, 15:30
Цитата
може это проблемы с правами доступа?


так и есть, выставь права доступа на запись!

Автор: Гость_Артем 31.8.2005, 15:50
Не получилось - попробовал поставить прямо в скрипте chmod 0777, $File; ($File это переменная где находится полный путь к файлу), поставил через фтп тоже не изменило, на моем компе когда тестировал все изменяло, то есть проблема как я понял не правильности ситаксиса, а в спецификации Unixа, до того как я изменил доступ стояло по умолчанию 0755

Автор: sharq 31.8.2005, 16:31
Гость_Артем попробуй при записи ввести лог сообщений, явно где-то косяк, либо файл не находит, либо не может записать.

smile

Автор: Usya 1.9.2005, 15:43
1) Проверь, не забыл ли случайно поставить > перед файлом? Без приколов. Иногда сам пропускаю smile
2) Если запускаешь через cron, насколько знаю, путь должен быть полным вроде /home/.../public_html/.../index.htm. Возможно и здесь что-нибудь такое.

А по-хорошему бы кусок кода привел бы.

P.s.
А ты не пробовал зарегистрироваться, чтоб не плодить темы с одинаковыми названиями, а ненужное удалять? smile

Автор: Guest 1.9.2005, 16:26
P.s.
А ты не пробовал зарегистрироваться, чтоб не плодить темы с одинаковыми названиями, а ненужное удалять?

За это извеняюсь, инет запарился и с дуру два раза нажал.

if ($file eq 'index.htm' or $file eq 'index.html')
{
chmod 0777, $x; # в $file находится имя открываемого файла в $x полный путь
print "$file\n";
open(OldIndex, "$x") || "Error open $file: $!";
@OldIndex=<OldIndex>;
close(OldIndex);
foreach $stroka (@OldIndex)
{
$_=$stroka;

if (m/<a ID="A2" href.*($BADWORDS).*a><br>/i) # сдесь я нахожу нужные мне строки для удаления
{
s/<a.*<br>//i;

$stroka=$_;

}
}
open(NewIndex, ">$x");
#print"@OldIndex\n"; #выводтся при неоходимости содержание массива
print NewIndex @OldIndex;
close(NewIndex);
chmod 0755, $x;
}

что сделал не так ну чесно не знаю, скрипт первой легкости, выводил даже содеражание массива который хочу записать все нормально

Автор: Guest 1.9.2005, 17:32
Все пацаны разобрался проблемы были с путями неправильно путь я писал там поэтому записать не получалось

Автор: Usya 1.9.2005, 18:10
Немного поздновато отправил smile

Кстати, в следующие разы в таких случаях пиши вместо open(NewIndex, ">$x");

open(NewIndex, ">$x") || die 'Error!';

или

open(NewIndex, ">$x") || print $!.

Да и еще.
Вместо

Код

open(OldIndex, "$x") || "Error open $file: $!";
@OldIndex=<OldIndex>;
close(OldIndex);
foreach $stroka (@OldIndex)
{
$_=$stroka;
............
}


лучше

Код

open(OldIndex, "$x") || "Error open $file: $!";
while(<OldIndex>)
{
............
}
close(OldIndex);


При этом строка $_=$stroka - не нужна, не нужен массив и экономится некоторое время на перегонку в массив (для маленьких файлов практически не заметно)...

Автор: Kiber_rat 2.9.2005, 05:07
Скорее всего, если есть возможность, посмотри error_log апача. Желательно знать с какими правами выполняется скрипт. Елси это юзер web, www, apache или что-то такое, то у него должны быть права на запись в файл. Если скрипт выполняется под тем же юзером под которым ты заходишь на сервер (если у тебя есть ssh доступ) то проверь что этот же юзер является и владельцем файла.
Что бы проверить права создай простой cgi скрипт, что-то типа
Код

#!/usr/bin/perl
use strict;
use warnings;
use CGI qw(:standard);
print header();
print `whoami`;

Попробуй поставить права 666 на твой index.html, хотя это не очень хорошее решение, но если скрипт отработает нормально то грабли именно в правах. Обязательно проверь права на папку в которой лежит index.html...
Будут непонятки - спрашивай...
P.S. Это вобще то тема для CGI программирования, будь внимательнее smile

Автор: Guest 3.9.2005, 12:52
спасибо за совет, это у меня первая программа на перле конечно где-то мог пропарится

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