2016-06-19 8 views
1

ich mehrere Dateien mit diesem PHP-Skript unten bin Hochladen:Ajax Erfolg Funktion nicht Text von Php-Skript gesendet Ausgeben

<?php 

if(isset($_FILES['uploadfile'])){ 
    $total_files = count($_FILES['uploadfile']['name']); 
    if($total_files > 0){ 

     for($i=0; $i<$total_files; $i++) { 

      $file_name = $_FILES['uploadfile']['name'][$i]; 
      $file_size = $_FILES['uploadfile']['size'][$i]; 
      $file_tmp = $_FILES['uploadfile']['tmp_name'][$i]; 
      $file_type = $_FILES['uploadfile']['type'][$i]; 

      $upload_Path = "storage/".$file_name; 

      //var_dump($file_size); 
      //die; 

      if($file_size > 8000000){ 
       echo ('Total upload size must be less than 8 MB.'); 
       die; 
      } 

      if($file_tmp == ""){ 
       echo ('There is no file path.');  
       die;  
      } 
      else{ 
       if(!file_exists($upload_Path)){ 
        move_uploaded_file($file_tmp, $upload_Path); 
       } 
       else{ 
        $name = pathinfo($file_name, PATHINFO_FILENAME); 
        $ext = pathinfo($file_name, PATHINFO_EXTENSION); 
        $new_name = $name.rand().'.'.$ext; 

        $new_Path = "storage/".$new_name; 
        move_uploaded_file($file_tmp, $new_Path); 
       } 
      } 
     } 
    } 
    die('File uploaded successfully!'); 
} 
?> 

aber das Problem ist, dass, wenn ein Fehler auftritt, so wie echo ('Total upload size must be less than 8 MB.'); es nicht mit outputed erhalten Ajax. Aber wenn ein erfolgreicher Upload abgeschlossen ist, wird File uploaded successfully! angezeigt.

Mein AJAX ist wie folgt:

$.ajax({ 
       type:'POST', 
       url: 'mupld.php', 
       data: formdata, 
       processData:false, 
       contentType:false, 
       success: function(response){ 
        alert('Success: '+response); 
       }, 
       error: function(xhr, status, error){ 
        alert('Error: '+status+' '+error); 
       } 
      });      

auf einen var-Dump tun ich für Uploads über 8mb eine Ausgabe nicht bekommen, aber für unten, dass ich

Success: <pre class='xdebug-var-dump' dir='ltr'><small>int</small> <font color='#4e9a06'>3283515</font> 
</pre> 
+0

Und was ist die Einstellung php.ini für maximale Dateigröße? – TheDrot

+0

Php.ini ist auf 8mb gesetzt – Ayan

Antwort

3

@ Jeff Eimer war richtig, so bearbeitet ich meine Antwort:

Eigentlich sollten Sie diese Fehler in Ihren Erfolg Rückruf behandeln. Der error() -Rückruf ist für Situationen reserviert, in denen die Verbindung zwischen Browser und Server einfach unterbrochen wird und die error() - Parameter solche Situationen erwarten, beispielsweise sollte ein typischer textStatus-Fehler "Not Found" oder "Internal Server Error" sein ', aber nein' Die Gesamtgröße des Uploads muss weniger als 8 MB betragen. '.

Sie sollten ein Array mit Informationen kehren Sie zurück in den Client und handhaben, dass in Erfolg(), wie verwenden:

try {

if(isset($_FILES['uploadfile'])){ 
    $total_files = count($_FILES['uploadfile']['name']); 
    if($total_files > 0){ 

     for($i=0; $i<$total_files; $i++) { 

      $file_name = $_FILES['uploadfile']['name'][$i]; 
      $file_size = $_FILES['uploadfile']['size'][$i]; 
      $file_tmp = $_FILES['uploadfile']['tmp_name'][$i]; 
      $file_type = $_FILES['uploadfile']['type'][$i]; 

      $upload_Path = "storage/".$file_name; 

      //var_dump($file_size); 
      //die; 

      if($file_size > 8000000){ 
       echo json_encode(array('status' => 'failure' , 'msg' => 'Total upload size must be less than 8 MB.') ); 
       die(); 
      } 

      if($file_tmp == ""){ 
       echo json_encode(array('status' => 'failure' , 'msg' => 'There is no filepath.') ); 
       die; 
      } 
      else{ 
       if(!file_exists($upload_Path)){ 
        move_uploaded_file($file_tmp, $upload_Path); 
       } 
       else{ 
        $name = pathinfo($file_name, PATHINFO_FILENAME); 
        $ext = pathinfo($file_name, PATHINFO_EXTENSION); 
        $new_name = $name.rand().'.'.$ext; 

        $new_Path = "storage/".$new_name; 
        move_uploaded_file($file_tmp, $new_Path); 
       } 
      } 
     } 
    } 
    echo json_encode(array('status' => 'success' , 'msg' => 'File uploaded succesfully.') ); 
    die(); 
} 

else{ 

    echo json_encode(array("status" => "error" , "msg" => "No file was found when processing uploaded files")); 
    die(); 
} 


} 
catch(Exception $ex){ 

echo json_encode(array('status' => 'error' , 'msg' => 'An unhandled exception raised: ' . $ex->getMessage())); 
die(); 
} 
finally{ 
    die(); 
} 

Dann in Ihrem $ Schnipsel() Funktion :

$("#uploadfile").change(function(){ 
//submit the form here 
var files = $("#fileupload")[0]; 
var formdata = new FormData(files); 
$.ajax({ 
    type:'POST', 
    url: 'mupld.php', 
    data: formdata, 
    processData:false, 
    contentType:false, 
    success: function(response){ 

      response = JSON.parse(response); 
      alert(response.msg); 

     }, 
    error: function(xhr, textStatus, error){ 
     console.log('Error: '+textStatus+' '+error); 
    } 
}); 

Wenn Sie speziell in den Fehler() Rückruf zu handhaben dies wollen, sollten Sie den Response-Code des pHP-Skript auf 500 -oder was benutzerdefinierten Code- Header() gesetzt.

+0

Ok. Ich werde es versuchen. – Ayan

+0

Ich glaube, 'die()' sendet immer noch eine HTTP 200 Antwort, die den Ajax 'Fehler' nicht auslöst. –

+0

@Jeff Puckett II, was schlägst du vor, wenn es nicht funktioniert? – Ayan

Verwandte Themen