人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PHPについて質問です。

HTML内のフォームから文字列を受け取り、
その文字列に拡張子「.php」のついたファイルがあればそれをプラウザで表示し、
なければ新規作成して表示するというスクリプトを作成してください。

例えば、フォームに「人力検索はてな」と入力されたデータを受け取ります。
それがUTF-8にエンコードされた後の文字列が仮に「jinrikikensakuhatena」だったとすると、
それに拡張子「.php」をつけて「jinrikikensakuhatena.php」というファイルを検索します。
あればそれを表示し、なければファイルを新規作成してください。

もし「人力検索はてな」が「jinrikikensakuhatena」のように、
漢字仮名まじり文がそのまま半角英語になるなら、そんなすごいことはありませんが、
文字化けみたいなファイル名でも全く問題ありません。
要は一度作った物を改めて作らなければそれでいいということです。

質問者はまだPHPの学習を初めて間もない初心者なので、
自分のやりたいことをうまく質問することもままなりません。
不明瞭な場合はその旨コメントをいただければ幸いです。
また、回答は初心者にもわかるようご配慮くださいますようお願いします。

以上、よろしくお願いします。

●質問者: taroemon
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:HTML PHP UTF-8 うご エンコード
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● 牛乳先生(tukihatu)
●50ポイント

こんな感じですか?

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

◎質問者からの返答

ご回答ありがとうございます。

大変参考になりました。これでうまく行きそうです。


>初心者ということなので、注意として、phpから出力する

>ファイルを格納するフォルダのパーミッションは707か777にしてください。

こういうアドバイスは今の僕にとってもっともうれしいです。気をつけます。


2 ● tezcello
●50ポイント

こんな感じでいかがでしょうか?

ファイル名は、なんでもかんでも 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;

◎質問者からの返答

ご回答ありがとうございます。

大変参考になりました。

半角英数は僕も無理を承知していましたので、これで満足です。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