用ajax上传文件? (PHP)

So I'm making a small script for myself, where I can upload files to my server. It works pretty well now, but whenever I try to upload bigger files it just crashes. So I think what if I'll add ajax support to make it: 1. Work better; 2. Look better.

So, this is what I have so far:

<html>
<head>
<title>File Uploader v1.0</title>
<link rel='stylesheet' href='style.css'>
<a href="index.php"><img src="img/logo.png"></a>
</head>
<body>
  <center>
    <table width="300" border="0" align="center" cellpadding="0" cellspacing="1" bgcolor="#CCCCCC">
      <tr>
         <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST" enctype="multipart/form-data">
         <td>
           <table width="100%" border="0" cellpadding="3" cellspacing="1" bgcolor="#FFFFFF">
             <tr>
                <b>Please choose a file:</b><br/>
                <input type="file" name="fileup"/><br/>
                <br/>
                <input type="submit" name='submit' value="Upload"/>
             </tr>
        </form>
     </table>
</body>
</html>

<?php
    $uploadpath = 'upload/';        // directory to store the uploaded files
    $max_size = 103000000;          // maximum file size, in KiloBytes
    $allowtype = array('bmp', 'gif', 'jpg', 'jpe', 'png', 'rar', 'zip', 'exe', 'psd');        // allowed extensions

    if ( isset( $_FILES['fileup'] ) && strlen( $_FILES['fileup']['name'] ) > 1 ) {
       $uploadpath = $uploadpath . basename( $_FILES['fileup']['name'] );               // gets the file name
       $sepext = explode('.', strtolower( $_FILES['fileup']['name'] ) );
       $type = end($sepext);       // gets extension
       list ( $width, $height ) = getimagesize( $_FILES['fileup']['tmp_name'] );       // gets image width and height
       $err = '';         // to store the errors

       // Checks if the file has allowed type, size, width and height (for images)

       if ( !in_array($type, $allowtype)) $err .= 'The file: <b>'. $_FILES['fileup']['name']. '</b> not has the allowed extension type.';
       if ( $_FILES['fileup']['size'] > $max_size*1000) $err .= '<br/>Maximum file size must be: '. $max_size. ' KB.';

       // If no errors, upload the image, else, output the errors

       if ( $err == '' ) {
          $i = 1;
          while ( file_exists( $uploadpath ) ) {
              //get filename without suffix
              $rootname = basename( $_FILES['fileup']['name'], $type );
              $uploadpath = "upload/" . $rootname . "-$i." . $type;
              $i++;
          }
          if ( move_uploaded_file( $_FILES['fileup']['tmp_name'], $uploadpath ) ) {
              echo '<font color="green"><b>Success!</b></font>';    
              echo '<br/>File: <b>'. basename( $_FILES['fileup']['name']). '</b>';
              echo '<br/>File type: <b>'. $_FILES['fileup']['type'] .'</b>';
              echo '<br />Size: <b>'. number_format($_FILES['fileup']['size']/1024, 3, '.', '') .'</b> KB';
              echo '<br/><br/>File path: <input type="text" value="http://'.$_SERVER['HTTP_HOST'].rtrim(dirname($_SERVER['REQUEST_URI']), '\\/').'/'.$uploadpath.'" readonly>';
          } else echo '<b>Unable to upload the file.</b>';
       } else echo $err;
    }
?>
</center>

So that would be great if any of you will help me. Thank you! :)

If you think that while using the ajax/javascript script would not crash then you are wrong. The problem is not the working of the code. Problem is the Maximum uploading size handled by PHP.

You need to set the value of upload_max_filesize and post_max_size in your php.ini :

; Maximum allowed size for uploaded files.
upload_max_filesize = 40M

; Must be greater than or equal to upload_max_filesize
post_max_size = 40M

If you don't have the access to php.ini then ask the service provider to increase the size of uploading. You cannot change these values at run-time; uploads of file larger than the value specified in php.ini will have failed by the time execution reaches your call to ini_set.

See the Description of core php.ini directives.