多次上载并调整大小class.upload.php

多次上载并调整大小class.upload.php,php,upload,resize,image-resizing,Php,Upload,Resize,Image Resizing,我试图上传多个图像到服务器,并使每个图像的不同分辨率版本。 为此,我第一次使用class.upload.php 我看了一下文档,从演示示例开始 我做了一个多输入的表单 <form name="form3" enctype="multipart/form-data" method="post" action="upload.php"> <p><input type="file" size="32" name="my_field[]" value="" />

我试图上传多个图像到服务器,并使每个图像的不同分辨率版本。 为此,我第一次使用class.upload.php

我看了一下文档,从演示示例开始

我做了一个多输入的表单

<form name="form3" enctype="multipart/form-data" method="post" action="upload.php">
   <p><input type="file" size="32" name="my_field[]" value="" /></p>
   <p><input type="file" size="32" name="my_field[]" value="" /></p>
   <p><input type="file" size="32" name="my_field[]" value="" /></p>
   <p><input type="file" size="32" name="my_field[]" value="" /></p>
   <p><input type="file" size="32" name="my_field[]" value="" /></p>
   <p class="button"><input type="hidden" name="action" value="multiple" />
   <input type="submit" name="Submit" value="upload" /></p>
</form>
我想做的是处理if($handle->processed){ 因此,我从示例中获取了调整img大小的函数,并将其粘贴到if($handle->processed){}部分中。现在看起来是这样的:

if ($handle->uploaded) {

        // now, we start the upload 'process'. That is, to copy the uploaded file
        // from its temporary location to the wanted location
        // It could be something like $handle->Process('/home/www/my_uploads/');
        // now, we start a serie of processes, with different parameters
        // we use a little function TestProcess() to avoid repeting the same code too many times
        function TestProcess(&$handle, $title) {
            global $dir_pics, $dir_dest;

            $handle->Process($dir_dest);

            // we check if everything went OK
            if ($handle->processed) {
                // everything was fine !
                echo 'ok';
            } else {
                // one error occured
                echo '  Error: ' . $handle->error . '';
           }
        }
        if (!file_exists($dir_dest)) mkdir($dir_dest);

        // ----------- save the uploaded img adding _xl to the name
        $handle->file_name_body_add    = '_xl';
        $handle->file_overwrite = true;
        TestProcess($handle, 'File originale', '');

        // ----------- save the uploaded img adding _l to the name and downsizing it
        $handle->file_name_body_add    = '_l';
        $handle->image_resize          = true;
        $handle->image_ratio_y         = true;
        $handle->image_x               = 1024;
        $handle->file_overwrite = true;
        TestProcess($handle, 'Ridimensionato a 1024px');
    }
此时,脚本仅在第一个img中工作良好。 它不会使“foreach($files as$file)”t遍历$files数组。。。 你能帮我找出错误在哪里吗? 塔克斯
Daniele

这里是课程的创造者。。。您需要首先更改$files数组,如下所示。它位于:


好的,所以我试着用verot的答案,但我有很多错误,我在网上尝试了其他答案

这是可行的解决方案

$placeDir = $_SERVER['DOCUMENT_ROOT'] . '/myuploadfolder';

$files = [];
foreach ($_FILES['image_field']['name'] as $key => $value) {
    if(!empty($_FILES['image_field']['name'][$key])){
        $name  = $_FILES['image_field']['name'][$key];
        $type  = $_FILES['image_field']['type'][$key];
        $tmp   = $_FILES['image_field']['tmp_name'][$key];
        $error = $_FILES['image_field']['error'][$key];
        $size  = $_FILES['image_field']['size'][$key];
        $files[] = [
              'name'     => $name
            , 'type'     => $type
            , 'tmp_name' => $tmp
            , 'error'    => $error
            , 'size'     => $size
        ];
    }
}

foreach($files as $file){
    $image = new uploadHelper($file);
    $image->allowed = array('image/*');
    if ($image->uploaded) {
      $image->process($placeDir);
      if ($image->processed) {
        echo 'image done';
        $image->clean();
      } else {
        echo 'error : ' . $image->error;
      }
    } else {
        echo '<h1>IMAGE NOT UPLOADED</H1>';
    }
}
$placeDir=$\u服务器['DOCUMENT\u ROOT']/myuploadfolder';
$files=[];
foreach($\u文件['image\u字段]['name']作为$key=>$value){
如果(!空($\u文件['image\u字段]['name'][$key])){
$name=$\u文件['image\u字段]['name'][$key];
$type=$\u文件['image\u字段]['type'][$key];
$tmp=$\u文件['image\u字段]['tmp\u名称][$key];
$error=$\u文件['image\u字段]['error'][$key];
$size=$\u文件['image\u字段]['size'][$key];
$files[]=[
“name”=>$name
,'type'=>$type
,'tmp_name'=>$tmp
,'error'=>$error
,“大小”=>$size
];
}
}
foreach($files作为$file){
$image=newuploadhelper($file);
$image->allowed=array('image/*');
如果($image->上传){
$image->process($placeDir);
如果($image->processed){
回声“图像完成”;
$image->clean();
}否则{
回显“错误:”。$image->error;
}
}否则{
回显“图像未上传”;
}
}

我真的希望这能帮助大家。

谢谢你的回答。我做了一个10输入加载多个图像的表单,现在我可以上传和调整2个图像的大小,但如果我在表单中插入第3个图像,这是上传的,但没有调整大小,并且在处理第3个图像后没有图像。。。我真的不明白为什么!在这里,你可以发现我从文档开始编写的脚本似乎不适合我。。。在尝试使用这个类时,我会遇到很多错误和问题。因为我花了这么多时间在这上面。。。老板不高兴通知:未定义索引:第2361行/home/webstarters/admin/public_html/backend/components/helpers/uploadHelper.php中的tmp_名称通知:第2379行/home/webstarters/admin/public_html/backend/components/helpers/uploadHelper.php中的未定义索引:键入/home/webstarters/admin/public\u html/backend/components/helpers/uploadHelper.php,第2380行。我需要能够使用image\u字段[],我不明白如何在不处理图像数组的情况下创建这么大的类--当我找到解决方案时,我们是否可以在类中实现它,以便其他人不会遇到这些问题?
$files = array();
foreach ($_FILES['my_field'] as $k => $l) {
 foreach ($l as $i => $v) {
 if (!array_key_exists($i, $files))
   $files[$i] = array();
   $files[$i][$k] = $v;
 }
}    
$placeDir = $_SERVER['DOCUMENT_ROOT'] . '/myuploadfolder';

$files = [];
foreach ($_FILES['image_field']['name'] as $key => $value) {
    if(!empty($_FILES['image_field']['name'][$key])){
        $name  = $_FILES['image_field']['name'][$key];
        $type  = $_FILES['image_field']['type'][$key];
        $tmp   = $_FILES['image_field']['tmp_name'][$key];
        $error = $_FILES['image_field']['error'][$key];
        $size  = $_FILES['image_field']['size'][$key];
        $files[] = [
              'name'     => $name
            , 'type'     => $type
            , 'tmp_name' => $tmp
            , 'error'    => $error
            , 'size'     => $size
        ];
    }
}

foreach($files as $file){
    $image = new uploadHelper($file);
    $image->allowed = array('image/*');
    if ($image->uploaded) {
      $image->process($placeDir);
      if ($image->processed) {
        echo 'image done';
        $image->clean();
      } else {
        echo 'error : ' . $image->error;
      }
    } else {
        echo '<h1>IMAGE NOT UPLOADED</H1>';
    }
}