LINUX.ORG.RU

Редактирование файла с помощью PHP из браузера

 


0

1

Добрый вечер.

Собственно, имеется PHP-скрипт, добавляющий строку «some string» в файл file.txt:

<?php
$some_string = "some string"; 
$file = fopen('/home/user/file.txt', 'a');
$test = fwrite($file, $some_string);
if ($test) echo "success";
else echo "error";
?>
Эта штука работает. Но мне бы хотелось, чтобы то же самое происходило при заполнении формы на сайте. То есть
<?php
$some_string = $_POST['somestring'];
$file = fopen('/home/user/file.txt', 'a');
$test = fwrite($file, $some_string);
if ($test) echo "success";
else echo "error";
?>
Но выплевывается ошибка. Что не так?


Код правильный. Проверьте, что попадает в $_POST['somestring'], есть ли у скрипта права на запись в /home/user/file.txt

Вот с таким кодом формы у меня все работает

<form method="post" action="testl.php">
<input name="somestring" type="text" /><input type="submit" />
</form>
amomymous ★★★ ()
<?php
if (!isset($_POST['somestring']))
    die("Failed to get the 'somestring'");
$some_string = $_POST['somestring'];
$file = fopen('/home/user/file.txt', 'a');
$test = fwrite($file, $some_string);
if ($test) echo "success";
else echo "error";
?>
Nietzsche ()
Ответ на: комментарий от amomymous

Ну, если поменять второй вариант на первый (то есть, первую строку) и запустить как скрипт из консоли, то запись успешна. Стало быть, с правами все в норме. Или я ошибаюсь? Быть может, у самого Апача нет доступа к файлу? Из формы все передается корректно. По крайней мере,

echo "$some_string";
показывает то, что я ввел.

yaches ()
Ответ на: комментарий от Nietzsche

Такую проверку тоже делал. Проваливается на моменте именно записи, а не передачи из формы.

yaches ()
Ответ на: комментарий от yaches

Быть может, у самого Апача нет доступа к файлу?

Наиболее вероятный вариант. А если первый вариант скрипта вызвать через apache, будет ли дописана строка в файл?

amomymous ★★★ ()
Ответ на: комментарий от amomymous

Неа, не дописывается.

Хм, и как мне посмотреть/отредактировать права apach'а на запись файла?

В этом может быть замешан SELinux?

yaches ()
Ответ на: комментарий от yaches

Очевидно, что владелец файла, лежащего в /home/user - пользователь user, а apache это другой пользователь. Можно расположить файл где-то в папке, принадлежащей apache (там, где лежит скрипт), или изменить права, чтобы apache мог писать именно в тот.

amomymous ★★★ ()
Ответ на: комментарий от yaches

Ты, в общем-то, ошибку не показал нам.

UPD: а, Permission denied... Странно тогда, что один код работает а другой нет. Попробуй на file.txt поставить 777 и посмотреть, что поменяется. Если запишется - ковыряй права на файл. В другом случае - даже не знаю, чем помочь.

NeverLoved ★★★★★ ()
Последнее исправление: NeverLoved (всего исправлений: 1)
Ответ на: комментарий от NeverLoved

Странно тогда, что один код работает а другой нет

Ничего сраного — первый в кли от user, а второй в цги от www-data.

deep-purple ★★★★★ ()
Ответ на: комментарий от yaches

Еще нужно выставить на папку /home/user, содержащую файл, права на чтение и выполнение для апача (755 ну или 777), тогда всё сработает. Стоит оставлять домашнюю папку юзера открытой для доступа - не уверен.

amomymous ★★★ ()
Ответ на: комментарий от amomymous

Да, спасибо. После присвоения прав папкам все работает)

То, что я сделал открытой папку user - не беда. Действие происходит на тестовой виртуальной машине. Конечная цель вообще - написание скрипта, вносящего запись о новом домене в конфиг Bind для локального DNS-сервера. Тут я, так сказать, сам принцип отрабатывал.

yaches ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.