Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: создание и запись в текстовый файл из Apache 2.2  (Прочитано 5023 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн all_angarsk

  • Автор темы
  • Новичок
  • *
  • Сообщений: 6
    • Просмотр профиля
В Ubuntu 10.04 установил Apache 2.2  и php5. проверил все работает.
Создал простую форму с текстовым полем. Данные из формы передаются на новую страницу.
приняте данные отображаются. Файл не создается и не записыватся информация.
<p>Запись в текстовый файл</p>
<?php
$g 
$_REQUEST['tt1'];
$s fopen("dd.txt","w+");
fwrite($s,$g);
fclose($s);
?>

</body></html>

Этот код работает в windows 7 на IIS 7.0
Вопрос: Как заставить Ubuntu b Apache создать файл?

Оффлайн censor

  • Старожил
  • *
  • Сообщений: 1126
    • Просмотр профиля
Re: создание и запись в текстовый файл из Apache 2.2
« Ответ #1 : 22 Февраля 2011, 11:47:24 »
<?php
$dir 
'/var/www'
$file 'dd.txt'
$g $_REQUEST['tt1'];
$s fopen($dir/$file,"w+");
fwrite($s,$g);
fclose($s);
?>

в каталог $dir должна быть разрешена запись пользователю www-data

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28366
    • Просмотр профиля
Re: создание и запись в текстовый файл из Apache 2.2
« Ответ #2 : 22 Февраля 2011, 14:58:00 »
<?php
$dir 
'/var/www'
$file 'dd.txt'
$g $_REQUEST['tt1'];
$s fopen($dir/$file,"w+");
fwrite($s,$g);
fclose($s);
?>

в каталог $dir должна быть разрешена запись пользователю www-data

Или группе. Но сам по себе такой вот код сильно небезопасен.
Передаваемые данные никак вообще не проверяются.
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн shumtest

  • Активист
  • *
  • Сообщений: 731
  • Это вам просто кажется...
    • Просмотр профиля
    • Блог Шумомера
Re: создание и запись в текстовый файл из Apache 2.2
« Ответ #3 : 22 Февраля 2011, 17:40:25 »
Уверен что не записываются? Ошибку/варнинг дает? Дело в том, что по умолчанию, без указания пути для записи файла, апач (или мод_пхп) под убунтой пишет не в папку со скриптом а в папку апача. Не всегда, логики не понял. Знаю, т.к. сам с этим столкнулся.
« Последнее редактирование: 22 Февраля 2011, 17:42:46 от shumtest »

Оффлайн Mam(O)n

  • Старожил
  • *
  • Сообщений: 5855
    • Просмотр профиля
Re: создание и запись в текстовый файл из Apache 2.2
« Ответ #4 : 22 Февраля 2011, 19:32:58 »
Не всегда, логики не понял.
Логика управляется директивой ServerRoot DocumentRoot

Пользователь решил продолжить мысль 22 Февраля 2011, 19:38:22:
$s = fopen($dir/$file,"w+");
Это не баш, здесь нужны кавычки ;)
« Последнее редактирование: 22 Февраля 2011, 20:34:32 от Mam(O)n »

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28366
    • Просмотр профиля
Re: создание и запись в текстовый файл из Apache 2.2
« Ответ #5 : 22 Февраля 2011, 19:39:17 »
Не всегда, логики не понял.
Логика управляется директивой ServerRoot.
Мммхмм??
Что-то меня сомнение берёт.
Скорее уже DocumentRoot
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн Mam(O)n

  • Старожил
  • *
  • Сообщений: 5855
    • Просмотр профиля
Re: создание и запись в текстовый файл из Apache 2.2
« Ответ #6 : 22 Февраля 2011, 20:32:58 »
Скорее уже DocumentRoot
ох уж эти руты  :uglystupid2:

Конечно же DocumentRoot.... Посыпаю голову пеплом...

Оффлайн censor

  • Старожил
  • *
  • Сообщений: 1126
    • Просмотр профиля
