Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 11, 2013 16:29:31

ulfur
Зарегистрирован: 2013-01-11
Сообщения: 14
Репутация: +  1  -
Профиль  

Запись формы в файл

Доброго всем времени суток! Мне необходимо сохранить содержимое формы в файл, используя CGI-скрипты на языке Python. Содержимое формы отправляется методом POST. Проблема в том, что форма благополучно обрабатывается (содержимое полей формы объединяется в одну строку и сохраняется в переменную info), но в файл не записывается (сам файл предварительно создан, пробовал просто вывести результат обработки формы на страницу - всё нормально работает). Права на файл (phonebook.dat) и каталог, в котором он хранится (/var/www/html/files/txt/), выставлены такие:
Файл phonebook.dat: хозяин файла: apache, группа: apache. Доступ: хозяин: rw- , группа: rw-, другие: rw-
Каталог /var/www/html/files/txt/: хозяин: apache, группа: apache. Доступ: хозяин: rwx, группа: rwx, другие: rwx.
Права CGI-скриптов: хозяин и группа: root, доступ: хозяин rwx, группа r-x, другие r-x.
Обработка формы (работает правильно):

surname = cgi.escape(form['surname'].value)
firstname = cgi.escape(form['firstname'].value)
patronymic =  cgi.escape(form['patronymic'].value)
address = cgi.escape(form['address'].value)
phone = cgi.escape(form['phonenum'].value)
info = surname + ' ' + firstname + ' ' + patronymic + ' ' + address + ' ' + phone
Запись в файл (не работает):
f = open ('/files/txt/phonebook.dat', 'a')
# путь указан от корня документа (Document Root) /var/www/html/
f.writelines (info)
f.close()
Версия Python: 2.7.3. Веб-сервер: Apache 2.2.22. ОС: Russian Fedora Remix 17.1 x86_64.




Отредактировано ulfur (Янв. 11, 2013 16:32:07)

Офлайн

#2 Янв. 11, 2013 16:47:55

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Запись формы в файл

Почему бы не попробовать полный путь к файлу, а не относительный?



Офлайн

#3 Янв. 11, 2013 17:46:53

ulfur
Зарегистрирован: 2013-01-11
Сообщения: 14
Репутация: +  1  -
Профиль  

Запись формы в файл

FishHook, пробовал заменить путь к файлу на полный (от корня файловой системы):

f = open ('/var/www/html/files/txt/phonebook.dat', 'a')
История в точности повторяется - запись в файл не работает, хотя пользователь, от имени которого запущен веб-сервер (apache) является его хозяином и имеет доступ на запись и чтение (rw-).




Отредактировано ulfur (Янв. 11, 2013 18:16:12)

Офлайн

#4 Янв. 11, 2013 17:55:38

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Запись формы в файл

попробуй chmod 777, если не поможет, значит дело не в правах.
Еще попробуй “а” заменить на “а+”



Офлайн

#5 Янв. 11, 2013 18:15:55

ulfur
Зарегистрирован: 2013-01-11
Сообщения: 14
Репутация: +  1  -
Профиль  

Запись формы в файл

FishHook, сделал так:

chmod 777 phonebook.dat
На каталог, в котором лежит файл (/var/www/html/files/txt/) права уже и так 777.
В CGI-скрипте заменил a на a+:
f = open ('/var/www/html/files/txt/phonebook.dat', 'a+')
Предполагал, что дело может быть в неправильной обработке формы, но при замене записи в файл:
f = open ('var/www/html/files/txt/phonebook.dat', 'a+')
f.writelines (info)
f.close()
на вывод на страницу:
print '<p>'+info+'</p>'
всё работает (на странице я получаю значения полей формы, разделённые пробелами), но мне необходимо сохранить полученную информацию в файл.




Отредактировано ulfur (Янв. 11, 2013 18:17:50)

Офлайн

#6 Янв. 11, 2013 18:23:57

DomainLider
Зарегистрирован: 2013-01-01
Сообщения: 4
Репутация: +  1  -
Профиль   Отправить e-mail  

Запись формы в файл

Ты админ на веб сервере? Если да то попробуй войти под apache и запустить из под него свой CGI.

Офлайн

#7 Янв. 11, 2013 19:18:50

ulfur
Зарегистрирован: 2013-01-11
Сообщения: 14
Репутация: +  1  -
Профиль  

Запись формы в файл

DomainLider
Ты админ на веб сервере?
Пока на своём учебном. Только начал изучать Python.
Попробовал запустить от имени apache Python-скрипт (не CGI-сценарий), работающий в интерактивном режиме и осуществляющий запись в файл (в тот самый, в который должен писать CGI) - тогда запись работает (скрин прицепил). Но мне необходимо реализовать именно веб-интерфейс (данные вводятся в форму, обрабатываются CGI и записываются в файл).




Отредактировано ulfur (Янв. 11, 2013 19:20:42)

Прикреплённый файлы:
attachment снимок78.png (34,4 KБ)

Офлайн

#8 Янв. 12, 2013 10:22:54

DomainLider
Зарегистрирован: 2013-01-01
Сообщения: 4
Репутация: +  1  -
Профиль   Отправить e-mail  

Запись формы в файл

В логах апача что нибудь интересное есть? Особенно errors.log?

Офлайн

#9 Янв. 12, 2013 10:24:32

DomainLider
Зарегистрирован: 2013-01-01
Сообщения: 4
Репутация: +  1  -
Профиль   Отправить e-mail  

Запись формы в файл

И еще вариант попробуй путь к файлу указать просто “phonebook.dat”. Я предполагаю что у тебя апач криво настроен.

Офлайн

#10 Янв. 12, 2013 11:13:24

ulfur
Зарегистрирован: 2013-01-11
Сообщения: 14
Репутация: +  1  -
Профиль  

Запись формы в файл

DomainLider, настройки апача стоят дефолтные, их не трогал вообще. Путь к файлу убрал:

f = open ('phonebook.dat', 'a+')
Фрагменты логов апача после заполнения и отправки формы:
access_log
127.0.0.1 - - [12/Jan/2013:16:00:32 +0700] "POST /cgi-bin/write.cgi HTTP/1.1" 200 233 "http://localhost/cgi-bin/add.cgi" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.21 (KHTML, like Gecko) Chrome/25.0.1349.2 Safari/537.21"
127.0.0.1 - - [12/Jan/2013:16:00:35 +0700] "GET /favicon.ico HTTP/1.1" 404 284 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.21 (KHTML, like Gecko) Chrome/25.0.1349.2 Safari/537.21"
127.0.0.1 - - [12/Jan/2013:16:00:35 +0700] "GET /favicon.ico HTTP/1.1" 404 284 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.21 (KHTML, like Gecko) Chrome/25.0.1349.2 Safari/537.21"
127.0.0.1 - - [12/Jan/2013:16:02:16 +0700] "GET /cgi-bin/add.cgi HTTP/1.1" 200 2973 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.21 (KHTML, like Gecko) Chrome/25.0.1349.2 Safari/537.21"
127.0.0.1 - - [12/Jan/2013:16:02:17 +0700] "GET /favicon.ico HTTP/1.1" 404 284 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.21 (KHTML, like Gecko) Chrome/25.0.1349.2 Safari/537.21"
127.0.0.1 - - [12/Jan/2013:16:02:36 +0700] "POST /cgi-bin/write.cgi HTTP/1.1" 500 609 "http://localhost/cgi-bin/add.cgi" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.21 (KHTML, like Gecko) Chrome/25.0.1349.2 Safari/537.21"
127.0.0.1 - - [12/Jan/2013:16:02:37 +0700] "GET /favicon.ico HTTP/1.1" 404 284 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.21 (KHTML, like Gecko) Chrome/25.0.1349.2 Safari/537.21"
error_log
[Sat Jan 12 16:02:37 2013] [error] [client 127.0.0.1]   File "/var/www/cgi-bin/write.cgi", line 41, referer: http://localhost/cgi-bin/add.cgi
[Sat Jan 12 16:02:37 2013] [error] [client 127.0.0.1] print '\t</body>', referer: http://localhost/cgi-bin/add.cgi
[Sat Jan 12 16:02:37 2013] [error] [client 127.0.0.1] ^, referer: http://localhost/cgi-bin/add.cgi
[Sat Jan 12 16:02:37 2013] [error] [client 127.0.0.1] IndentationError: expected an indented block, referer: http://localhost/cgi-bin/add.cgi
[Sat Jan 12 16:02:37 2013] [error] [client 127.0.0.1] Premature end of script headers: write.cgi, referer: http://localhost/cgi-bin/add.cgi
[Sat Jan 12 16:02:37 2013] [error] [client 127.0.0.1] File does not exist: /var/www/html/favicon.ico
В файл по-прежнему ничего не сохраняется.




Отредактировано ulfur (Янв. 12, 2013 11:14:00)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version