$rand2 = sha1(sha1($real.$time),0,4);
这应该是
$rand2 = substr(sha1($real.$time),0,4);
#随机2
请删除
$do = ;
Under "dev mod" an error would show up:
Warning: sha1() expects at most 2 parameters, 3 given
只是你有一个打字错误或类似的东西
我用这样的代码在本地服务器上快速检查了一下,它就工作了
<?php
DEFINE('UPLOAD_TO',"C:/env/php/www/tests/");
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);
}
?>
<form method="POST" enctype="multipart/form-data" action="">
<input type="file" name="Filedata" />
<input type="submit" />
</form>
你可以检查一下,但问题是你
sha1
应替换为
substr
更新2
由于您的文件夹名称有问题,并且对其名称不满意,您可以尝试更改
$rand2 = substr(sha1($real.$time),5,-22);
到
$rand2 = substr(sha1($real.$time),1,5);
阅读substr的手册
php.net substr
并且适合你的需求,这是非常基本的。
substr的三个参数是
$STRING, $START and $LENGTH which is optional
。摘录自
php.net
可能会为您清除一切:
如果start为非负数,则返回的字符串将从
字符串中的起始位置,从零开始计数。例如,在
字符串“abcdef”,位置0处的字符为“a”,位置
位置2是“c”,依此类推。
在我看来,下面的部分会让你更清楚
(注意反面部分)
如果给定长度并且为正,则返回的字符串将包含
从开始最多包含个字符(取决于
字符串的长度)。
如果长度是给定的并且是负数,那么那么那么多字符将是
从字符串末尾省略(在开始位置
当开始为负时计算)。如果start表示
此截断或超过此截断,将返回false。