Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Редактирование файла


Автор: Aliance 17.4.2005, 18:59
Есть ли возможность легко редактировать файл на сервере. Т.е. как по FTP, только в самом и-нете. Обратите внимание, что меня интересует только легкий путь. Т.е. что-то наподоби формы и кнопки субмит. В формы автоматов заносится содержимое файла - я редактирую - оно изменяется Все. Зарание спасибо.

Автор: Mal Hack 17.4.2005, 19:28
fopen
fwrite smile
Вот тебе и редактирование smile

Автор: Aliance 17.4.2005, 19:41
Я знаю это (видел в сорцах). Но боюсь что сам не смогу написать...
Поможите? Еще бы желательно делать так:
в самом верху интуп, туды заносим url страницы (есесно относительный, т.е. так есть надпись http://ya.ru/ а дальше сам инпут и туда уже либо index.php, либо что угодно другое в т.ч. и /test/index.php и .т.п.)
И это уже страницы и регим. Проблем с кавычками, php и др. кодами не будет?

Автор: Mal Hack 17.4.2005, 19:52
да не будет никаких проблем smile

Цитата(Aliance @ 17.4.2005, 20:41)
Я знаю это (видел в сорцах). Но боюсь что сам не смогу написать...

Ну ты попробуй, а если что подскажем smile

Автор: Aliance 17.4.2005, 20:16
Цитата(Mal @ 17.4.2005, 20:52)
Ну ты попробуй, а если что подскажем

спасибо, что убиваешь мою лень smile)) это только даст мне опыта smile)) щас пойду сотворю ))

Автор: Aliance 17.4.2005, 20:33
Код

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
    <TITLE></TITLE>
</HEAD>

<BODY>

<center>

<form action="" method="post">
 <input type="text" value="/home/sutnet/www/TEST/readable.php" name="test">
 <input type="submit" value="OK" name="s">
</form>

<?php

if ($test != "") {

$page = fopen($test, "r");
$content = fread( $page, filesize( $test ) );
fclose( $page );

print "<TEXTAREA name='editor' cols=100 rows=20>".$content."</TEXTAREA>";

}

?>

</center>

</BODY>
</HTML>


Выдает контент файла. Все прекрасно. Теперь подскажите алгоритм как его изменять?
Нужно ли поменять параметр второй у fopen на w?

Нужно ли учесть cmod?
Т.е. у меня по умолчанию у php и html файлов - 644 - этого не хватит? Нужно 777?

Автор: Mal Hack 17.4.2005, 20:39
Цитата(Aliance @ 17.4.2005, 21:33)
Т.е. у меня по умолчанию у php и html файлов - 644 - этого не хватит? Нужно 777?

Хватит.

Цитата(Aliance @ 17.4.2005, 21:33)
Выдает контент файла. Все прекрасно. Теперь подскажите алгоритм как его изменять?

$str = file_get_contents()
$page = fopen($test, "w");
fwrite();
fclose( $page );

Автор: Aliance 17.4.2005, 20:45
Не понял. Зачем мы $str задавали и какой именно контент запишиЦа в файл, если мы просто вызвали fwrite(). Его же как то не просто думаю нужно вызывать...

Автор: Mal Hack 17.4.2005, 20:47
Aliance
при fopen c w файл очищается, поэтому сначала мы его считываем.
Если дописать в конец надо, то используй режим a.

