私はphpでファイルをアップロードしていますが、私の本当の問題は私がこのコードを持っていることなので、それは無関係です:
if (!empty($_FILES)) {
$tempFile = $_FILES['Filedata']['tmp_name'];
$real = $_FILES['Filedata']['name'];
$finfo = pathinfo($real);
$time = time();
$rand1 = substr(sha1($real.$time),0,4);
$rand2 = substr(sha1($real.$time),5,-22);
$fname = preg_replace("#[^A-Za-z1-9]#","_", $_FILES['Filedata']['name']);
mkdir(UPLOAD_TO."/".$rand2,0777);
$targetFile = UPLOAD_TO."/".$rand2."/".$real;
move_uploaded_file($tempFile,$targetFile);
$query = $db->prepare("INSERT INTO files (realname,filename,extension,filesize,rand1,rand2,uppedby,created) VALUES(:real,:filename,:extension,:filesize,:rand1,:rand2,:uppedby,:created)");
$query->execute(array(
":real" => $real,
":filename" => $fname,
":extension" => $finfo['extension'],
":filesize" => filesize($tempFile),
":rand1" => $rand1,
":rand2" => $rand2,
":uppedby" => $_SERVER['REMOTE_ADDR'],
":created" => time()
));
}
ファイルがアップロードされ、実際のタイムスタンプと実際のファイル名から sha1 ハッシュを作成しています。カットした後ですsubstr()
が、難しい部分があります。mkdir は、切り捨てられた文字列ではなく、奇妙な別の組み合わせでディレクトリを作成しています。何が間違っているのかわかりません。よろしければご覧いただけますか?