Re: создание и запись в текстовый файл из Apache 2.2
« Ответ #7 : 23 Февраля 2011, 04:33:33 »
Это не баш, здесь нужны кавычки ;)
с пыхпыхом давно баловался, правописание уже начинает страдать. учту на будущее если не забуду)))))

Пользователь решил продолжить мысль 23 Февраля 2011, 04:36:16:
Передаваемые данные никак вообще не проверяются.
думается тут тупо черновик для теста и проверками потом обрастет. а так да.
« Последнее редактирование: 23 Февраля 2011, 04:36:16 от censor »

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28366
    • Просмотр профиля
Re: создание и запись в текстовый файл из Apache 2.2
« Ответ #8 : 24 Февраля 2011, 07:51:04 »
Передаваемые данные никак вообще не проверяются.
думается тут тупо черновик для теста и проверками потом обрастет. а так да.
Я даже черновики так не пишу... особенно такие опасные, как исполнение шелл команд из скрипта.
Хотя бы просто escapeshellcmd сделать, уже лучше выглядеть будет.
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн all_angarsk

  • Автор темы
  • Новичок
  • *
  • Сообщений: 6
    • Просмотр профиля
<?php
echo "Запись в файл<br>";
$dir = '/var/www';
chmod("/var/www/dd.txt", 0755);
$file = 'dd.txt';
$g = $_REQUEST['tx1'];
echo $g;
$s = fopen($dir/$file,"w+") or die ("<br>Не создан");
fwrite($s,$g);
fclose($s);
?>
Не получается с записью, пробовал разные варианты.
Читал и искал под каким пользователем работает Apache2.2. Точной записи не нашел.
кому открывать разрешения или это как-то сделать по другому?

Оффлайн xeon_greg

  • Активист
  • *
  • Сообщений: 981
    • Просмотр профиля
<?php
echo "Запись в файл<br>";
$dir = '/var/www';
chmod("/var/www/dd.txt", 0755);
$file = 'dd.txt';
$g = $_REQUEST['tx1'];
echo $g;
$s = fopen($dir/$file,"w+") or die ("<br>Не создан");
fwrite($s,$g);
fclose($s);
?>
Не получается с записью, пробовал разные варианты.
Читал и искал под каким пользователем работает Apache2.2. Точной записи не нашел.
кому открывать разрешения или это как-то сделать по другому?
в таком варианте , если у тебя еще нет файла , а ты ему уже пытаешься изменить права,это раз, во-вторых, апач скорее всего работает от www-data, посмотреть можно
ps aux | grep apacheи давай-ка глянем на /var/www какие у него права для апача
ls -la /var/www
Пользователь решил продолжить мысль 01 Марта 2011, 11:50:38:
и вообще вот это
Цитировать
$s = fopen($dir/$file,"w+")
не правильно.
надо так
$s = fopen($dir.'/'.$file,"w+")
Пользователь решил продолжить мысль 01 Марта 2011, 12:01:57:
и вообще если не слишком знаком с php и не уверен что делаешь используй проверки , что-то типа этого:
if(is_writeable($dir)){
        $of=fopen($dir.'/'.$file,'w+');
        if($of){
                fwrite($of,'test');
                fclose($of);
        }
        else
                echo "can't open";     
}
else
        echo "can't write";

сразу увидишь где косяк. учи php
« Последнее редактирование: 01 Марта 2011, 12:01:57 от xeon_greg »

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28366
    • Просмотр профиля
ls -ld /var/www
тогда уж.
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн all_angarsk

  • Автор темы
  • Новичок
  • *
  • Сообщений: 6
    • Просмотр профиля
Цитировать
в таком варианте , если у тебя еще нет файла , а ты ему уже пытаешься изменить права,это раз, во-вторых, апач скорее всего работает от www-data, посмотреть можно
ps aux | grep apacheи давай-ка глянем на /var/www какие у него права для апача
ls -la /var/www
Пользователь решил продолжить мысль 01 Марта 2011, 11:50:38:
и вообще вот это
Цитировать
$s = fopen($dir/$file,"w+")