Автор: Aliance 17.4.2005, 20:52
Понял...
А если r+
file_get_contents()- никаких аргументов не принимает? У меня нет описания этой функции =(
Про fwrite() щас читаю, сам попробую заробраться...



Вот сделал такое:
Код

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
    <TITLE></TITLE>
</HEAD>

<BODY>

<center>

<form action="" method="post">
 <input type="text" value="/home/sutnet/www/TEST/readable.php" name="test">
 <input type="submit" value="OK" name="s">
</form>

<?php

if ($test != "") {

$page = fopen($test, "r+");
$content = fread( $page, filesize( $test ) );

fputs($page, $editor);

fclose( $page );

print <<<EOS
<form action="" name="edit" method="post">
<TEXTAREA name='editor' cols=100 rows=20>$content</TEXTAREA>
<BR/><input type="submit" value="OK" name="s2">
</form>
EOS;

}

?>

</center>

</BODY>
</HTML>


Никаких ошибок не выдает, но и файл не исправляет...

Автор: Mal Hack 17.4.2005, 21:07
$_POST это раз. Два.

Цитата(Aliance @ 17.4.2005, 21:52)
file_get_contents()- никаких аргументов не принимает?

Как же нет smile http://php.net/file_get_contents

Автор: Aliance 17.4.2005, 21:29
Цитата(Mal @ 17.4.2005, 22:07)
$_POST это раз

Не понял =/

Цитата

string file_get_contents ( string filename...)


Т.е. в моем случае так:
Код

$str = file_get_contents ( $page )

Автор: Mal Hack 17.4.2005, 21:53
Aliance
нет не тиак.
Код
$str = file_get_contents ( $test );
$page = fopen($test, "w");
$content = fread( $page, filesize( $test ) );
fwrite( $page, $str . $editor);
fclose( $page );

Или
Код
$page = fopen($test, "a");
$content = fread( $page, filesize( $test ) );
fwrite( $page, "\n".$editor);
fclose( $page );


Автор: Aliance 17.4.2005, 22:06
Первое не катит
Цитата

Warning: fread(): Length parameter must be greater than 0. in /home/sutnet/public_html/TEST/edit.php on line 22

Второе ничего не изменяет. Чичас я отчаюсь =(
Дай плиз полностью готовый скрипт. Не понимаю что у меня не работает =(
Только полностью как у меня, с <HTML> и с <?...?> и т.д...

Автор: Mal Hack 17.4.2005, 22:12
Цитата(Aliance @ 17.4.2005, 23:06)
Дай плиз полностью готовый скрипт.

Это готовый2 и рабочий.
Что у тебя в переменной $test?

Автор: Aliance 17.4.2005, 22:35
Вот мой полностью файл:
Код

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
    <TITLE></TITLE>
</HEAD>

<BODY>

<center>

<form action="" method="post">
 <input type="text" value="/home/sutnet/www/TEST/readable.php" name="test">
 <input type="submit" value="OK" name="s">
</form>

<?php

if ($test != "") {

$page = fopen($test, "a");
$content = fread( $page, filesize( $test ) );
fwrite( $page, "\n".$editor);
fclose( $page );

print <<<EOS
<form action="" name="edit" method="post">
<TEXTAREA name='editor' cols=100 rows=20>$content</TEXTAREA>
<BR/><input type="submit" value="OK" name="s2">
</form>
EOS;

}

?>

</center>

</BODY>
</HTML>


Он не только не изменяет ничего, но и не выводит ничего в textarea.

Автор: Mal Hack 17.4.2005, 22:39
Цитата(Aliance @ 17.4.2005, 23:35)
print <<<EOS
<form action="" name="edit" method="post">
<TEXTAREA name='editor' cols=100 rows=20>$content</TEXTAREA>
<BR/><input type="submit" value="OK" name="s2">
</form>
EOS;

{$content}
Добавлено @ 22:42
Код
if ($_POST['test'] != "") {
$str = file_get_contents ( $test );
$page = fopen($test, "w");
fwrite( $page, $str . $_POST['editor']);
fclose( $page );
}

Автор: Aliance 17.4.2005, 22:52
Все равно контент не виден =(
И ничего не изменяется.
Добавлено @ 22:56
Ну естественно smile Этой строчки-то нет:
Код

$content = fread( $page, filesize( $test ) );

Добавлено @ 22:57
Да и с ней не пашет. Нужно вставлять так:
Код

{$str}

Добавлено @ 23:01
Нет, все же проблемы есть с htmlspecialchars.
У меня скажем " заменяется на \". Значит мне это определенно не подходит. Т.к. это уже не простой способ =/

Автор: Mal Hack 17.4.2005, 23:06
Цитата(Aliance @ 17.4.2005, 23:35)
action=""

Заполни.

ЗЫ:, по логике код пашет.
Сделай в учловии вывод asd, просто чтобы проверить что условие выполняется.

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