多次上载并调整大小class.upload.php
我试图上传多个图像到服务器,并使每个图像的不同分辨率版本。 为此,我第一次使用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="" />
<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>';
}
}