2017-03-06 5 views
0

PHP側コードの周りにほぼ完全いくつかのparamsで6枚の画像をアップロードするためにあまりにも多くの時間を取る: - :任意により場合Alamofireは2メガバイト

func globalFuncUploadFile(withParams: [String:String], forURL: String, imageData: [String:Data], completionHandler: @escaping (JSON?, NSError?) ->()) { 
    // To create a Semaphore to Sync this asyc method 
    print(forURL) 
    let semaphore  = DispatchSemaphore(value: 0) 
    Alamofire.upload(multipartFormData: { (MultipartFormData) in 
     print("\n\n\n\nFile is appending with URL") 

     for (key,data) in imageData{ 
      print("\(key) is appending") 
      MultipartFormData.append(data.base64EncodedData(), withName: key, fileName: key, mimeType: "\(key)/JPEG)") 
     } 
     for (key,value) in withParams{ 
      print("\(key) is appending") 
      MultipartFormData.append(value.data(using: .utf8)!, withName: key) 
     } 
     print("of size \(MultipartFormData.contentLength)") 
     }, to: forURL, 
      encodingCompletion: { encodingResult in 
      switch encodingResult { 
      case .success(let upload, _, _): 

       upload.uploadProgress(closure: { (Progress) in 
        print("Upload Progress: \(Progress.fractionCompleted)\t\(Progress.completedUnitCount)/\(Progress.totalUnitCount)") 
       }) 

       upload.responseString { (value) in 
        //Show Alert in UI 
        switch value.result { 
        case .success(let valueJson): 
        print("Data uploaded \(valueJson)") 
         completionHandler(JSON(valueJson), nil) 
         break 

        case .failure(let internalError): 
         print("Data not uploaded -> \(internalError)") 
         completionHandler(nil, internalError as NSError?) 
         break 
        } 
       } 
       break 
      case .failure(let encodingError): 
       //Show Alert in UI 
       print("Data not uploaded -> \(encodingError)") 
       completionHandler(nil, encodingError as NSError?) 
       break 
      } 


      //Awaking Semaphore that session is complete 
      semaphore.signal() 
     } 
    ) 
    // Waiting for the semaphore signal 
    _ = semaphore.wait(timeout: .distantFuture) 
} 

<?php 

include('dbConnect.php'); 
if($_SERVER['REQUEST_METHOD']=='POST'){ 

//Getting values 
$customer_email = $_POST['email']; 
$age = $_POST['age']; 
$city = $_POST['city']; 
$gender = $_POST['gender']; 
$issue_title = $_POST['issue_title']; 
$issue_desc = $_POST['issue']; 
$relation = $_POST['relation']; 
$image1 = $_POST['image1']; 
$image2 = $_POST['image2']; 
$image3 = $_POST['image3']; 
$image4 = $_POST['image4']; 
$image5 = $_POST['image5']; 
$today_date = date('Y-m-d H:i:s'); 
$case_id = rand(1,100000); 
$path1 = null; 
$path2 = null; 
$path3 = null; 
$path4 = null; 
$path5 = null; 
$path6 = null; 

function checkfive() 
{ 
    global $image5,$path5; 

    if($image5=="No Image") 
    { 
     $id5 = "default"; 
     $path5 = "images/$id5.jpg"; 
    } 
    else 
    { 
     $id5 = rand(1,100000); 
     $path5 = "images/$id5.jpg"; 
     file_put_contents($path5,base64_decode($image5)); 
    } 
} 

function checkfourth() 
{ 
    global $image4,$path4; 

    if($image4=="No Image") 
    { 
     $id4 = "default"; 
     $path4 = "images/$id4.jpg"; 
     checkfive(); 
    } 
    else 
    { 
     $id4 = rand(1,100000); 
     $path4 = "images/$id4.jpg"; 
     file_put_contents($path4,base64_decode($image4)); 
     checkfive(); 
    } 
} 

function checkthird() 
{ 
    global $image3,$path3; 

    if($image3=="No Image") 
    { 
     $id3 = "default"; 
     $path3 = "images/$id3.jpg"; 
     checkfourth(); 
    } 
    else 
    { 
     $id3 = rand(1,100000); 
     $path3 = "images/$id3.jpg"; 
     file_put_contents($path3,base64_decode($image3)); 
     checkfourth(); 
    } 
} 

function checksecond() 
{ 
    global $image2,$path2; 

    if($image2=="No Image") 
    { 
     $id2 = "default"; 
     $path2 = "images/$id2.jpg"; 
     checkthird(); 
    } 
    else 
    { 
     $id2 = rand(1,100000); 
     $path2 = "images/$id2.jpg"; 
     file_put_contents($path2,base64_decode($image2)); 
     checkthird(); 
    } 
} 

if($image1=="No Image") 
{ 
    global $path1; 

    $id1 = "default"; 
    $path1 = "images/$id1.jpg"; 
    checksecond(); 

} 
else 
{ 
    global $path1; 
    $id1 = rand(1,100000); 
    $path1 = "images/$id1.jpg"; 
    file_put_contents($path1,base64_decode($image1)); 
    checksecond(); 
} 








$pre_sql = "SELECT * FROM customer where email='$customer_email'"; 
$pre_result=mysqli_query($con,$pre_sql); 

while($row = mysqli_fetch_assoc($pre_result)){ 

    $customer_id = $row['customer_id']; 
    $name = $row['name']; 
    } 

/*My Code*/ 
if($issue_title=="Skin") 
{ 
    global $path6; 
    $question1 = $_POST['question1']; 
    $question2 = $_POST['question2']; 
    $question3 = $_POST['question3']; 
    $prescription_image = $_POST['prescription_image']; 

    if($prescription_image=="No Image") 
    { 
     $id6 = "default"; 
     $path6 = "images/$id6.jpg"; 
    } 
    else 
    { 
     $id6 = rand(1,100000); 
     $path6 = "images/$id6.jpg"; 
     file_put_contents($path6,base64_decode($prescription_image)); 
    } 

    $sql = "INSERT INTO cases (customer_id,name,age,city,gender,issue_title,relation,image1,image2,image3,image4,image5,question1,question2,question3,prescription_image,issue_desc,case_id,date) VALUES ('$customer_id','$name','$age','$city','$gender','$issue_title','$relation','$path1','$path2','$path3','$path4','$path5','$question1','$question2','$question3','$path6','$issue_desc','$case_id','$today_date')"; 

} 
else{ 
/*Code's End*/ 

$sql = "INSERT INTO cases (customer_id,name,age,city,gender,issue_title,relation,image1,image2,image3,image4,image5,issue_desc,case_id,date) VALUES ('$customer_id','$name','$age','$city','$gender','$issue_title','$relation','$path1','$path2','$path3','$path4','$path5','$issue_desc','$case_id','$today_date')"; 
} 
$result=$con->query($sql); 


//Executing query to database 
if($result){ 


    echo 'Order Added [email protected]' . $case_id; 
}else{ 
    echo 'Could Not Add [email protected]'; 
} 



//Closing the database 
mysqli_close($con); 
} 
?> 

スイフト3> Alamofireコードチャンスはほぼ1分かかります。イメージはPHPコードから正常にメッセージを取得することでサーバーにアップロードされ、データベースに保存されずにこのエラーが生成されます:

PHP Notice: Undefined index: image1 in address.php on line 14 
PHP Notice: Undefined index: image2 in address.php on line 15 
PHP Notice: Undefined index: image3 in address.php on line 16 
PHP Notice: Undefined index: image4 in address.php on line 17 
PHP Notice: Undefined index: image5 in address.php on line 18 
PHP Notice: Undefined index: prescription_image in address.php on line 143 

しかしほとんどの場合、100回のうち99回、 alamofire(アップロード処理スイフトエラーログ)によって迅速である生成タイムアウトエラー:

of size 2658665 
Upload Progress: 0./2660473 
Upload Progress: 0.0246332137180118 65536/2660473 
Upload Progress: 0.0369498205770177 98304/2660473 
Upload Progress: 0.0492664274360236 131072/2660473 
Upload Progress: 0.0615830342950295 163840/2660473 
Upload Progress: 0.0738996411540354 196608/2660473 
Upload Progress: 0.0862162480130413 229376/2660473 
Upload Progress: 0.0985328548720472 262144/2660473 
Upload Progress: 0.110849461731053 294912/2660473 
Upload Progress: 0.123166068590059 327680/2660473 
Upload Progress: 0.135482675449065 360448/2660473 
Upload Progress: 0.147799282308071 393216/2660473 
Upload Progress: 0.160115889167077 425984/2660473 
Upload Progress: 0.172432496026083 458752/2660473 
Upload Progress: 0.184749102885088 491520/2660473 
Upload Progress: 0.197065709744094 524288/2660473 
Upload Progress: 0.2093823166031 557056/2660473 
Upload Progress: 0.221698923462106 589824/2660473 
Upload Progress: 0.234015530321112 622592/2660473 
Upload Progress: 0.246332137180118 655360/2660473 
Upload Progress: 0.258648744039124 688128/2660473 
Upload Progress: 0.27096535089813 720896/2660473 
Upload Progress: 0.283281957757136 753664/2660473 
Upload Progress: 0.295598564616142 786432/2660473 
Upload Progress: 0.307915171475147 819200/2660473 
Upload Progress: 0.320231778334153 851968/2660473 
Upload Progress: 0.332548385193159 884736/2660473 
Upload Progress: 0.344864992052165 917504/2660473 
Upload Progress: 0.357181598911171 950272/2660473 
Upload Progress: 0.369498205770177 983040/2660473 
Upload Progress: 0.381814812629183 1015808/2660473 
Data not uploaded -> Error Domain=NSURLErrorDomain Code=-1001 "The request timed out." UserInfo={NSUnderlyingError=0x12ed8a7d0 {Error Domain=kCFErrorDomainCFNetwork Code=-1001 "(null)" UserInfo={_kCFStreamErrorCodeKey=-2102, _kCFStreamErrorDomainKey=4}}, NSErrorFailingURLStringKey=http://***.php, NSErrorFailingURLKey=http://***.php, _kCFStreamErrorDomainKey=4, _kCFStreamErrorCodeKey=-2102, NSLocalizedDescription=The request timed out.} 

Error: Error Domain=NSURLErrorDomain Code=-1001 "The request timed out." UserInfo={NSUnderlyingError=0x12ed8a7d0 {Error Domain=kCFErrorDomainCFNetwork Code=-1001 "(null)" UserInfo={_kCFStreamErrorCodeKey=-2102, _kCFStreamErrorDomainKey=4}}, NSErrorFailingURLStringKey=http://***.php, NSErrorFailingURLKey=http://***.php, _kCFStreamErrorDomainKey=4, _kCFStreamErrorCodeKey=-2102, NSLocalizedDescription=The request timed out.} 

うーん、いくつかの追加情報:私は携帯電話でテストしていた時に全部が両方WIFIのためにとネットワークのために働いている SIMが所有者によって排除されたとき。私はWIFIだけで立ち去り、この事に直面する。

私は休暇中にSIMとSIMのシナリオの間に1日のギャップがあります。その間にphp側にいくつかの変更がありますが、それは私が言及することは難しいです。 ご協力いただきありがとうございます。

+0

[**あなたのPHPスクリプトはSQLインジェクションに脆弱です!**](http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php) – dorukayhan

+0

同じサンプルPHPコードを提供してください? –

答えて

0

悲しいですが、72時間で助けがなく、「どこからでも助けを得ていない、最終的に自分自身を助けることができる人」

問題はデータ形式です。 PHP側の人は以前はデータ形式のbase64Stringに画像を取得する方法を変更しました。私はまだデータ形式で画像を送信しています。 alamofireがphpでハンドシェークしようとすると、phpはデータフォーマットで混乱し、返信に時間がかかります。