3

これは、メディア キャプチャ API を使用して iPhone からアップロードしようとしている html フォームです。

<form action="processUpTests.php" method="post" name="capture" id="capture" enctype="multipart/form-data">
        <input type="file" accept="image/*" name="ImageFile" id="ImageFile" onchange="javascript:stabEagle();"/>
        <input type="submit" id="SubmitButton" class="hiddenForm" />
    </form>

フォームの送信は、次の stabEagle() を介して行われます。

function stabEagle(){
    $('#SubmitButton').click();
}

これは、目標を達成するために使用される processUpTests.php です。

if(isset($_POST))
{

    $DestinationDirectory = 'upload/'; //Upload Directory

    // check $_FILES['ImageFile'] array is not empty
    // "is_uploaded_file" Tells whether the file was uploaded via HTTP POST
    if(!isset($_FILES['ImageFile']) || !is_uploaded_file($_FILES['ImageFile']['tmp_name']))
    {
            die('Something went wrong with Upload!'); // output error when above checks fail.
    }

    // Random number for both file, will be added after image name
    $RandomNumber   = rand(0, 9999999999); 

    $ImageType      = $_FILES['ImageFile']['type']; //Obtain file type, returns "image/png", image/jpeg, text/plain etc.

    //Let's use $ImageType variable to check whether uploaded file is supported.
    //We use PHP SWITCH statement to check valid image format, PHP SWITCH is similar to IF/ELSE statements 
    //suitable if we want to compare the a variable with many different values
    switch(strtolower($ImageType))
    {
        case 'image/png':
            $type = "good";
            break;
        case 'image/gif':
            $type = "good";
            break;          
        case 'image/jpeg':
        case 'image/pjpeg':
            $type = "good";
            break;
        default:
            die('Unsupported File!'); //output error and exit
    }

        $target_path = "upload/";

        //naming loop---------------------------------//
        $i = 9; //how many characters
        $prefix =""; //declares prefix var as a string
        $letters = ""; //declares letters var as string
        //execute loop
        for($e = 0; $e < $i; $e++){
            //random letter
            if($odd = $e%2){
            $prefix.= chr(rand(97,122));
            }
            //random number
            $prefix.= rand(0,9);    
        }
        $target_path = $target_path .$prefix. basename( $_FILES['ImageFile']['name']); 

        if(move_uploaded_file($_FILES['ImageFile']['tmp_name'], $target_path)) {
            echo "<img id='userImage' src='".$target_path."' style='max-width:310px'/>";


        } else{
            echo "There was an error uploading the file, please try again!<br/>";
            echo "<pre>".print_r($_FILES)."</pre>";
        }

コンピューターを使用して写真をアップロードするときに機能します。iPhone を使用している場合は機能しません。テスト用に最新の OS を搭載した iPhone 5 を持っています。

  • これが私のiPhoneの機能です:

ファイルの選択オプションを選択すると、メニューが開き、写真を撮るか、既存の画像を選択できます。写真を撮るオプションを選択すると、カメラが開き、写真を撮ります。次に、使用オプションを選択すると、フォームが送信されます。processUpTests.php で、「ファイルのアップロード中に問題が発生しました。もう一度お試しください!」というエラー メッセージが表示されます。$_files 配列を print_r しようとしていますが、何も出力されません。サーバーに送信されているファイルがないようです。さらに、アップロードの遅延はありません。スクリプトはすぐにエラー メッセージを出力するため、ファイルが送信されていないと思われます。

  • その他の結論: テスト中に、スクリプトの 1 つがファイルをアップロードし、期待どおりに機能しました。一度だけ、別のファイルをアップロードしようとすると、アップロードがスキップされ、最初に撮った画像が出力されました。スクリプトは以下のものとそれほど違いはありませんでした。サーバーからイメージを削除すると、再び機能します。当然、これにより、サーバー上の別のフォルダーにアップロードし、ファイルをアップロードディレクトリにコピーして名前を変更し、元のアップロードのリンクを解除するだけでよいと思いました。私は間違っていました、違いはありませんでした。要約すると、スクリプトを使用して写真を撮って一度アップロードすることができました。別の写真をアップロードしたい場合は、前の写真を削除する必要があります。

これが誰かに役立つかどうかはわかりませんが、関連性があると思いました。繰り返しになりますが、単に構文エラーである可能性があります。

4

0 に答える 0