phpの質問です。
phpの質問です。
下記サイトを参考に
http://tenderfeel.xsrv.jp/php/861/
[php] ワンタイムURLの作成と登録確認のメール送信のテストをしています。
index.php
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>テスト</title>
</head>
<body>
スタッフ追加<br/>
<br/>
<form method="post" action="send.php">
メールアドレスを入れてください<br/>
<input type="text" name="mail" style="width:200px"><br/>
<input type="button" onclick="history.back()" value="戻る">
<input type="submit" value="OK">
</form>
</body>
</html>
send.php
<?php
$tokendir = dirname( __FILE__ ). DIRECTORY_SEPARATOR ."token" . DIRECTORY_SEPARATOR;
if($_POST["mail"]==""){
print "メールアドレスを入力してください";
}elseif(mb_strlen($_POST["mail"])> 0 && !preg_match("/^([a-z0-9_]|\-|\.|\+)+@(([a-z0-9_]|\-)+\.)+[a-z]{2,6}$/i",$_POST["mail"])){
print "メールアドレスの書式に誤りがあります。";
}else{
print "確認メールを送信しました";
mail_to_token($_POST["mail"]);
}
if(isset($_GET["key"])){
if(delete_old_token($_GET["key"])){
print "登録完了しました。";
}else{
print 'もう一度初めからやり直してください。';
}
}
function mail_to_token($address)
{
global $tokendir;
$limit = (time()+3600);
$token= rand(0,100).uniqid();//トークン
touch($tokendir.$token.".log");//トークンファイル作成
$url = $_SERVER["HTTP_REFERER"]."?key=".$token;
file_put_contents($tokendir.$token.".log", $limit, LOCK_EX);//期限保存
delete_old_token($token);//古いトークン削除
//本文スタイル
$message="登録を完了するには、以下のアドレスを開いてください。\n60分以内にアクセスが無かった場合は無効となります。\n";
$message.=$url."\n\n";
my_send_mail($address,'登録確認',$message);
}
function delete_old_token($token = NULL)
{
global $tokendir;
if (is_dir($tokendir)) {
if ($dh = opendir($tokendir)) {
while (($file = readdir($dh)) !== false) {
if(is_file($tokendir.$file) && is_null($token)){
$data = file_get_contents($tokendir.$file);
if(time()> $data) unlink($tokendir.$file);
}else if(is_file($tokendir.$file) && !is_null($token)){
if(time() <(filemtime($tokendir.$token.".log")+3600) ){
@unlink($tokendir.$token.".log");
return true;
}else{
@unlink($tokendir.$token.".log");
return false;
}
}
}
closedir($dh);
}
}
}
function my_send_mail($mailto, $subject, $message)
{
$message = mb_convert_encoding($message, "JIS", "UTF-8");
$subject = mb_convert_encoding($subject, "JIS", "UTF-8");
$header ="From: WebTecNote <info@example.com>\n";
mb_send_mail($mailto, $subject, $message, $header);
}
?>
◎参考サイトを微調整して上記ソースを作成。
◎ドキュメントルートにtokenフォルダを作成。
メール送信とトークンは無事来ましたが、
if(isset($_GET["key"])){
if(delete_old_token($_GET["key"])){
print "登録完了しました。";
}else{
print 'もう一度初めからやり直してください。';
}
}
上記の部分のクリックして「登録完了しました。」が作動しません。
なぜでしょうか?
お礼
有難うございました。URLをクリックせず難を逃れたようです。