0

我是一个非常大的新手@php。希望你体谅:)

我有这个脚本和一个小问题。如果选择的文件是图像,我想检查第一个 foreach 部分。如果文件是图像并且不是很大,它应该可以上传!

但重要的是首先检查所有图像!

我遇到的问题是例如:

在输入字段 1 我放了一个 1mb 的图像

在输入框 2 我放了一个文本文件

当我按下提交时,输入中的第一个图像正在移动到文件夹中,而不是在文本文件上停止并出现错误<- 没有 php 错误只是我自己的错误(没有图像文件或图像太大)

编辑:似乎该if ($upload_ok == true)部分不起作用

首先,我希望检查所有输入字段(validextension、fileextension、size),并且当所有输入字段都正常时,图像可以移动到文件夹(以 开头if ($upload_ok == true))。

if (!empty($_FILES))
    {
    $upload_ok=array();

    foreach($_FILES as $key => $file)
            {
            $validExtensions = array('.jpg', '.jpeg', '.gif', '.png');
            $fileExtension = strtolower(strrchr($file['name'], "."));

            if ((in_array($fileExtension, $validExtensions) && ($file['error'] == 0))||$file['error'] == 4)
                    {
                    $upload_ok=true;
                    echo('true');
                    }
            else
                    {
                    $upload_ok=false;
                    $result=false;
                    echo('false');
                    }
            }
    // if(!in_array(false ,$upload_ok))
    if ($upload_ok == true)
            {
            foreach($_FILES as $key => $file)
                    {
                    if ($file['error'] == 0)
                            {
                            $newNamePrefix = $picName . '_';
                            $CounterPrefix = sprintf("%02d",(preg_replace("/[^0-9]/","", $key)));
                            $fileExtension = strtolower(strrchr($file['name'], "."));
                            $manipulator = new ImageManipulator($file['tmp_name']);
                            $newImage = $manipulator->resample(1024, 1024);
                            $manipulator->save($imgRoot . $maschineFolder . $picFolder . $newNamePrefix . $CounterPrefix . $fileExtension);
                            }
                    }
            }
    }

我在这里用孔脚本做了一个小pastebin

4

3 回答 3

1

检查图像时,最好不要依赖扩展程序。您可以执行以下操作来验证图像类型:

$info   = getimagesize($_FILES['image']['tmp_name']);
$mime   = $info['mime'];

$mime现在应该包含一个字符串,例如“image/jpeg”。这是mime 类型值列表的链接。

于 2013-07-10T18:20:32.470 回答
1

如果我理解正确的话...

选择这个

$upload_ok=array();

foreach($_FILES as $key => $file)
        {
        $validExtensions = array('.jpg', '.jpeg', '.gif', '.png');
        $fileExtension = strtolower(strrchr($file['name'], "."));

        if ((in_array($fileExtension, $validExtensions) && ($file['error'] == 0))||$file['error'] == 4)
                {
                $upload_ok=true;
                echo('true');
                }
        else
                {
                $upload_ok=false;
                $result=false;
                echo('false');
                }
        }
// if(!in_array(false ,$upload_ok))

并将其替换为

$error = false;
$validExtensions = array('.jpg', '.jpeg', '.gif', '.png');

foreach(array_keys($_FILES['fileToUpload']['name']) as $key){
    if($_FILES['fileToUpload']['error'][$key] == 4) continue;
    $fileExtension = strtolower(strrchr($_FILES['fileToUpload']['name'][$key], "."));
    $error |= ! in_array($fileExtension, $validExtensions);
    $error |= ! $_FILES['fileToUpload']['error'][$key] == 0;
    if($error){
        $result=false;
        break;
    }
}

还可以找到以下代码:

// if(!in_array(false ,$upload_ok))
if ($upload_ok == true)
        {
        foreach($_FILES as $key => $file)
                {
                if ($file['error'] == 0)
                        {
                        $newNamePrefix = $picName . '_';
                        $CounterPrefix = sprintf("%02d",(preg_replace("/[^0-9]/","", $key)));
                        $fileExtension = strtolower(strrchr($file['name'], "."));
                        $manipulator = new ImageManipulator($file['tmp_name']);
                        $newImage = $manipulator->resample(1024, 1024);
                        $manipulator->save($imgRoot . $maschineFolder . $picFolder . $newNamePrefix . $CounterPrefix . $fileExtension);
                        }
                }
        }

并将其替换为:

if ($error === 0){
    foreach(array_keys($_FILES['fileToUpload']['name']) as $key){
        if ($_FILES['fileToUpload']['error'][$key] == 0){
            $newNamePrefix = $picName . '_';
            $CounterPrefix = sprintf("%02d",(preg_replace("/[^0-9]/","", $key)));
            $fileExtension = strtolower(strrchr($_FILES['fileToUpload']['name'][$key], "."));
            $manipulator = new ImageManipulator($_FILES['fileToUpload']['tmp_name'][$key]);
            $newImage = $manipulator->resample(1024, 1024);
            $manipulator->save($imgRoot . $maschineFolder . $picFolder . $newNamePrefix . $CounterPrefix . $fileExtension);
        }
    }
}

并更改您的输入

<input type="file" name="fileToUpload1" id="fileToUpload1" accept="image/*" />
<input type="file" name="fileToUpload2" id="fileToUpload2" accept="image/*" />
<input type="file" name="fileToUpload3" id="fileToUpload2" accept="image/*" />

对此

<input type="file" name="fileToUpload[]" accept="image/*" />
<input type="file" name="fileToUpload[]" accept="image/*" />
<input type="file" name="fileToUpload[]" accept="image/*" />

或者当您需要参考图像时

<input type="file" name="fileToUpload[1]" accept="image/*" />
<input type="file" name="fileToUpload[2]" accept="image/*" />
<input type="file" name="fileToUpload[3]" accept="image/*" />
于 2013-07-11T12:13:50.933 回答
0

那么你可以使用 break; 并继续;导航循环。虽然不确定你想要的结果是什么。

于 2013-07-10T18:19:44.257 回答