2012-12-04 83 views
3

我想通過php代碼上傳一個excel文件。如果該excel文件包含200條記錄,那麼它工作正常。但是,如果Excel文件包含超過500條記錄,那麼就說明"Internal Server Error"雖然我設置如下:上傳大文件時顯示內部服務器問題

set_time_limit(10000); 
ini_set('memory_limit', '256M'); 
ini_set('upload_max_filesize', '30M'); 
ini_set('post_max_size', '200M'); 
ini_set('max_input_time', 1000); 

此外,在該文件中的內部我做了很多,讀取Excel文件和數據存儲在一個數組然後再次檢查數據庫中是否存在數據庫中的任何元素。如果是這樣,那麼刪除特定的數據。再次爲其餘的數據,插入一張表並檢查一些條件與日期。最後在數組中繼續推動。 那麼有沒有解決這個內部服務器錯誤問題的選擇?如果有,請讓我知道。

代碼是這樣的:

<?php 
    ini_set("display_errors", 1); 
    set_time_limit(10000); 
    ini_set('memory_limit', '256M'); 
    ini_set('upload_max_filesize', '30M'); 
    ini_set('post_max_size', '200M'); 
    ini_set('max_input_time', 1000); 
    ?> 
    <fieldset style="border:2px solid #60006B;"> 
     <legend >Upload Excel File</legend> 
     <form enctype="multipart/form-data" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"> 
      <input type="hidden" name="MAX_FILE_SIZE" value="2000000" /> 
      <table width="600"> 
      <tr> 
       <td>Excel File:</td> 
       <td><input type="file" name="cur_pic" style="border:1px solid #ccc;" /></td> 
      </tr> 
      <tr> 
       <td colspan="2" style="padding-left:150px;"><input type="submit" value="Upload" name="upload" class="button" /></td> 
      </tr> 
      </table> 
      </form> 
     </fieldset> 
<?php 
    if(isset($_REQUEST['upload'])){ 
    $image =$_FILES["cur_pic"]["name"]; 
    $uploadedfile = $_FILES['cur_pic']['tmp_name']; 
    if ($image) { 

     $filename = stripslashes($_FILES['cur_pic']['name']); 

     $extension = getExtension($filename); 
     $extension = strtolower($extension); 

     if (($extension != "xls") && ($extension != "xlsx")) 
     { 

     $change='<div class="msgdiv">Unknown file extension </div> '; 
      $errors=1; 
     } 
     else 
     { 
     $size=filesize($_FILES['cur_pic']['tmp_name']); 
     move_uploaded_file($_FILES["cur_pic"]["tmp_name"],"sampleData/" . $_FILES["cur_pic"]["name"]); 
     } 
    } 

    set_include_path(get_include_path() . PATH_SEPARATOR . '../../../Classes/'); 

/** PHPExcel_IOFactory */ 
    include 'PHPExcel/IOFactory.php'; 
    $inputFileName = './sampleData/'.$_FILES["cur_pic"]["name"]; 
    echo 'Loading file ',pathinfo($inputFileName,PATHINFO_BASENAME),' using IOFactory to identify the format<br />'; 
    $objPHPExcel = PHPExcel_IOFactory::load($inputFileName); 
    echo '<hr />'; 
    $sheetData = $objPHPExcel->getActiveSheet()->toArray(null,true,true,true); 
    foreach($sheetData as $key => &$value) { 
    if(is_array($value) && isset($value['A'])) $value = $value['A']; 
    } 
    $sql = mysql_query("SELECT email,type FROM subscribe WHERE status='0'"); 
    $ultimate_array = array(); 
    while($res = mysql_fetch_array($sql)){ 
    if($res['type'] == '1'){ 
     if (in_array($res['email'], $sheetData)) { 
    unset($sheetData[array_search($res['email'], $sheetData)]); 
     } 
    } 
    } 

    $replace_string2 = array_unique($sheetData); 

    $today_date = date('Y-m-d h:i:s'); 

    foreach($replace_string2 as $ins_email){ 
    $chk_email = mysql_num_rows(mysql_query("SELECT id FROM add_email WHERE email='".$ins_email."'")); 
    if($chk_email == 0){ 
     mysql_query("INSERT INTO add_email VALUES('','".$ins_email."','".$today_date."','1')"); 
    } 
    } 

    $final_email = array(); 
    foreach($replace_string2 as $f_email){ 
    $orig_sql = mysql_query("SELECT email,status FROM add_email WHERE email='".$f_email."'"); 
    while($res = mysql_fetch_array($orig_sql)){ 
     if($res['status'] == 1){ 
     array_push($final_email,$res['email']);  
     } 
    else if($res['status'] == 0){ 
     $days = mysql_fetch_array(mysql_query("SELECT day FROM days")); 
     $sql = mysql_query("SELECT email FROM add_email WHERE email='".$res['email']."' AND DATEDIFF(NOW(),sending_date) > ".$days['day']); 
     $no = mysql_num_rows($sql); 
     if($no > 0){ 
     array_push($final_email,$f_email); 
      }  
     } 
    } 

    } 

    $final_emails = array_unique($final_email); 

    $_SESSION['record'] = $final_emails; 

    foreach($final_emails as $ca){ 
    $ca_trim = trim($ca); 
    mysql_query("UPDATE add_email SET sending_date='".$today_date."',status='0' WHERE email='".$ca_trim."'"); 
    } 
      header('location:https://fgtpl.com/fugenx1/public_html/unsubscribe/Tests/14excel5.php'); 

} 
+0

內部服務器錯誤是用戶友好的消息。您應該在瀏覽器中禁用它,以查看我們可以使用的實際錯誤消息。 –

回答

3

你可以檢查disable_functions選項在的php.ini文件設置。如果這是共享主機做

<?php echo phpinfo(); ?>檢查設置。

如果共享主機是一種情況,我嚴重懷疑你可以做200MB上傳。

+0

這是一個專用服務器,在我的情況下,我上傳了一個28.4 kb的excel文件。但在該文件中,它包含1119條記錄。我希望在我的代碼中有這麼多的循環,因爲它正在發生。我應該分享我的完整代碼嗎? – Sri

+0

分享這個上傳部分,並在上傳頁面的頂部放入ini_set(「display_errors」,1)。 – pregmatch

+0

我編輯了我的代碼。請參見。我已經添加了那些正在創建最終數組的處理代碼。我還加入了ini_set(「display_errors」,1);但沒有錯誤顯示。 – Sri

0

如果您有專用服務器,你可以這樣做:

  1. 登錄到你的服務器
  2. 如果你的服務器上乳寧南國+的cPanel做到這一點

    尾-f/usr/local/apache/error.log 然後嘗試上傳。如果出現錯誤,你會看到這裏爲什麼

  3. 如果不使用南國+的cPanel做到這一點

    尾-f /var/log/apache/error.log ,然後嘗試上傳。如果發生錯誤,您會在這裏看到爲什麼

在這兩種情況下,您都需要找到您的apache錯誤文件。在這裏粘貼apache日誌文件的錯誤輸出。

+0

其實我正在使用Windows,有沒有任何選項可以看到來自ftp的error.log文件。我從godaddy購買了服務器。 – Sri

+0

你使用IIS或Apache? – pregmatch

+0

我正在使用Apache – Sri

相關問題