PHP 多个文件上传限制
PHP multiple files upload limit
我遇到这种情况:我有一个多输入文件,但我需要限制数据库中的图像。所以我设置了一个限制,每次上传时,都会检查限制,但我遇到了循环问题。
如果限制为4张图片,数据库中存储了2张,用户发送5个文件,则插入这5个文件。它必须插入 2 个并丢弃其他 3 个图像。
我需要一个循环来进行计算。
到目前为止,这是我的代码:
$prod_id = $_POST['prod_id'];
$img_limit = 4;
# ----------------------------------------
$sql = "SELECT * FROM images WHERE prod_id = ?";
$arrayParam = array($prod_id);
$data_img = $crud->getSQLGeneric($sql, $arrayParam, true);
$total_img = count($data_img);
# ----------------------------------------
if($total_img == $img_limit)
{
echo '<script type="text/javascript">';
echo 'alert("You already have '.$img_limit.' images inserted");';
echo 'window.history.back();';
echo '</script>';
exit;
}
# ----------------------------------------
$max_files = $img_limit - $total_img;
$fileCount = count($_FILES["img_file"]['name']);
# ----------------------------------------
for($i=0; $i < $fileCount; $i++)
{
$allowed_ext = array('bmp','jpg','jpeg','png','svg');
$array_ext = explode('.', $_FILES['img_file']['name'][$i]);
$file_ext = strtolower(end($array_ext));
# -----
$img_path = 'upload/';
$img_tmp = $_FILES['img_file']['tmp_name'][$i];
$img_name = md5(date('d_m_Y_H_i_s').'_'.$_FILES['img_file']['name'][$i]).'.'.$file_ext;
# -----
$arrayInsert = array('prod_id' => $prod_id, 'img_name' => $img_name);
$return = $crud->insert($arrayInsert);
# -----
move_uploaded_file($img_tmp, $img_path.$img_name);
}
echo "Image(s) uploaded!";
欢迎任何帮助! =)
谢谢
您的 for 循环没有寻找极限:
# ----------------------------------------
$max_files = $img_limit - $total_img;
$fileCount = count($_FILES["img_file"]['name']);
# ----------------------------------------
for($i=0; $i < $fileCount; $i++)
{
应该变成
# ----------------------------------------
$max_files = $img_limit - $total_img;
$fileCount = count($_FILES["img_file"]['name']);
# ----------------------------------------
for($i=0; $i < $max_files; $i++)
{
即使用户将 post 5 张图片(示例),它也只会加载与数据库中的空闲插槽一样多的图片(限制 4 - 总共 2,然后它将上传 2)
我遇到这种情况:我有一个多输入文件,但我需要限制数据库中的图像。所以我设置了一个限制,每次上传时,都会检查限制,但我遇到了循环问题。
如果限制为4张图片,数据库中存储了2张,用户发送5个文件,则插入这5个文件。它必须插入 2 个并丢弃其他 3 个图像。
我需要一个循环来进行计算。
到目前为止,这是我的代码:
$prod_id = $_POST['prod_id'];
$img_limit = 4;
# ----------------------------------------
$sql = "SELECT * FROM images WHERE prod_id = ?";
$arrayParam = array($prod_id);
$data_img = $crud->getSQLGeneric($sql, $arrayParam, true);
$total_img = count($data_img);
# ----------------------------------------
if($total_img == $img_limit)
{
echo '<script type="text/javascript">';
echo 'alert("You already have '.$img_limit.' images inserted");';
echo 'window.history.back();';
echo '</script>';
exit;
}
# ----------------------------------------
$max_files = $img_limit - $total_img;
$fileCount = count($_FILES["img_file"]['name']);
# ----------------------------------------
for($i=0; $i < $fileCount; $i++)
{
$allowed_ext = array('bmp','jpg','jpeg','png','svg');
$array_ext = explode('.', $_FILES['img_file']['name'][$i]);
$file_ext = strtolower(end($array_ext));
# -----
$img_path = 'upload/';
$img_tmp = $_FILES['img_file']['tmp_name'][$i];
$img_name = md5(date('d_m_Y_H_i_s').'_'.$_FILES['img_file']['name'][$i]).'.'.$file_ext;
# -----
$arrayInsert = array('prod_id' => $prod_id, 'img_name' => $img_name);
$return = $crud->insert($arrayInsert);
# -----
move_uploaded_file($img_tmp, $img_path.$img_name);
}
echo "Image(s) uploaded!";
欢迎任何帮助! =) 谢谢
您的 for 循环没有寻找极限:
# ----------------------------------------
$max_files = $img_limit - $total_img;
$fileCount = count($_FILES["img_file"]['name']);
# ----------------------------------------
for($i=0; $i < $fileCount; $i++)
{
应该变成
# ----------------------------------------
$max_files = $img_limit - $total_img;
$fileCount = count($_FILES["img_file"]['name']);
# ----------------------------------------
for($i=0; $i < $max_files; $i++)
{
即使用户将 post 5 张图片(示例),它也只会加载与数据库中的空闲插槽一样多的图片(限制 4 - 总共 2,然后它将上传 2)