HTML内のフォームから文字列を受け取り、
その文字列に拡張子「.php」のついたファイルがあればそれをプラウザで表示し、
なければ新規作成して表示するというスクリプトを作成してください。
例えば、フォームに「人力検索はてな」と入力されたデータを受け取ります。
それがUTF-8にエンコードされた後の文字列が仮に「jinrikikensakuhatena」だったとすると、
それに拡張子「.php」をつけて「jinrikikensakuhatena.php」というファイルを検索します。
あればそれを表示し、なければファイルを新規作成してください。
もし「人力検索はてな」が「jinrikikensakuhatena」のように、
漢字仮名まじり文がそのまま半角英語になるなら、そんなすごいことはありませんが、
文字化けみたいなファイル名でも全く問題ありません。
要は一度作った物を改めて作らなければそれでいいということです。
質問者はまだPHPの学習を初めて間もない初心者なので、
自分のやりたいことをうまく質問することもままなりません。
不明瞭な場合はその旨コメントをいただければ幸いです。
また、回答は初心者にもわかるようご配慮くださいますようお願いします。
以上、よろしくお願いします。
こんな感じですか?
form.html
<body> <form name="form1" method="post" action="form.php"> <input name="hoge" type="text" id="hoge"> <input type="submit" name="Submit" value="送信"> </form> </body>
form.php
<? mb_language('ja'); //サニタイズ function sanitize($ar) { if (is_array($ar)) { return array_map('sanitize', $ar);} return str_replace("\0", "", $ar); } $_POST = sanitize($_POST); $hoge = stripslashes($_POST['hoge']); //エンコード $hoge = mb_convert_encoding($hoge,'UTF-8','auto'); $hoge = preg_replace('/%/',"",urlencode($hoge)); $hoge = $hoge . ".php"; if(file_exists($hoge)){//ファイルが存在していれば飛ばす header("Location: " . $hoge); }else{//なければ新規作成してから飛ばす $fl = fopen($hoge,"a+"); fputs($fl,"hoge"); fclose($fl); header("Location: " . $hoge); } ?>
初心者ということなので、注意として、phpから出力するファイルを格納するフォルダのパーミッションは707か777にしてください。
http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/php_k03.htm
こんな感じでいかがでしょうか?
ファイル名は、なんでもかんでも Base64 でエンコードしているので、入力文字列が半角英数字でもその通りのファイル名は作成されません。
作成したファイルを単なる文字列として読み込んでいますが、ファイル名の拡張子に php を付けたという事は、php スクリプトとして使いたいという事でしょうか?
だとすると、少々違ってきます。
いきなり読み込まずに、ファイルがあるかをチェックして、あれば include で取り込み
なければ、書き込むデータを作りファイルに書き込むように変更が必要です。
簡単にテストする為に、form の action は、GET としました。実際にあわせて変更して下さい。
define("CHARSET", 'UTF-8'); set_magic_quotes_runtime(false); ini_set('mbstring.http_input', 'pass'); ini_set('mbstring.http_output', 'pass'); mb_language('ja'); mb_internal_encoding(CHARSET); mb_regex_encoding(CHARSET); header('Content-Type: text/html; charset="'.CHARSET.'"'); $w = ''; $cont = ''; if (!empty($_GET['word'])){ // 書き込む内容は適当に決めました。 // 実際にあわせて変更してください。 $data = '<p>'.$_GET['word'].'</p>'; $w = base64_encode($_GET['word']).'.php'; $cont = @file_get_contents($w); if ($cont === FALSE){ // 指定したファイルが無い場合 // $data を書き込む $fp = fopen($w, 'w'); fwrite($fp, $data); fclose($fp); $cont = 'ファイルを作成しました'; } } print <<< EOL <html> <head> <title>はてなテスト</title> </head> <body> <form> <input type="text" name="word" > <input type="submit" name="Submit" value="送信"> </form> <hr> $cont </body> </html> EOL;
ご回答ありがとうございます。
大変参考になりました。
半角英数は僕も無理を承知していましたので、これで満足です。
ご回答ありがとうございます。
大変参考になりました。これでうまく行きそうです。
>初心者ということなので、注意として、phpから出力する
>ファイルを格納するフォルダのパーミッションは707か777にしてください。
こういうアドバイスは今の僕にとってもっともうれしいです。気をつけます。