可能有更好的方法可以做到这一点,我当然乐于接受建议。
我有一个文件上传脚本,可以处理多个上传。我想要做的是计算循环对成功移动的每个文件的迭代次数,如果该数量等于上传的文件总数,则使用异常向用户显示文件已被接收。
我以为我会在循环内增加然后从那里开始计数,但我得到的是每个上传的文件的数组,导致总数不正确。有没有更好的方法来执行此操作或成功计算每次迭代?
这是我必须使用的结构
foreach($files as $file)
{
if ($file['error'] == UPLOAD_ERR_OK)
{
move_uploaded_file($file['tmp_name'], $filename);
}
else
{
//error
}
}
答案 0 :(得分:3)
你几乎要用计数器来做。
$success = 0;
foreach($_FILES as $file) {
if(is_uploaded_file($file['tmp_name'])) {
move_uploaded_file($file['tmp_name'], $destination);
$success += 1;
}
}
if($success != count($_FILES)) {
//error message / exception
}
编辑 - 您可以在错误处理中设置错误标记或标记......但实际上没有办法做到这一点,这是非常好的。
foreach($files as $file)
{
if ($file['error'] == UPLOAD_ERR_OK)
{
move_uploaded_file($file['tmp_name'], $filename);
}
else
{
//error
$upload_errors += 1;
//or, to get a little more info...
//$upload_errors[] = $file
}
}
if( $upload_errors == 0) { //or count($upload_errors) == 0
// tell the user that the upload failed.
}
答案 1 :(得分:0)
foreach ($array as &$item)
您可以count($array)
答案 2 :(得分:0)
因为你知道文件的数量而只是使用for循环,所以就把它扔掉。有两个计数器,一个用于循环,一个用于成功,除非你的脚本大部分失败(并且你不希望一切正常有多么不寻常)如果一切正常,不要抛出异常。
答案 3 :(得分:0)
在这里,您可以看到可以使用count($ _ FILES)来计算上传文件的数量。请注意,这不是正确上传文件的数量。
<?php
if (isset($_FILES) && !empty($_FILES)) {
echo count($_FILES).' files were uploaded<br>';
?><pre><?php
print_r($_FILES);
?></pre><?php
}
?>
<form
action="<?php echo $_SERVER['PHP_SELF'];?>"
method="post"
enctype="multipart/form-data"
>
File 1<input type="file" name="file1"><br>
File 2<input type="file" name="file2"><br>
File 3<input type="file" name="file3"><br>
<input type="submit" value="upload">
</form>