Ошибоки я преобрел на форуме. Каюсь не проверил. исправлю. Меня больше интересует система безопасности.

почему в разделе пользователи я не вижу www-data, и как с ним работать в графическом режиме?

Исправленный апач дает следующие ошибки
[Wed Mar 02 21:46:39 2011] [error] [client 127.0.0.1] PHP Warning:  chmod(): No such file or directory in /var/www/w.php on line 4, referer: http://localhost/f.php
[Wed Mar 02 21:46:39 2011] [error] [client 127.0.0.1] PHP Warning:  fopen(/var/www/dd.txt): failed to open stream: Permission denied in /var/www/w.php on line 8, referer: http://localhost/f.php

Пользователь решил продолжить мысль 02 Марта 2011, 17:03:05:
Устранил все ошибки и получил только одну ошибку

[Wed Mar 02 21:52:41 2011] [error] [client 127.0.0.1] PHP Warning:  fopen(/var/www/dd.txt): failed to open stream: Permission denied in /var/www/w.php on line 8, referer: http://localhost/f.php

нет прав по созданию файла. вот код:

<?php
echo "Запись в файл<br>";
$dir = '/var/www';
//chmod("/var/www/dd.txt", 0755);
$file = 'dd.txt';
$g = $_REQUEST['tx1'];
echo $g;
$s = fopen($dir . '/' . $file,"w+") or die ("<br>Не создан");
fwrite($s,$g);
fclose($s);
?>

root@sonapt:~# ps aux | grep apache
root       947  0.0  1.3  33004  6748 ?        Ss   21:02   0:00 /usr/sbin/apache2 -k start
www-data   956  0.0  1.0  33468  5356 ?        S    21:02   0:00 /usr/sbin/apache2 -k start
www-data   961  0.0  0.8  33468  4404 ?        S    21:02   0:00 /usr/sbin/apache2 -k start
www-data   962  0.0  1.0  33468  5448 ?        S    21:02   0:00 /usr/sbin/apache2 -k start
www-data   963  0.0  1.0  33052  5144 ?        S    21:02   0:00 /usr/sbin/apache2 -k start
www-data   964  0.0  1.0  33060  5284 ?        S    21:02   0:00 /usr/sbin/apache2 -k start
www-data  1549  0.0  1.0  33060  5292 ?        S    21:07   0:00 /usr/sbin/apache2 -k start
root      1810  0.0  0.1   5184   764 pts/0    S+   22:01   0:00 grep --color=auto apache
root@sonapt:~# ls -la /var/www
итого 20
drwxr-xr-x  2 root root 4096 2011-03-02 21:52 .
drwxr-xr-x 15 root root 4096 2011-02-27 22:41 ..
-rw-r--r--  1 root root  211 2011-03-02 21:28 f.php
-rw-r--r--  1 root root  166 2011-03-02 21:29 index.html
-rw-r--r--  1 root root  227 2011-03-02 21:52 w.php
root@sonapt:~#
« Последнее редактирование: 02 Марта 2011, 17:03:05 от all_angarsk »

Оффлайн shumtest

  • Активист
  • *
  • Сообщений: 731
  • Это вам просто кажется...
    • Просмотр профиля
    • Блог Шумомера
Ну тебе-же написано в ошибке:
Цитировать
Permission denied
У тебя права на папку:
Цитировать
drwxr-xr-x 15 root root 4096 2011-02-27 22:41 ..
т.е. писать может только рут. А апач запущен от:
Цитировать
www-data   956  0.0  1.0  33468  5356 ?        S    21:02   0:00 /usr/sbin/apache2 -k start
Сделай так:
chown www-data /var/www

Оффлайн censor

  • Старожил
  • *
  • Сообщений: 1126
    • Просмотр профиля
тогда уж
sudo chown -R www-data:www-data /var/www

 

Страница сгенерирована за 0.042 секунд. Запросов: 25.