PHPについて質問です。


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

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

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

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

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

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2008/02/15 15:41:26
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答2件)

id:tukihatu No.1

回答回数180ベストアンサー獲得回数32

ポイント50pt

こんな感じですか?

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

id:taroemon

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

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


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

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

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

2008/02/15 15:37:33
id:tezcello No.2

回答回数460ベストアンサー獲得回数69

ポイント50pt

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

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

id:taroemon

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

大変参考になりました。

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

2008/02/15 15:40:23
  • id:bonlife
    「プラウザで表示」したいのは何ですか?
    ファイル名ですか。それともファイルの内容でしょうか。
    「なければ新規作成して表示」とありますが、ファイルの内容でしたら、空ですよね。
  • id:taroemon
    bonlifeさん
    コメントありがとうございます。
    ファイル名の方です。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません