前提・実現したいこと
php上の2つのフォームに入力されたテキストを連結して、サーバー上のinput_lines.txtに書き込みたいです。
XAMPPのインストール時と異なるディレクトリ構造は、
C:/xampp/htdocsの直下にphpフォルダ、PycharmProjectsフォルダ、file_inputフォルダを設置
さらに深い層は以下のようになっています。
php/index.php
PycharmProjects/Web/merge.py
file_input/input_lines.txt
発生している問題・エラーメッセージ
サーバーサイド上のテキストファイルに文字列が書き込まれません。
index.php
<html> <head> <style type="text/css"> input.example1 { width: 45%; margin: 100 auto} input.example2 { width: 80%; margin: 0 auto} input.example3 { width: 250px; margin: 0 auto} select { width: 250px; } textarea { width: 400px; height: 10em; } </style> </head> <body> <center> <h1>ファイルの作成</h1> <div style="display:inline-flex" > <h1>前半部</h1> <h1>後半部</h1> </div> <form method="POST" action="PycharmProjects/Web/merge.py" accept-charset="UTF-8"> <div style="display:inline-flex" > <p><textarea name="first_msg" cols="80" rows="20" class="example1" ></textarea></p> <p><textarea name="sec_msg" cols="80" rows="20" class="example1"></textarea></p> </div> <p><input type="submit" value="結合してファイルを作る" class="example3"></p> </form> </html>
merge.py
# -*- coding:utf-8 -*- # !C:/Users/golf/AppData/Local/Programs/Python/Python37-32/python.exe import cgi import cgitb import io import sys import re #トレース出力を有効にする cgitb.enable() #utf-8に変換 sys.stdin = io.TextIOWrapper(sys.stdin.buffer, encoding='utf-8') sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8') sys.stderr = io.TextIOWrapper(sys.stderr.buffer, encoding='utf-8') print("Content-Type: text/html; charset=utf-8") print("") form = cgi.FieldStorage() file = open('C:/xampp/htdocs/file_input/input_lines.txt', 'w', encoding="utf_8_sig") form_input_list = [] for i in range(2): form_input_list.append([]) for key in form: if key =="first_msg": rule_value = form[key].value #\r\nが含まれていると、自動変換で\nが\r\nになるのでバイナリモードで開くと\r\r\nになる。 #なので\r\nを\nに置換 if "\r\n" in rule_value: form_input_list[0] = re.sub("\r\n", "\n", rule_value) else: form_input_list[0] = rule_value if key =="sec_msg": fact_value = form[key].value if "\r\n" in fact_value: form_input_list[1]=re.sub("\r\n","\n",fact_value) else: form_input_list[1]=fact_value print("form_input_list=", form_input_list) #input_lines.txtにform_input_listの要素を書き込む #書き込まれた結果は、 # form_input_list[0], form_input_list[1], form_input_list[2],... for i in range(len(form_input_list)): if i !=0: file.writelines(["\r\n"]) i_input = form_input_list[i] file.writelines(i_input) file.close()
試したこと
C:/xampp/cgi-bin/PycharmProjects/Web/merge.pyに設置してみましたが、
input_lines.txtに文字は書き込まれませんでした。
補足情報(FW/ツールのバージョンなど)
C:/xampp/apache/conf/httpd.conf
には、pythonファイルが使えるように、以下の内容を追記してあります。
AddHandler cgi-script .cgo .pl .asp .py
ScriptInterpreterSource Registry-Strict
<Directory "C:/xampp/cgi-bin">
Options +ExecCGI
AddHandler cgi-script .pl .cgi .py
</Directory>
初心者なので、的外れな質問かもしれませんが、何卒よろしくお願いします。
また、python内で別の言語を扱うようなpythonファイルもXAMPP内で動かす方法についての情報もお教えいただけたらうれしいです。
あなたの回答
tips
プレビュー