Найти - Пользователи
Полная версия: Запись формы в файл
Начало » Python для новичков » Запись формы в файл
1 2 3 4
ulfur
Доброго всем времени суток! Мне необходимо сохранить содержимое формы в файл, используя 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.
FishHook
Почему бы не попробовать полный путь к файлу, а не относительный?
ulfur
FishHook, пробовал заменить путь к файлу на полный (от корня файловой системы):
f = open ('/var/www/html/files/txt/phonebook.dat', 'a')
История в точности повторяется - запись в файл не работает, хотя пользователь, от имени которого запущен веб-сервер (apache) является его хозяином и имеет доступ на запись и чтение (rw-).
FishHook
попробуй chmod 777, если не поможет, значит дело не в правах.
Еще попробуй “а” заменить на “а+”
ulfur
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>'
всё работает (на странице я получаю значения полей формы, разделённые пробелами), но мне необходимо сохранить полученную информацию в файл.
DomainLider
Ты админ на веб сервере? Если да то попробуй войти под apache и запустить из под него свой CGI.
ulfur
DomainLider
Ты админ на веб сервере?
Пока на своём учебном. Только начал изучать Python.
Попробовал запустить от имени apache Python-скрипт (не CGI-сценарий), работающий в интерактивном режиме и осуществляющий запись в файл (в тот самый, в который должен писать CGI) - тогда запись работает (скрин прицепил). Но мне необходимо реализовать именно веб-интерфейс (данные вводятся в форму, обрабатываются CGI и записываются в файл).
DomainLider
В логах апача что нибудь интересное есть? Особенно errors.log?
DomainLider
И еще вариант попробуй путь к файлу указать просто “phonebook.dat”. Я предполагаю что у тебя апач криво настроен.
ulfur
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
В файл по-прежнему ничего не сохраняется.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB