0

私は非常に大きな初心者@ phpです。あなたが思いやりを持っていることを願っています:)

私はこのスクリプトとちょっとした問題を抱えています。選択したファイルが画像の場合、最初の foreach 部分をチェックインしたい。ファイルが画像で、大きすぎない場合は、アップロードしても問題ありません。

最初にすべての画像を確認することが重要です。

私が抱えている問題は、たとえば次のとおりです。

入力フィールド1に1MBの画像を入れます

入力フィールド2にテキストファイルを入れます

送信を押すと、入力からの最初の画像がフォルダーに移動し、エラーでテキストファイルで停止します<-phpエラーはありません私自身のエラーです(画像ファイルまたは画像が大きすぎません)

編集:そのif ($upload_ok == true)部分が機能していないようです

最初に、すべての入力フィールドがチェックされ(validextension、fileextension、size)、すべての入力フィールドがOKの場合、画像はフォルダに移動できます(で始まる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);
                            }
                    }
            }
    }

ここにホール スクリプトを使用して小さなペーストビンを作成しました

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

ブレークを使用できます。そして続けます。ループをナビゲートします。しかし、あなたの望む結果が何であるかはわかりません。

于 2013-07-10T18:19:44.257 に答える